The md_npt_constrains function

md_npt_constrains

Performs molecular dynamics in a npt ensemble holding the indicated constraints.

md_npt_constrains (latvec_in,xred_in, x_t_dot_in,fcart_in,strten_in,
                                        vel_in,vel_lat_in, bond_valu, angl_valu, cell_para_valu,
                                        cell_angl_valu, volu_valu, atom_fix_valu, atom_fix_cord,
                                        target_pressure_habohr, amu, Qmass, bmass, dtion_md,
                                        temp, s_in, s_in_dot, bond_const,angl_const,
                                        cell_para_const, cell_angl_const,atom_fix_const,
                                        correc_steps, md_steps,bool_bond_cons,bool_angl_cons,
                                        bool_cell_para_cons, bool_cell_angl_cons,bool_volu,
                                        bool_atom_fix_cons, volu_cons, nat, numb_cell_angl_cons,
                                        numb_cell_para_cons, numb_angl_cons, numb_bond_cons,
                                        numb_atom_fix_cons, s_out, s_out_dot, pressure_out,
                                        volu_out, bond_constrain_out, cos_constrain_out,
                                        h_out,  h_dot_out, x_out, x_dot_out, v_out)

The input parameters for md_npt_constrains

latvec_in real(8), dimension (3,3) lattice vectors given in a matrix where every column of the matrix correspond to a lattice vector.

xred_in real(8), dimension (3, nat), matrix with the current reduced positions of the atoms in the system.

x_t_dot_in real(8), dimension (3, nat), matrix with the current derivative of the reduced positions of the atoms in the system.

fcart_in real(8), dimension (3, nat), matrix with the current cartesian (not reduced) forces over the atoms in the system.

strten_in real(8), dimension (6), cartesian components of the stress tensor.

vel_in real(8), dimension (3, nat), matrix with the current velocities of the atoms in the system, initialize with subroutine init_vel_atoms.

vel_lat_in real(8), dimension (3, 3), matrix with the current velocities of the lattice, initialize with subroutine init_vel_lattice. bond_valu real(8), dimension (numb_bond_cons), array with the values of the bond constraints. For example if you use 2 bond constraints between atoms (1,2) and (4,6), then the first value in **bond_valu** will be the value of the constraint enforced between atoms (1,2). In the case of no bond constraints then bond_valu must have at least one value.

angl_valu real(8), dimension (numb_angl_cons), array with the values of the angle constraints. For example if you use 2 angle constraints between atoms (1,2,3), and (6,7,8), then the first value in **angl_valy** will be the value of the constraint enforced between atoms (1,2,3). In the case of no angle constraints then angl_valu must have at least one value.

cell_para_valu real(8), dimension (numb_cell_para_cons), array with the values of the constraints over the lengths of the cell parameters. In the case of no cell parameter constraints then cell_para_valu must have at least one value.

cell_angl_valu real(8), dimension (numb_angl_cons), with the values of the constraints over the angles of the cell vectors. In the case of no cell angles constraints then cell_angl_valu must have at least one value.

volu_valu real(8), dimension (volu_cons), with the value of the of the constraint over the volume. In the case of no volume constraints then volu_valu must have at least one value.

atom_fix_valu real(8), dimension (numb_atom_fix_cons,3) coordinates of positions where the atoms are to be fixed. For example if you want to fix atom 1 to [0.0, 0.0, 0.0] and atom 2 to [1.0, 1.0, 1.0], then :: atom_fix_valu -> [[0.0, 0.0, 0.0], [1.0, 1.0, 1.0] ].

In the case of no atom fix constraints then atom_fix_valu must have at least one value [[0.0, 0.0, 0.0]].

atom_fix_cord real(8), dimension (numb_atom_fix_cons,3) Allow for fixing the atoms to a given set of the (x,y,z) coordinates, this can be done by setting a 1 in the coordinate where the constraint is going to be activated and a 0 where there is not going to be a constraint, for instance, if you want the atoms declared in atom_fixed_constrains to be held at the positions given at atom_fixed_position then atom_fix_coordinate must be declared:

atom_fix_cord ->  [[1.0, 1.0, 1.0] , [1.0, 1.0, 1.0] ]

But if for example, you want to fix the atom 1 to 0.00 only in the x coordinate, and fix the atom 2 to y= 1.0, then use:

atom_fix_cord ->  [[1.0, 0.0, 0.0] , [0.0, 1.0, 0.0] ]

In the case of no atom fix constraints then atom_fix_cord must have at least one value [[0.0, 0.0, 0.0]].

target_pressure_habohr real(8) External pressure over the structure.

amu real(8) dimension (nat) array with the atomic mass of the atoms in the structure

Qmass real(8) mass of the thermostat.

bmass real(8) mass of the barostat.

dtion_md real(8) value of the time differential for integration the unit of time is the femtosecond, we don’t recommend using a dt bigger than 0.1 which would be equivalent to 0.1femtoseconds.

temp real(8) value of the temperature.

s_in real(8) thermostat degree of freedom at current time.

s_in_dot real(8) derivative of thermostat degree of freedom at current time.

bond_const integer, dimension (numb_bond_cons,2), array indicating the atoms in the bond constraints, for example, to indicate 2 constraints, one between atoms (1,2), and other between atoms (3,5):

bond_const -> [[1,2],[3,5]]

In the case of no having bond constraints then use bond_const -> [[1]]

angl_const integer, dimension (numb_angl_cons,3), array indicating the atoms in the bond constraints, for example, to indicate 2 constraints, one between atoms (1,2,3), and other between atoms (5,6,7):

angl_const -> [[1,2,3],[5,6,7]]

The first atom in the array of 3 is the atom taken as the vertex of the angle. In the case of no having angle constraints then use angl_const -> [[1,1,1]]

cell_para_const integer, dimension (numb_cell_para_cons,1), array indicating the cell parameters to be constraint, for example, to indicate that the length of cell vectors 1 and 2 are going to be constraint use:

cell_para_const -> [[1],[2]]

In the case of no having cell parameter constraints then use cell_para_const -> [[1]]

cell_angl_const integer, dimension (numb_cell_angl_cons,2), array indicating the cell angles to be constraint, for example, to indicate that the angle between the cell vectors (1,2), and (1,3) are going to be constraint use:

cell_angl_const -> [[1,2],[1,3]]

In the case of no having angle constraints then use cell_angl_const -> [[1,1]]

atom_fix_const integer, dimension (numb_atom_fix_cons,1), array with the list of atoms to be constraint to a given position, for example, to indicate that the atoms 1 and 2 are going to be constraint use:

atom_fix_const -> [[1],[2]]

In the case of no having atoms positions constraints then use atom_fix_const -> [[1]]

correc_steps number of steps for the predictor-corrector algorithm that performs the integration of the equations of motion.

md_steps number of md steps to be performed with the given input forces as forces guiding the dynamics.

bool_bond_cons integer, 1 if there are bond constraints, 0 otherwise.

bool_angl_cons integer, 1 if there are angle constraints, 0 otherwise.

bool_cell_para_cons integer, 1 if there are cell parameter constraints, 0 otherwise.

bool_cell_angl_cons integer, 1 if there are cell angle constraints, 0 otherwise.

bool_volu integer, 1 if there is volume constraints, 0 otherwise.

bool_atom_fix_cons integer, 1 if there are atom positions constraints, 0 otherwise.

volu_cons integer, it is just 1, it has a purpose in the mdwc_ python script but not when using the fortran library.

nat integer, number of atoms in the system.

numb_cell_angl_cons integer, number of cell angle constraints, if there are no cell angle constraints use numb_cell_angl_cons -> 1. numb_cell_para_cons integer, number of cell parameters constraints, if there are no cell parameters constraints use numb_cell_para_cons -> 1.

numb_angl_cons integer, number of angles constraints, if there are no angles constraints use numb_angl_cons -> 1.

numb_bond_cons integer, number of bond constraints, if there are no bond constraints use numb_bond_cons -> 1.

numb_atom_fix_cons integer, number of atom positions constraints, if there are no atom positions constraints use numb_bond_cons -> 1.

The output parameters for md_npt_constrains

s_out real(8) thermostat degree of freedom at the output time.

s_out_dot real(8) derivative of the thermostat degree of freedom at the output time.

pressure_out real(8) dimension (md_steps), array with the value of the pressure during the md_steps.

volu_out real(8) dimension (md_steps), array with the value of the volume during the md_steps.

bond_constrain_out real(8) dimension (md_steps, numb_bond_cons), array with the value of the bond constraints during the md_steps.

cos_constrain_out real(8) dimension (md_steps, numb_angl_cons), array with the value of the cosine of the angle constraints during the md_steps.

h_out real(8) dimensions (3,3) matrix with the output lattice (cell) vectors as columns in the matrix after md_steps.

h_dot_out real(8) dimensions (3,3) matrix with the output derivative of lattice (cell) vectors as columns in the matrix after md_steps.

x_out real(8) dimensions (3, nat), reduced positions of the atoms in the cell after md_steps.

x_dot_out real(8) dimensions (3, nat), derivative of the reduced positions of the atoms in the cell after md_steps.

v_out real(8) dimensions (3, nat), velocity of the atoms in the cell after md_steps.