d_artn_data

namespace d_artn_data

Functions

subroutine destroy_data()

Deallocate the array of the module d_artn_data.

Variables

integer, parameter, private maxlen_fname   =128
integer natoms = -10

Number of atoms, to test coherence in structure between steps.

real(dp), dimension(3, 3) lat

lattice vectors in columns, lat(:,1)=v1, lat(:,2)=v2, lat(:,3)=v3

logical has_error = .false.
integer nevalf
integer, dimension(:), allocatable typ_step

atomic types

real(dp), dimension(:,:), allocatable tau_step

current coordinates (restart)

real(dp), dimension(:,:), allocatable force_step

current force (restart)

real(dp), dimension(:,:), allocatable eigen_step

eigenvector value at current step (updated every step)

real(dp) etot_step   = NAN_REAL

@brief total energy of the current step

real(dp) delr_step   = NAN_REAL

@brief delr of current step

real(dp) eigval_step   = NAN_REAL
integer, dimension(:), allocatable typ_init
real(dp), dimension(:,:), allocatable tau_init

initial coordinates

real(dp), dimension(:,:), allocatable push_init

initial push vector

real(dp) etot_init   = NAN_REAL
real(dp) delr_init   = NAN_REAL
logical has_sad = .false.
real(dp) etot_sad   = NAN_REAL
real(dp) delr_sad   = NAN_REAL
real(dp) eigval_sad   = NAN_REAL
integer nevalf_sad = -NAN_INT

number of force evaluations to reach saddle

integer, dimension(:), allocatable typ_sad
real(dp), dimension(:,:), allocatable tau_sad

coordinates of saddle point

real(dp), dimension(:,:), allocatable eigen_sad

saddle point eigenvector

character(len=maxlen_fname) fname_sad

filename with saddle point (if saved)

logical has_min1 = .false.
real(dp) etot_min1   = NAN_REAL
real(dp) delr_min1   = NAN_REAL
real(dp) eigval_min1   = NAN_REAL
integer nevalf_min1 = -NAN_INT
integer, dimension(:), allocatable typ_min1
real(dp), dimension(:,:), allocatable tau_min1
character(len=maxlen_fname) fname_min1
logical has_min2 = .false.
real(dp) etot_min2   = NAN_REAL
real(dp) delr_min2   = NAN_REAL
real(dp) eigval_min2   = NAN_REAL
integer nevalf_min2 = -NAN_INT
integer, dimension(:), allocatable typ_min2
real(dp), dimension(:,:), allocatable tau_min2
character(len=maxlen_fname) fname_min2
real(dp), dimension(:,:), allocatable tau_nextmin

coordinates of the new minimum

real(dp) etot_final

the total energy of the next minimum along eigenvector

real(dp) de_saddle

change in E from starting point

real(dp) de_back

backward barrier

real(dp) de_fwd

forward barrier

interface artn_list_extract
interface get_data

Generic routine for getting the data group variables. Actual implementation in file: get_data.f90.

Fortran:

! signature:
! subroutine get_data( name, val, ierr )
!
! description:
! name : character(*), name of variable
! val  : the obtained value
! ierr : integer, negative on error, zero otherwise
use d_artn_data, only: get_data
use h_artn_precision, only: dp
integer :: ierr
real(DP), allocatable :: pos_sad(:,:)
call get_data( "tau_sad", pos_sad, ierr )

The C-wrapper:

// signature:
// int get_data( 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_data( "eigval_sad", &c_val );
// read the double value from void *
double eval_sad = *(double *) c_val;

interface save_step_data
interface set_data

Generic function for setting values to the data group of variables. Actual implementation in file: set_data.f90. The returned value ierr has value zero on normal execution, and negative on error.

Fortran:

! signature:
! function set_data( 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_data, only: set_data
integer :: ierr
ierr = set_data( "natoms", 123 )

The C-wrapper has some additional arguments:

// signature:
// int set_data( 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 eval2 = 0.8;
int ierr = set_data( "eigval_min2", 0, 0, &eval2 );