User Input Parameters
This page provides a comprehensive description of the several parameters a user can play with while creating an initial mesh and performing a quasistatic relaxation.
Lattice Generation
The table below explains the userinput parameters in latticegenerator_parameters.json.
| Variable Name | Functionality | Default |
|---|---|---|
| method | Type of lattice generator to use (see below for possible options) | NanoIndentation |
| lattice_structure | Type of primitive lattice to build (supported values: BCC, FCC, SimpleCubic). Note that non-primitive lattices like HCP and Diamond are just FCC lattices with multiple seed points. | FCC |
| lattice_parameter | Edge length of the unit cell. This information together with lattice_structure is used to initialize appropriate lattice vectors. |
3.615 |
| hcp_c_by_a | The axial ratio to use for building a hexagonal close packed crystal. | 1.632 |
| seed_point_offset_coeffs | Seed points to use for lattice generation (in addition to [0.0,0.0,0.0]). Each entry defines a linear combination of the lattice vectors to obtain the additional seed point. Note that the additional seed points are ignored in coarse-grained regions. |
[[ ]] |
| make_atomistic_domain | Make a fully atomistic region followed by coarse-grained regions. A purely coarse-grained mesh is generated if this parameter is set to false |
true |
| n_coarsening_levels | Number of coarsening levels to add, including the atomistic_domain. Hence, a value of 1 will make just the fully atomistic domain. |
2 |
| atomistic_domain | Maximum Cartesian dimensions of the atomistic domain on each side of the origin. | [7.3,7.3,7.3] |
| coarsening_factors | Coefficients to multiply the atomistic lattice vectors for generating lattice points in coarse-grained regions. The atomic lattice vectors are multiplied by the values in this array to yield coarse-grained lattice vectors. | [1.0,4.0] |
| domain_expansion_factors | Coefficients to determine the bounds of every coarsening level based on the atomistic_domain. |
[15.0, 40.0] |
| rotation | Initial rotation matrix to rotate the generated lattice. Each vector entry corresponds to a row of the rotation matrix | [[1.0,0.0,0.0],[0.0,1.0,0.0],[0.0,0.0,1.0]] |
| lattice_file_name | Relative path to save the lattice file. | "lattice_data" |
| name | path to save the lattice file relative to the directory ./mesh_files |
"mesh_data" |
AQCNES provides three major ways of creating an initial lattice. These correspond to the field method in the table above.
- NanoIndentation This option is used to generate atomistic and/or coarse-grained monocrystalline samples. The following input variables need to be specified for using this option:
"method": {
"$type": "NanoIndentation",
"domain_boundaries": { // specifies the lower and upper bounds of the simulation box
"lower": [
-5000.0,
-5000.0,
-10000.0
],
"upper": [
5000.0,
5000.0,
0.1
]
}
}
Any lattice sites generated outside the lower and upper boundaries of the simulation domain are deleted.
- SymmetricGrainboundaries This option is used to generate atomistic bicrystalline samples. The following input variables need to be specified for using this option:
"method": {
"$type": "SymmetricGrainboundaries",
"overlap_deletion_distance": 1.0, // delete any lattice site that is closer than 1.0 to any another lattice site
"delete_across_boundary": true, // delete close enough lattices as specified above assuming periodic boundaries
"domain_boundaries": { // specifies the lower and upper bounds of the simulation box
"lower": [
-5000.0,
-5000.0,
-10000.0
],
"upper": [
5000.0,
5000.0,
0.1
]
}
}
This lattice generator is used to generate symmetric tilt grain boundaries. Any lattice sites generated outside the lower and upper boundaries of the simulation domain are deleted. The parameters overlap_deletion_distance and delete_across_boundary are used to avoid any two atoms being too close to each other to provide a better initial guess for the geometry.
- ReadCoordinates This option provides the flexibility to generate a mesh of any possible geometry by simply reading the atomic coordinates of a previously generated lattice. The atomic coordinates file must be written in a standard LAMMPS format. The following input variables need to be specified for using this option:
"method": {
"$type": "SymmetricGrainboundaries",
"coordinates_file_name": "path/to/lattice_file"
}
Quasistatic Relaxation
Each sub-header below corresponds to a section of the userinput.json input file.
SimulationSettings
| Variable Name | Functionality | Default |
|---|---|---|
| lattice_file | Path to the lattice file generated in Lattice Generation | " " |
| mesh_file | Path to the mesh file generated in Lattice Generation | " " |
| mesh_overlap_buffer_radius | Buffer padding (in $\AA$) used in addition to the cutoff radius of the interatomic potential while exchanging inter-proc and periodic halo mesh | 1.5 |
| minimum_barycenter_weight | Minimum sampling atom weight of the simplex centroid needed to create a central sampling atom | 1.0 |
| neighbour_update_displacement | Maximum relative distance buildup of a neighbor from its sampling atom (in $\AA$) needed to regenerate the neighborhoods for that particular sampling atom | 0.05 |
| neighbour_update_style | Criterion used to update the sampling atom neighbor lists. Can be set to VERLET or ADAPTIVE | ADAPTIVE |
| node_effective_radius | Radius of a simplex node used to compute the nodal sampling atom weights | 2.5 |
| output_centro_symmetry | Compute and output nodal sampling atom centrosymmetries in vtu files |
true |
| output_initial_partition | Print a vtu file after mesh repair before beginning the quasistatic relaxation |
true |
| quad_type | The order of Gaussian quadrature used to compute phase averaged energy and forces. Possible options are 3 or 5 | 3 |
| remove_previous_neighbours | Delete the previous neighbors after regeneration of sampling atom neighborhood | true |
| verlet_buffer_factor | The coefficient to be multiplied to neighbour_update_displacement to obtain the buffer radius (in $\AA$) used in addition to the cutoff radius of the interatomic potential while gathering sampling atom neighbors |
1.75 |
ThermalSettings
| Variable Name | Functionality | Default |
|---|---|---|
| T_ref | Temperature of the system in Kelvin | 300.0 |
| Phi_ref | Initial position entropy ($\phi = -\log \Sigma$) of the atoms, where $\Sigma = \langle \vert( \boldsymbol{q} - \bar{\boldsymbol{q}} \vert^2 \rangle $ is the position variance of the sampling atoms in $\AA^2$. | 5.545 |
| isentropic | Relaxes the ensemble isentropically if set to 'true', and isothermally if set to 'false' | false |
| T_min | Minimum temperature allowed for any site while isentropic relaxation or heat transport simulations | 0.01 |
| T_max | Maximum temperature allowed for any site while isentropic relaxation or heat transport simulations | 5000.0 |
| heat_rate_tolerance_per_atom (optional) | Maximum heat rate allowed at a sampling atom. Relevant only for heat conduction simulations. | 1.0e-3 |
| onsager_coefficient (optional) | Onsager coefficient used for heat transport from a sampling atom to its neighbors. Relevant only for heat conduction simulations. | 15.926734 |
FIRERelaxation
This section includes the parameters for the optimizer FIRE (fast inertial relaxation engine). The optimum values for all of them have been borrowed from this manuscipt and it is recommended to use the same values.
PETSC
This section includes the parameters for PetSc solvers. Integrating PetSc solvers with FIRE is an ongoing work right now.
SolverTolerances
AQCNES requires the L1 norm of the physical, thermal, and periodic forces to reach below the user-specified tolerances to ensure convergence.
| Variable Name | Functionality | Default |
|---|---|---|
| max_force_per_atom | L1 force tolerance per atom | 5e-05 |
| max_thermal_force_per_atom | L1 thermal tolerance per atom | 5e-05 |
| max_periodic_force_residue_per_atom | L1 periodic force tolerance | 1e-06 |
Note that the max_periodic_force_residue_per_atom is a global quantity and is ignored when simulating a non-periodic domain. |
Periodicity
| Variable Name | Functionality | Default |
|---|---|---|
| a_ref | A reference length (in Angstroms) to update the periodic lengths based on the periodic strains | 3.61 |
| periodicity | Defines whether the domain is periodic or not, along the x, y and z directions respectively. Each entry can either be a null or a struct with three parameters as shown below |
[null,null,null] |
{
"min_coordinate": -14.44, // minimum value of any sampling atom coordinate in the corresponding Cartesian direction
"length": 28.88, // periodic length of the simulation domain in the corresponding Cartesian direction
"relaxation_constraint": false // Allow the periodic length to relax or not (analogous to NPT vs NVT simulations in MD)
}
Multispecies (optional)
AQCNES supports simulating the equilibrium properties of a multi-element system (e.g. a binary alloy) by specifying the following parameters. This section is completely optional and can be skipped if simulating pure species.
| Variable Name | Functionality | Default |
|---|---|---|
| impurity_atomic_masses | An array consisting of the atomic masses of the impurities. This includes vacancies (having a mass of 0.0) and any other alloying solutes. | [0.0] |
| initial_impurity_concentrations | Concentration of solutes to be initialized at every atomic site | [0.0] |
| embedding_interpolation_coeffs | [[1.0]] |
|
Note that if a vacancy needs to be specified together with other solutes, it should always be specified as the first entry of the array impurity_atomic_masses and initial_impurity_concentrations. |
Potentials
AQCNES provides the following options of specifying the inter-atomic potential to be used:
- EAM potentials:
An embedded atom method (EAM) potential can be used simply by specifying the
Potentialssection as shown below.
"Potentials": {
"material": {
"$type": "SetflEAM",
"potential_file_path": "path/to/eam/file",
"potential_material_name": "user_specified_name",
"funcfl_file": false
}
}
Note that the specified file is considered to be of a SETFL format by default. Make sure to specify "funcfl_file": true when using a FUNCFL file format. The potential_material_name is just a user-specified name of material which is appended to output file names.
- MEAM potentials: Modified embedded atom method (MEAM) potentials can be used as shown below.
"Potentials": {
"material": {
"$type": "Meam",
"library_file_path": "path/to/meam_library_file",
"parameter_file_path": "path/to/meam_parameter_file",
"potential_material_name": "user_specified_name",
"species": ["Cu","Al"]
}
}
The library and parameter files need to be specified for the MEAM potential separately. The field species should contain the chemical symbols of the elements present in your simulation. This is used to identify the correct parameters from the library file.
- KIM potential repository: OpenKIM is a repository of interatomic potentials which includes different types of pair, EAM, MEAM, and bond order potentials. Any potential available in this repository can be used in AQCNES by simply specifying the model name as shown below.
"Potentials": {
"material": {
"$type": "Meam",
"atomic_mass": 63.546,
"model_name": "EAM_NN_Johnson_1988_Cu__MO_887933271505_002",
"species": ["Cu"]
}
}
Note that OpenKIM potentials are optimised for molecular dynamics simulations and hence using them can be a bit slow for this framework.
- GNN models: Using all the options specified above is combined with a third or fifth-order Gaussian quadrature for computing phase averaged energies and forces. However, this comes with its own set of limitations which can corrupt the simulation accuracy when dealing with amorphous systems or at higher temperatures (see here for further details). Hence, a GNN model can be used as a surrogate for phase-space averaging by specifying:
"Potentials": {
"material": {
"$type": "Meam",
"model_path": "path/to/trained_GNN_model",
"atomic_mass": 63.546,
"potential_material_name": "user_specified_name"
}
}
Apart from this, some simple potentials have also been hardcoded in the software. These include:
- Extended Finnis Sinclair (EFS) potential for copper
- Yukawa type pair potential for silica
OutputPrintingChoices
| Variable Name | Functionality | Default |
|---|---|---|
| energy_volume | Print the relaxed thermodynamic energies of the entire ensemble in in energy_volume_***.dat. Look here for additional information about the output values. |
true |
| per_atom_info | Print an array of atom-wise relaxed thermodynamic values in per_atom_quantities_***.dat |
false |
| simulation_box_bounds | Print the minimum and maximum bounds of the relaxed domain in simulation_box_bounds_***.dat |
true |
| potential_log | Print the computed energy values for every call to the interatomic potential in potential_log.dat |
false |
| solution_files_frequency (optional) | Relaxed mesh visualization vtu files are dumped in the solution_files directory after every n time steps |
null |
| mid_fire_solution_files_frequency (optional) | Unrelaxed mesh visualization vtu files are dumped in the solution_files directory after every n FIRE iterations |
null |
ConsolePrintingChoices
| Variable Name | Functionality | Default |
|---|---|---|
| relaxation_steps | Print the relaxation metrics for every iteration | true |
| nan_forces | Print the location of the sampling atom and its neighbor if a nan force is detected. The simulation terminates after this operation. |
true |
| halo_mesh_exchange | Print the number of halo nodes and elements exchanged between processors | false |
| regenerated_neighborhoods | Print the total number of nodal, central, inter-proc, and periodic neighborhoods regenerated at any iteration | false |
| neighborhood_and_force_time | Compute and print the time taken by each processor to generate neighborhoods and compute forces | false |
NeighbourDisplays
This section can be used to output additional visualization vtu files for user-specified sampling atoms. This can help visualize atomic neighborhood movements during extreme deformations or near critical material defects. Approximate initial locations of the desired sampling atoms can be specified as an array of arrays as shown below:
"display_neighbourhoods_sampling_atoms": [
[
0.0,
0.0,
0.0
],
[
-5.41,
-7.22,
-5.41
],
[
5.41,
-7.22,
-5.41
]
]
The sampling atoms closest to the specified locations would be tracked along with their neighbors, and their information is dumped in a directory called neighborhoods.