17 (
"dir,d",
"CASM project directory structure summary")
18 (
"project_settings",
"Description and location of 'project_settings' file")
19 (
"prim",
"Description and location of 'prim.json' and 'PRIM' files")
20 (
"config_list",
"Description and location of 'config_list.json' file")
21 (
"sym",
"Description and location of 'lattice_point_group.json', 'factor_group.json' and 'crystal_point_group.json' files")
22 (
"vasp",
"Description and location of VASP settings files")
23 (
"properties",
"Description and location of properties.calc.json files")
24 (
"qe",
"Description and location of Quantum Espresso settings files")
25 (
"comp",
"Description and location of 'composition_axes.json' file")
26 (
"bspecs",
"Description and location of 'bspecs.json' file")
27 (
"clust",
"Description and location of 'clust.json' file")
28 (
"basis",
"Description and location of 'basis.json' file")
29 (
"clex",
"Description and location of '$TITLE_Clexulator.*' files")
30 (
"ref",
"Description and location of 'chemical_reference.json' files")
31 (
"scel",
"Description and location of 'SCEL' file")
32 (
"lat",
"Description and location of 'LAT' files")
33 (
"pos",
"Description and location of 'POS' files")
34 (
"eci",
"Description and location of 'eci.json' file")
35 (
"monte",
"Description and location of the Monte Carlo input file");
51 po::store(po::parse_command_line(args.
argc, args.
argv, format_opt.
desc()), vm);
55 if(vm.count(
"help") || vm.size() == 0) {
56 args.
log << std::endl;
57 args.
log << format_opt.
desc() << std::endl;
62 if(vm.count(
"desc")) {
64 args.
log << format_opt.
desc() << std::endl;
66 args.
log <<
"DESCRIPTION" << std::endl;
67 args.
log <<
" This option describes the files contained within a CASM project \n";
68 args.
log <<
" and where to find them. For a summary of the directory structure\n";
69 args.
log <<
" of a CASM project using VASP for calculating configuration use \n";
70 args.
log <<
" the --dir option. Not all files are always present. \n";
79 args.
err_log <<
"ERROR: " << e.what() << std::endl << std::endl;
83 catch(std::exception &e) {
84 args.
err_log <<
"Unhandled Exception reached the top of main: "
85 << e.what() <<
", application will now exit" << std::endl;
91 args.
log <<
"\n### dir ##################\n\n";
93 args.
log <<
" The expected CASM project directory structure with VASP settings \n";
94 args.
log <<
" files: \n";
96 args.
log <<
" $ROOT/ \n";
97 args.
log <<
" prim.json \n";
98 args.
log <<
" (PRIM) \n";
99 args.
log <<
" LOG \n";
100 args.
log <<
" $ROOT/.casm \n";
101 args.
log <<
" project_settings.json \n";
102 args.
log <<
" config_list.json \n";
103 args.
log <<
" composition_axes.json \n";
104 args.
log <<
" $ROOT/symmetry/ \n";
105 args.
log <<
" lattice_point_group.json \n";
106 args.
log <<
" factor_group.json \n";
107 args.
log <<
" crystal_point_group.json \n";
108 args.
log <<
" $ROOT/basis_sets/$CURR_BSET/ \n";
109 args.
log <<
" bspecs.json \n";
110 args.
log <<
" basis.json \n";
111 args.
log <<
" clust.json \n";
112 args.
log <<
" $TITLE_Clexulator.* \n";
113 args.
log <<
" $ROOT/training_data/ \n";
114 args.
log <<
" SCEL \n";
115 args.
log <<
" $ROOT/training_data/settings/$CURR_CALCTYPE/ \n";
116 args.
log <<
" relax.json \n";
117 args.
log <<
" INCAR \n";
118 args.
log <<
" SPECIES \n";
119 args.
log <<
" KPOINTS \n";
120 args.
log <<
" POSCAR \n";
121 args.
log <<
" $ROOT/training_data/settings/$CURR_CALCTYPE/$CURR_REF/ \n";
122 args.
log <<
" chemical_reference.json \n";
123 args.
log <<
" $ROOT/training_data/$SCELNAME/ \n";
124 args.
log <<
" LAT \n";
125 args.
log <<
" $ROOT/training_data/$SCELNAME/$CONFIGID \n";
126 args.
log <<
" POS \n";
127 args.
log <<
" $ROOT/training_data/$SCELNAME/$CONFIGID/$CURR_CALCTYPE \n";
128 args.
log <<
" (VASP/QE results) \n";
129 args.
log <<
" properties.calc.json \n";
130 args.
log <<
" $ROOT/cluster_expansions/clex.formation_energy/$CURR_BSET/$CURR_CALCTYPE/$CURR_REF/$CURR_ECI\n";
131 args.
log <<
" eci.json \n";
134 args.
log <<
" Variable descriptions: \n";
136 args.
log <<
" $ROOT: root directory of the CASM project \n";
138 args.
log <<
" $CURR_BSET: Current basis set, by default this is 'bset.default'.\n";
139 args.
log <<
" The current value can be inspected via 'casm settings -l'. \n";
141 args.
log <<
" $CURR_CALCTYPE: Current calctype, by default this is 'calctype.default'.\n";
142 args.
log <<
" The current value can be inspected via 'casm settings -l'. \n";
144 args.
log <<
" $CURR_REF: Current composition axes and reference states, by \n";
145 args.
log <<
" default this is 'ref.default'. The current value can be inspected\n";
146 args.
log <<
" via 'casm settings -l'. \n";
148 args.
log <<
" $SCELNAME: Supercell name, in the form SCELV_A_B_C_D_E_F. 'V' is\n";
149 args.
log <<
" volume of the supercell in terms of the primitive cell, and \n";
150 args.
log <<
" 'A'-'F' are the values of the hermite normal form of the \n";
151 args.
log <<
" transformation matrix. \n";
153 args.
log <<
" $CONFIGID: Configuration id, a unique integer. \n";
155 args.
log <<
" $TITLE: Title of the CASM project \n";
157 args.
log <<
" Note: The 'settings' heirarchy can be located at the project \n";
158 args.
log <<
" level as shown above, or at the supercell or configuration level\n";
159 args.
log <<
" in order to override calculation, composition, or reference \n";
160 args.
log <<
" state settings at the supercell or configuration level. The \n";
161 args.
log <<
" most local settings are always used for a configuration. \n";
166 if(vm.count(
"project_settings")) {
167 args.
log <<
"\n### project_settings.json ##################\n\n";
169 args.
log <<
"LOCATION WHEN GENERATED:\n";
170 args.
log <<
"$ROOT/.casm/project_settings.json\n\n\n";
172 args.
log <<
"DESCRIPTION:\n";
173 args.
log <<
"Current CASM project settings.\n\n\n";
175 args.
log <<
"EXAMPLE:\n";
176 args.
log <<
"-------\n";
178 "{\n \"cluster_expansions\" : {\n \"formation_energy\" : {\n \"bset\" : \"default\",\n \"calctype\" : \"default\",\n \"eci\" : \"default\",\n \"name\" : \"formation_energy\",\n \"property\" : \"formation_energy\",\n \"ref\" : \"default\"\n }\n },\n \"crystallography_tol\" : 1.000000000000000082e-05,\n \"curr_properties\" : [ \"relaxed_energy\" ],\n \"default_clex\" : \"formation_energy\",\n \"lin_alg_tol\" : 1.000000000000000036e-10,\n \"name\" : \"ZrO\",\n \"nlist_sublat_indices\" : [ 2, 3 ],\n \"nlist_weight_matrix\" : [\n [ 2, -1, 0 ],\n [ -1, 2, 0 ],\n [ 0, 0, 5 ]\n ],\n \"query_alias\" : {\n },\n \"view_command\" : \"casm.view \\\"open -a /Applications/VESTA/VESTA.app\\\"\"\n}" << std::endl;
179 args.
log <<
"-------\n";
180 args.
log << std::endl << std::endl;
183 if(vm.count(
"prim")) {
184 args.
log <<
"\n### prim.json ##################\n\n";
186 args.
log <<
"LOCATION WHEN GENERATED:\n";
187 args.
log <<
"$ROOT/prim.json\n";
188 args.
log <<
"$ROOT/PRIM (legacy)\n\n\n";
190 args.
log <<
"DESCRIPTION:\n";
191 args.
log <<
"'prim.json' describes the primitive cell structure. It includes the lattice \n";
192 args.
log <<
"vectors, crystal basis sites and a list of possible occupant molecules on each\n";
193 args.
log <<
"basis site.\n\n";
195 args.
log <<
"'prim.json' parameters: \n\n"
197 "\"title\" (string): \n"
198 " A title for the project. Must consist of alphanumeric characters \n"
199 " and underscores only. The first character may not be a number. \n\n"
201 "\"lattice_vectors\" (JSON array of 3 JSON arrays of 3 numbers): \n"
202 " Lattice vectors for the primitive structure, in Angstroms. \n\n"
204 "\"coordinate_mode\" (string): \n"
205 " Coordinate mode for basis sites. One of: \n"
206 " \"Fractional\" or \"Direct\", \n"
207 " \"Cartesian\" \n\n"
209 "\"basis\" (JSON array of JSON objects): \n\n"
211 " /\"coordinate\" (JSON array of 3 numbers): \n"
212 " Coordinate of the basis site with units as specified by the \n"
213 " the \"coordinate_mode\" parameter. The default tolerance for \n"
214 " checking symmetry is 1e-5, so basis site coordinates should \n"
215 " include 6 significant digits or more. \n"
217 " /\"occupant_dof\" (JSON array of string): \n"
218 " A list of the possible occupant atoms (and in future versions \n"
219 " CASM, molecules) that on each site. The names are case \n"
220 " sensitive, and \"Va\" is reserved for vacancies. \n\n\n";
223 args.
log <<
"EXAMPLE 1: An FCC ternary alloy of elements A, B, and C\n";
224 args.
log <<
"-------\n";
226 "{\n \"basis\" : [\n {\n \"coordinate\" : [ 0.000000000000, 0.000000000000, 0.000000000000 ],\n \"occupant_dof\" : [ \"A\", \"B\", \"C\" ]\n }\n ],\n \"coordinate_mode\" : \"Fractional\",\n \"description\" : \"Face-centered Cubic (FCC, cF)\",\n \"lattice_vectors\" : [\n [ 2.000000000000, 2.000000000000, 0.000000000000 ],\n [ 0.000000000000, 2.000000000000, 2.000000000000 ],\n [ 2.000000000000, 0.000000000000, 2.000000000000 ]\n ],\n \"title\" : \"ABC\"\n}\n";
227 args.
log <<
"-------\n\n";
229 args.
log <<
"EXAMPLE 2: HCP Zr with O in octahedral interstitial positions\n";
230 args.
log <<
"-------\n";
232 "\n{\n \"basis\" : [\n {\n \"coordinate\" : [ 0.0, 0.0, 0.0 ],\n \"occupant_dof\" : [ \"Zr\" ]\n },\n {\n \"coordinate\" : [ 0.666666, 0.333333, 0.5 ],\n \"occupant_dof\" : [ \"Zr\" ]\n },\n {\n \"coordinate\" : [ 0.333333, 0.666666, 0.25 ],\n \"occupant_dof\" : [ \"Va\", \"O\" ]\n },\n {\n \"coordinate\" : [ 0.333333, 0.666666, 0.75 ],\n \"occupant_dof\" : [ \"Va\", \"O\" ]\n }\n ],\n \"coordinate_mode\" : \"Fractional\",\n \"description\" : \"hcp Zr with oct (O) \",\n \"lattice_vectors\" : [\n [ 3.233986860000, 0.000000000000, 0.000000000000 ],\n [ -1.616993430000, 2.800714770000, 0.000000000000 ],\n [ -0.000000000000, 0.000000000000, 5.168678340000 ]\n ],\n \"title\" : \"ZrO\"\n}\n";
233 args.
log <<
"-------\n\n";
235 args.
log <<
"\n### PRIM ##################\n\n";
237 args.
log <<
"DESCRIPTION:\n";
238 args.
log <<
"PRIM is the input file used by previous version of casm. It can be read and \n";
239 args.
log <<
"converted to 'prim.json'. The format of PRIM is very similar to the VASP POSCAR \n";
240 args.
log <<
"except a list of possible occupant molecules is included with each basis site. \n\n";
242 args.
log <<
"- Molecule names are case sensitive.\n";
243 args.
log <<
"- 'Va' is reserved for vacancies.\n";
244 args.
log <<
"- The default tolerance for checking symmetry is 1e-5, so basis site coordinates\n";
245 args.
log <<
" should include 6 significant digits or more.\n\n\n";
247 args.
log <<
"EXAMPLE 1: An FCC ternary alloy of elements A, B, and C\n";
248 args.
log <<
"-------\n";
250 "Face-centered Cubic (FCC, cF)\n\
257 0.00 0.00 0.00 A B C\n";
258 args.
log <<
"-------\n\n";
259 args.
log <<
"EXAMPLE 2: A structure with some alloying sites and some non-alloying sites\n";
260 args.
log <<
"-------\n";
264 1.91357600 0.00000000 -6.23799200\n\
265 6.08935000 -1.87060000 0.00000000\n\
266 0.00000000 -3.74120000 0.00000000\n\
269 0.0000000 0.0000000 0.0000000 Li Va\n\
270 0.3800000 0.9000000 0.5500000 Li Va\n\
271 0.6200000 0.1000000 0.4500000 Li Va\n\
272 0.0000000 0.2600000 0.3700000 Li Va\n\
273 0.0000000 0.7400000 0.6300000 Li Va\n\
274 0.7080000 0.3940000 0.8030000 Ti\n\
275 0.2920000 0.6060000 0.1970000 Ti\n\
276 0.2950000 0.1980000 0.9010000 Ti\n\
277 0.7050000 0.8020000 0.0990000 Ti\n\
278 0.9960000 0.2640000 0.8680000 O\n\
279 0.0040000 0.7360000 0.1320000 O\n\
280 0.3470000 0.5280000 0.7360000 O\n\
281 0.6530000 0.4720000 0.2640000 O\n\
282 0.6290000 0.1200000 0.9400000 O\n\
283 0.3710000 0.8800000 0.0600000 O\n\
284 0.7070000 0.7240000 0.6380000 O\n\
285 0.2930000 0.2760000 0.3620000 O\n";
286 args.
log <<
"-------\n";
287 args.
log << std::endl << std::endl;
290 if(vm.count(
"config_list")) {
291 args.
log <<
"\n### config_list.json ##################\n\n";
293 args.
log <<
"LOCATION WHEN GENERATED:\n";
294 args.
log <<
"$ROOT/.casm/config_list.json\n\n\n";
296 args.
log <<
"DESCRIPTION:\n";
297 args.
log <<
"A list of generated configurations. This file is generated at the \n";
298 args.
log <<
"project level once 'casm enum' has been used to generate \n";
299 args.
log <<
"configurations. \n";
301 args.
log <<
"Contains basic information describing the configuration: \n\n" <<
303 "supercells:supercell_name:configid: \n" <<
304 " Configurations are organized in the JSON file first by the SCELNAME \n" <<
305 " and then listed by the configuration's CONFIGID. \n\n" <<
308 " Describes the possibly mutiple ways in which this configuration \n" <<
309 " was generated. Possibilities are \"enumerated\": the configuration\n" <<
310 " was generated when all symmetrically unique configurations of the \n" <<
311 " supercell were enumerated, or \"perturbation\": the configuration \n" <<
312 " was generated as a perturbation with respect to some other \n" <<
313 " configuration. \n\n" <<
316 " An array of int that describes the decoration for a particular \n" <<
317 " configuration in a given supercell. The length of the array is the\n" <<
318 " same length as your basis, with each value corresponding to a \n" <<
319 " particular basis site on the supercell. The value for a particular\n" <<
320 " site determines what type of molecule is occupying said site, with\n" <<
321 " values going from zero to the number of allowed occupants for that\n" <<
322 " particular site. The array is ordered in blocks of basis sites of \n" <<
323 " your primitive structure. \n\n" <<
325 " For example, for an \"occupation\" corresponding to a volume 5 \n" <<
326 " supercell of a PRIM with 2 basis sites, the first 5 values in the \n" <<
327 " array represent basis sites for the first site in the PRIM, and \n" <<
328 " the next 5 represent basis sites for the second site in the PRIM. \n" <<
329 " The occupation values can also be read from the \'config\' column \n" <<
330 " of the config_list file. \n\n" <<
332 "... other degrees of freedom will also be included in this file ... \n\n" <<
334 "properties:calc: \n" <<
335 " This contains the values of properties calculated using a \n" <<
336 " particular calctype. Properties are normalized per unit cell where\n" <<
337 " appropriate (relaxed_energy, volume). \n\n" <<
339 "properties:ref: \n" <<
340 " This contains the reference values of properties based on the \n" <<
341 " values of those properties in the current reference states for \n" <<
342 " this configuration. The reference values are determined by a \n" <<
343 " linear interpolation of their values in the reference states to \n" <<
344 " the composition of this configuration. The most local reference \n" <<
345 " states are used; see 'casm format --ref' for details. \n\n" <<
347 "properties:delta: \n" <<
348 " This contains the difference between the properties listed in \n" <<
349 " \'properties:calc\' from those in \'properties:ref\'. These are \n" <<
350 " the values to be cluster expanded. \n\n";
351 args.
log <<
"\n\n\n";
353 args.
log <<
"EXAMPLE:\n";
354 args.
log <<
"-------\n";
356 "{\n \"supercells\" : {\n \"SCEL1_1_1_1_0_0_0\" : {\n \"0\" : {\n \"calctype.default\" : {\n \"ref.default\" : {\n \"properties\" : {\n \"calc\" : {\n \"basis_deformation\" : 0.000000000000,\n \"data_timestamp\" : 1441172550,\n \"lattice_deformation\" : 0.000000676576,\n \"relaxation_strain\" : [ 0.001443293898, 0.001443293305, 0.002332246990, 0.000000000000, 0.000000000000, -0.000000001264 ],\n \"relaxed_energy\" : -17.093958770000,\n \"rms_force\" : 0.000000000000,\n \"relaxed_magmom\" : -4.125372200000,\n \"volume_relaxation\" : 1.005222845232\n },\n \"delta\" : {\n \"relaxed_energy\" : 0.000000000000\n },\n \"ref\" : {\n \"relaxed_energy\" : -17.093958770000\n }\n }\n }\n },\n \"dof\" : {\n \"occupation\" : [ 0, 0, 0, 0 ]\n },\n \"selected\" : false,\n \"source\" : [ \"occupation_enumeration\" ]\n },\n\
357 ... other configurations ...\n\
359 ... other supercells ... \n\
362 args.
log <<
"-------\n";
363 args.
log << std::endl << std::endl;
366 if(vm.count(
"sym")) {
367 args.
log <<
"\n### sym ##################\n\n";
369 args.
log <<
"LOCATION WHEN GENERATED:\n";
370 args.
log <<
"$ROOT/symmetry/lattice_point_group.json\n";
371 args.
log <<
"$ROOT/symmetry/factor_group.json\n";
372 args.
log <<
"$ROOT/symmetry/crystal_point_group.json\n\n\n";
376 args.
log <<
"DESCRIPTION:\n" <<
377 "Symgroup files report each element of a group as representative \n" <<
378 "linear transformations of 3-dimensional space (i.e., the symmetry \n" <<
379 "operation). The symmetery operation transforms a spatial coordinate \n" <<
380 "'x' according to x' = A*x+b, where 'A' is the 3x3 'operation matrix'\n" <<
381 "and 'b' is the 'shift' vector. Operations are printed either in \n" <<
382 "direct (fractional) coordinates or Cartesian coordinates, depending \n" <<
383 "on command-line execution options.\n\n" <<
385 "For a crystal or PRIM file, CASM reports the following groups: \n\n" <<
387 "lattice_point_group.json: \n" <<
388 " This is the point group of the Bravais lattice, and is the list of\n" <<
389 " operations that map the lattice vectors onto themselves. The \n" <<
390 " 'shift' vectors will always be zero. \n\n" <<
392 "factor_group.json: \n" <<
393 " This is a finite description of the crystal spacegroup, in which \n" <<
394 " all redundant operations that differ only by a 'shift' are \n" <<
395 " represented by a single operation, whose 'shift' lies within the \n" <<
396 " primitive cell. Formally, this is a group formed by the cosets of \n" <<
397 " 'T' in 'S', where 'T' is the translation group of the Bravais \n" <<
398 " lattice and 'S' is the crystal space group. \n\n" <<
400 "crystal_point_group.json: \n" <<
401 " This is a group of point operations formed by taking the \n" <<
402 " factor group operations and setting their 'shifts' to zero. \n" <<
403 " Macroscopic properties of the crystal must exhibit the symmetries \n" <<
404 " of the crystal point group. It is, by definition a subgroup of \n" <<
405 " the lattice point group.\n";
410 if(vm.count(
"vasp")) {
411 args.
log <<
"\n### vasp ##################\n\n";
413 args.
log <<
"LOCATION WHEN GENERATED:\n\n";
415 args.
log <<
"INPUT SETTINGS:\n";
416 args.
log <<
"$CALC_SETTINGS/relax.json\n";
417 args.
log <<
"$CALC_SETTINGS/INCAR\n";
418 args.
log <<
"$CALC_SETTINGS/SPECIES\n";
419 args.
log <<
"$CALC_SETTINGS/KPOINTS\n";
420 args.
log <<
"$CALC_SETTINGS/POSCAR\n\n";
422 args.
log <<
"For global settings:\n";
423 args.
log <<
" CALC_SETTINGS = $ROOT/training_data/settings/$CURR_CALCTYPE\n";
424 args.
log <<
"For supercell specific settings:\n";
425 args.
log <<
" CALC_SETTINGS = $ROOT/training_data/$SCELNAME/settings/$CURR_CALCTYPE\n";
426 args.
log <<
"For configuration specific settings:\n";
427 args.
log <<
" CALC_SETTINGS = $ROOT/training_data/$SCELNAME/$CONFIGID/settings/$CURR_CALCTYPE\n\n";
429 args.
log <<
"RESULTS:\n";
430 args.
log <<
"$ROOT/training_data/$SCELNAME/$CONFIGID/$CURR_CALCTYPE/(VASP results)\n";
431 args.
log <<
"$ROOT/training_data/$SCELNAME/$CONFIGID/$CURR_CALCTYPE/properties.calc.json (read)\n";
435 args.
log <<
"DESCRIPTION:\n";
436 args.
log <<
"CASM comes with wrappers for using VASP to calculate the properties \n" <<
437 "of configurations, but is designed so that any type of calculation \n" <<
438 "software or method could be used if an appropriate set of wrapper \n" <<
439 "scripts are available. By convention, input settings for software \n" <<
440 "used to calculate the properties of a particular configuration \n" <<
441 "should be checked for in the following directories: \n" <<
442 " 1) $ROOT/training_data/$SCELNAME/$CONFIGID/settings/$CURR_CALCTYPE\n" <<
443 " 2) $ROOT/training_data/$SCELNAME/settings/$CURR_CALCTYPE \n" <<
444 " 3) $ROOT/training_data/settings/$CURR_CALCTYPE \n\n" <<
446 "The VASP wrappers included with CASM check for input settings files \n" <<
447 "in the above directories, using the most local settings for a \n" <<
448 "particular configuration. In most cases, the global settings files \n" <<
449 "are stored in $ROOT/training_data/settings/$CURR_CALCTYPE and used \n" <<
450 "for all configurations. Settings files are searched for on a file-by-file\n" <<
451 "basis, so to set supercell or configuration specific settings it is \n" <<
452 "sufficient to only include the particular files necessary in the \n" <<
453 "supercell or configuration level settings folder. \n\n" <<
455 "PBS job submission using the VASP wrappers depends on using the pbs \n" <<
456 "python module available here: https://github.com/prisms-center/pbs \n\n" <<
458 "Included with CASM, the 'vasp.relax' script can be executed by the \n" <<
459 "'casm run' command to submit a batch of VASP jobs that for selected \n" <<
460 "configurations. For each selected configuration, VASP is re-run \n" <<
461 "using the output of the previous calculation until full convergence \n" <<
462 "is achieved. The convergence criteria is: if the cell shape and \n" <<
463 "volume remain constant (ISIF=0, 1, or 2) then a single calculation \n" <<
464 "is performed; else the calculation is converged if at least 2 jobs \n" <<
465 "are complete, and: 1) the last job completed with <= 3 ionic steps \n" <<
466 " or, if \"nrg_convergence\" is set in the 'relax.json' file, 2) the \n" <<
467 "last two calculations had final E0 differ by less than the value of \n" <<
468 " \"nrg_convergence\". Once converged, a final constant volume \n" <<
469 "calculation is performed with the following INCAR settings: (ISIF=2,\n" <<
470 "ISMEAR=-5, NSW=0, IBRION=-1). \n\n" <<
473 " This JSON file contains a single JSON object which contains \n" <<
474 " parameters used to control PBS job submission settings. \n" <<
475 " Required keys are: \n" <<
476 " \"queue\": queue to submit job in \n" <<
477 " \"ppn\": processors (cores) per node to request \n" <<
478 " \"atom_per_proc\": max number of atoms per processor (core) \n" <<
479 " \"walltime\": walltime to request (ex. \"48:00:00\") \n\n" <<
481 " Optional keys are: \n" <<
482 " \"account\": account to submit job under (default None) \n" <<
483 " \"pmem\": string for requested memory (default None) \n" <<
484 " \"priority\": requested job priority (default \"0\") \n" <<
485 " \"message\": when to send messages about jobs (ex. \"abe\", \n" <<
486 " default \"a\") \n" <<
487 " \"email\": where to send messages (ex. \"me@fake.com\", default \n" <<
489 " \"qos\": quality of service, 'qos' option (ex. \"fluxoe\") \n" <<
490 " \"npar\": vasp incar setting (default None) \n" <<
491 " \"ncore\": vasp incar setting (default None) \n" <<
492 " \"kpar\": vasp incar setting (default None) \n" <<
493 " \"vasp_cmd\": vasp execution command (default is \"vasp\" if \n" <<
494 " ncpus=1, else \"mpirun -np {NCPUS} vasp\" \n" <<
495 " \"ncpus\": number of cpus (cores) to run on (default $PBS_NP) \n" <<
496 " \"run_limit\": number of vasp runs until \"not_converging\" \n" <<
497 " (default 10) \n" <<
498 " \"nrg_convergence\": converged if last two runs complete and \n" <<
499 " differ in energy by less than this amount \n" <<
500 " (default None) \n" <<
501 " \"move\": files to move at the end of a run (ex. \"POTCAR\", \n" <<
502 " \"WAVECAR\"], default [\"POTCAR\"]) \n" <<
503 " \"copy\": files to copy from run to run (ex. [\"INCAR\", \n" <<
504 " \"KPOINTS\"], default [\"INCAR, KPOINTS\"]) \n" <<
505 " \"remove\": files to remove at the end of a run (ex. [\"IBZKPT\",\n" <<
506 " \"CHGCAR\"], default [\"IBKZPT\", \"CHG\", \"CHGCAR\",\n" <<
507 " \"WAVECAR\", \"TMPCAR\", \"EIGENVAL\", \"DOSCAR\", \n" <<
508 " \"PROCAR\", \"PCDAT\", \"XDATCAR\", \"LOCPOT\", \"ELFCAR\",\n" <<
510 " \"compress\": files to compress at the end of a run (ex. \n" <<
511 " [\"OUTCAR\", \"vasprun.xml\"], default []) \n" <<
512 " \"backup\": files to compress to backups at the end of a run, \n" <<
513 " used in conjunction with move (ex. [\"WAVECAR\"]) \n" <<
514 " \"encut\": [START, STOP, STEP] values for converging ENCUT to \n" <<
515 " within nrg_convergence (ex. [\"450\", \"Auto\", \n" <<
516 " \"10\"], default [\"Auto\", \"Auto\", \"10\"] where \n" <<
517 " \"Auto\" is either the largest ENMAX in all POTCARS \n" <<
518 " called in SPECIES for START, or 2.0 * largest ENMAX \n" <<
520 " \"kpoints\": [start, stop, step] values for converging KPOINTS \n" <<
521 " to within nrg_convergence (ex. [\"5\", \"50\", \"1\"],\n" <<
522 " default [\"5\", \"Auto\", \"1\"] where \"Auto\" can \n" <<
523 " only be used for STOP and means to keep increasing \n" <<
524 " the KPOINTS length by STEP until either \n" <<
525 " nrg_convergence or walltime is reached). For meaning \n" <<
526 " of the KPOINTS length parameter see the VASP \n" <<
527 " documentation at http://cms.mpi.univie.ac.at/vasp/ \n" <<
528 " vasp/Automatic_k_mesh_generation.html \n" <<
529 " \"extra_input_files\": extra input files to be copied from the \n" <<
530 " settings directory, e.g., a vdW kernel \n" <<
532 " \"initial\": location of INCAR with tags for the initial run, \n" <<
533 " if desired (e.g. to generate a PBE WAVECAR for use \n" <<
535 " \"final\": location of INCAR with tags for the final run, if \n" <<
536 " desired (e.g. \"ISMEAR = -5\", etc). Otherwise, the \n" <<
537 " settings enforced are (\"ISMEAR = -5\", \"NSW = 0\", \n" <<
538 " \"IBRION = -1\", \"ISIF = 2\") \n" <<
539 " \"err_types\": list of errors to check for. Allowed entries are \n" <<
540 " \"IbzkptError\" and \"SubSpaceMatrixError\". \n" <<
541 " Default: [\"SubSpaceMatrixError\"] \n" <<
544 args.
log <<
"EXAMPLE: relax.json \n";
545 args.
log <<
"-------\n";
548 \"account\":\"prismsprojectdebug_flux\",\n\
549 \"queue\":\"flux\",\n\
550 \"priority\":\"-200\",\n\
551 \"walltime\":\"1:00:00\",\n\
552 \"pmem\":\"3800mb\",\n\
553 \"email\":\"username@univ.edu\",\n\
555 \"atom_per_proc\":\"2\",\n\
557 \"nrg_convergence\":0.002\n\
559 args.
log <<
"-------\n\n\n";
562 args.
log <<
"SPECIES: \n" <<
563 " This file contains information for selecting POTCARs and specifing\n" <<
564 " parameters that must be set on an atom-by-atom basis in the INCAR,\n" <<
565 " such as MAGMOM. The first line in the file specifies the value of \n" <<
566 " 'POTCAR_DIR_PATH', which is the base path used to find POTCAR \n" <<
567 " files. The second line contains column headings (at least 4), and \n" <<
568 " then there are lines for each distinct species. The first column \n" <<
569 " specifies the 'SPECIES' and must match a species names in the PRIM\n" <<
570 " file. The second column gives an 'ALIAS' name for the species which\n" <<
571 " is used for ordering like atoms in the generated POSCAR files. The\n" <<
572 " third column should be either '0' or '1', such that only one \n" <<
573 " species with a given ALIAS has a '1'. For that species the fourth \n" <<
574 " column must contain the path that should be appended to the \n" <<
575 " POTCAR_DIR_PATH to specify the POTCAR file for that species. \n\n" <<
577 " Additional columns, such as 'MAGMOM' in the example below are \n\n" <<
578 " and used to specify the value used for a particular species in the\n" <<
579 " INCAR. The column heading must match a valid VASP INCAR setting. \n\n";
581 args.
log <<
"EXAMPLE: SPECIES \n";
582 args.
log <<
"-------\n" <<
583 "POTCAR_DIR_PATH = /absolute/path/to/vasp_potentials\n" <<
584 "SPECIES ALIAS POTCAR POTCAR_location MAGMOM\n" <<
586 "Mn4 Mn 1 PAW_PBE/Mn 4\n";
587 args.
log <<
"-------\n\n\n";
589 args.
log <<
"INCAR: \n" <<
590 " This is a template INCAR used for VASP calculations. The settings \n" <<
591 " are generally used as given though some may be automatically set \n" <<
592 " based on settings in the 'relax.json' or 'SPECIES' files. Also, \n" <<
593 " some settings might be added or changed if certain errors are \n" <<
594 " during calculation. The actual INCAR used for each calculation is \n" <<
597 args.
log <<
"EXAMPLE: INCAR \n";
598 args.
log <<
"-------\n" <<
599 "System = Test of VASP submission\n\
600 ISPIN = 1 # non-spin polarized\n\
602 IBRION = 2 # conjugate gradient ionic minimization\n\
604 ISIF= 3 # relax ions and volume\n\
606 ISMEAR = 1 # for metals\n\
610 args.
log <<
"-------\n\n\n";
612 args.
log <<
"KPOINTS, POSCAR: \n" <<
613 " This is a template KPOINTS file used for VASP calculations. If the\n" <<
614 " mode (third line) is set to 'Auto', this file is used as is for all\n" <<
615 " VASP calculations. Otherwise, if the mode is 'Gamma' or 'M', a \n" <<
616 " reference POSCAR must also exist and a scaling method is used to \n" <<
617 " calculate the kpoint mesh for a supercell, such that it has an \n" <<
618 " equal or greater kpoint density than in the reference POSCAR. \n\n";
620 args.
log <<
"-------\n";
625 args.
log <<
"\n### quantum espresso ##################\n\n";
627 args.
log <<
"LOCATION WHEN GENERATED:\n\n";
629 args.
log <<
"INPUT SETTINGS:\n";
630 args.
log <<
"$CALC_SETTINGS/relax.json\n";
631 args.
log <<
"$CALC_SETTINGS/$CUSTOM_INFILE_NAME\n";
632 args.
log <<
"$CALC_SETTINGS/SPECIES\n";
634 args.
log <<
"For global settings:\n";
635 args.
log <<
" CALC_SETTINGS = $ROOT/training_data/settings/$CURR_CALCTYPE\n";
636 args.
log <<
"For supercell specific settings:\n";
637 args.
log <<
" CALC_SETTINGS = $ROOT/training_data/$SCELNAME/settings/$CURR_CALCTYPE\n";
638 args.
log <<
"For configuration specific settings:\n";
639 args.
log <<
" CALC_SETTINGS = $ROOT/training_data/$SCELNAME/$CONFIGID/settings/$CURR_CALCTYPE\n\n";
641 args.
log <<
"RESULTS:\n";
642 args.
log <<
"$ROOT/training_data/$SCELNAME/$CONFIGID/$CURR_CALCTYPE/(quantum espresso results)\n";
643 args.
log <<
"$ROOT/training_data/$SCELNAME/$CONFIGID/$CURR_CALCTYPE/properties.calc.json (read)\n";
647 args.
log <<
"DESCRIPTION:\n";
648 args.
log <<
"CASM comes with wrappers for using Quantum Espresso to calculate the properties \n" <<
649 "of configurations, but is designed so that any type of calculation \n" <<
650 "software or method could be used if an appropriate set of wrapper \n" <<
651 "scripts are available. By convention, input settings for software \n" <<
652 "used to calculate the properties of a particular configuration \n" <<
653 "should be checked for in the following directories: \n" <<
654 " 1) $ROOT/training_data/$SCELNAME/$CONFIGID/settings/$CURR_CALCTYPE\n" <<
655 " 2) $ROOT/training_data/$SCELNAME/settings/$CURR_CALCTYPE \n" <<
656 " 3) $ROOT/training_data/settings/$CURR_CALCTYPE \n\n" <<
658 "The Quantum Espresso wrappers included with CASM check for input settings files \n" <<
659 "in the above directories, using the most local settings for a \n" <<
660 "particular configuration. In most cases, the global settings files \n" <<
661 "are stored in $ROOT/training_data/settings/$CURR_CALCTYPE and used \n" <<
662 "for all configurations. Settings files are searched for on a file-by-file\n" <<
663 "basis, so to set supercell or configuration specific settings it is \n" <<
664 "sufficient to only include the particular files necessary in the \n" <<
665 "supercell or configuration level settings folder. \n\n" <<
667 "PBS job submission using the Quantum Espresso wrappers depends on using the pbs \n" <<
668 "python module available here: https://github.com/prisms-center/pbs \n\n" <<
670 "Included with CASM, the 'qe.relax' script can be executed by the \n" <<
671 "'casm run' command to submit a batch of Quantum Espresso jobs that for selected \n" <<
672 "configurations. For each selected configuration, Quantum Espresso is re-run\n" <<
673 "using the output of the previous calculation until full convergence \n" <<
674 "is achieved. The convergence criteria is: if the cell shape and \n" <<
675 "volume remain constant (calculation != vc-relax) then a single calculation \n" <<
676 "is performed; else the calculation is converged if at least 2 jobs \n" <<
677 "are complete, and: 1) the last job completed with <= 3 ionic steps \n" <<
678 " or, if \"nrg_convergence\" is set in the 'relax.json' file, 2) the \n" <<
679 "last two calculations had final energy differ by less than the value of \n" <<
680 " \"nrg_convergence\". Once converged, a final constant volume \n" <<
681 "calculation is performed with the following setting: (calculation = 'relax')\n" <<
684 " This JSON file contains a single JSON object which contains \n" <<
685 " parameters used to control PBS job submission settings. \n" <<
686 " Required keys are: \n" <<
687 " \"queue\": queue to submit job in \n" <<
688 " \"ppn\": processors (cores) per node to request \n" <<
689 " \"atom_per_proc\": max number of atoms per processor (core) \n" <<
690 " \"walltime\": walltime to request (ex. \"48:00:00\") \n\n" <<
691 " \"software\": needs to be quantumespresso for quantum espresso to be used\n\n" <<
693 " Optional keys are: \n" <<
694 " \"account\": account to submit job under (default None) \n" <<
695 " \"pmem\": string for requested memory (default None) \n" <<
696 " \"priority\": requested job priority (default \"0\") \n" <<
697 " \"message\": when to send messages about jobs (ex. \"abe\", \n" <<
698 " default \"a\") \n" <<
699 " \"email\": where to send messages (ex. \"me@fake.com\", default \n" <<
701 " \"qos\": quality of service, 'qos' option (ex. \"fluxoe\") \n" <<
702 " \"qe_cmd\": quantum espresso execution command (default is \"pw.x < {INFILE} > {OUTFILE}\" if \n" <<
703 " ncpus=1, else \"mpirun -np {NCPUS} pw.x < {INFILE} > {OUTFILE}\" \n" <<
704 " \"infile\": quantum espresso input file name (default is \"std.in\"\n" <<
705 " \"outfile\": quantum espresso output file name (default is \"std.out\"\n" <<
706 " \"ncpus\": number of cpus (cores) to run on (default $PBS_NP) \n" <<
707 " \"run_limit\": number of vasp runs until \"not_converging\" \n" <<
708 " (default 10) \n" <<
709 " \"nrg_convergence\": converged if last two runs complete and \n" <<
710 " differ in energy by less than this amount \n" <<
711 " (default None) \n" <<
712 " \"move\": files to move at the end of a run (ex. \"\", \n" <<
713 " \".wfc\"], default []) \n" <<
714 " \"copy\": files to copy from run to run default [$infilename]) \n" <<
715 " \"remove\": files to remove at the end of a run \n" <<
716 " default [\".wfc\", \".igk\", \".save\"] \n" <<
717 " \"compress\": files to compress at the end of a run (ex. \n" <<
718 " [$outfilename], default []) \n" <<
719 " \"backup\": files to compress to backups at the end of a run, \n" <<
720 " used in conjunction with move (ex. [\".wfc\"]) \n" <<
721 " \"extra_input_files\": extra input files to be copied from the \n" <<
722 " settings directory, e.g., an OCCUPATIONS \n" <<
724 " \"initial\": location of $infile with tags for the initial run, \n" <<
726 " \"final\": location of $infile with tags for the final run, if \n" <<
728 " \"err_types\": list of errors to check for. Not Implemented yet \n" <<
731 args.
log <<
"EXAMPLE: relax.json \n";
732 args.
log <<
"-------\n";
735 \"account\":\"prismsprojectdebug_flux\",\n\
736 \"queue\":\"flux\",\n\
737 \"priority\":\"-200\",\n\
738 \"walltime\":\"1:00:00\",\n\
739 \"pmem\":\"3800mb\",\n\
740 \"email\":\"username@univ.edu\",\n\
742 \"atom_per_proc\":\"2\",\n\
744 \"nrg_convergence\":0.002\n\
745 \"calculator\":\"quantumespresso\"\n\
746 \"infilename\":\"LixCoO2.in\"\n\
747 \"outfilename\":\"LixCoO2.out\"\n\
749 args.
log <<
"-------\n\n\n";
752 args.
log <<
"SPECIES: \n" <<
753 " This file contains information for selecting pseudopotentials and specifing\n" <<
754 " parameters that must be set on an atom-by-atom basis in the infile,\n" <<
755 " such as magnetic moment (non currently implemented).\n" <<
756 " The first line in the file specifies the value of \n" <<
757 " 'PSEUDO_DIR_PATH', which is the base path used to find UPF \n" <<
758 " files. The second line contains column headings (at least 4), and \n" <<
759 " then there are lines for each distinct species. The first column \n" <<
760 " specifies the 'SPECIES' and must match a species names in the PRIM\n" <<
761 " file. The second column gives an 'ALIAS' name for the species which\n" <<
762 " is used for ordering like atoms in the generated input files. The\n" <<
763 " third column should be either '0' or '1', such that only one \n" <<
764 " species with a given ALIAS has a '1'. For that species the fourth \n" <<
765 " column must contain the path that should be appended to the \n" <<
766 " PSEUDO_DIR_PATH to specify the UPF file for that species. \n\n" <<
767 " Additional columns, such as 'if_pos' in the example below are \n\n" <<
768 " and used to specify the value used for a particular species in the\n" <<
769 " infile. The column heading must match a valid quantum espresso input setting.\n"
770 " For now only supported additional tag is if_pos, a way to fixed certain lattice positions.\n\n";
772 args.
log <<
"EXAMPLE: SPECIES \n";
773 args.
log <<
"-------\n" <<
774 "PSEUDO_DIR_PATH = /absolute/path/to/quantumespresso_potentials\n" <<
775 "SPECIES ALIAS UPF UPF_location if_pos\n" <<
776 "Ni Ni 1 PAW_PBE/Ni.UPF 1,1,1\n" <<
777 "Al Al 1 PAW_PBE/Al.UPF 1,1,1\n";
778 args.
log <<
"-------\n\n\n";
780 args.
log <<
"$infilename: \n" <<
781 " This is a template input file used for Quantum Espresso calculations. The settings \n" <<
782 " are generally used as given though some may be automatically set \n" <<
783 " based on settings in the 'relax.json' or 'SPECIES' files. Also, \n" <<
784 " some settings might be added or changed if certain errors are \n" <<
785 " during calculation. The actual input file used for each calculation is \n" <<
787 args.
log <<
"Note: \n" <<
788 " K_POINTS will be adjusted accordingly such that the density is maintained\n" <<
789 " over all configurations in the project for all Quantum Espresso calculations\n" <<
790 " this uses the CELL_PARAMETERS and the K_POINTS cards in the input file to calculate\n" <<
791 " a density and rescale configurations k-point mesh accordingly\n";
793 args.
log <<
"EXAMPLE: Mg2Ti4S8.in \n";
794 args.
log <<
"-------\n" <<
795 "System = Test of Quantum Espresso submission\n\
797 calculation = 'vc-relax',\n\
798 pseudo_dir = '/home/skolli/quantum_espresso/pseudo/',\n\
800 prefix = 'Mg2Ti4S8',\n\
801 restart_mode = 'from_scratch',\n\
806 occupations = 'fixed',\n\
807 celldm(1) = 7.3794,\n\
814 diagonalization = 'cg',\n\
815 mixing_mode = 'plain',\n\
816 mixing_beta = 0.7,\n\
820 ion_dynamics = 'bfgs',\n\
824 cell_factor = 1.6,\n\
825 cell_dynamics = 'bfgs',\n\
829 Mg 24.31 Mg.pbe-nsp-bpaw.UPF\n\
830 Ti 47.88 Ti.pbe-sp-hgh.UPF\n\
831 S 32.07 S.pbe-n-kjpaw_psl.0.1.UPF\n\
833 CELL_PARAMETERS angstrom\n\
834 0.0000000000000000 5.1756022947592379 5.1756022947592388\n\
835 5.1756022947592388 0.0000000000000000 5.1756022947592388\n\
836 5.1756022947592388 5.1756022947592379 0.0000000000000000\n\
838 ATOMIC_POSITIONS crystal\n\
839 Mg 0.000000000 0.000000000 0.000000000\n\
840 Mg 0.250000000 0.250000000 0.250000000\n\
841 Ti 0.625000000 0.625000000 0.625000000\n\
842 Ti 0.125000000 0.625000000 0.625000000\n\
843 Ti 0.625000000 0.125000000 0.625000000\n\
844 Ti 0.625000000 0.625000000 0.125000000\n\
845 S 0.3842989149764762 0.3842989149764762 0.3842989149764762\n\
846 S 0.8657010850235238 0.8657010850235238 0.8657010850235238\n\
847 S 0.3842989149764762 0.8471032550705786 0.3842989149764762\n\
848 S 0.3842989149764762 0.3842989149764762 0.8471032550705786\n\
849 S 0.8471032550705786 0.3842989149764762 0.3842989149764762\n\
850 S 0.8657010850235238 0.8657010850235238 0.4028967449294214\n\
851 S 0.8657010850235238 0.4028967449294214 0.8657010850235238\n\
852 S 0.4028967449294214 0.8657010850235238 0.8657010850235238\n\
854 K_POINTS automatic\n\
857 args.
log <<
"-------\n\n\n";
860 if(vm.count(
"properties")) {
861 args.
log <<
"\n### properties.calc.json ##################\n\n";
863 args.
log <<
"properties.calc.json: \n" <<
864 " Results of calculations for a particular configuration should be \n" <<
865 " stored in the directory \n" <<
866 " $ROOT/training_data/$SCELNAME/$CONFIGID/$CURR_CALCTYPE, \n" <<
867 " and calculated properties summarized in the file \n" <<
868 " $ROOT/training_data/$SCELNAME/$CONFIGID/$CURR_CALCTYPE/properties.calc.json \n" <<
869 " The 'properties.calc.json' file is read by CASM to extract the \n" <<
870 " first-principles calculted properties of interest. If the \n" <<
871 " 'properties.calc.json' file does not exist in the \n" <<
872 " $ROOT/training_data/$SCELNAME/$CONFIGID/$CURR_CALCTYPE directory\n" <<
873 " CASM assumes that no data is available for that configuration. \n" <<
874 " The 'properties.calc.json' uses CASM standard units eV and Angstroms\n\n" ;
876 args.
log <<
"EXAMPLE:\n";
877 args.
log <<
"-------\n";
883 \"atoms_per_type\": [\n\
887 \"coord_mode\": \"direct\", \n\
888 \"is_complete\": true, \n\
889 \"relaxed_basis\": [\n\
890 [0.6666667, 0.6666667, 0.6666667],\n\
891 [0.00255632, 0.99488736, 0.00255632],\n\
892 [0.33077698, 0.33844594, 0.33077698]\n\
894 \"relaxed_energy\": -16.27773537, \n\
895 \"relaxed_mag_basis\": [\n\
900 \"relaxed_magmom\": -1.3086, \n\
901 \"relaxed_forces\": [\n\
903 [0.0, 0.00987362, -0.00987362], \n\
904 [0.0, -0.00987362, 0.00987362]\n\
906 \"relaxed_lattice\": [\n\
907 [0.0, 1.9174843, 1.9174843], \n\
908 [1.61158655, -1.88219884, 3.79968315], \n\
909 [3.22317311, 0.0, 0.0]\n\
912 args.
log <<
"-------\n";
915 if(vm.count(
"comp")) {
916 args.
log <<
"\n### composition_axes.json ##################\n\n";
918 args.
log <<
"LOCATION WHEN GENERATED:\n";
919 args.
log <<
"$ROOT/.casm/composition_axes.json\n";
922 args.
log <<
"DESCRIPTION:\n";
923 args.
log <<
"This JSON file contains the currently selected composition axes, and \n" <<
924 "a list of possible standard or custom composition axes. \n\n" <<
926 "standard_axes: \n" <<
927 " A JSON object containing each possible standard composition axes \n" <<
928 " as an attribute with its index as the key. \n\n" <<
931 " A JSON object containing each custom composition axes as an \n" <<
932 " attribute with its index as the key. The keys should not be \n" <<
933 " repeats of any of the standard_axes. \n\n" <<
935 "standard_axes/custom_axes:components \n" <<
936 " A JSON array containing the names of possible species. \n\n" <<
938 "standard_axes/custom_axes:independent_compositions \n" <<
939 " The number of independent composition axes. \n\n" <<
941 "standard_axes/custom_axes:origin \n" <<
942 " The composition of origin the of composition axes in terms of \n" <<
943 " number of each component species per primitive cell, ordered as in\n" <<
944 " the 'components' array. \n\n" <<
946 "standard_axes/custom_axes:a, b, c, ... \n" <<
947 " The composition of end members a, b, c, etc. in terms of number of\n" <<
948 " each component species per primitive cell, ordered as in the \n" <<
949 " 'components' array. \n\n" <<
951 "standard_axes/custom_axes:param_formula: \n" <<
952 " The formula that converts 'comp_n' (# of each component per \n" <<
953 " primitive cell) to 'comp' (composition relative the selected \n" <<
954 " composition axes). \n\n" <<
956 "standard_axes/custom_axes:mol_formula: \n" <<
957 " The formula that converts 'comp' (composition relative the \n" <<
958 " selected composition axes) to 'comp_n' (# of each component per \n" <<
959 " primitive cell). \n\n\n";
962 args.
log <<
"EXAMPLE:\n";
963 args.
log <<
"-------\n";
965 "{\n \"current_axes\" : \"0\",\n \"standard_axes\" : {\n \"0\" : {\n \"a\" : [\n [ 2.000000000000 ],\n [ 0.000000000000 ],\n [ 2.000000000000 ]\n ],\n \"components\" : [ \"Zr\", \"Va\", \"O\" ],\n \"independent_compositions\" : 1,\n \"mol_formula\" : \"Zr(2)Va(2-2a)O(2a)\",\n \"origin\" : [\n [ 2.000000000000 ],\n [ 2.000000000000 ],\n [ 0.000000000000 ]\n ],\n \"param_formula\" : \"a(0.5-0.25Va+0.25O)\"\n },\n \"1\" : {\n \"a\" : [\n [ 2.000000000000 ],\n [ 2.000000000000 ],\n [ 0.000000000000 ]\n ],\n \"components\" : [ \"Zr\", \"Va\", \"O\" ],\n \"independent_compositions\" : 1,\n \"mol_formula\" : \"Zr(2)Va(2a)O(2-2a)\",\n \"origin\" : [\n [ 2.000000000000 ],\n [ 0.000000000000 ],\n [ 2.000000000000 ]\n ],\n \"param_formula\" : \"a(0.5+0.25Va-0.25O)\"\n }\n }\n}\n";
967 args.
log <<
"-------\n";
971 if(vm.count(
"bspecs")) {
972 args.
log <<
"\n### bspecs.json ##################\n\n";
974 args.
log <<
"LOCATION:\n";
975 args.
log <<
"$ROOT/basis_sets/$CURR_BSET/bspecs.json\n";
978 args.
log <<
"DESCRIPTION:\n";
979 args.
log <<
"This JSON file contains specifications for generating the cluster\n" <<
980 "basis functions. \n\n";
982 std::cout <<
"'site_basis_functions' may specify a string, which can be either 'occupation' or \n"
983 <<
"'chebychev'. Otherwise, specifies a JSON object containing a composition vector or\n"
984 <<
"a JSON array containing multiple composition vectors. A single composition vector\n"
985 <<
"is formatted as, e.g.\n"
986 <<
" \"composition\" : {\"Au\" : 0.25, \"Cu\" : 0.75} \n"
987 <<
"The site basis functions will then be constructed as to be optimized for that composition.\n\n"
989 <<
"To specify different compositions on multiple sublattices, an array can be used. \n"
990 <<
"As an example, the following specifies a different composition on sublattice 0 than\n"
991 <<
"on sublattices 1 and 3: \n\n"
993 <<
" \"site_basis_functions\" : [\n"
995 <<
" \"composition\" : {\"Ga\" : 0.3, \"In\" : 0.7},\n"
996 <<
" \"sublat_indices\" : [0]\n"
999 <<
" \"composition\" : {\"Ga\" : 1.0, \"In\" : 0.0},\n"
1000 <<
" \"sublat_indices\" : [1,2]\n"
1004 <<
"Sublattices are specified in the same order as in prim.json. Sublattice compositions\n"
1005 <<
"are not allowed to break the symmetry of the crystal. If equivalent sublattices are\n"
1006 <<
"assigned inequivalent compositions, one will be chosen arbitrarily and propagated to\n"
1007 <<
"all equivalent sublattices. The resulting site basis functions can be reviewed using\n"
1008 <<
"'casm bset --functions'\n\n";
1011 args.
log <<
"The JSON object 'orbit_branch_specs' specifies the maximum size of pair, \n" <<
1012 "triplet, quadruplet, etc. clusters in terms of the maximum distance \n" <<
1013 "between any two sites in the cluster.\n\n";
1015 args.
log <<
"The JSON array 'orbit_specs' allows specifying particular custom orbits \n" <<
1016 "by providing the prototype cluster coordinates. The 'include_subclusters' \n" <<
1017 "option allows including all orbits of subclusters of the specified cluster.\n" <<
1018 "The cluster coordinates may be in \"Direct\"/\"Fractional\" coordinates, \n"
1019 "\"Cartesian\" coordinates, or \"Integral\" coordinates. \"Integral\" \n"
1020 "coordinates are 4-element integer arrays indicating sublattice index, b, \n"
1021 "followed by unit cell indices, i, j, k. \n\n\n";
1024 args.
log <<
"EXAMPLE:\n";
1025 args.
log <<
"-------\n";
1027 "{\n \"basis_functions\" : {\n \"site_basis_functions\" : \"occupation\"\n },\n \"orbit_branch_specs\" : {\n \"2\" : {\"max_length\" : 4.01},\n \"3\" : {\"max_length\" : 3.01}\n },\n \"orbit_specs\" : [\n {\n \"coordinate_mode\" : \"Direct\",\n \"prototype\" : [\n [ 0.000000000000, 0.000000000000, 0.000000000000 ],\n [ 1.000000000000, 0.000000000000, 0.000000000000 ],\n [ 2.000000000000, 0.000000000000, 0.000000000000 ],\n [ 3.000000000000, 0.000000000000, 0.000000000000 ]\n ],\n \"include_subclusters\" : true \n },\n {\n \"coordinate_mode\" : \"Integral\",\n \"prototype\" : [\n [ 0, 0, 0, 0 ],\n [ 1, 0, 0, 0 ],\n [ 0, 0, 0, 3 ]\n ],\n \"include_subclusters\" : true\n }\n ]\n}\n";
1028 args.
log <<
"-------\n";
1032 if(vm.count(
"clust")) {
1033 args.
log <<
"\n### clust.json ##################\n\n";
1035 args.
log <<
"LOCATION:\n";
1036 args.
log <<
"$ROOT/basis_sets/$CURR_BSET/clust.json\n";
1039 args.
log <<
"DESCRIPTION:\n";
1040 args.
log <<
"This JSON file contains the coordinates of sites in the prototype \n" <<
1041 "clusters generated using the 'bspecs.json' specifications. \n\n";
1044 args.
log <<
"Prototype clusters can be accessed via: \n"
1045 " [\"branches\"][branch_index][\"orbits\"][orbit_index][\"prototype\"]\n\n"
1047 "\"prototype\": (JSON object) \n"
1049 " /\"max_length\": (number) \n"
1050 " Maximum pair distance between sites in the cluster \n\n"
1052 " /\"min_length\": (number) \n"
1053 " Minimum pair distance between sites in the cluster \n\n"
1055 " /\"sites\": (JSON array of Integral coordinates) \n"
1056 " An array listing sites in the prototype cluster using Integral\n"
1057 " coordinates. Integral coordinates are 4-element integer arrays\n"
1058 " indicating sublattice index, b, followed by unit cell indices,\n"
1061 "\"bspecs\": (JSON object) \n"
1062 " For reference, the contents of the 'bspecs.json' file used to \n"
1063 " generate these clusters is reproduced here. \n\n"
1065 "\"lattice\": (JSON object) \n"
1066 " For reference, so that the Integral coordinates can be converted \n"
1067 " into Fractional or Cartesian coordinates, the lattice vectors \n"
1068 " of the primitive structure are reproduced here. \n\n" << std::endl;
1071 if(vm.count(
"basis")) {
1072 args.
log <<
"\n### basis.json ##################\n\n";
1074 args.
log <<
"LOCATION:\n";
1075 args.
log <<
"$ROOT/basis_sets/$CURR_BSET/basis.json\n";
1078 args.
log <<
"DESCRIPTION:\n";
1079 args.
log <<
"This JSON file contains the basis functions generated using the \n"
1080 "'bspecs.json' specifications. \n\n";
1083 args.
log <<
"\"site_functions\": (JSON array of JSON object) \n"
1084 " Gives the site basis functions. One JSON object for each basis \n"
1087 " /\"sublat\": (int) \n"
1088 " Basis site index. \n\n"
1090 " /\"asym_unit\": (int) \n"
1091 " Index of the asymmetric unit this basis site belongs to. \n\n"
1093 " /\"basis\": (JSON object) \n"
1094 " Gives the value of each site basis function for each possible \n"
1095 " occupant. Of the form: \n\n"
1097 " \"\\\\phi_b_i\": { \n"
1105 "\"cluster_functions\": (JSON array of JSON object) \n"
1106 " Gives the cluster basis functions. One JSON object for each \n"
1107 " cluster basis function. \n\n"
1109 " /\"linear_function_index\": (int) \n"
1110 " Linear function index. This corresponds to ECI indices. \n\n"
1112 " /\"mult\": (int) \n"
1113 " Multiplicity of symmetrically equivalent cluter functions. \n\n"
1115 " /\"orbit\": (JSON array of 3 int) \n"
1116 " Gives the cluster branch index, cluster orbit index, and index\n"
1117 " of this basis function in the cluster basis. \n\n"
1119 " /\"prototype\": (JSON object) \n"
1120 " Specifies the prototype cluster, as in the 'clust.json' file. \n\n"
1122 " /\"prototype_function\": (string) \n"
1123 " Latex-style function for the prototype cluster. \n\n" << std::endl;
1126 if(vm.count(
"clex")) {
1127 args.
log <<
"\n### $TITLE_Clexulator.* ##################\n\n";
1129 args.
log <<
"LOCATION:\n";
1130 args.
log <<
"$ROOT/basis_sets/$CURR_BSET/$TITLE_Clexulator.*\n";
1133 args.
log <<
"DESCRIPTION:\n";
1134 args.
log <<
"$TITLE_Clexulator.cc contains C++ code generated by CASM for \n"
1135 "the cluster basis functions. It is automatically compiled into \n"
1136 "$TITLE_Clexulator.o and $TITLE_Clexulator.so for use by CASM. \n\n" << std::endl;
1139 if(vm.count(
"ref")) {
1140 args.
log <<
"\n### ref ##################\n\n";
1142 args.
log <<
"LOCATION WHEN GENERATED:\n\n";
1143 args.
log <<
"$ROOT/training_data/settings/$CURR_CALCTYPE/$CURR_REF/chemical_reference.json\n";
1146 args.
log <<
"DESCRIPTION:\n";
1147 args.
log <<
" The chemical reference determines the value of the formation energy \n"
1148 " and chemical potentials calculated by CASM. \n\n"
1150 " Chemical references states are set by specifying a hyperplane in \n"
1151 " energy/atom - composition (as atom_frac) space. This may be done by \n"
1152 " specifying the hyperplane explicitly, or by specifying several \n"
1153 " reference states with energy/atom and composition (as atom_frac) for \n"
1154 " enough states to span the composition space of the allowed occupants \n"
1155 " specified in the prim. For consistency with other CASM projects, \n"
1156 " additional reference states extending to other compositional \n"
1157 " dimensions may be included also. The pure Va reference is always 0. \n\n";
1159 args.
log <<
" The reference states are stored in the 'chemical_reference.json' file\n"
1160 " in one of two formats: \n\n"
1162 " 1) Reference state composition and energy_per_species. \n"
1163 " In this format each reference state is represented by a JSON \n"
1164 " object storing the number of each species present in the reference\n"
1165 " state and the energy_per_species for that reference state. Species\n"
1166 " that are not in the primitive structure may also be included in \n"
1167 " the reference states as long as the composition space of the \n"
1168 " primitive structure is spanned by the hyperplane connecting the \n"
1169 " provided reference states. \n"
1171 R
"( {"A": 3.4, "C": 2.0, "energy_per_species": 2.0},)" << "\n" <<
1172 R
"( {"B": 2.0, "energy_per_species": 4.0}, )" << "\n" <<
1173 R
"( {"C": 1.0, "energy_per_species": 3.0} )" << "\n" <<
1174 R
"( ]')" << "\n\n" <<
1176 " 2) Input an array of energy_per_species, for each species in prim, \n"
1177 " including 0.0 for vacancy: \n"
1178 " '[X, X, X]' \n\n";
1180 args.
log <<
" When using '--set' it is also possible to specialize the chemical \n"
1181 " reference at the supercell or configuration level by adding the \n"
1182 " --scelname or --configname option. \n\n";
1185 args.
log <<
"EXAMPLE: chemical_reference.json\n";
1186 args.
log <<
"-------\n";
1189 "chemical_reference" : {
1191 "SCEL4_2_2_1_1_1_0 / 0" : [
1193 "A" : 1.000000000000,
1194 "energy_per_species" : -1.500000000000
1197 "B" : 1.000000000000,
1198 "energy_per_species" : -2.000100000000
1201 "C" : 1.000000000000,
1202 "energy_per_species" : -8.030000000000
1205 "SCEL4_2_2_1_1_1_0 / 2" : [ -1.520000000000, -2.000100000000, -8.030000000000 ]
1209 "A" : 0.500000000000,
1210 "B" : 0.500000000000,
1211 "energy_per_species" : -1.500000000000
1214 "B" : 1.000000000000,
1215 "energy_per_species" : -2.000000000000
1218 "C" : 1.000000000000,
1219 "energy_per_species" : -8.000000000000
1222 "D" : 1.000000000000,
1223 "energy_per_species" : -4.000000000000
1226 "species_order" : [ "A", "B", "C" ],
1228 "SCEL3_1_3_1_1_0_0" : [
1230 "A" : 1.000000000000,
1231 "energy_per_species" : -1.500000000000
1234 "B" : 1.000000000000,
1235 "energy_per_species" : -2.000000000000
1238 "C" : 1.000000000000,
1239 "energy_per_species" : -8.001000000000
1242 "SCEL4_2_2_1_1_1_0" : [
1244 "A" : 1.000000000000,
1245 "energy_per_species" : -1.500000000000
1248 "B" : 1.000000000000,
1249 "energy_per_species" : -2.000000000000
1252 "C" : 1.000000000000,
1253 "energy_per_species" : -8.030000000000
1259 args.log << "-------\n";
1263 if(vm.count(
"scel")) {
1264 args.
log <<
"\n### scel ##################\n\n";
1266 args.
log <<
"LOCATION WHEN GENERATED:\n";
1267 args.
log <<
"$ROOT/training_data/SCEL\n\n\n";
1269 args.
log <<
"DESCRIPTION:\n";
1270 args.
log <<
"Contains a list of all the generated and imported supercells. Each \n" <<
1271 "entry gives the name of a supercell, its volume in number of \n" <<
1272 "primitive volumes, and the transformation matrix to go from the \n" <<
1273 "primitive cell to the supercell. The convention is \n" <<
1274 " LAT.scel = LAT.prim*transf_matrix, \n" <<
1275 "where the columns of the LAT matrices are the lattice vectors. \n\n\n";
1277 args.
log <<
"EXAMPLE:\n";
1278 args.
log <<
"-------\n";
1280 "Supercell Name: 'SCEL1_1_1_1_0_0_0' Number: 0 Volume: 1\n\
1281 Supercell Transformation Matrix: \n\
1286 Supercell Name: 'SCEL2_1_1_2_0_0_0' Number: 1 Volume: 2\n\
1287 Supercell Transformation Matrix: \n\
1292 Supercell Name: 'SCEL2_1_2_1_0_0_1' Number: 2 Volume: 2\n\
1293 Supercell Transformation Matrix: \n\
1298 args.
log <<
"-------\n";
1301 if(vm.count(
"lat")) {
1302 args.
log <<
"\n### lat ##################\n\n";
1304 args.
log <<
"LOCATION WHEN GENERATED:\n";
1305 args.
log <<
"$ROOT/training_data/$SCELNAME/LAT\n\n\n";
1307 args.
log <<
"DESCRIPTION:\n";
1308 args.
log <<
"Contains the lattice vectors of a particular supercell of your CASM \n" <<
1309 "project. The format is the same as the first lines in a standard \n" <<
1310 "vasp POSCAR file, excluding the title (scaling followed by the three\n" <<
1311 "lattice vectors as rows).\n\n\n";
1313 args.
log <<
"EXAMPLE:\n";
1314 args.
log <<
"-------\n";
1317 10.52850134 0.00000000 0.00000000\n\
1318 0.00000000 10.52850134 0.00000000\n\
1319 0.00000000 0.00000000 10.52850134\n";
1320 args.
log <<
"-------\n";
1324 if(vm.count(
"pos")) {
1325 args.
log <<
"\n### pos ##################\n\n";
1327 args.
log <<
"LOCATION WHEN GENERATED:\n";
1328 args.
log <<
"$ROOT/training_data/$SCELNAME/$CONFIGID/POS\n\n\n";
1330 args.
log <<
"DESCRIPTION:\n";
1331 args.
log <<
"This file is generated using the '--write-pos' option for 'casm run'.\n";
1332 args.
log <<
"Decorated configuration for a particular supercell. It is a \n" <<
1333 "supercell of your primitive structure after the enumeration on the \n" <<
1334 "alloying sites. The format is standard vasp 5.x format, and the \n" <<
1335 "coordinates of the sites for the configuration are the ideal sites \n" <<
1336 "specified in the PRIM file.\n\n\n";
1338 args.
log <<
"EXAMPLE:\n";
1339 args.
log <<
"-------\n";
1341 "SCEL3_1_1_3_0_0_0\n\
1343 0.00000000 1.75475022 1.75475022\n\
1344 1.75475022 0.00000000 1.75475022\n\
1345 3.50950045 3.50950045 -3.50950045\n\
1349 0.3333333 0.3333333 0.3333333\n\
1350 0.6666667 0.6666667 0.6666667\n\
1351 0.0000000 0.0000000 0.0000000\n\
1353 args.
log <<
"-------\n";
1357 if(vm.count(
"eci")) {
1358 args.
log <<
"\n### eci.json ##################\n\n";
1360 args.
log <<
"LOCATION:\n";
1361 args.
log <<
"$ROOT/cluster_expansions/clex.formation_energy/$CURR_BSET/$CURR_CALCTYPE/$CURR_REF/$CURR_ECI/eci.json\n";
1364 args.
log <<
"DESCRIPTION:\n";
1365 args.
log <<
"This is a copy of the $ROOT/basis_sets/$CURR_BSET/'basis.json' file \n"
1366 "with the following additions: \n\n"
1368 "\"cluster_functions\": (JSON array of JSON object) \n\n"
1370 " /\"eci\": (number, optional, default=0.0) \n"
1371 " The value of the ECI for the cluster basis function. If not \n"
1372 " given, use 0.0. \n\n"
1374 "\"fit\": (JSON object) \n"
1375 " Data from 'casm-learn' specifying how the ECI where generated and\n"
1376 " some goodness of fit measures. \n\n" << std::endl;
1380 if(vm.count(
"monte")) {
1381 args.
log <<
"\n### monte ##################\n\n";
1383 args.
log <<
"LOCATION WHEN GENERATED:\n";
1384 args.
log <<
" User determined\n\n\n";
1386 args.
log <<
"DESCRIPTION:\n";
1387 args.
log <<
" The Monte Carlo input file does not need to be in any particular \n" <<
1388 " location, as long as it is somewhere inside the CASM project \n" <<
1389 " directory or subdirectories. The input file contains a JSON \n" <<
1390 " object with \"ensemble\", \"method\", \"model\", \"supercell\", \n" <<
1391 " \"data\", and \"driver\" attributes, as described below. An \n" <<
1392 " optional attribute \"debug\" may also be included to print \n" <<
1393 " information that may be useful for debugging an input file. \n\n" <<
1395 "Input file parameters: \n\n" <<
1397 "\"ensemble\" (string): \n\n" <<
1399 " Possible options for \"ensemble\" are: \n\n" <<
1401 " \"GrandCanonical\" or \"grand_canonical\": Semi-grand canonical\n" <<
1402 " Monte Carlo calculation in which the total number of sites is \n" <<
1403 " fixed, but the occupants on each site may vary. One occupant \n" <<
1404 " change at a time is attempted. \n\n" <<
1406 " \"Canonical\" or \"canonical\": Canonical Monte Carlo \n" <<
1407 " calculation in which the total number of each type of occupant \n"
1408 " is fixed. Each Monte Carlo step attempts to swap a pair of \n"
1409 " occupants. \n\n\n" <<
1412 "\"method\" (string): \n\n" <<
1414 " Possible options for \"method\" are: \n\n" <<
1416 " \"Metropolis\" or \"metropolis\": Run Monte Carlo calculations \n" <<
1417 " using the Metropolis algorithm. \n\n" <<
1419 " \"LTE1\" or \"lte1\": Single spin flip low temperature \n" <<
1420 " expansion calculations. \n\n\n" <<
1423 "\"model\": (JSON object) \n\n" <<
1425 " /\"formation_energy\": (string, optional, default=\"formation_energy\")\n" <<
1426 " Specifies the cluster expansion to use to calculated formation \n"
1427 " energy. Should be one of the ones listed by 'casm settings -l'.\n\n\n" <<
1430 "\"supercell\": (3x3 JSON arrays of integers) \n" <<
1431 " The supercell transformation matrix. \n\n" <<
1434 "\"data\": (JSON object) \n\n" <<
1436 " /\"sample_by\": (string) \n" <<
1437 " Specify unit for the period between samples. May be either \n" <<
1438 " \"step\" (sample after every \"sample_period\" proposed Monte \n" <<
1439 " Carlo events), or \"pass\" (sample after the \"sample_period\" \n" <<
1440 " number of passes), where 1 pass is a number of steps equal to \n" <<
1441 " the number of sites in the supercell that have variable \n" <<
1442 " occupation). \n\n" <<
1444 " /\"sample_period\": (integer) \n" <<
1445 " Specify how many steps or passes to wait between data samples. \n\n" <<
1447 " /\"measurements\": (JSON array containing JSON objects) \n" <<
1448 " Specifies which properties to sample. Each JSON object should \n" <<
1449 " include \"quantity\" (string) specifying a property to be \n" <<
1450 " sampled. Optionally, it may also include \"precision\" (number),\n" <<
1451 " indicating the required (absolute) precision in the average of \n" <<
1452 " the quantity for the calculation to be considered converged. If\n" <<
1453 " a precision is given for any quantity, then the Monte Carlo \n" <<
1454 " calculations run in automatic convergence mode and continue \n" <<
1455 " until all quantities with a specified precision are converged \n" <<
1456 " to level requested. \n\n" <<
1458 " Possible options for \"quantity\" are: \n" <<
1459 " \"comp\": composition, relative the composition axes \n" <<
1460 " \"comp_n\": composition, number of atoms per unit cell \n" <<
1461 " \"site_frac\": composition, normalized per basis site \n" <<
1462 " \"atom_frac\": composition, normalized per total number of atoms\n" <<
1463 " \"formation_energy\": formation energy (per unit cell) \n" <<
1464 " \"potential_energy\": potential energy (per unit cell), \n" <<
1465 " (= formation_energy - sum_i(mu_i*comp_i)) \n" <<
1466 " \"non_zero_eci_correlations\": correlations (per unit cell) \n" <<
1467 " which have non-zero eci values. \n" <<
1468 " \"all_correlations\": correlations (per unit cell) \n" <<
1469 " \"<anything else>\": is interpreted as a 'casm query' query \n\n" <<
1471 " /\"confidence\": (number, range (0.0, 1.0), default 0.95) \n" <<
1472 " The confidence level used for calculating the precision in the \n" <<
1473 " average value of sampled quantities. \n\n" <<
1475 " /\"min_pass\", /\"min_step\", /\"min_sample\": (integer) \n" <<
1476 " If in automatic convergence mode, prevents the calculation from\n" <<
1477 " a minimum number of passes, steps, or samples have occurred. \n\n" <<
1479 " /\"max_pass\", /\"max_step\", /\"max_sample\": (integer) \n" <<
1480 " If in automatic convergence mode, stops the calculation if the \n" <<
1481 " specified number of passes, steps, or samples have occurred. \n\n" <<
1483 " /\"N_pass\", /\"N_step\", /\"N_sample\": (integer) \n" <<
1484 " When not in automatic convergence mode (no precision has been \n" <<
1485 " specified for any quantities being sampled), stops the \n" <<
1486 " calculation when the specified number of passes, steps, or \n" <<
1487 " samples have occurred. \n\n" <<
1489 " /\"equilibration_passes_first_run\": (integer) \n" <<
1490 " If included, the requested number of passes will be performed \n" <<
1491 " at the initial conditions as a preliminary step before the \n" <<
1492 " actual run begins. This may be useful when not running in \n" <<
1493 " automatic convergence mode. \n\n" <<
1495 " /\"equilibration_passes_each_run\": (integer) \n" <<
1496 " If included, the requested number of passes will be performed \n" <<
1497 " at each condition as a preliminary step before the actual run \n" <<
1498 " begins. This may be useful when not running in automatic \n" <<
1499 " convergence mode. \n\n" <<
1501 " /\"storage\": (JSON object) Options for writing results. \n\n" <<
1503 " /\"output_format\": (string or JSON array of string) \n" <<
1504 " Specifies the type or types of output files. Current options \n" <<
1505 " are \"csv\" or \"json\". Type names with either all lower \n" <<
1506 " case or all upper case are accepted. \n\n" <<
1508 " /\"write_observations\": (boolean, default false) \n" <<
1509 " If true, all individual observations of the quantities \n" <<
1510 " requested to be sampled will be written to compressed files: \n" <<
1511 " \"output_directory\"/conditions.i/observations.ext.gz \n" <<
1512 " where 'i' is the condition index and 'ext' is the output \n" <<
1515 " /\"write_trajectory\": (boolean, default false) \n" <<
1516 " If true, the value of all degrees of freedom at the time of \n" <<
1517 " each sample will be written to compressed files: \n" <<
1518 " \"output_directory\"/conditions.i/trajectory.ext.gz \n" <<
1519 " where 'i' is the condition index and 'ext' is the output \n" <<
1522 " /\"enumeration\": (JSON object, optional) \n" <<
1523 " If included, save configurations encountered during Monte \n" <<
1524 " Carlo calculations by keeping a 'hall of fame' of best scoring \n" <<
1525 " configurations. After the calculation at a particular set of \n" <<
1526 " thermodynamic conditions completes, the configurations in the \n" <<
1527 " hall of fame are saved to the project configuration list. \n\n" <<
1529 " /\"check\": (string, default=\"eq(1,1)\") \n" <<
1530 " A 'casm query'-like string that returns a boolean value \n" <<
1531 " indicating if (true) a configuration should be considered for\n" <<
1532 " for the enumeration hall of fame. The default always returns \n" <<
1535 " /\"metric\": (string, default=\"clex_hull_dist(ALL)\") \n" <<
1536 " A 'casm query'-like string that provides a metric for ranking\n" <<
1537 " ranking configurations as they are encountered during a Monte\n" <<
1538 " Carlo calculation. The resulting value is used to create a \n" <<
1539 " hall of fame of 'best' configurations encountered during the \n" <<
1540 " calculation. When the calculation is complete configurations \n" <<
1541 " in the hall of fame are added to the CASM project config \n" <<
1542 " list. The 'casm query'-like command should evaluate to a \n" <<
1545 " Besides the properties listed via 'casm query -h properties',\n" <<
1546 " and 'casm query -h operators', both \"check\" and \"metric\" \n" <<
1547 " can also use the property \"potential_energy\". \n\n" <<
1549 " /\"sample_mode\": (string, optional, default=\"on_sample\") \n" <<
1550 " Indicate when to attempt to insert configurations into the \n" <<
1551 " enumeration hall of fame. Options are: \n" <<
1552 " \"on_accept\": after each accepted Monte Carlo event \n" <<
1553 " \"on_sample\": after each data sample \n\n" <<
1555 " /\"check_existence\": (bool, optional, default=true) \n" <<
1556 " If true, only configurations that do not already exist in the\n" <<
1557 " config list are inserted into the enumeration hall of fame. \n\n" <<
1559 " /\"insert_canonical\": (bool, optional, default=true) \n" <<
1560 " If true, configurations are inserted into the enumeration \n" <<
1561 " hall of fame in their canonical form. If 'check_existence' is\n" <<
1562 " true, this must be set to true. \n\n" <<
1564 " /\"N_halloffame\": (integer, optional, default=100) \n" <<
1565 " The number of configurations that are allowed in the \n" <<
1566 " enumeration hall of fame. \n\n" <<
1568 " /\"tolerance\": (number, optional, default=1e-8) \n" <<
1569 " Tolerance used for floating point comparison of configuration\n" <<
1570 " scores in the enumeration hall of fame. \n\n\n" <<
1573 "\"driver\": (JSON object) \n\n" <<
1575 " /\"motif\": (JSON object) \n" <<
1576 " Specifies the initial occupation of the supercell. \n\n" <<
1578 " For canonical ensemble Monte Carlo calculations an additional\n" <<
1579 " step changes the occupants on random sites to make the actual\n" <<
1580 " composition as close as possible to the requested composition.\n\n" <<
1582 " /\"configname\": (string, optional) \n" <<
1583 " A configuration name, \"auto\", \"restricted_auto\", or \n" <<
1584 " \"default\". \n\n" <<
1586 " Specifies the configuration that is tiled to fill the \n" <<
1587 " supercell. If necessary, symmetry operations may be applied \n" <<
1588 " An error is thrown if the specified configuration can not be \n" <<
1589 " used to fill the \"supercell\". \n\n" <<
1591 " Possible options for \"configname\" are: \n" <<
1592 " A configuration name (ex. \"SCEL3_3_1_1_0_2_2/0\") \n" <<
1593 " \"auto\": (\"grand_canonical\" ensemble only) Enumerated \n" <<
1594 " configurations will be searched for the configuration with \n" <<
1595 " the lowest potential energy to use as the motif. \n" <<
1596 " \"default\": If the value \"default\" is used, the initial \n" <<
1597 " motif occupation is determined from the occupation order in\n" <<
1599 " \"restricted_auto\": (\"grand_canonical\" ensemble only) \n" <<
1600 " Same as \"auto\", but only configurations that can tile the\n" <<
1601 " supercell are considered. As a last resort, \"default\" is \n" <<
1604 " /\"configdof\": (string, optional) \n" <<
1605 " Specifies the path to a configdof JSON file, such as \n" <<
1606 " \"initial_state.json\" or \"final_state.json\", containing \n" <<
1607 " the degrees of freedom to initialize the supercell with \n\n" <<
1609 " /\"mode\": (string) \n" <<
1610 " Specify the drive mode. \n\n" <<
1612 " Possible options for \"mode\" are: \n" <<
1613 " \"incremental\": perform one or more calculations, starting \n" <<
1614 " at the initial conditions and incrementing by the \n" <<
1615 " incremental conditions up to (and including) the final \n" <<
1616 " conditions. \n\n" <<
1617 " \"custom\": perform one or more calculations, as specified by\n" <<
1618 " the \"custom_conditions\". \n\n" <<
1620 " /\"dependent_runs\": (boolean, default true) \n\n" <<
1622 " If true, begin the next calculation with the final DoF from the\n" <<
1623 " previous calculation. If false, begin each calculation with the\n" <<
1624 " DoF specified for the \"motif\".\n\n" <<
1627 " /\"initial_conditions\",\n" <<
1628 " /\"incremental_conditions\", \n" <<
1629 " /\"final_conditions\": (JSON object, optional) \n" <<
1630 " Specifies the applied conditions for the calculation. For \n" <<
1631 " \"incremental_conditions\", specifies the change in conditions \n" <<
1632 " between individual calculations. Each JSON object should \n" <<
1635 " /\"temperature\": (number) \n" <<
1636 " The temperature in K. \n\n" <<
1638 " /\"param_chem_pot\" (JSON object, \"grand_canonical\" ensemble only)\n" <<
1639 " The parametric chemical potential(s) \n\n" <<
1641 " /\"a\", /\"b\", ...: (number) \n" <<
1642 " The parametric chemical potentials conjugate to the parametric\n" <<
1643 " compositions. The number of parametric chemical potentials \n" <<
1644 " provided must match the number of independent compositions. \n\n" <<
1646 " /\"comp\" (JSON object, \"canonical\" ensemble only, option 1)\n" <<
1647 " The parametric composition(s) \n\n" <<
1649 " /\"a\", /\"b\", ...: (number) \n" <<
1650 " The parametric composition. The number of entries provided \n" <<
1651 " must match the number of independent compositions. \n\n" <<
1653 " /\"comp\" (JSON array, \"canonical\" ensemble only, option 2)\n" <<
1654 " The parametric composition(s) \n\n" <<
1656 " [number, ...] \n" <<
1657 " An array containing the parametric composition. The number of \n" <<
1658 " entries provided must match the number of independent \n" <<
1659 " compositions. \n\n" <<
1661 " /\"comp_n\" (JSON object, \"canonical\" ensemble only, option 3)\n" <<
1662 " The mol composition per unitcell \n\n" <<
1664 " /\"A\", /\"B\", ...: (number) \n" <<
1665 " The mol composition per unitcell. The entries provided must \n" <<
1666 " match occupant names in the 'prim.json' file. The values are \n" <<
1667 " summed, normalized, and then converted to parametric composition.\n\n" <<
1669 " /\"comp_n\" (JSON array, \"canonical\" ensemble only, option 4)\n" <<
1670 " The mol composition per unitcell \n\n" <<
1672 " [number, ...] \n" <<
1673 " An array containing the mol composition per unitcell. The \n" <<
1674 " number of entries provided must match the number components. \n" <<
1675 " The values are summed, normalized, and converted to parametric\n" <<
1676 " composition. \n\n" <<
1678 " /\"tolerance\": (number) \n" <<
1679 " Specifies a numerical tolerance for comparing conditions. \n\n" <<
1681 " /\"custom_conditions\":\n" <<
1682 " (JSON array of JSON objects) An array specifying a custom \n" <<
1683 " path of conditions. \n\n" <<
1685 " Restarts: Metropolis Monte Carlo calculations that are stopped \n" <<
1686 " before the entire path has been calculated can be restarted as \n" <<
1687 " long as the conditions of the existing calculations agree with \n" <<
1688 " the conditions specified in the input settings. This means that \n" <<
1689 " the \"final_conditions\" might be changed to increase the length \n" <<
1690 " of a path, or additional \"custom_conditions\" might be added, \n" <<
1691 " but the \"incremental_conditions\" may not be changed. Upon \n" <<
1692 " restart, the results summary file is checked for the last \n" <<
1693 " finished conditions. Then the path is resumed from the next set \n" <<
1694 " of conditions. It is the responsibility of the user to ensure \n" <<
1695 " that other important settings, such as the \"model\" are not \n" <<
1696 " changed inappropriately. \n\n\n" <<
1699 "\"debug\" (bool, default false): \n\n" <<
1701 " If true, will print as much information as possible to assist in \n" <<
1702 " debugging input file settings. \n\n\n";
1705 args.
log <<
"EXAMPLE: Settings for an incremental Metropolis calculation \n" <<
1706 "with increasing temperature in automatic convergence mode.\n";
1707 args.
log <<
"-------\n";
1708 args.
log <<
"{\n \"comment\" : \"This is a sample input file. Unrecognized attributes (like the ones prepended with '_' are ignored.\",\n \"debug\" : false,\n \"ensemble\" : \"grand_canonical\",\n \"method\" : \"metropolis\",\n \"model\" : {\n \"formation_energy\" : \"formation_energy\"\n },\n \"supercell\" : [\n [10, 0, 0],\n [0, 10, 0],\n [0, 0, 10]\n ],\n \"data\" : {\n \"sample_by\" : \"pass\",\n \"sample_period\" : 1,\n \"_N_sample\" : 1000, \n \"_N_pass\" : 1000,\n \"_N_step\" : 1000,\n \"_max_pass\" : 10000,\n \"min_pass\" : 1000,\n \"_max_step\" : 10000,\n \"_max_sample\" : 500,\n \"_min_sample\" : 100,\n \"confidence\" : 0.95,\n \"measurements\" : [ \n { \n \"quantity\" : \"formation_energy\"\n },\n { \n \"quantity\" : \"potential_energy\"\n },\n { \n \"quantity\" : \"atom_frac\"\n },\n { \n \"quantity\" : \"site_frac\"\n },\n { \n \"quantity\" : \"comp\",\n \"precision\" : 1e-3\n },\n { \n \"quantity\" : \"comp_n\"\n }\n ],\n \"storage\" : {\n \"write_observations\" : false,\n \"write_trajectory\" : false,\n \"output_format\" : [\"csv\", \"json\"]\n }\n },\n \"driver\" : {\n \"mode\" : \"incremental\", \n \"motif\" : {\n \"configname\" : \"auto\",\n \"_configname\" : \"SCEL3_3_1_1_0_2_2/0\",\n \"_configdof\" : \"path/to/final_state.json\"\n },\n \"initial_conditions\" : {\n \"param_chem_pot\" : {\n \"a\" : -1.75\n },\n \"temperature\" : 100.0,\n \"tolerance\" : 0.001\n },\n \"final_conditions\" : {\n \"param_chem_pot\" : {\n \"a\" : -1.75\n },\n \"temperature\" : 1000.0,\n \"tolerance\" : 0.001\n },\n \"incremental_conditions\" : {\n \"param_chem_pot\" : {\n \"a\" : 0.0\n },\n \"temperature\" : 10.0,\n \"tolerance\" : 0.001\n }\n }\n}\n";
1709 args.
log <<
"-------\n\n";
1711 args.
log <<
"EXAMPLE: Settings for an custom drive mode LTE1 calculation with\n" <<
1712 "increasing temperature.\n";
1713 args.
log <<
"-------\n";
1714 args.
log <<
"{\n \"comment\" : \"This is a sample input file. Unrecognized attributes (like the ones prepended with '_' are ignored.\",\n \"debug\" : false,\n \"ensemble\" : \"grand_canonical\",\n \"method\" : \"lte1\",\n \"model\" : {\n \"formation_energy\" : \"formation_energy\"\n },\n \"supercell\" : [\n [9, 0, 0],\n [0, 9, 0],\n [0, 0, 9]\n ],\n \"data\" : {\n \"storage\" : {\n \"write_observations\" : false,\n \"write_trajectory\" : false,\n \"output_format\" : [\"csv\", \"json\"]\n }\n },\n \"driver\" : {\n \"mode\" : \"incremental\", \n \"motif\" : {\n \"configname\" : \"auto\",\n \"_configname\" : \"SCEL3_3_1_1_0_2_2/0\",\n \"_configdof\" : \"path/to/final_state.json\"\n },\n \"custom_conditions\" : [\n {\n \"param_chem_pot\" : {\n \"a\" : 0.0\n },\n \"temperature\" : 100.0,\n \"tolerance\" : 0.001\n },\n {\n \"param_chem_pot\" : {\n \"a\" : 0.0\n },\n \"temperature\" : 200.0,\n \"tolerance\" : 0.001\n },\n {\n \"param_chem_pot\" : {\n \"a\" : 0.0\n },\n \"temperature\" : 400.0,\n \"tolerance\" : 0.001\n },\n {\n \"param_chem_pot\" : {\n \"a\" : 0.0\n },\n \"temperature\" : 800.0,\n \"tolerance\" : 0.001\n }\n ]\n }\n}\n";
1715 args.
log <<
"-------\n";
Data structure holding basic CASM command info.
void add_help_suboption()
Add a plain –help suboption.
const po::options_description & desc()
Get the program options, filled with the initialized values.
po::options_description m_desc
Boost program options. All the derived classes have them, but will fill them up themselves.
int format_command(const CommandArgs &args)