CHANGELOG FOR ATOMSK
====================


Master
------
- code from modules "functions" and "subroutine" was split up between various modules, including new ones. Routine EXPREVAL is now a recursive function. These changes break compatibility with previous versions.
- in mode "--interpolate", auxiliary properties will now be interpolated between initial and final systems.
- in mode "--merge" usage was changed to allow two keywords: "stack <x|y|z>" to indicate direction of stacking, and "scale" to rescale systems to match first system.
- in mode "--polycrystal", optimized algorithm to use less memory, it should also be faster. Added new keyword "clearance" to control the width around GB plane where atoms are deleted.
- in mode "--unwrap", a new auxiliary property "unwrapped_atom" is defined that is equal to 1 if an atom is unwrapped, and 0 otherwise.
- in option "-rotate" it is now possible to provide a file containing a rotation matrix.
- in option "-select", when selecting a 3-D shape from an STL file, rescaling is not automatic any more. It can be activated with keyword "scale" or "rescale" which preserves the aspect ratio of the 3-D model, or with keyword "fill" that deforms the 3-D model to fill the simulation cell.
- in option "-wrap", fixed bug where number of atoms that were wrapped was not counted correctly.
- new function "IS_SELECTED" returns true if array SELECT is unallocated or if an atom is selected (false otherwise). This function is now used in most modes and options.
- enhanced writing of Quantum Espresso input files (*.pw), taking system information into account (e.g. if cell is cubic, ecutwfc and ecutrho read from UPF files, etc.). Note that the file produced is still just a draft and must be edited by user.
- option "-fix" renamed to "-freeze", now allows freezing multiple directions at once (xy, xz, yz, or xyz).
- fixed a bug that prevented reading some GULP results files (*.grs).
- fixed a bug that prevented reading some LAMMPS custom dump files (*.lmc), when forces were present.
- fixed a bug in mode "--polycrystal" that stopped the mode just after reading the seed.
- fixed a bug in option "-bind-shells" where, if no shell existed in the system, and if particles were close to one another, then particles detected as shells would be given the same position as their core. Thanks to Himal Wijekoon, ICAMS, Bochum University, Germany, for pointing out this bug.
- fixed a bug where option "-dislocation loop" would erase all auxiliary properties when introducing a prismatic dislocation loop where new atoms are added to the system. Thanks to Benedikt Eggle-Sievers, Max-Planck-Institut fuer Eisenforschung GmbH, Germany, for pointing out this bug.
- fixed a bug where Cartesian coordinates would sometimes be detected as reduced when the cell is very small. Thanks to Matous Mrovec, ICAMS, Bochum University, Germany, for pointing out this bug.
- bash scripts in /tools/ now generate random file names to avoid conflict with possibly existing files, e.g. when the same script is executed several times simultaneously.
- fixed a bug in script "/tools/lmp_atom2charge.sh" where a column would be wrongly added in "Masses" section.


Beta 0.13.1 (12 January 2024)
-----------------------------
- in mode "--create", fixed a bug that prevented generating tetragonal lattices and nanotubes.


Beta 0.13 (22 December 2023)
----------------------------
- new mode "--match-id" allows to sort atoms from a file, so that their IDs match those from another file.
- mode "--difference" now accepts that the two systems have different numbers of atoms. Atoms that exist in first system but not the second are marked with a new auxiliary property "deleted_atom". Also, if atoms change chemical species between the two files, a new auxiliary property "diff_Z" is created.
- in mode "--rdf", when several files are treated, neighbour list is rebuilt only if atom displacements are larger than skin width dR.
- mode "--rdf" now accepts a single file name, if a single file must be analyzed.
- when writing files in Protein Data Base (*.pdb) format, lines starting with SCALE are not written any more to avoid issues when visualising with OVITO. OVITO was also patched to fix this issue, see their Git commit [https://gitlab.com/stuko/ovito/-/commit/2a5f55736f4b6bdce7c18931a7fb30da84bb6320].
- mode "--create" now supports the following lattices: A15, Boron nitride (or B12). Also fixed a performance issue when generating oriented unit cells.
- option "-deform" now allows to apply shear deformation, and to untilt the cell. Option "-shear" becomes obsolete.
- option "-remove-atoms all" will now remove all atoms.
- option "-select" now displays chemical species of selected atoms.
- progress bars can now be customized with a new keyword in configuration file (atomsk.conf).
- computationnally heavy routines (like computation of G tensor or RDF) are separated in new "compute_*.f90" modules to improve maintainability and flexibility. It also means that these routines can now be called by different modes.
- fixed a bug in mode "--merge" that was causing a segfault when the first system did not contain comments. Thanks to Abhay Vincent, Cranfield University, UK, for pointing out this bug.
- fixed bugs in mode "--nye", where there was a sign error in the computation of the Nye tensor. Also attempted to tune computation parameters to improve accuracy in non-fcc materials. User can now specify parameters for the computation (NeighFactor, theta_max, NNmin, ) in a configuration file "atomsk.conf". Thanks to Houssam Kharouji and Vincent Taupin, LEM3, Univ. Lorraine, France, for helping improve the computation of Nye tensor.
- fixed bugs in option "-bind-shells" where, when a system did not contain shells, particles too close to one another were not properly detected as core and shell, or charges were not attributed properly.
- fixed a bug in option "-cell" where the keyword "xyz" would cause some components to become NaN in orthogonal cells.
- fixed a bug in option "-disturb", where displacements would not be random when running on several threads; thanks to Milan Kočí, Institute of Physics v.v.i., Academy of Sciences, Prague, Czech Republic, for pointing out this bug. Also fixed a bug where, when user provided only one value dmax, then maximum displacements were equal to that value along all directions (i.e. using "-disturb <dmax>" lead to dx=dy=dz=dmax); this is now fixed so that the norm of max.disp. is equal to dmax (i.e. sqrt(dx²+dy²+dz²)=dmax).
- fixed a bug in option "-select", where program could be stalled in infinite loop under certain conditions. Thanks to Jan Drahokoupil, Institute of Physics v.v.i., Academy of Sciences, Prague, Czech Republic, for pointing out this bug. Also fixed a bug when selecting according to a 3-D shape from STL file, where some atoms below edges of triangles were not correctly selected or un-selected. Thanks to Huajia Zhu, University College London, UK, for pointing out this bug.



Beta 0.12.1 (17 April 2023)
---------------------------
- fixed a bug in mode "--merge" that would cause a seg fault. Thanks to Peixin Chen, Shanghai Jiao Tong University, China, for pointing out this bug.
- fixed a bug in option "-cut" where, if a selection was defined, remaining atoms were not selected correctly.
- fixed a bug in option "-dislocation", where the sign of Burgers vector was inverted when constructing climb dislocation loops (only when Burgers vector was normal to loop plane).
- fixed a bug in option "-sort", where selection was not properly sorted along with atoms. Also fixed a bug where auxiliary properties were not correctly sorted alongside with atoms; thanks to Karine Gouriet, University of Lille, France, for pointing out this bug.


Beta 0.12 (22 March 2023)
-------------------------
- increased string length when reading files to prevent truncation. This affects many modules (input, modes).
- re-writing of routine "GUESS_FORMAT" for clarity and better modularity. It should also be easier to add new input/output file formats.
- re-writing and parallelization of routine "VERLET_LIST" for finding neighbours. It should now be much faster.
- added possibility to display coloured messages in UNIX/Linux terminals. New subroutine "COLOUR_MSG" allows to colour a string using ANSII escape sequences. This is disabled by default to avoid issues, and can be activated thanks to a new keyword in the user's configuration file (~/.config/atomsk.conf).
- new mode "-copy-properties" allows copying auxiliary properties from one system to another.
- interactive mode now supports basic calculations with operators, e.g. "3*7" or "cos(pi/2)". Formulae are evaluated with routine EXPREVAL, which can now also generate random numbers with the keyword "rand".
- in mode "--local-symmetry" (formerly "--central-symmetry"), atoms with 4 neighbours are now compared to tetrahedral environment; atoms with 3 neighbours are compared to an sp2 environment; if one of these criteria is smaller than the central symmetry parameter, it is used instead. This allows computing a scalar "central symmetry parameter", e.g. in diamond lattices or in graphene.
- in mode "--difference", fixed a bug that would cause a segfault when none of the file contained a comment.
- in mode "--merge", a new auxiliary property "sysID" is created, indicating for each atom the index of the system it belonged to.
- in mode "--nye", when a unit cell is provided as a reference, then reference sites are constructed by assuming that each atom in the unit cell is considered to belong to a separate "site" (i.e., sites are not averaged). Also, if user does not provide an output file name then a default one in CFG format is created. This mode also always output the G tensor in CFG format.
- in mode "--polycrystal", fixed a bug where rotations provided were performed using Z, Y, X permutation instead of X, Y, Z. Thanks to Marcin Minkowsky, Tampere University, Finland, for pointing out this bug.
- in mode "--rdf", improved efficiency in the computation of the partial RDFs. Also fixed a bug in the computation of the total RDF when atoms of different species and different densities were present.
- in mode "--unfold", when reading VASP OUTCAR files produced with IBRION<0, added an error message.
- in option "-bind-shells", when no shells are defined, atoms close to one another are considered as associated core/shell pairs.
- options "-fix", "-select", and "-shift", now allow selecting above or below planes using 4-index [hkil] Miller notation.
- option "-reduce-cell" now checks that stoichiometry is preserved.
- option "-sort" now allows to reverse atom list.
- option "-swap" now allows swapping auxiliary properties.
- random number generator will now use file "/dev/urandom" to generate a random seed whenever possible (only in UNIX/Linux systems); otherwise, system clock is used as a seed.
- after reading an input file, module "readin.f90" now checks immediately if cell vectors are defined; if not it automatically calls "determine_H" to set box vectors. Previously this was done in modes, meaning that module "readin.f90" could return box vectors as naught, causing problems (e.g. when atom coordinates were divided by box vectors in option "-fractional" or when writing CFG files, it resulted in NaN).
- fixed a bug when reading and writing POSCAR files where the keywords "Selective dynamics" were involved.
- fixed a bug when writing LAMMPS data file when atom "types" were defined, but some types were not assigned to any atom in the system. Fixed bugs when reading or writing LAMMPS data files when shells were defined. Fixed a bug in the writing of box dimensions, when one or several box vectors had negative components. Thanks to Eerik Voimanen, Tampere University, Finland, for providing a fix for this bug.
- fixed a bug when writing files in DDplot format, that resulted in a SEGFAULT. Thanks to Wei Li, University of Hong-Kong, China, for pointing out this bug.
- fixed a bug in mode "--density", where the density was not correctly computed if the target property was the atomic mass. Thanks to Jean Furstoss, UMET, University of Lille, France, for pointing out this bug.
- new option "-dislocation file" allows reading a dislocation Burgers vector and position from a file. For now it supports only planar dislocation loops where the Burgers vector is contained in the loop plane.
- when input file has a non-supported binary format, an error message explicitely says so.
- fixed a bug in option "-cell" where option was skipped when requiring zero length for xy, yz, or xz component.
- fixed a bug in option "-dislocation", where the stress components for a screw dislocation were inverted.
- fixed a bug in option "-orthogonal-cell" where the new number of atoms was not always correctly estimated, leading to a segmentation fault.
- fixed a bug where 4-index [hkil] Miller indices were not treated correctly in some options. Thanks to Roman Gröger, Institute of Physics of Materials, Czech Academy of Sciences, Czech Republic, for pointing out this bug.
- fixed a bug in option "-velocity" where velocities were not correctly converted to A/ps.
- fixed a bug when detecting if coordinates are Cartesian or reduced.
- fixed a bug where the position was not always computed correctly when using an operation with "box", e.g. when introducing dislocations. Thanks to Samaneh Nasiri, Friedrich-Alexander-University Erlangen-Nürnberg, Germany, for pointing out this bug.
- fixed a bug in EXPREVAL where expressions containing a factorial preceded by a parenthesis would cause a segmentation fault. Also fixed a bug in computing ATAN2.
- script "install.sh" now proposes to compile Atomsk if binary does not exist in current directory.


Beta 0.11.2 (04 Nov. 2021)
--------------------------
- fixed a bug in neighbor search.
- in option "-dislocation", fixed a bug where displacements would be incorrect when the loop was not normal to Z and the Burgers vector was along Z. Thanks to Marion Borde and Jonathan Amodeo, MATEIS, University of Lyon 1, France, for pointing out this bug.
- in mode "--rdf", fixed bugs where the radial distribution functions were not computed correctly. Thanks to Valentin Delbecq, UMET, University of Lille, France, for pointing out this bug.


Beta 0.11.1 (09 Sept. 2021)
---------------------------
- in mode "--one-in-all", added possibility to read configurations from VASP OUTCAR files.
- in mode "--interpolate", initial and final states are also output with index 0 and N+1 respectively.
- mode "--one-in-all" renamed "--unfold", and mode "--all-in-one" renamed "--gather". Former keywords are still recognized for backward compatibility.
- improved the determination of atom species from POTCAR file when reading VASP POSCAR, CONTCAR or OUTCAR files.
- improved determination of cell vectors when they do not exist in input file (e.g. XYZ), or user triggered option "-rebox".
- added possibility to output to standard output (stdout) by using "-" as file name.
- option "-bind-shells", when no shell is present in the system, will now search for particles close to each other. If such pairs are found, the particle with the greatest mass, or charge, or with lowest ID (whichever comes first) will be considered as a core, the other as a shell. This can be useful e.g. after reading LAMMPS custom dump files containing shells.
- fixed a bug where coordinates would be detected as Cartesian instead of reduced if the cell was very small. Thanks to Davide Sangiovanni, Linköping University, Sweden, for pointing out this bug.
- fixed a bug when reading CIF files where the Hermann-Mauguin space group name contained blank spaces. Thanks to Yaron Kauffmann, Technion, Israel, for pointing out this bug.
- fixed a bug when reading/writing Extended XYZ format where lattice vectors were in wrong order. Thanks to Yanzhou Wang, Aalto University, Finland, for pointing out this bug.
- fixed a bug when writing LAMMPS data files, where the shells (in the sense of an ionic core/shell model) "types" would be inconsistent if atoms were not sorted by increasing types.
- fixed a bug where structure "C14" (with uppercase "C") was not recognized.
- fixed a bug in mode "--polycrystal" that prevented constructing 2-D polycrystals normal to X or Y. Also fixed a bug where the seed was not sufficiently duplicated if the seed was not orthogonal; thanks to Zheyuan Xing, Southwest Jiaotong University, China, for pointing out this bug.
- fixed a bug in option "-add-atom" that caused a segfault when the atom list was empty (not allocated).
- fixed a bug in option "-dislocation loop" where the loop was not correctly constructed if it was not normal to the Z axis. Thanks to Marion Borde and Jonathan Amodeo, MATEIS, Univ. Lyon 1, France, for pointing out this bug.
- fixed a bug in option "-select STL" when selecting atoms according to a complex 3-D shape from an STL file, where entire planes of atoms were not properly selected if the vertices were too close or if atom positions exactly matched the edges of several vertices.


Beta 0.11 (12 Jan. 2021)
------------------------
- parts of the code were parallelized with OpenMP, meaning that it can take advantage of all cores of a CPU. Some modes and options that are now parallelized: neighbor search; options "-orthogonal-cell", "-select stl"; modes "--density", "--edm", "--polycrystal", "--rdf". Thanks to Jian-Hui Zhai, University of Lille, France, for initiating this speeding up of Atomsk.
- added support for reading and writing files in BOPfox format (*.bx). Thanks to Matous Mrovec, ICAMS, Bochum University, Germany, for implementing this feature.
- added support for reading and writing files in Comma-Separated Values format (*.csv).
- added support for reading and writing files in CRYSTAL format (*.d12).
- added support for reading and writing files in ABINIT format (*.in).
- added support for reading and writing files in SIESTA Flexible Data Format (*.fdf).
- new option "-cell" allows to modify cell vectors more easily.
- new option "-nthreads" to control the number of OpenMP threads.
- new option "-reduce-cell" allows finding an equivalent smaller cell to a system, while respecting its periodicity.
- new option "-roundoff" allows to round off atom coordinates or the values of a property.
- new module to evaluate mathematical expressions and convert them into real numbers. It supports common mathematical functions like abs, sqrt, trigonometric functions, and so on.
- when writing VASP POSCAR files, atomic species are now written so as to comply to VASP version 5.x. They can simply be removed to comply with VASP 4.x and earlier.
- in mode "--create", added possibility to create tetragonal lattices (simple, body-centered, or face-centered tetragonal). Also added possibility to create cubic C15 Laves phase. Also added possibility to create cubic C36 Laves phase, thanks to Zhuocheng Xie, RWTH Aachen, Germany, for implementing this phase. The cell vector reduction was generalized for oriented cubic lattices to produce the smallest unit cell.
- in mode "--difference", the differences between matching auxiliary properties is now also computed.
- in mode "--one-in-all" it is now possible to read all snapshots from LAMMPS custom dump files (*.lmc) and convert them into individual files.
- in mode "--merge", comments of all files are now copied into the final file (when possible).
- in mode "--nye", added possibility to provide a unit cell as a reference, or to work with no reference at all.
- in mode "--polycrystal", optimized array handling, making it faster and more memory efficient. Also fixed a bug where random rotations were not uniformly distributed in 3-D; thanks to Jan Fikar, Institute of Physics of Materials ASCR, Brno, Czech Republic, for pointing out this bug and pointing to a solution. Also added a warning if a 2-D polycrystal is constructed and the user specifies non-zero angles around other Cartesian axes. Also fixed bugs that occurred when the final box was exaggeratedly elongated and with nodes on the same plane.
- in options "-cut" and "-orient", crystal directions can now be given using the hexagonal notation [hkil].
- in option "-dislocation", modified the keywords for edge dislocations. Now the keyword "edge" corresponds to applying elastic displacements while keeping the number of atoms constant (replaces the former "edge2" keyword); "edge_add" refers to adding a new plane of atoms (replaces the former "edge" keyword); and "edge_rm" is a new method where the edge dislocation is constructed by removing a half-plane of atoms.
- in option "-orthogonal-cell", improved the search for atoms to fill the new box.
- in option "-properties", added possibility to provide displacements as functions ux, uy, uz, which can be expressed as function of atom coordinates (x,y,z) and box dimensions, for example "uz=10*cos(3*pi*x/H1)". Also, when reading elastic or compliance tensor, the values are now checked, and a warning is displayed if they do not comply with stability criteria.
- in option "-rotate", added possibility to rotate around a crystal direction [hkl], or around a vector of arbitrary coordinates.
- in option "-select", added possibility to select atoms among a previous selection. Also added possibility to select atoms that have an index equal to a number modulo another number.
- in option "-sort", added possibility to shuffle atom list in random order.
- in option "-swap", added possibility to swap two chemical species.
- the order of options is now checked, and when possible, the program displays a recommendation to improve performance (e.g. when option "-duplicate" is called before "-orthocell", it is recommended to swap them).
- improved checking of number of atoms and memory allocations.
- fixed a bug in the symmetry operations of space group 166 (R-3m).
- fixed a bug when reading LAMMPS data files where the atom charges were not read.
- fixed a bug when writing LAMMPS data files (*.lmp): if atom types were defined, the types written in the "Masses" section did not match the atom types used in the "Atoms" section.
- fixed a bug when reading Quantum Espresso output files (*.out) in mode "--one-in-all".
- fixed a bug in option "-dislocation" where the theoretical stresses were not correct when using anisotropic elasticity. Thanks to Min Shi, University of Minnesotta, USA, for pointing out this bug.
- fixed a bug in option "-cut", where Miller indices were assumed to refer to an orthogonal box. Now the actual box vectors are used.
- fixed a bug in option "-separate", that caused a segfault when the radius was too large.
- program now warns when atoms of same species have the same value of "type" defined as auxiliary property.
- script "install.sh" now proposes to install in user's home directory (in ~/bin/). This path is added to the user's PATH environment variable (in the file ~/.bashrc).
- installer for Microsoft(R) Windows(R) systems now adds Atomsk install directory to the PATH environment variable. As a result, "atomsk.exe" can be executed from anywhere without writing its full path.


Beta 0.10.6 (07 Sept. 2018)
---------------------------
- in mode "--polycrystal", fixed a bug where the two crystals were not aligned when generating bicrystals.


Beta 0.10.5 (05 Sept. 2018)
---------------------------
- in option "-dislocation", fixed a bug in the creation of dislocation loops with a square shape. Thanks to Yong Zhang, Monash University, Clayton, Australia, for pointing out this bug.


Beta 0.10.4 (03 Sept. 2018)
---------------------------
- in mode "--polycrystal", fixed a bug where atoms were duplicated when generating 2-D polycrystals.


Beta 0.10.3 (04 July 2018)
--------------------------
- in mode "--create", added possibility to generate the LiMO2 structure (where M is a transition metal). Thanks to Raoul Aurelien Ngayam Happy, Paul Sherrer Institute, Switzerland, for implementing this feature.
- in option "-select", added possibility to select particles that have the minimum or maximum value of a property. Also added the possibility to combine a new selection to the existing one (add, remove, intersect, xor). Also added the possibility to select atoms inside or outside of a cone.
- added status checks in some memory allocations to avoid OS error "cannot allocate memory". Now in most cases Atomsk will display an error message and exit smoothly.
- fixed a bug in mode "--polycrystal", where the random distribution of angles was biased, and could result in slightly textured polycrystals. Thanks to Sen Chen, The Peac Institute of Multiscale Sciences (PIMS), Chengdu, China, for pointing out this bug.
- fixed a bug where the PDFFIT file format "str" was not recognized from the command-line.
- fixed a bug in option "--polycrystal" that was preventing to generate 2-D polycrystals.


Beta 0.10.2 (24 May 2018)
-------------------------
- fixed a bug when reading PWscf input files (*.pw). Thanks to Dongho Nguimdo Moise, AIMS, Cameroon, for pointing out this bug.
- removed error message from "ls" command that appeared when writing PWscf files (*.pw), when no suitable pseudopotential file was found.


Beta 0.10.1 (14 May 2018)
-------------------------
- in mode "--create", added possibility to create the C14 Laves lattice. Thanks to Julien Guénolé, IPMP, RWTH Aachen, Germany, for implementing this feature.
- fixed a bug when creating wurtzite lattice with mode "--create". Thanks to Justin Ondry, UC Berkeley, USA, for pointing out this bug.
- fixed a bug in the writing of JEMS files. Thanks to Tara Boland, Arizona State University, USA, for pointing out this bug and providing a fix.


Beta 0.10 (24 April 2018)
-------------------------
- some modules were split into smaller ones, making current version incompatible with previous branches.
- added support for reading and writing files in PDFFIT structure file format (*.str or *.stru).
- new option "-orthogonal-cell" allows to find a suitable equivalent orthorhombic cell for any type of system.
- in mode "--create", added possibility to orient hexagonal lattices. For cubic lattices, if vectors of provided orientation are not orthogonal, a suggestion is now displayed.
- in mode "--polycrystal", when using the keyword "random", the positions and grain orientations are written into a text parameter file, that can be used to reproduce the polycrystal later. Also, the positions of nodes for Voronoi construction, and the positions of the grains centers of mass, are written into two separate XSF files for visualisation.
- in option "-dislocation", added possibility to construct dislocation loops. Thanks to Emmanuel Clouet, CEA, Gif-sur-Yvette, France, for sharing his code Babel for the construction of dislocation loops.
- in option "-select", added possibility to provide a file containing any ASCII character when using "-select grid"; blank spaces are replaced by 0, any other character by 1. Also added possibility to select atoms inside a 3-D model defined by an STL file. Also added possibility to select atoms inside or outside a torus. Also added possibility to select atoms that are inside or outside of the simulation cell.
- in option "-properties", fixed a bug that would result in an infinite loop if user wrote numbers instead of atom species after the keyword "charge". Thanks to Srinivasan Mahendran, UMET, Lille, France, for pointing out this bug.
- if electric charges are present and their sum is non-zero, a warning is displayed before writing the output file(s).
- now checks against [000] vector, and displays an error message.
- modified the way auxiliary properties are written in CFG files (better accuracy).
- fixed a bug in neighbor search algorithm that would cause a segmentation fault under certain conditions.
- fixed a bug in mode "--create" that caused a segmentation fault if user attempted to orient a non-cubic lattice.
- fixed a bug in mode "--polycrystal", where generated random numbers were close to one another when using "node x y z random". Thanks to Lubin Huo, Ningbo Institute of Materials Technology and Engineering, China, for pointing out this bug.
- fixed a bug in option "-duplicate", which would not behave correctly when a selection was defined.



Beta 0.9.10 (07 Dec. 2017)
--------------------------
- in interactive mode, added possibility to browse folders.
- fixed a bug in interactive mode, where the program would crash if the user simply entered a tabulation character.
- fixed problem of precision of ion charges when writing LAMMPS data files.
- fixed a bug in option "-dislocation", where edge dislocations were not constructed correctly when using anisotropic elasticity. Thanks to Matous Mrovec, ICAMS, Ruhr-Universität Bochum, Germany, for pointing out this bug.
- fixed a misplaced message in option "-remove-atoms".


Beta 0.9.9 (16 Oct. 2017)
-------------------------
- in mode "--create", added possibility to create fluorite lattice. Thanks to Jonathan Amodeo, MATEIS, Lyon, France, for implementing this feature.
- fixed a bug when reading GULP files, that caused a crash when shells were not present. Thanks to Srinivasan Mahendran, UMET, Lille, France, for pointing out this bug.
- fixed a bug where atom species were not always recognized when written in all uppercase or all lowercase letters (e.g. "PB" instead of "Pb").


Beta 0.9.8 (5 Oct. 2017)
------------------------
- fixed a bug in option "-add-atoms", that caused a crash when auxiliary properties were defined. Thanks to Srinivasan Mahendran, UMET, Lille, France, for pointing out this bug.


Beta 0.9.7 (21 Sept. 2017)
-------------------------
- fixed a bug in option "-remove-atoms", where the selection was not cleared after removing selected atoms. Thanks to Alexandra Goryaeva, INSA Lyon, France, for pointing out this bug.


Beta 0.9.6 (04 Aug. 2017)
-------------------------
- fixed a bug in option "-dislocation", where the anisotropic displacements would not be correct when the dislocation line was not along the Cartesian Z axis. Thanks to Hui Liu, McGill University, Montreal, Canada, for pointing out this bug.


Beta 0.9.5 (09 May 2017)
------------------------
- fixed a bug in option "-fix", where atoms would be incorrectly frozen when using "all". Thanks to Ling-Ju Guo, National Center for Nanoscience and Technology, Beijing, China, for pointing out this bug.


Beta 0.9.4 (04 May 2017)
------------------------
- fixed a bug in the reading of LAMMPS data file that contain something after the keyword "Atoms".
- fixed a bug in the reading of Quantum Espresso input files (*.pw). Thanks to Michael Wolloch, University of Modena and Reggio Emilia, Italy, for pointing out this bug.


Beta 0.9.3 (05 April 2017)
--------------------------
- added support for symmetry operations when reading PDB files.
- fixed a bug in the reading of CIF files, where the electric charge of ions was not always read correctly.
- fixed a bug in the writing of CIF files, that caused a crash when no auxiliary property was defined.
- fixed a bug when reading VESTA file, that lead to a crash when the file contained more than one structure.
- fixed a bug in the writing of comments of VESTA files.
- in option "-rebox", improved determination of box vectors. Warning: this options is still very inaccurate.


Beta 0.9.2 (22 March 2017)
--------------------------
- fixed a bug when reading VASP POSCAR files, where the scaling factor was not properly applied. Thanks to Antoine Kraych, CEA, France, for pointing out this bug.
- fixed a bug when reading CIF files, where symmetry operations were not parsed correctly if they started with "+".


Beta 0.9.1 (17 March 2017)
--------------------------
- fixed a bug in neighbor search routines, where atoms at exact same positions would not be considered neighbors.


Beta 0.9 (1 March 2017)
-----------------------
- new mode "--density" allows to compute a 1-D, 2-D or 3-D density profile of a given property (mass, electric charge...).
- new mode "--central-symmetry" allows to compute a central symmetry parameter.
- new option "-roll" allows to roll a system into a tube around an axis.
- new option "-separate" allows to pull apart atoms that are too close to each other.
- new option "-spacegroup" allows to apply symmetry operations corresponding to a space group.
- new option "-swap" allows to exchange the indices of two atoms, or two box dimensions.
- new option "-torsion" allows to apply torsion along a Cartesian axis.
- added support for reading and writing files in CEL format, used by Dr. Probe. Thanks to Juri Barthel, RWTH Aachen, Germany, for implementing this file format.
- added support for reading and writing files in JEMS format.
- added support for reading and writing files in VESTA format.
- new set of algorithms to apply symmetry operations and deal with space groups. Thanks to Juri Barthel, RWTH Aachen, Germany, for implementing this feature.
- faster algorithm for neighbor search, based on cell decomposition. Thanks to Srinivasan Mahendran, UMET, Lille, France, for his help with the implementation of this feature.
- faster QUICKSORT algorithm to sort arrays.
- atom symbol 'D' is now recognized as deuterium.
- enhanced support for CIF format. Symmetry operations are now taken into account. Thanks to Juri Barthel, RWTH Aachen, Germany, for improving support of this file format.
- enhanced support for Quantum Espresso files. When writing such files, the user's environment (in particular the variable $ESPRESSO_PSEUDO) is now taken into account.
- in mode "--create", added possibility to generate wurtzite lattices. Also fixed a bug that prevented to create oriented lattices with very large Miller index.
- in option "-add-atom", if atoms of the same species as the new atom(s) have shells, then the new atoms are also created with shells. Also, this options now allows to place a new atom relatively to an existing atom.
- in options "-crack" and "-dislocation", made the indexing of theoretical stresses consistent with the Voigt notation, i.e. sigma_11, sigma_22, sigma_33, sigma_23, sigma_13, sigma_12.
- in option "-dislocation", the Poisson ratio must be given only for dislocations of edge character. It must be omitted for dislocations of screw or mixed characters.
- in option "-disturb", added possibility to provide different values for displacements along X, Y and Z Cartesian axes.
- in option "-duplicate", added possibility to provide negative values that correspond to mirroring the system and then duplicating it along negative values.
- in option "-rotate", added possibility to perform the rotation around the center of mass of the system or of the selection.
- in option "-select", added possibility to read a list of atom indices from a file. Also added the possibility to select atoms according to a finite-element grid.
- large overhaul of the option "sort". This option does not duplicate arrays anymore, which makes it more memory-efficient. In addition, it now uses QUICKSORT algorithm, which should be much faster especially when the number of atoms is very large. WARNING: although this option still sorts atoms according to the property requested by the user, when atoms have equal values of the target property their ordering may differ from the previous BUBBLESORT algorithm.
- in option "-unit", added possibility to scale any coordinate or property by a given factor.
- added support for ionic core-shell models when writing LAMMPS data files. Also added support for 2-D systems in these file formats.
- fixed a bug that could cause the program to crash when reading GULP input files.
- fixed a bug where atom coordinates would not be read correctly from LAMMPS data files (*.lmp) when they contained replica flags (i.e. three integer numbers) at the end of each line.
- fixed several bugs affecting reading and writing of PDB files.
- fixed a bug in mode "--all-in-one" that was causing a crash when no file format was specified.
- fixed a bug in mode "--create" where atoms would sometimes be missing when creating lattices with some orientations.
- fixed a bug in mode "--merge" where sometimes auxiliary properties would not be correctly handled.
- fixed a bug in option "-disturb" where the shells were not displaced along with their core.
- fixed a bug in option "-stresses" where the Voigt stress components were not interpreted correctly. Thanks to Anirban Pal, Rensselaer Polytechnic Institute, Troy (NY), USA, for reporting this bug.
- fixed a bug in the displaying of progress bar that slowed down the program.
- l10n: added the German translations of the messages. Thanks to Juri Barthel, RWTH Aachen, Germany, for translating Atomsk.



Beta 0.8.8 (12 Jan. 2017)
-------------------------
- fixed a bug where atom indices could not be written past 100 millions in LAMMPS data files. Now it can write up to the limit of integers (about 2 billions).
- fixed a bug where option "-unskew" did not work, because result was not saved to the array H.


Beta 0.8.7 (6 June 2016)
------------------------
- fixed a bug in mode "--create", where an fcc lattice oriented with a vector of type <112> would have missing atoms. Thanks to Yann Even and Jonathan Amodeo, MATEIS, Lyon, France, for pointing out this bug.


Beta 0.8.6 (9 March 2016)
-------------------------
- fixed a bug in the reading of LAMMPS custom files (*.lmc) when it contained reduced coordinates and the lower bounds of the box were not at the origin. Thanks to Yann Even and Jonathan Amodeo, MATEIS, Lyon, France, for pointing out this bug.


Beta 0.8.5 (7 March 2016)
-------------------------
- fixed a bug where the detection of Cartesian or reduced coordinates would fail when the number of atoms was very small (typically unit cells containing only one or two atoms). Thanks to Jérôme Dequeker, UMET, Lille, France, for pointing out this bug.
- fixed a bug in mode "--create" where the number of atoms in oriented unit cells would be incorrect for some values of the lattice parameter. Thanks to Jonathan Amodeo, MATEIS, Lyon, France, for pointing out this bug.


Beta 0.8.4 (10 Feb. 2015)
-------------------------
- fixed a bug that prevented to use the option "-cut" with the keyword "below". Thanks to Vasiliy Krasnikov, South-Ural State University, Chelyabinsk, Russia, for pointing out this bug.
- fixed a bug that prevented to use the option "-fix" with the keywords "above" and "below".


Beta 0.8.3 (22 Sept. 2015)
--------------------------
- fixed a bug in mode "--polycrystal" where it was not possible to construct a 2-D polycrystal when the seed had at least one dimension greater than 20 A. Thanks to Jianyang Wu, Xiamen University, China, for pointing out this bug.


Beta 0.8.2 (14 June 2015)
-------------------------
- fixed a bug that caused a crash when reading LAMMPS data files that contained fewer atoms than declared.


Beta 0.8.1 (09 April 2015)
--------------------------
- in mode "--create", added possibility to generate L12 lattices. Thanks to Jonathan Amodeo, MATEIS, Lyon, France, for proposing this feature.
- fixed a bug in option "-dislocation" that prevented to read the Burgers vector when the type was "edge2". Thanks to Anirban Pal, Rensselaer Polytechnic Institute, Troy (NY), USA, for reporting this bug.


Beta 0.8 (05 Jan. 2015)
-----------------------
- many changes make this version incompatible with branch 0.7. Source files were re-organized. The main Makefile was modified (simplified), new Makefiles were added in sub-directories for better dependency support. Also fixed many issues with the compilation on Microsoft(R) Windows(R) systems.
- from now on, both 32-bits and 64-bits static binaries will be available for GNU/Linux platforms.
- new mode "--average" allows to average atom positions over a list of configurations.
- new mode "--interpolate" allows to generate a chain of configurations between two given configurations.
- new mode "--nye" allows to compute the Nye tensor. Thanks to Philippe Carrez, UMET, Lille, France, for implementing this mode.
- new mode "--polycrystal" allows to generate a 2-D or 3-D polycrystal from a unit cell using the Voronoi method. Positions and crystallographic orientations of the grains can be explicitely given, or randomly generated.
- added support for both reading and writing XMD files (*.xmd).
- new option "-add-atom" allows to add an atom at given position, or near an existing atom, or add N atoms at random positions.
- new option "-center" allows to shift the system to place an atom, or the center of mass, at the center of the box.
- new option "-disturb" allows to apply random displacements to atoms.
- new option "-mirror" allows to apply a mirror plane normal to a cartesian axis or a crystallographic direction.
- new option "-options" allows to read a list of options from a file.
- new option "-stress" allows to apply stress to the system.
- new option "-velocity" allows to generate a Maxwell-Boltzmann distribution of velocities.
- new algorithm for constructing neighbor list.
- mode interactive now offers a command-line interpreter, much more flexible than the former "interactive questions". The cli allows to read and write files, supports options and the mode "create", and can take scripts as standard input (e.g. "atomsk < script.at").
- mode "--list" works faster when the parameter "-ignore" is used. The files that must be ignored are removed from the list early on, which avoids reading the corresponding input files for nothing.
- mode "--rdf" now constructs a neighbor list before computing the radial distribution functions (RDFs). Also, the maximum radius Rmax for the RDF must be provided, and Rmax can be larger than the system.
- modes "--edm" and "--rdf" now prompt the user if the option "-wrap" is absent in the command-line.
- option "-bind-shells" now also considers the case where shells, but not their cores, were translated by box vectors because of periodic boundary conditions. The periodic images of the shells are searched for, and replace the initial shell position if they are found to be close to the core.
- option "-deform" now interprets real numbers as the value of the deformation. The symbol "%" must be used to specify a deformation in percent, e.g. "-deform x 1.5% 0.0".
- option "-expand" was renamed into "-duplicate" (or "-dup") for clarity and consistency with other codes.
- options "-fix", "-shift", no longer require an atomic plane to be defined.
- option "-properties" allows to specify atom velocities, and atom displacements.
- option "-remove-atoms" can now remove all selected atoms with "-remove-atoms select".
- option "-remove-doubles" now only removes selected atoms if a selection is defined.
- option "-remove-properties" does not remove the auxiliary property anymore if a selection is defined, instead the property is set to zero for selected atoms. If no selection is defined the property is still completely removed.
- option "-rotate" now also rotates atom velocity and force vectors if they are defined.
- option "-select" now allows to select a list of atoms, or atoms within a range of indices. This option also allows to select the neighbors of an atom. The selection can be on the N nearest neighbors, or neighbors within a radius, or the first nearest neighbors. This option also allows to select a given percentage of the atoms, or a percentage of atoms of a given species. This option also allows to select atoms who have an auxiliary property within a given range of values.
- option "-unit" allows to convert atom velocities.
- option "-wrap" now only wraps selected atoms if a selection is defined.
- the positions of shells (in the sense of an ionic core-shell potential) are now written in LAMMPS data files.
- when reading LAMMPS custom file (*.lmc), the atom "type" is not required anymore. Furthermore if the "element" appears it is read.
- support for longer filenames (up to 4096 characters).
- fixed a bug in option "-dislocation" where the displacements of shells was computed independantly from the displacements of their cores, leading to discontinuities and large distances between a core and its shell. Now the displacements are computed from the position of the core, and the same displacement is applied to the shell, so that the core-shell vector remains the same.
- fixed a bug where some file formats would not be detected correctly if the file name was given through a path.
- fixed a bug where ionic shells would be lost in mode "--merge".
- fixed a bug where ionic shells would not be read from Atomsk binary files (*.atsk).
- fixed a bug where all comments would not be read from Atomeye CFG files.
- fixed a bug where atom electric charges would not be read from LAMMPS data files (*.lmp).
- fixed a bug where the option "-sort" would not sort the selection mask along with atoms.
- fixed a bug where the compliance tensor would not be properly inverted to give the stiffness tensor in option "-properties".
- when no comment exists, the auto-generated comment that appears in the output file now contains the user name, and the date is now written with the ISO format (yyyy-mm-dd hh:mm:ss).




Beta 0.7.6 (28 March 2014)
--------------------------
- fixed a major issue that was slowing down the writing of files in the following formats: CIF, IMD, LAMMPS data files, MBPP, Quantum Espresso Pwscf files, Siesta, VASP POSCAR files, and XYZ files. Writing files in these formats should be much faster, especially for large systems.
- fixed a minor bug in the reading of comments from Atomeye CFG files.


Beta 0.7.5 (15 March 2014)
--------------------------
- fixed a bug that prevented to read some atoms in some CIF files. Thanks to Pietro Bonfa', Uni. Parma, Italy, for pointing out this bug.
- fixed a bug that prevented to read some CFG files.
- fixed a bug that prevented to read some LAMMPS custom files (*.lmc).


Beta 0.7.4 (20 Feb. 2014)
-------------------------
- fixed a bug where the force on the first atom would always be zero when reading a file in XSF format.
- fixed a bug where atoms would not be properly removed if they were at the exact same position in option "-remove-doubles". Thanks to Sebastian Ritterbex, UMET, Lille, France, for pointing out this bug.


Beta 0.7.3 (01 Feb. 2014)
-------------------------
- fixed a bug where Quantum Espresso PWscf files (*.pw) would not always be read correctly. Thanks to Jaroslaw Czernek, IMC, Prague, Czech Republic, for pointing out this bug.
- fixed a bug when the user answered "yes" when prompted for atom sorting when writing POSCAR files: atoms would be sorted but not their auxiliary properties. Thanks to Dario Marrocchelli, MIT, Boston, USA, for pointing out this bug.
- fixed a bug that was causing a crash when the program prompted which file to use as an input and the user would enter something else than an integer.


Beta 0.7.2 (16 Nov. 2013)
-------------------------
- fixed a bug where oriented unit cells would not always be properly created in mode "--create", when running a 32-bits version of the program. Thanks to Philippe Carrez, UMET, Lille, France, for pointing out this bug.
- fixed a bug that could cause a segfault in mode "--merge" when files contained auxiliary properties.
- fixed a bug that could cause a segfault when calling option "-cut" and no selection was defined.
- fixed a bug where atoms would not be sorted when writing a VASP POSCAR file, when the program was run in French. Thanks to Nils Garvik, UMET, Lille, France, for pointing out this bug.


Beta 0.7.1 (08 June 2013)
-------------------------
- added possibility to create rocksalt lattices in mode "--create".
- in mode "--difference" the step for the histogram is now equal to the maximum value of the displacements divided by 20, or if the latter is greater than 1 A, it is reset to 1 A. The cumulated number of atoms is also computed.
- fixed a bug that prevented to read some CIF files.
- fixed a bug in mode "--create" that prevented to create oriented zincblende structures.
- fixed a bug where the XYZ file would not contain the displacements in mode "--difference".
- fixed a bug where the list of selected atoms would be wrong when selecting atoms with option "-select", and then deleting some atoms with option "-cut".
- fixed several bugs that occured when reading Quantum Espresso output files (*.out) in mode "--one-in-all".


Beta 0.7 (06 April 2013)
------------------------
- name changed from "pikashu" to "atomsk".
- many changes make the branch 0.7 incompatible with branch 0.6.
- source code was re-organized into sub-folders. The main Makefile was partly re-written to better define dependency rules, and allow for faster parallel compilation when using -jN with N>3 on machines with more than 2 cores.
- new mode "--rdf" allows to compute the partial and total radial distribution functions (RDF) of a system.
- added support for both reading and writing files in a binary format specific to atomsk (*.atsk).
- added support for both reading and writing Crystallographic Information Files (*.cif).
- added support for both reading and writing Protein Data Bank files (*.pdb).
- added support for both reading and writing Quantum Espresso PWscf files (*.pw).
- added support for reading Quantum Espresso PWscf output files (*.out) in mode "--one-in-all".
- added support for multiple-line comments.
- mode "--create" now allows to create cubic lattices with a given crystallographic orientation.
- mode "--merge" is now conserving auxiliary properties.
- in mode "--all-in-one", forces are now written to the animated XSF file if they exist.
- in modes and options that work with crystallographic direction, Miller indices can now be given as underscore-separated values, and with or without square brackets. E.g. "1-10", "[1-10]", "1_-1_0", "[1_-1_0]" (without quotation marks) are all valid.
- option "-unit" now supports fm, pm, µm.
- option "-region" was renamed to "-select". It now allows to invert the selection by using "-select invert". It also allows to select N atoms of a given species at random. It also allows to select all atoms of a given species.
- options "-cut", "-fix", "-select", "-shift", can now apply to atoms above or below a given plane normal to a crystallographic axis.
- option "-remove-random-atoms" was removed. Instead, atoms can be randomly selected with option "-select", and then removed with option "-cut".
- options "-cut", "-crack", "-dislocation", "-fix", "-select", "-shift" now allow to use the keyword "BOX" (or "box") to refer to box dimensions, e.g. "0.2*BOX", "BOX/2" or "BOX-20". It is also possible to use the keywords "-INF" and "INF". Note that in these options, values given between 0 and 1 are *not* automatically treated as reduced coordinates anymore, e.g. 0.5 is now considered a cartesian coordinate.
- option "-properties" now allows to read values for any custom auxiliary property from a file.
- option "-rotate" does not rotate the box anymore if some atoms were previously selected with the option -select, only the selected atoms are rotated. If no selection was defined (i.e. the array SELECT is not allocated, all atoms are selected) then the box is rotated.
- option "-shear" now allows to specify the applied shear in %.
- fixed a bug where supercell parameters would not always be read correctly from the INP file when reading a COORAT file. Thanks to Davide Di Stefano, Fraunhofer-IWM, Freiburg, Germany, for pointing out this bug.
- fixed a bug where VASP POSCAR files would be written with a wrong format when writing fractional coordinates. Thanks to Davide Di Stefano, Fraunhofer-IWM, Freiburg, Germany, for pointing out this bug.
- fixed a bug where the position of a dislocation would be incorrect when the dislocation line and the normal to the glide plane were not a permutation of x,y,z. Thanks to Philippe Carrez and Antoine Kraych, UMET, Lille, France, for pointing out this bug.
- fixed a bug where the option "-dislocation" would fail to compute the solutions to the equations of anisotropic elasticity in some cases. Thanks to Benedikt Ziebarth, Fraunhofer-IWM, Freiburg, Germany, for pointing out this bug.
- fixed a bug where option "-unit" would erroneously scale the atom positions when they are reduced.
- fixed a bug where the target "make all" would fail to install the code after compiling.
- fixed bugs where lines would be truncated at the 80th character when writing some file formats, when the code was compiled with Intel Fortran compiler.
- on GNU/Linux systems, added the possibility to use a system-wide configuration file "/etc/atomsk.conf". User's personal configuration file is now "~/.config/atomsk.conf".
- detection of operating system (introduced in b0.6) is not done at run time anymore. Instead it is decided at compilation time, thanks to pre-processing instructions.
- new and improved scripts in /tools/.
- l10n: documentation is now organized in sub-directories corresponding to languages. French documentation is now available in /doc/fr/.




CHANGELOG FOR PIKASHU
=====================

Beta 0.6.5 (06 July 2012)
-------------------------
- fixed a bug where reduced coordinates would not be detected in some cases.


Beta 0.6.4 (17 June 2012)
-------------------------
- mode "--create" now allows to create a basic hexagonal close-packed (hcp) structure.
- mode "--diff" now also outputs a CFG file containing displacements as auxiliary property.
- when reading COORAT file, if the volume of the cell (instead of lattice parameter alat) is provided in the INP file, pikashu will now read the supercell properly.
- fixed a bug when reading GULP files where atom species were not followed by "core" nor "shell".
- fixed a bug where atom velocities were not read from LAMMPS data files (LMP). Thanks to Eva Marie Kalivoda, Fraunhofer-IWM, Freiburg, Germany, for pointing out this bug.
- fixed a bug where reduced coordinates would not be detected in some cases, and hence not converted to cartesian coordinates. Thanks to Adham Hashibon, Fraunhofer-IWM, Freiburg, Germany, for pointing out this bug.
- fixed bugs in the neighbor search algorithms that occured when searching for neighbors in non-orthogonal cells. Performance was also improved, with gains up to 30%.


Beta 0.6.3 (22 May 2012)
------------------------
- new option "-crack" allows to insert a crack in the system.
- new option "-remove-random-atoms" allows to remove atoms at random from the system.
- mode "--edm" now also outputs positions and polarization vectors in a dat file.
- added support of auxiliary properties and velocities when reading and writing GULP gin/res files.
- fixed a bug where the theoretical stresses associated with an edge dislocation (isotropic case) would not be correctly computed.
- fixed a bug that occured when reading LAMMPS custom files (LMC) that contained non-triclinic boxes which origin was non zero. Thanks to Eva Marie Kalivoda, Fraunhofer-IWM, Freiburg, Germany, for correcting this bug.
- fixed a bug where VASP POSCAR files were not always properly recognized and read.
- fixed a bug that prevented reading GULP files when the first atom had a fractional coordinate.
- improved some scripts in /tools/.


Beta 0.6.2 (01 March 2012)
--------------------------
- new mode "--electronic-polarization" allows to compute the polarization of ions in the framework of an ionic core-shell model.
- new option "-bind-shells" allows to re-associate shells with their core in the framework of an ionic core-shell model.
- new option "-unskew" allows to reduce the tilt of the supercell vectors.
- fixed bugs that would prevent to recognize some file formats.
- in GNU/Linux environments, the locale environment variable is now used to set up the default language of pikashu (the language defined in ~/.pikashu will still override it).


Beta 0.6.1 (22 Feb. 2012)
-------------------------
- new mode "--all-in-one" allows to read many snapshots and store them in a unique file in XYZ and/or animated XSF formats.
- new option "-remove-atom" allows to remove one atom according to its index, or all atoms of a given species.
- added support for both reading and writing of SIESTA XV files. Thanks to Eva Marie Kalivoda, Fraunhofer-IWM, Freiburg, Germany, for developing these modules.
- when using mode "--edm" with an ionic core-shell model, the total charge (core+shell) of each ion is now used.
- the option "-properties" now allows to specify the charges of cores and shells for use with an ionic core-shell model.
- fixed a bug preventing mode "--all-in-one" to work.
- fixed a bug in neighbour search algorithms.
- fixed bugs in option "-cut" that would arise with ionic core-shell models. Also fixed a bug in the display of the message for remaining atoms.
- fixed bugs that would generate strange output file names when an input file had no extension.


Beta 0.6 (01 Dec. 2011)
-----------------------
- many changes make the branch 0.6 incompatible with branch 0.5.
- introduces dependency to LAPACK 3.3.0 (or higher).
- pikashu is now natively compatible with Microsoft(R) Windows(R) environments. Environment-dependent system calls were removed or replaced by standard Fortran 95 calls for compatibility. Program was successfully compiled with GNU Make + MinGW/gfortran under Windows XP and Windows 7.
- new mode "edm" allows to compute individual electric dipole moments of polyhedra.
- new mode "one-in-all" allows to convert files containing several configurations. Supported input formats are standard and extended XYZ, animated XSF, and DL_POLY HISTORY files.
- new mode "unwrap" allows to unwrap atoms, using a reference system.
- mode "difference" does not attempt to unwrap displacement vectors anymore. Unwrapped coordinates must be provided.
- mode "merge" now allows to merge more than two systems, and its syntax has changed. Also, it now allows to juxtapose systems along an axis.
- added support for both reading and writing of DL_POLY_4 configuration files (CONFIG, REVCON...).
- added support for both reading and writing of MOLDY system files (system.in).
- added support for writing BOP files.
- added support of auxiliary properties for formats that support it. Auxiliary properties are also transformed by some options, and generated by some modes (like edm).
- added support of shells (in the sense of an ionic core-shell model). The shell positions are now read from formats that support it (GIN, CONFIG), and written to formats that support it (GIN, CONFIG). Shells are also transformed by some options.
- new option "-create-shells" allows for creating shells for some or all atoms (in the sense of an ionic core-shell model).
- new option "-fix" allows to fix some atoms in one or all directions of space.
- new option "-rmprop" allows for removing one or all auxiliary properties.
- option "-dislocation" can now introduce dislocations using anisotropic elasticity, which is automatically triggered when an elastic tensor is provided thanks to the option "-properties". Thanks to Matous Mrovec, Fraunhofer-IWM, Freiburg, Germany, for helping with the implementation of this feature. This option now also computes the theoretical elastic stresses of dislocations and saves them as auxiliary properties. The usage was also changed to make it easier to specify the plane of cut.
- option "-expand" now duplicates the system as a block, adding the new atoms after the ones that already exist. The reason is that it makes the construction of CONFIG files (for DL_POLY) more convenient. This behaviour does not introduce any restriction since options like "-sort" can be used to change the order of atoms.
- option "-properties" now allows to specify atom charges, atom types, elastic tensor, compliance tensor (Voigt notation or 6x6 tensors).
- option "-sort" now allows to sort atoms according to one of their auxiliary properties (increasing or decreasing values, or pack).
- options that change the crystallographic orientation of the system (like "-alignx", "-orient", "-rotate") also rotate the elastic tensor if it was defined.
- new routines for neighbour search (in subroutines.f90): FIND_NNN finds the N nearest neighbours; FIND_NNR finds nearest neighbours in a given radius; FIND_1NN attempts to find the first nearest neighbours. These are used e.g. by the mode --edm.
- fixed bugs that prevented to use paths containing the / sign (like "../file" or "/folder/file") in some modes and options.
- fixed several bugs that occured when the code was compiled with Intel Fortran Compiler. Code was verified to compile with ifort 10.1, 11 and 12 on different machines.
- i18n: all messages are now removed from the code and gathered in one specific module (messages_EN.f90).
- l10n: added translations for French language.



Beta 0.5.2 (20 Apr. 2011)
-------------------------
- fixed bug that occured when inserting a dislocation of "edge" type.


Beta 0.5.1 (18 Apr. 2011)
-------------------------
- added the possibility to pack atoms in the option "-sort".
- fixed bugs that occured when writing POSCAR files. The program now checks if atom species are contiguous and, if they are not, proposes to sort them (same as "-sort species pack"), as this is required by VASP to link species with their pseudopotential.
- fixed a bug when reading GULP input files (gin or res) that contained atomic species concatenated with numbers (e.g. "O1", "O2", etc.). pikashu can now read such a format.


Beta 0.5 (30 Mar. 2011)
-----------------------
- changed the usage for modes. They must now be called with double minus signs, e.g. "--create" or "--list". Alternatively one can use a one-letter form with only one minus sign and one capital letter (e.g. "-C" or "-L"). This is to better differentiate them from options, and also better detect the number of options in a command-line. However this change makes the current version incompatible with the previous branch 0.4.x.
- added support of both reading and writing of IMD file format.
- added support of both reading and writing of COORAT files (used by MBPP code). If present, the INP file is also read to get supercell parameters.
- cleared out the reading/writing of the different XYZ formats. An extended XYZ format actually already existed, that uses keywords in the 2nd line (instead of a comment); pikashu can now read and write this extended XYZ format. The former "extended" XYZ is now renamed special XYZ format. In the special XYZ format, the supercell can be specified as supercell vectors or conventional vectors.
- the "molecular" variant of XSF files (using the keyword "ATOMS") can now be read. Since no supercell parameters are specified in this variant, pikashu will try to define a bounding box.
- the "standard" CFG format can now be read (as well as the extended CFG format).
- added option "-remove-doubles" to remove duplicate atoms (i.e. those that are at the same position as another one).
- option "-H" was removed to avoid confusion with modes. Instead the option "-properties" must be used, which reads a file containing system properties including supercell parameters either in conventional notation (a b c alpha Beta gamma) or in vector notation.
- added the possibility to save some parameters in a config file in the home directory of the user (~/.pikashu). The program looks for this file, and if it exists it reads the default parameters (see readconf.f90). These parameters are replaced if different ones are used in the command-line. This is documented in "doc/progbe_configfile.html".
- the syntax of the mode "create" was changed. Also, this mode now allows to create nanotubes.
- program is less verbose about reading the input file(s).
- corrected a bug in the "-orient" option. It now uses the subroutines cart2frac and frac2cart to perform the transformation.
- corrected a bug in the "-dislocation" option: the plane of cut for screw dislocations is now determined by the order of rotation X, Y, Z.
- corrected a bug when reading files with the POSCAR format. Also, when reading this format pikashu now searches for a file named "POTCAR" to read atom species from it. Also, the detection of this format by the "guess_format" subroutine was enhanced.
- corrected bugs concerning the passing of comments from one format to another. The writing of comments is now standardized in all output modules: comment will always start with a dash character (#).



Beta 0.4.4 (13 Dec. 2010)
-------------------------
- new subroutines cart2frac and frac2cart added to "subroutines.f90". They are now used by several input and output modules (in_cfg...).
- major changes in xyz_differences.f90: bugs were present when "wrapping" displacement vectors into the bounding box. Displacements vectors are now calculated from reduced coordinates, bound to be between -0.5 and 0.5, and converted back to cartesian coordinates.
- corrected a bug when reading GIN files containing cartesian coordinates. The attempt to read fractions is now only used when fractional coordinates are detected.
- added new option "opt_useH.f90" (-H <file>) and corresponding documentation. This option forces the use of supercell parameters specified in the <file>.
- replaced old detection of cart/reduced coordinates by the subroutine "FIND_IF_REDUCED" in "in_xyz.f90".
- changed name of norm file in "xyz_difference.f90", it is now called *_norm.txt.
- solved a bug that occured when several dots were present in the input file name (e.g. "test.0.34.xyz").
- corrected a bug in "modes.f90": when using mode create, and when a file name with extension *and* one or several other extensions were specified, the extension corresponding to the file name was not activated for output.
- corrected a bug in "modes.f90": when using mode merge, and when a file name with extension *and* one or several other extensions were specified, the extension corresponding to the file name was not activated for output.
- LAMMPS custom files (lmc) are now parsed for properties. The format is read from the "ITEM: ATOMS" line, which allows to know on which column the coordinates and atom species will be. Corresponding doc added (formats.html).
- corrected bug when reading tricilinic box properties from LAMMPS custom file format (in_lammps_custom.f90).
- added option 'shear' and corresponding doc.
- added the option "region" to select atoms inside or outside a region (which for now can be a box or a sphere). Several changes were made to various options, so that they apply only to the selected atoms.


Beta 0.4.3 (08 Nov. 2010)
-------------------------
- bug corrections for mode list.
- replaced several 'X' in formats by '1X' to comply to Fortran 95 standard and make the compilation with g95 possible.
- standardized messages in opt_* modules when no change is to be made (e.g. when "-e 1 1 1" is called).
- added module "opt_cart2frac" to force output to fractional coordinates.
- corrected some output modules after the -frac option is used.
- solved a minor display bug when using file list mode.
- corrected bugs in the reading of POSCAR files.


Beta 0.4.2 (29 Oct. 2010)
-------------------------
- corrected several bugs in in_cfg.f90 that were leading to errors when reading CFG files containing a lot of spacing between keywords and numerical values (for instance "A =                   1.0"). Now this should not happen as long as the line is less than 128 characters long.
- can now read some custom formats from LAMMPS; this has to be improved in the future
- option "substitute" now accepts numbers or atomic species
- output to LAMMPS data file (lmp) uses now "ID type charge x y z", implying that "atom_style charge" has to be used in the LAMMPS input file
- the Makefile now copies the style file (css) along with the documentation when using the "make install" command.
- "mode_create" now returns atom positions in an array P, which can be used by options and output.
- corrected a bug in cut_cell that did not properly set the size of array P, which could result in segfault.


Beta 0.4.1 (20 Oct. 2010)
-------------------------
- fixed a bug in the reading of GIN files.
- fixed a bug in the reading of BOP files.
- fixed a minor bug affecting a message in opt_disloc.f90
- fixed a bug in the Makefile.
- changed the option "shift". Now the three components of the shift vector must be specified as parameters.
- added option 'unit' and doc.
- removed possibility for options in interactive mode.
- options are now in a separate module "options.f90" so it can be called from any part of the program (no need to call the whole CONVERT_AFF anymore)
- code cleanup: options are now sorted in alphabetical order in many modules for better clarity.


Beta 0.4 (15 Oct.2010)
----------------------
- removed a lot of disk I/O: the temporary file 'pikashu.xyz' is no longer used. Now the atomic positions are loaded into memory (by in_* modules) and transformed into memory (by opt_* modules) before being written to output file(s). This concerns almost all modules.
- fixed bugs in difference mode.
- fixed bugs in the writing of CFG files.
- fixed a bug in "alignx" option.
- output to several formats/files is now dealt with by separate new module "writeout.f90".
- cleanup of the code by removing many unused variables.
- added "wrap" option.
- added "substitute" option.
- the Makefile now setups the rights for the documentation when "make install" is used.
- changed the welcome message.


Beta 0.3 (28 July 2010)
-----------------------
- added mode "difference".
- added option "alignx".
- added option "orient".
- added option "dislocation".
- LAMMPS data files can be output (*.lmp).


Beta 0.2 (1 June 2010)
----------------------
- added mode "list".
- added mode "ddplot".
- added option "deform".
- added option "sort" (uses bubble sort algorithm).
- can now write GIN as output.


Beta 0.1 (27 Apr. 2010)
-----------------------
- supports XYZ, XSF, CFG, GIN.
- options expand, cut, shift.
- lots of disk I/O: converts one file to pikashu.xyz, then each option reads and writes to pikashu.xyz, and finally pikashu.xyz is converted to the final format.
