TABLE OF CONTENTS


ABINIT/defs_basis [ Modules ]

[ Top ] [ Modules ]

NAME

 defs_basis

FUNCTION

 This module contains definitions for a number of named constants and
 physical constants, as well as associated datatypes and methods.

COPYRIGHT

 Copyright (C) 2000-2024 ABINIT group (HM, XG,XW, EB)
 This file is distributed under the terms of the
 GNU General Public License, see ~abinit/COPYING
 or http://www.gnu.org/copyleft/gpl.txt .

NOTES

 Of the named constants,
 by far the most important are those that define the 'kind' types of
 virtually all the variables used in a (well-written) FORTRAN 90 code
 the content of this file is derived from 'Numerical Recipes in Fortran 90'
 W.H. Press et al., volume 2 of 'Fortran Numerical Recipes', Cambridge
 University Press, Second Edition (1996), p. 937 and 1361

SOURCE

 25 #if defined HAVE_CONFIG_H
 26 #include "config.h"
 27 #endif
 28 
 29 module defs_basis
 30 
 31 !#ifdef HAVE_FC_ISO_FORTRAN_2008
 32 ! use ISO_FORTRAN_ENV, only : input_unit, output_unit, error_unit
 33 !#endif
 34 
 35  implicit none
 36 
 37 !Keyword 'integer' stands for default integer type
 38 !and may be used whenever integer are presumed to be small
 39 
 40 !nb of bytes related to an integer subtype n such as -10^(argument) < n < 10^(argument) (this is standard F90)
 41  integer, parameter :: i1b=selected_int_kind(2)
 42  integer, parameter :: i2b=selected_int_kind(4)
 43  integer, parameter :: i4b=selected_int_kind(9)
 44  integer, parameter :: i8b=selected_int_kind(18)
 45 
 46 !nb of bytes related to default simple-precision real/complex subtypes
 47 !(= 4 for many machine architectures, = 8 for e.g. Cray)
 48  integer, parameter :: sp=kind(1.0)          ! Single precision should not be used
 49  integer, parameter :: spc=kind((1.0,1.0))
 50 
 51 !nb of bytes related to default double-precision real/complex subtypes
 52 !(= 8 for many machine architectures)
 53  integer, parameter :: dp=kind(1.0d0)
 54  integer, parameter :: dpc=kind((1.0_dp,1.0_dp))  ! Complex should not be used presently
 55                                                   ! except for use of libraries
 56 
 57 !nb of bytes related to GW arrays, that can be tuned from sp to dp independently
 58 !of other variables in ABINIT. Presently single-precision is the default (see config/specs/options.conf)..
 59 #if defined HAVE_GW_DPC
 60  integer, parameter :: gwp=kind(1.0d0)
 61  integer, parameter :: gwpc=kind((1.0_dp,1.0_dp))
 62 
 63 #else
 64  integer, parameter :: gwp=kind(1.0)
 65  integer, parameter :: gwpc=kind((1.0,1.0))
 66 #endif
 67 
 68 !Example:
 69 ! integer, parameter :: urp=selected_real_kind((p=)12,(r=)50)
 70 ! real((kind=)urp) :: d
 71 ! d=5.04876_urp   ! for a real d with 12 significative digits
 72 ! and such as 10^-50 < |d| < 10^50
 73 
 74 !To modify sp/spc and / or dp/dpc, insert instructions such as 'dp='
 75 ! but do not modify the other declarations in this module
 76 
 77 !The default lengths
 78 ! TODO: We should increase fnlen to be able to handle multiple pseudos paths in the input file
 79 ! but it seems that increasing this value triggers bugs in the rest of code because people
 80 ! do not trim input strings and use character(len=500) :: msg
 81 
 82  integer, parameter :: fnlen=264     ! maximum length of file name variables
 83  integer, parameter :: strlen=2000000 ! maximum length of input string
 84 
 85  ! The input file used to run the code, set by parsefile.
 86  ! It will be added to the netcdf files in ntck_open_create
 87  character(len=strlen), save :: INPUT_STRING = ""
 88 
 89  integer, parameter :: md5_slen = 32 ! lenght of strings storing the pseudos' md5 checksum.
 90  character(len=md5_slen),parameter :: md5_none = "None"
 91 
 92 !Some constants:
 93 
 94 ! UNIX unit numbers: standard input, standard output, ab_out, and a number for temporary access to a file.
 95 ! Please, use these named constants instead of write(*,*),
 96 ! it makes the code more readable and easier to change.
 97 
 98 !Default values
 99  !integer, parameter :: std_in = input_unit
100  !integer, parameter :: ab_in = input_unit
101  !integer, parameter :: std_out_default = output_unit
102  !integer, parameter :: ab_out_default=7
103  !integer, parameter :: std_err = error_unit
104  integer, parameter :: std_in=5
105  integer, parameter :: ab_in=5
106  integer, parameter :: std_out_default=6
107  integer, parameter :: ab_out_default=7    ! TODO: This should be initialized at run-time.
108  integer, parameter :: std_err=0
109 
110  integer, parameter :: dev_null=-1       ! Fake unit number used to skip the printing in wrtout.
111  integer, parameter :: ab_xml_out = 50   ! this unit is used to print output into an XML file
112  integer, parameter :: tmp_unit=9,tmp_unit2=10
113 
114 !These vars should be private and only modifiable via an appropriate method (see below)
115  integer, public, save :: ab_out = ab_out_default
116  integer, public, save :: std_out =  std_out_default
117 !It should be put to xmpi_world (but it is not possible for the moment - v6.9)
118  integer, public, save :: abinit_comm_output = -1 !This default value has to be changed at start !!!
119 
120 ! the maximum length of a record in a file connected for sequential access.
121  integer,public,parameter :: ABI_RECL=524288  ! 2**19
122 
123  integer,public,parameter :: MAX_NSHIFTK = 210
124  ! Maximun number of shifts in input k-mesh.
125 
126 !Real dp constants
127  real(dp), parameter :: zero=0._dp
128  real(dp), parameter :: one=1._dp
129  real(dp), parameter :: two=2._dp
130  real(dp), parameter :: three=3._dp
131  real(dp), parameter :: four=4._dp
132  real(dp), parameter :: five=5._dp
133  real(dp), parameter :: six=6._dp
134  real(dp), parameter :: seven=7._dp
135  real(dp), parameter :: eight=8._dp
136  real(dp), parameter :: nine=9._dp
137  real(dp), parameter :: ten=10._dp
138 
139 !Real sp constants
140  real(sp), parameter :: zero_sp=0._sp
141  real(sp), parameter :: one_sp=1._sp
142 
143 !Fractionary real constants
144  real(dp), parameter :: half=0.50_dp
145  real(dp), parameter :: onehalf=1.50_dp
146  real(dp), parameter :: third=one/three
147  real(dp), parameter :: quarter=0.25_dp
148  real(dp), parameter :: fifth=0.20_dp
149  real(dp), parameter :: sixth=one/six
150  real(dp), parameter :: seventh=one/seven
151  real(dp), parameter :: eighth=0.125_dp
152  real(dp), parameter :: ninth=one/nine
153  real(dp), parameter :: two_thirds=two*third
154  real(dp), parameter :: four_thirds=four*third
155  real(dp), parameter :: five_thirds=five*third
156  real(dp), parameter :: three_quarters=0.75_dp
157  real(dp), parameter :: three_fifth=three/five
158 
159 !Real constants related to the golden number
160  real(dp), parameter :: gold=1.618033988749894848204586834365638117720309179_dp
161  real(dp), parameter :: goldenratio=two-gold
162 
163 !Real constants derived from pi
164  real(dp), parameter :: pi=3.141592653589793238462643383279502884197_dp
165  real(dp), parameter :: two_pi=two*pi
166  real(dp), parameter :: four_pi=four*pi
167  real(dp), parameter :: piinv=one/pi
168 !The following are not used
169 !real(dp), parameter :: rad_to_deg=180._dp/pi
170 !real(dp), parameter :: deg_to_rad=one/rad_to_deg
171 !real(dp), parameter :: half_pi=pi*half
172 !real(dp), parameter :: third_pi=pi*third
173 !real(dp), parameter :: quarter_pi=pi*quarter
174 !real(dp), parameter :: two_thirds_pi=two_thirds*pi
175 
176 !Real precision
177  real(dp), parameter :: greatest_real = huge(one)
178  real(dp), parameter :: smallest_real = -greatest_real
179  real(dp), parameter :: tol1= 0.1_dp
180  real(dp), parameter :: tol2= 0.01_dp
181  real(dp), parameter :: tol3= 0.001_dp
182  real(dp), parameter :: tol4= 0.0001_dp
183  real(dp), parameter :: tol5= 0.00001_dp
184  real(dp), parameter :: tol6= 0.000001_dp
185  real(dp), parameter :: tol7= 0.0000001_dp
186  real(dp), parameter :: tol8= 0.00000001_dp
187  real(dp), parameter :: tol9= 0.000000001_dp
188  real(dp), parameter :: tol10=0.0000000001_dp
189  real(dp), parameter :: tol11=0.00000000001_dp
190  real(dp), parameter :: tol12=0.000000000001_dp
191  real(dp), parameter :: tol13=0.0000000000001_dp
192  real(dp), parameter :: tol14=0.00000000000001_dp
193  real(dp), parameter :: tol15=0.000000000000001_dp
194  real(dp), parameter :: tol16=0.0000000000000001_dp
195  real(dp), parameter :: tol17=0.00000000000000010_dp
196  real(dp), parameter :: tol18=0.000000000000000001_dp
197  real(dp), parameter :: tol19=0.0000000000000000001_dp
198  real(dp), parameter :: tol20=0.00000000000000000001_dp
199  real(dp), parameter :: tol30=1.0e-30_dp
200 
201 !real constants derived from sqrt(n.)
202  real(dp), parameter :: sqrt2=1.4142135623730950488016887242096939_dp
203  real(dp), parameter :: half_sqrt2=0.70710678118654752440084436210484697_dp
204  real(dp), parameter :: sqrt3=1.7320508075688772935274463415058739_dp
205  real(dp), parameter :: half_sqrt3=0.86602540378443864676372317075293693_dp
206  real(dp), parameter :: sqrthalf=0.70710678118654752440084436210484697_dp
207 
208 !Conversion factors of common use, not directly related to physical quantities.
209  real(dp), parameter :: b2Mb=one/1024.0_dp**2  ! conversion factor bytes --> Mbytes
210  real(dp), parameter :: b2Gb=b2Mb/1024.0_dp    ! conversion factor bytes --> Gbytes
211 
212  ! This value is used as sentinel to initialize real values that are "undefined" i.e.
213  ! values that cannot be computed or values that do not make any sense in a particular context
214  ! e.g. stress tensor in NSCF calculations. The sentinel is used the yaml routines to print "undef" instead of the
215  ! numerical value.
216  real(dp),parameter :: MAGIC_UNDEF = 9.9999999999D+99
217 
218  ! Max Memory in Mb available for a MPI processor
219  ! This quantity might be used at runtime to determine how to distribute memory.
220  ! The default value (2Gb) can be changed at runtime via the command line interface.
221  real(dp), protected :: mem_per_cpu_mb = two * 1024_dp
222 
223 !Real physical constants
224 !Revised fundamental constants from http://physics.nist.gov/cuu/Constants/index.html
225 !(from 2006 least squares adjustment)
226  real(dp), parameter :: Bohr_Ang=0.52917720859_dp    ! 1 Bohr, in Angstrom
227  real(dp), parameter :: Ang_Bohr = one / Bohr_Ang  ! 1 Angstrom in Bohr
228  real(dp), parameter :: Bohr_meter=Bohr_Ang * 1.d-10 ! 1 Bohr in meter
229  real(dp), parameter :: Bohr_cm=Bohr_meter * 100_dp ! 1 Bohr in cm
230  real(dp), parameter :: Ha_cmm1=219474.6313705_dp  ! 1 Hartree in cm^-1
231  real(dp), parameter :: Ha_eV=27.21138386_dp ! 1 Hartree in eV
232  real(dp), parameter :: eV_Ha=one/Ha_eV      ! 1 eV in Hartree
233  real(dp), parameter :: Ha_meV=Ha_eV*1000_dp ! 1 Hartree in meV
234  real(dp), parameter :: Ha_K=315774.65_dp ! 1Hartree in Kelvin
235  real(dp), parameter :: Ha_THz=6579.683920722_dp ! 1 Hartree in THz
236  real(dp), parameter :: Ha_s=Ha_THz*1e12*two_pi ! 1 Hartree in s
237  real(dp), parameter :: Ha_J=4.35974394d-18    !1 Hartree in J
238  real(dp), parameter :: e_Cb=1.602176487d-19 ! minus the electron charge in Coulomb
239  real(dp), parameter :: kb_HaK=8.617343d-5/Ha_eV ! Boltzmann constant in Ha/K
240  real(dp), parameter :: kb_SI=1.380649d-23  ! Boltzmann constant in Joule/K (CODATA 2017 value.)
241  real(dp), parameter :: kb_THzK=kb_HaK*Ha_THz ! Boltzmann constant in THz/K
242  real(dp), parameter :: amu_emass=1.660538782d-27/9.10938215d-31 ! 1 atomic mass unit in electronic mass
243  real(dp), parameter :: HaBohr3_GPa=Ha_eV/Bohr_Ang**3*e_Cb*1.0d+21 ! 1 Ha/Bohr^3 in GPa
244  real(dp), parameter :: Avogadro=6.02214179d23 ! per mole
245  real(dp), parameter :: Ohmcm=two*pi*Ha_THz*ninth*ten ! 1 Ohm.cm in atomic units
246 !real(dp), parameter :: eps0=8.854187817d-12 ! permittivity of free space in F/m
247  real(dp), parameter :: eps0=one/(four_pi*0.0000001_dp*299792458.0_dp**2)
248  real(dp), parameter :: AmuBohr2_Cm2=e_Cb*1.0d20/(Bohr_Ang*Bohr_Ang)
249  real(dp), parameter :: InvFineStruct=137.035999679_dp  ! Inverse of fine structure constant
250  real(dp), parameter :: FineStructureConstant=0.0072973525664_dp ! 2014 CODATA value
251  real(dp), parameter :: FineStructureConstant2=0.000053251354478_dp ! Square of fine structure constant
252  real(dp), parameter :: Sp_Lt_SI=2.99792458d8 ! speed of light in SI
253  real(dp), parameter :: Sp_Lt=Sp_lt_SI/2.1876912633d6 ! speed of light in atomic units
254  real(dp), parameter :: Time_Sec=2.418884326505D-17 !  Atomic unit of time in seconds
255  real(dp), parameter :: BField_Tesla=4.254383d-6 ! Tesla in a.u.
256  real(dp), parameter :: dipole_moment_debye=0.393430307_dp ! Debye unit in a.u.
257  real(dp), parameter :: siemens_SI=e_Cb**2 / Ha_J / Time_Sec ! Siemens in SI: A/V = C^2 / (J * s)
258  real(dp), parameter :: volt_SI=Ha_J/e_Cb ! Volt in SI: J/C
259 !EB suppress *0.5_dp  ! Atomic unit of induction field (in Tesla) * mu_B (in atomic units).
260  real(dp), parameter :: mu_B_SI=9.274009994D-24   ! Bohr magneton in SI
261  real(dp), parameter :: mu_B = 0.5_dp             ! Bohr magneton in atomic units
262 
263 !Complex constants
264  !double precision
265  complex(dpc), parameter :: czero = (0._dp,0._dp)
266  complex(dpc), parameter :: cone  = (1._dp,0._dp)
267  complex(dpc), parameter :: ctwo  = (2._dp,0._dp)
268  complex(dpc), parameter :: j_dpc = (0._dp,1.0_dp)
269 
270  ! single-precision
271  complex(spc), parameter :: czero_sp = (0._sp,0._sp)
272  complex(spc), parameter :: cone_sp  = (1._sp,0._sp)
273  complex(spc), parameter :: ctwo_sp  = (2._sp,0._sp)
274  complex(spc), parameter :: j_sp     = (0._sp,1.0_sp)
275 
276 !Pauli matrix
277  complex(dpc), parameter :: pauli_mat(2,2,0:3) = reshape([cone,czero,czero,cone, &
278                                                           czero,cone,cone,czero,&
279                                                           czero,j_dpc,-j_dpc,czero,&
280                                                           cone,czero,czero,-cone], [2,2,4])
281 
282 !Character constants
283  character(len=1), parameter :: ch10 = char(10)
284  character(len=fnlen),parameter :: ABI_NOFILE="__None__"
285 
286  ! File used to dump the error message in m_error.
287  ! Extremely useful when we run on many CPUs since logging, in this case, is automatically disabled
288  ! As a consequence, we get error messages in the main log only if the problem is encoutered by the master node!
289  ! Note that the file is removed in xmpi_init (if present).
290  character(len=fnlen),parameter :: ABI_MPIABORTFILE="__ABI_MPIABORTFILE__"
291 
292  ! Error codes used by the bindings.
293  integer, parameter, public :: AB7_NO_ERROR                 =  0
294  integer, parameter, public :: AB7_ERROR_OBJ                =  1
295  integer, parameter, public :: AB7_ERROR_ARG                =  2
296  integer, parameter, public :: AB7_ERROR_INVARS_ATT         =  3
297  integer, parameter, public :: AB7_ERROR_INVARS_ID          =  4
298  integer, parameter, public :: AB7_ERROR_INVARS_SIZE        =  5
299  integer, parameter, public :: AB7_ERROR_SYM_NOT_PRIMITIVE  =  6
300  integer, parameter, public :: AB7_ERROR_SYM_BRAVAIS_XRED   =  7
301  integer, parameter, public :: AB7_ERROR_MIXING_ARG         =  8
302  integer, parameter, public :: AB7_ERROR_MIXING_CONVERGENCE =  9
303  integer, parameter, public :: AB7_ERROR_MIXING_INTERNAL    = 10
304  integer, parameter, public :: AB7_ERROR_MIXING_INC_NNSLOOP = 11
305 
306 ! Values of optdriver corresponding to the different run-levels.
307  integer, parameter, public :: RUNL_GSTATE     = 0
308  integer, parameter, public :: RUNL_RESPFN     = 1
309  integer, parameter, public :: RUNL_SCREENING  = 3
310  integer, parameter, public :: RUNL_SIGMA      = 4
311  integer, parameter, public :: RUNL_NONLINEAR  = 5
312  integer, parameter, public :: RUNL_GWR        = 6
313  integer, parameter, public :: RUNL_EPH        = 7
314  integer, parameter, public :: RUNL_WFK        = 8
315  integer, parameter, public :: RUNL_RTTDDFT    = 9
316  integer, parameter, public :: RUNL_GWLS       = 66
317  integer, parameter, public :: RUNL_BSE        = 99
318  integer, parameter, public :: RUNL_LONGWAVE   = 10
319 
320  ! Integer flags defining the task to be performed in wfk_analyze
321  integer,public,parameter :: WFK_TASK_NONE      = 0
322  integer,public,parameter :: WFK_TASK_FULLBZ    = 1
323  integer,public,parameter :: WFK_TASK_CLASSIFY  = 2
324  integer,public,parameter :: WFK_TASK_PAW_AEPSI = 3
325  integer,public,parameter :: WFK_TASK_EINTERP   = 4
326  integer,public,parameter :: WFK_TASK_DDK       = 5
327  integer,public,parameter :: WFK_TASK_DDK_DIAGO = 6
328  integer,public,parameter :: WFK_TASK_OPTICS_FULLBZ = 7
329  integer,public,parameter :: WFK_TASK_KPTS_ERANGE= 8
330  integer,public,parameter :: WFK_TASK_CHECK_SYMTAB = 9
331 
332 ! Flags defining the method used for performing IO (input variable iomode)
333  integer, parameter, public :: IO_MODE_FORTRAN_MASTER = -1
334  integer, parameter, public :: IO_MODE_FORTRAN        =  0
335  integer, parameter, public :: IO_MODE_MPI            =  1
336  integer, parameter, public :: IO_MODE_NETCDF         =  2 ! Only for legacy code, should not be used for new implementations.
337  integer, parameter, public :: IO_MODE_ETSF           =  3
338 
339 ! FFT libraries (correspond to fftalga = ngfft(7)/100)
340  integer,parameter,public :: FFT_SG     = 1
341  integer,parameter,public :: FFT_FFTW3  = 3
342  integer,parameter,public :: FFT_SG2002 = 4
343  integer,parameter,public :: FFT_DFTI   = 5
344 
345 ! Parameters for non-local algorithm (were previously stored in nloalg(3) and nloalg(4)
346   integer,parameter,public :: NLO_MBLKPW = 199
347   integer,parameter,public :: NLO_MINCAT = 10
348 
349 ! This is used to compute the maximum index of the perturbation as natom + MPERT_MAX
350 ! GA: But this is not actually the maximum perturbation,
351 !     see m_dfpt_loopert
352   integer,parameter,public :: MPERT_MAX = 8
353 
354 ! Parameters for the GPU implementation(s)
355  ! GPU implementation undetermined
356  integer,parameter,public :: ABI_GPU_UNKNOWN  =-1
357  ! Not using any GPU implementation, implies running on CPU
358  integer,parameter,public :: ABI_GPU_DISABLED = 0
359  ! Legacy GPU implementation relying on NVIDIA CUDA kernels, not prefered
360  integer,parameter,public :: ABI_GPU_LEGACY   = 1
361  ! GPU implementation relying on OpenMP v5 "TARGET" construct
362  integer,parameter,public :: ABI_GPU_OPENMP   = 2
363  ! GPU implementation relying on Kokkos + cuda framework
364  integer,parameter,public :: ABI_GPU_KOKKOS   = 3
365  ! Please note that a GPU linalg library supported in gpu_toolbox (ie: CUDA) backs up OpenMP and Kokkos variants.
366 
367 !Parameters for LOG/STATUS files treatment
368 !This variables tell the code if some lines have to be written in a LOG/STATUS file
369  logical, public, save :: do_write_log   =.true.
370  logical, public, save :: do_write_status=.true.
371 ! Max. numbers of CPU core for the writing of LOG/STATUS file for each CPU
372 ! (if more than NPROC_NO_EXTRA_LOG cpu core are used, no *_LOG_Pxxx is written;
373 !  the same for the *_STATUS_Pxxx file)
374  integer, parameter, public :: NPROC_NO_EXTRA_LOG    = 2  !@WC
375  integer, parameter, public :: NPROC_NO_EXTRA_STATUS = 2  !@WC
376 !Name of the file that (if present in current directory)
377 !will avoid creation of LOG/STATUS files
378  character(len=fnlen),parameter :: ABI_NO_LOG_FILE="_NOLOG"
379 !Name of the file that (if present in current directory)
380 !will enforce creation of LOG/STATUS files
381  character(len=fnlen),parameter :: ABI_ENFORCE_LOG_FILE="_LOG"
382 !Name of the file that (if present in current directory)
383 !will enforce creation of LOG file only for master proc
384  character(len=fnlen),parameter :: ABI_MAIN_LOG_FILE="_MAINLOG"
385 
386 ! Arrays
387  integer,parameter :: identity_3d(3,3) = reshape([1,0,0,0,1,0,0,0,1], [3,3])
388  integer,parameter :: inversion_3d(3,3) = reshape([-1,0,0,0,-1,0,0,0,-1], [3,3])
389 
390 !A collection of small datatypes for ragged arrays
391 !A small datatype for ragged real 1D-arrays
392  type coeff1_type
393   real(dp), allocatable :: value(:)
394  end type coeff1_type
395 !A small datatype for ragged integer 1D-arrays
396  type coeffi1_type
397   !integer :: size
398   integer, allocatable :: value(:)
399  end type coeffi1_type
400 !A small datatype for ragged integer 2D-arrays
401  type coeffi2_type
402   integer :: size
403   integer, allocatable :: value(:,:)
404  end type coeffi2_type
405 !A small datatype for ragged real 2D-arrays
406  type coeff2_type
407   real(dp), allocatable :: value(:,:)
408  end type coeff2_type
409 !A small datatype for ragged complex 2D-arrays
410  type coeff2c_type
411   complex(dpc), allocatable :: value(:,:)
412  end type coeff2c_type
413 !A small datatype for ragged real 3D-arrays
414  type coeff3_type
415   real(dp), allocatable :: value(:,:,:)
416  end type coeff3_type
417 !A small datatype for ragged real 4D-arrays
418  type coeff4_type
419   real(dp), allocatable :: value(:,:,:,:)
420  end type coeff4_type
421 !A small datatype for ragged real 5D-arrays
422  type coeff5_type
423   real(dp), allocatable :: value(:,:,:,:,:)
424  end type coeff5_type
425 !A small datatype for ragged real 6D-arrays
426  type coeff6_type
427   real(dp), allocatable :: value(:,:,:,:,:,:)
428  end type coeff6_type
429 !A small datatype for ragged real 7D-arrays.
430  type coeff7_type
431   real(dp), allocatable :: value(:,:,:,:,:,:,:)
432  end type coeff7_type
433 
434 CONTAINS  !==============================================================================

defs_basis/abi_io_redirect [ Functions ]

[ Top ] [ defs_basis ] [ Functions ]

NAME

  abi_io_redirect

FUNCTION

  Redirect unit numbers (and|or) change the MPI communicator for the IO (output and log file).
  This routine can be used in client code (e.g. bigdft)
  that wants to call the abinit routines packed in an external library.

INPUTS

  new_ab_out=new value for output file unit
  new_std_out=new value for standard output unit
  new_io_comm=new value for IO MPI communicator

SOURCE

482 subroutine abi_io_redirect(new_ab_out,new_std_out,new_io_comm)
483 
484 !Arguments ------------------------------------
485  integer,optional,intent(in) :: new_std_out,new_ab_out,new_io_comm
486 
487 !************************************************************************
488 
489  if (PRESENT(new_ab_out))  ab_out  = new_ab_out
490  if (PRESENT(new_std_out)) std_out = new_std_out
491  if (PRESENT(new_io_comm)) abinit_comm_output = new_io_comm
492 
493 end subroutine abi_io_redirect

defs_basis/abi_log_status_state [ Functions ]

[ Top ] [ defs_basis ] [ Functions ]

NAME

  abi_log_status_state

FUNCTION

  Change values of do_write_log and do_write_status flags.
  These flags tell the code to write (or not) a LOG/STATUS file.

INPUTS

  new_do_write_log=new value for do_write_log
  new_do_write_status=new value for do_write_status

SOURCE

451 subroutine abi_log_status_state(new_do_write_log,new_do_write_status)
452 
453 !Arguments ------------------------------------
454  logical,optional,intent(in) :: new_do_write_log,new_do_write_status
455 
456 !************************************************************************
457 
458  if (PRESENT(new_do_write_log))    do_write_log   =new_do_write_log
459  if (PRESENT(new_do_write_status)) do_write_status=new_do_write_status
460 
461 end subroutine abi_log_status_state

defs_basis/print_kinds [ Functions ]

[ Top ] [ defs_basis ] [ Functions ]

NAME

 print_kinds

FUNCTION

 Prints info on the basic data types, e.g. kind, precision...

INPUTS

   unit = Unit number for output file.

SOURCE

510 subroutine print_kinds(unit)
511 
512 !Arguments-------------------------------------
513  integer,optional,intent(in) :: unit
514 
515 !Local variables-------------------------------
516  integer :: my_unt
517 
518 ! *********************************************************************
519 
520  my_unt=std_out; if (PRESENT(unit)) my_unt = unit
521 
522  write(my_unt,'(a)')' DATA TYPE INFORMATION: '
523 
524  write(my_unt,'(a,/,2(a,i6,/),2(a,e16.8e3,/),a,e16.8e3)')&
525    ' REAL:      Data type name: REAL(DP) ',&
526    '            Kind value: ',KIND(0.0_dp),&
527    '            Precision:  ',PRECISION(0.0_dp),&
528    '            Smallest nonnegligible quantity relative to 1: ',EPSILON(0.0_dp),&
529    '            Smallest positive number:                      ',TINY(0.0_dp),&
530    '            Largest representable number:                  ',HUGE(0.0_dp)
531 
532  write(my_unt,'(a,/,2(a,i0,/),a,i0)')&
533    ' INTEGER:   Data type name: INTEGER(default) ', &
534    '            Kind value: ',KIND(0),              &
535    '            Bit size:   ',BIT_SIZE(0),          &
536    '            Largest representable number: ',HUGE(0)
537 
538  write(my_unt,'(a,/,a,i0)')&
539    ' LOGICAL:   Data type name: LOGICAL ',&
540    '            Kind value: ',KIND(.TRUE.)
541 
542  write(my_unt,'(2a,i0)')&
543   ' CHARACTER: Data type name: CHARACTER ',&
544   '            Kind value: ',KIND('C')
545 
546 end subroutine print_kinds

defs_basis/set_mem_per_cpu_mb [ Functions ]

[ Top ] [ defs_basis ] [ Functions ]

NAME

 set_mem_per_cpu_mb

FUNCTION

  Set the value of global variable `mem_per_cpu_mb`

SOURCE

603 subroutine set_mem_per_cpu_mb(mem_mb)
604 
605 !Arguments-------------------------------------
606  real(dp),intent(in) :: mem_mb
607 
608 ! *********************************************************************
609 
610  !print *, "Setting mem_per_cpu_mb to", mem_mb
611  mem_per_cpu_mb = mem_mb
612 
613 end subroutine set_mem_per_cpu_mb

defs_basis/str2wfktask [ Functions ]

[ Top ] [ defs_basis ] [ Functions ]

NAME

  str2wfktask

FUNCTION

  Convert a string into one of the integer flags WFK_TASK_*
  Return WFK_TASK_NONE if string is invalid.

SOURCE

559 integer pure function str2wfktask(str) result(wfk_task)
560 
561 !Arguments ------------------------------------
562  character(len=*),intent(in) :: str
563 
564 !************************************************************************
565 
566  select case (str)
567  case ("wfk_fullbz")
568    wfk_task = WFK_TASK_FULLBZ
569  case ("classify")
570    wfk_task = WFK_TASK_CLASSIFY
571  case ("paw_aepsi")
572    wfk_task = WFK_TASK_PAW_AEPSI
573  case ("wfk_einterp")
574    wfk_task = WFK_TASK_EINTERP
575  case ("wfk_ddk")
576    wfk_task = WFK_TASK_DDK
577  case ("wfk_ddk_diago")
578    wfk_task = WFK_TASK_DDK_DIAGO
579  case ("wfk_kpts_erange")
580    wfk_task = WFK_TASK_KPTS_ERANGE
581  case ("optics_fullbz", "wfk_optics_fullbz")
582    wfk_task = WFK_TASK_OPTICS_FULLBZ
583  case ("check_symtab")
584    wfk_task = WFK_TASK_CHECK_SYMTAB
585  case default
586    wfk_task = WFK_TASK_NONE
587  end select
588 
589 end function str2wfktask