d_artn_params
-
namespace d_artn_params
This module contains the variables accessible from the input, and the runtime variables (flags, counters, push, eigenvec) used in the ARTn plugin.
- Author
Matic Poberznik, Miha Gunde, Nicolas Salles, Antoine Jay
Variables
-
integer verbose = 2
Verbose Level.
-
integer zseed = 0
random number generator seed
-
integer nperp = -1
number of perp-relax iterations to perform
-
integer nevalf_max = NAN_INT
max nr steps. Must be < max_step of the F engine to have an effect
-
integer ninit = 3
number of initial pushes before lanczos start
-
integer neigen = 1
number of steps made with eigenvector before perp relax
-
integer lanczos_max_size = 16
size of the lanczos tridiagonal matrix
-
integer lanczos_min_size = 3
minimal size of lanzos matrix (use with care)
-
integer nsmooth = 0
number of smoothing steps from push to eigenvec
-
integer nnewchance = 0
number of new attemps after loosing eigenvalue
-
integer nrelax_print = 5
print at every nrelax step
-
integer restart_freq = 0
- real(dp) push_dist_thr = def_push_dist_thr
distance threshold for push mode “rad”
- real(dp) delr_thr = def_delr_thr
length Threshold to consider an atomic has moved
- real(dp) push_over = 1.0_DP
EigenVec fraction Push_over the saddle point for the relax.
- real(dp) alpha_mix_cr = def_alpha_mix_cr
Mixing coeff used into convex region.
- real(dp) lanczos_eval_conv_thr = def_lanczos_eval_conv_thr
- real(dp) forc_thr = NAN_REAL
force criterion for the saddle point
- real(dp) eigval_thr = NAN_REAL
threshold for eigenvalue
- real(dp) etot_diff_limit = NAN_REAL
limit for energy difference, if above exit the research
- real(dp) push_step_size = NAN_REAL
step size of inital push in units of positions
- real(dp) push_step_size_per_atom = NAN_REAL
step size of inital push per atom
- real(dp) eigen_step_size = NAN_REAL
max step size for push with eigenvector
- real(dp) current_step_size = NAN_REAL
controls the current size of eigenvector step
- real(dp) lanczos_disp = NAN_REAL
- character(len=5) push_mode = NAN_STR
type of initial push (all , list or rad)
- character(len=255) engine_units = NAN_STR
variable contains the Engine[/units]
- character(len=255) push_guess = NAN_STR
user file where the initial push is defined
- character(len=255) eigenvec_mode = NAN_STR
type of initial eigenvec
- character(len=255) eigenvec_guess = NAN_STR
file where the first vector of lanczos is defined
- character(len=10) struc_format_out = NAN_STR
output format for the configuration
- character(len=255) filin = 'artn.in'
input file
- character(len=255) filout = 'artn.out'
ouput file
- character(len=255) initpfname = 'initp'
prefix for initial push file
- character(len=255) eigenfname = 'latest_eigenvec'
prefix for latest eigenvector file
- character(len=255) restartfname = 'artn.restart'
restart file
- character(len=255) prefix_min = 'min'
prefix fore minimum configuration file
- character(len=255) prefix_sad = 'sad'
prefix fore saddle configuration file
- character(:), allocatable converge_property
way to compute the force convergence (MAXVAL or NORM)
-
logical lmove_nextmin =
.false. move the structure to further minimum after finish
-
logical lnperp_limitation =
.true. Constrain on the nperp-relax above the inflection point.
-
logical lrestart =
.false. restart calculation by reading artn.restart
-
logical lpush_final =
.false. push to adjacent minimum
-
logical lanczos_always_random =
.false. always start lanczos with random vector
-
logical lanczos_at_min =
.false. Do lanczos when the new minima are reached to check EV.
-
logical lserialize_output =
.false. flag if we are in serialize data mode
- integer, dimension(:), allocatable nperp_limitation
array of nperp values
- integer, dimension(:), allocatable push_ids
IDs of atoms to be pushed.
- real(dp), dimension(:,:), allocatable push_add_const
constraints on initial push
- real(dp), dimension(:,:), allocatable push
initial push vector
- real(dp), dimension(:,:), allocatable eigenvec
lanczos eigenvector
- character(len=3), dimension(:), allocatable elements
element names (needed if xsf)
- character(len=255) artn_resume
variable store the 2 minimum and saddle point configuration file
- integer, parameter void = 1
- integer, parameter init = 2
- integer, parameter perp = 3
- integer, parameter eign = 4
- integer, parameter lanc = 5
- integer, parameter relx = 6
- integer, parameter over = 7
- integer, parameter smth = 8
- integer, parameter rset = 9
- character(len=4), dimension(9) str_move
-
integer current_disp_code = VOID
save the
disp_codeof current call
-
logical linit
initial push OF THE MACROSTEP
-
logical lperp
perpendicular relax
-
logical leigen
push with lanczos eigenvector
-
logical llanczos
lanczos algorithm
-
logical lbasin
true while in basin
-
logical lpush_over
saddle point obtained
-
logical lrelax
start the relaxation to adjacent minima from the saddle point
-
logical in_lanczos_at_min
Set to true when lanczos loop is the one done at min.
-
logical lbackward =
.true. start relax from SP in backward sense
-
logical lend =
.false. turn the flag to true when artn finishes, to know if we re-enter
-
integer iartn
counter of current ARTn macro step
-
integer istep
counter of current step
-
integer iinit
counter of pushes made with initial push, before Lanczos
-
integer iperp
number of steps in perpendicular relaxation
-
integer ieigen
counter of pushes made with eigenvector
-
integer irelax
counter of relaxation steps
-
integer iover
number of push_over step
-
integer inewchance
number of new attemps after loosing eigenvalue
-
integer ismooth
counter of current smoothing step
-
integer nlanc
number of lanczos iterations (after lanczos converge)
-
integer ifound = 0
Number of saddle point found (only used in write_header_report)
-
integer isearch = 0
Number of saddle point research, initialise here, implicit save!
-
integer ifails = 0
number of failures, initialize in setup_artn
-
integer nperp_step
nperp_limitation step
-
integer nmin
count the number of minimum found
-
integer nsaddle
count the number of saddle point found
- real(dp), dimension(:,:), allocatable delr_vec
displacement vector
- real(dp), dimension(:,:), allocatable push_initial_vector
copy of the initial push
-
logical luser_choose_per_atom
Flag to distinguish the 2 push_step_size definition.
-
integer fpush_factor
internal factor for the final push direction
- character(:), dimension(:), allocatable words
Use for parser : remove the worning.
-
logical lserialize_input
flag if we are in serialize data mode
- character(*), parameter serial_input_fname ="artn_serial_input"
-
integer called_from = CALLER_IS_ENGINE
-
interface check_d_artn_params
-
interface fill_param_step
-
interface get_param
Generic routine for getting the
paramgroup variables. Actual implementation in file: get_param.f90.Fortran:
! signature: ! subroutine get_param( name, val, ierr ) ! ! description: ! name : character(*), name of variable ! val : the obtained value ! ierr : integer, negative on error, zero otherwise use d_artn_params, only: get_param integer :: ierr integer, allocatable :: p_id(:) call get_param( "push_ids", p_id, ierr )
The C-wrapper:
// signature: // int get_param ( const char *name, void* val ); // // description: // name : string of variable name // val : void ptr to obtained data #include artn.h void *c_val; int ierr = get_param( "forc_thr", &c_val ); // read the double value from void * double forc_thr = *(double *) c_val;
-
interface get_runparam
Generic routine for getting the
runparamgroup variables. Actual implementation in file: get_runparam.f90.Fortran:
! signature: ! subroutine get_runparam( name, val, ierr ) ! ! description: ! name : character(*), name of variable ! val : the obtained value ! ierr : integer, negative on error, zero otherwise use d_artn_params, only: get_runparam integer :: ierr character, allocatable :: errmsg call get_runparam( "errmsg", errmsg, ierr )
The C-wrapper:
// signature: // int get_runparam ( const char *name, void* val ); // // description: // name : string of variable name // val : void ptr to obtained data #include artn.h // obtain data on current eigenvec value; the memory is allocated in pARTn // the 2D array of ARTn is reshaped into contiguous 1D array. void *c_val; int ierr = get_runparam( "eigenvec", &c_val ); // read double* value from void * double * eigvec1d = (double *) c_val; // reshape into 2D vec if needed. // get drank, dsize, use that to help in reshaping (artn_get_drank, artn_get_dsize) // NOTE: the size of C-array needs to be transposed free(c_val);
-
interface set_param
Generic function for setting values to the
paramgroup of variables. Actual implementation in file: set_param.f90. The returned valueierrhas value zero on normal execution, and negative on error.Fortran:
! signature: ! function set_param( name, val ) result( ierr ) ! ! description: ! name : character(*), name of variable ! val : the value to set ! ierr : integer, negative on error, zero otherwise use d_artn_params, only: set_param integer :: ierr ierr = set_param( "nperp_limitation", [6,10,14,18,-1] )
The C-wrapper has some additional arguments:
// signature: // int set_param( const char * const name, const int rank, const int* size, const void *val ); // // description: // name : string of variable name // rank : rank of data in `val` // size : array of size `rank`, each element is size of `val` on each dimension // val : ptr to data #include artn.h double f_thr = 0.01; int ierr = set_param( "forc_thr", 0, 0, &f_thr );
-
interface set_runparam
Generic function for setting values to the
runparamgroup of variables. Actual implementation in file: set_runparam.f90. The returned valueierrhas value zero on normal execution, and negative on error.Fortran:
! signature: ! function set_runparam( name, val ) result( ierr ) ! ! description: ! name : character(*), name of variable ! val : the value to set ! ierr : integer, negative on error, zero otherwise use d_artn_params, only: set_runparam integer :: ierr ierr = set_runparam( "llanczos", .true. )
The C-wrapper has some additional arguments:
// signature: // int set_runparam( const char * const name, const int rank, const int* size, const void *val ); // // description: // name : string of variable name // rank : rank of data in `val` // size : array of size `rank`, each element is size of `val` on each dimension // val : ptr to data #include artn.h int istep = 4; int ierr = set_runparam( "istep", 0, 0, &istep );