TABLE OF CONTENTS
- ABINIT/defs_basis
- defs_basis/abi_io_redirect
- defs_basis/abi_log_status_state
- defs_basis/print_kinds
- defs_basis/set_mem_per_cpu_mb
- defs_basis/str2wfktask
ABINIT/defs_basis [ 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