Octopus
epot.F90
Go to the documentation of this file.
1!! Copyright (C) 2002-2006 M. Marques, A. Castro, A. Rubio, G. Bertsch
2!!
3!! This program is free software; you can redistribute it and/or modify
4!! it under the terms of the GNU General Public License as published by
5!! the Free Software Foundation; either version 2, or (at your option)
6!! any later version.
7!!
8!! This program is distributed in the hope that it will be useful,
9!! but WITHOUT ANY WARRANTY; without even the implied warranty of
10!! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11!! GNU General Public License for more details.
12!!
13!! You should have received a copy of the GNU General Public License
14!! along with this program; if not, write to the Free Software
15!! Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
16!! 02110-1301, USA.
17!!
18
19#include "global.h"
20
21module epot_oct_m
22 use debug_oct_m
26 use global_oct_m
27 use grid_oct_m
29 use ions_oct_m
31 use, intrinsic :: iso_fortran_env
34 use mesh_oct_m
36 use mpi_oct_m
39 use parser_oct_m
43 use ps_oct_m
45 use space_oct_m
54 use unit_oct_m
57 use xc_oct_m
58
59 implicit none
60
61 private
62 public :: &
63 epot_t, &
64 epot_init, &
65 epot_end, &
72
73 integer, public, parameter :: &
74 NOREL = 0, &
75 spin_orbit = 1, &
78
79 type epot_t
80 ! Components are public by default
81
82 ! Ions
83 real(real64), allocatable :: vpsl(:)
84 ! !< plus the potential from static electric fields
85 type(projector_t), allocatable :: proj(:)
86 logical :: non_local
87 integer :: natoms
88
89 ! External e-m fields
90 real(real64), allocatable :: e_field(:)
91 real(real64), allocatable :: v_ext(:)
92 real(real64), allocatable :: b_field(:)
93 real(real64), allocatable :: a_static(:,:)
94 integer :: reltype
97 integer :: proj_reltype
98
101 real(real64) :: gyromagnetic_ratio
102
104 real(real64) :: so_strength
105
107 real(real64) :: eii
108 real(real64), allocatable :: fii(:, :)
109 real(real64), allocatable :: vdw_forces(:, :)
110 real(real64), allocatable :: photon_forces(:)
111
113 real(real64) :: vdw_stress(3, 3)
114
115 real(real64), allocatable, private :: local_potential(:,:)
116 logical, private :: local_potential_precalculated
117
118 logical, private :: have_density
119 type(poisson_t), pointer, private :: poisson_solver
120
122 logical, private :: proj_check_done = .false.
123
124 logical :: nlcc = .false.
125 end type epot_t
126
127contains
128
129 ! ---------------------------------------------------------
130 subroutine epot_init(ep, namespace, gr, ions, psolver, ispin, xc_family, kpoints)
131 type(epot_t), intent(out) :: ep
132 type(namespace_t), intent(in) :: namespace
133 type(grid_t), intent(in) :: gr
134 type(ions_t), intent(inout) :: ions
135 type(poisson_t), target, intent(in) :: psolver
136 integer, intent(in) :: ispin
137 integer, intent(in) :: xc_family
138 type(kpoints_t), intent(in) :: kpoints
139
140
141 integer :: ispec, ia
142 integer :: filter
143
144 push_sub(epot_init)
145
146 !%Variable FilterPotentials
147 !%Type integer
148 !%Default filter_ts
149 !%Section Hamiltonian
150 !%Description
151 !% <tt>Octopus</tt> can filter the pseudopotentials so that they no
152 !% longer contain Fourier components larger than the mesh itself. This is
153 !% very useful to decrease the egg-box effect, and so should be used in
154 !% all instances where atoms move (<i>e.g.</i> geometry optimization,
155 !% molecular dynamics, and vibrational modes).
156 !% No filtering is applied to HGH pseudopotentials, as these are already
157 !% smooth, analytical potentials in both real and Fourier space.
158 !%Option filter_none 0
159 !% Do not filter.
160 !%Option filter_TS 2
161 !% The filter of M. Tafipolsky and R. Schmid, <i>J. Chem. Phys.</i> <b>124</b>, 174102 (2006).
162 !%Option filter_BSB 3
163 !% The filter of E. L. Briggs, D. J. Sullivan, and J. Bernholc, <i>Phys. Rev. B</i> <b>54</b>, 14362 (1996).
164 !%End
165 call parse_variable(namespace, 'FilterPotentials', ps_filter_ts, filter)
166 if (.not. varinfo_valid_option('FilterPotentials', filter)) call messages_input_error(namespace, 'FilterPotentials')
167 call messages_print_var_option("FilterPotentials", filter, namespace=namespace)
169 if (family_is_mgga(xc_family) .and. filter /= ps_filter_none) then
170 call messages_not_implemented("FilterPotentials different from filter_none with MGGA", namespace=namespace)
171 end if
172
173 if (filter == ps_filter_ts) call spline_filter_mask_init()
174 do ispec = 1, ions%nspecies
175 call ions%species(ispec)%s%init_potential(namespace, mesh_gcutoff(gr), filter)
176 end do
177
178 safe_allocate(ep%vpsl(1:gr%np))
179
180 ep%vpsl(1:gr%np) = m_zero
182 ! No more "UserDefinedTDPotential" from this version on.
183 call messages_obsolete_variable(namespace, 'UserDefinedTDPotential', 'TDExternalFields')
184
185 call messages_obsolete_variable(namespace, 'ClassicalPotential')
187 !%Variable GyromagneticRatio
188 !%Type float
189 !%Default 2.0023193043768
190 !%Section Hamiltonian
191 !%Description
192 !% The gyromagnetic ratio of the electron. This is of course a physical
193 !% constant, and the default value is the exact one that you should not
194 !% touch, unless:
195 !% (i) You want to disconnect the anomalous Zeeman term in the Hamiltonian
196 !% (then set it to zero; this number only affects that term);
197 !% (ii) You are using an effective Hamiltonian, as is the case when
198 !% you calculate a 2D electron gas, in which case you have an effective
199 !% gyromagnetic factor that depends on the material.
200 !%End
201 call parse_variable(namespace, 'GyromagneticRatio', p_g, ep%gyromagnetic_ratio)
203 !%Variable RelativisticCorrection
204 !%Type integer
205 !%Default non_relativistic
206 !%Section Hamiltonian
207 !%Description
208 !% The default value means that <i>no</i> relativistic correction is used. To
209 !% include spin-orbit coupling turn <tt>RelativisticCorrection</tt> to <tt>spin_orbit</tt>
210 !% (this will only work if <tt>SpinComponents</tt> has been set to <tt>non_collinear</tt>, which ensures
211 !% the use of spinors).
212 !%
213 !% The two ZORA options are meant for all-electron species (see <tt>AllElectronType</tt>).
214 !% For pseudopotentials the relativistic effects are already contained in the pseudopotential
215 !% itself, so <tt>fully_relativistic_zora</tt> is rejected for pseudopotential species and
216 !% <tt>scalar_relativistic_zora</tt> only issues a warning; use <tt>spin_orbit</tt> instead.
217 !%
218 !% Three properties of the ZORA implementation are worth knowing:
219 !%
220 !% <ul>
221 !% <li> The potential <i>V</i> entering the ZORA prefactor <math>c^2/(2mc^2-V)</math> is the
222 !% ionic plus external potential only; the Hartree and exchange-correlation potential are
223 !% <i>not</i> included. This is a deliberate approximation, which makes this ZORA comparable
224 !% to a one-electron X2C rather than to a full ZORA. </li>
225 !% <li> As a consequence the ZORA prefactor carries no spin dependence: it is built from a
226 !% single, spin-independent potential and applied identically to both spin channels. </li>
227 !% <li> The forces receive no contribution from the ZORA terms, and are therefore only
228 !% approximate; a warning is printed if they are requested. The stress tensor is not
229 !% available with ZORA at all. </li>
230 !% </ul>
231 !%Option non_relativistic 0
232 !% No relativistic corrections.
233 !%Option spin_orbit 1
234 !% Spin-orbit, from the j-dependent projectors of a fully-relativistic pseudopotential.
235 !%Option scalar_relativistic_zora 2
236 !% Scalar relativistic ZORA Hamiltonian
237 !%Option fully_relativistic_zora 3
238 !% Fully relativistic spin-orbit ZORA Hamiltonian including SR and SO terms
239 !%End
240 call parse_variable(namespace, 'RelativisticCorrection', norel, ep%reltype)
241 if (.not. varinfo_valid_option('RelativisticCorrection', ep%reltype)) then
242 call messages_input_error(namespace, 'RelativisticCorrection')
243 end if
244 if (ispin /= spinors .and. ( ep%reltype == spin_orbit .or. ep%reltype == fully_relativistic_zora ) ) then
245 message(1) = "The spin-orbit term can only be applied when using spinors."
246 call messages_fatal(1, namespace=namespace)
247 end if
248
249 if((ep%reltype == spin_orbit .or. ep%reltype == fully_relativistic_zora) .and. kpoints%use_symmetries) then
250 call messages_not_implemented("Spin-orbit coupling and k-point symmetries", namespace=namespace)
251 end if
252
253 if (ep%reltype == scalar_relativistic_zora .or. ep%reltype == fully_relativistic_zora) then
254 do ia = 1, ions%nspecies
255 if (.not. ions%species(ia)%s%is_ps()) cycle
256 message(1) = "ZORA is meant for all-electron species, but species '" &
257 //trim(ions%species(ia)%s%get_label())//"' is a pseudopotential,"
258 message(2) = "which already contains the relativistic effects."
259 if (ep%reltype == fully_relativistic_zora) then
260 message(3) = "Use RelativisticCorrection = spin_orbit for pseudopotentials, or an"
261 message(4) = "all-electron species (see AllElectronType) for ZORA."
262 call messages_fatal(4, namespace=namespace)
263 else
264 message(3) = "Scalar relativistic effects will therefore be counted twice."
265 call messages_warning(3, namespace=namespace)
266 end if
267 end do
268 end if
269
272 ep%proj_reltype = norel
273 if (ep%reltype == spin_orbit) ep%proj_reltype = spin_orbit
274
275 call messages_print_var_option("RelativisticCorrection", ep%reltype, namespace=namespace)
276
277 !%Variable SOStrength
278 !%Type float
279 !%Default 1.0
280 !%Section Hamiltonian
281 !%Description
282 !% Tuning of the spin-orbit coupling strength: setting this value to zero turns off spin-orbit terms in
283 !% the Hamiltonian, and setting it to one corresponds to full spin-orbit.
284 !%
285 !% This variable is parsed both for <tt>RelativisticCorrection = spin_orbit</tt> and for
286 !% <tt>fully_relativistic_zora</tt>. In the latter case it scales the ZORA spin-orbit term only,
287 !% so <tt>SOStrength = 0.0</tt> reproduces <tt>scalar_relativistic_zora</tt> exactly. This is
288 !% the cleanest way to separate the scalar-relativistic and the spin-orbit ZORA contributions
289 !% within a single code path.
290 !%End
291 if (ep%reltype == spin_orbit .or. ep%reltype == fully_relativistic_zora) then
292 call parse_variable(namespace, 'SOStrength', m_one, ep%so_strength)
293 else
294 ep%so_strength = m_one
295 end if
296
297 safe_allocate(ep%proj(1:ions%natoms))
298
299 ep%natoms = ions%natoms
300 ep%non_local = .false.
301
302 ep%eii = m_zero
303 safe_allocate(ep%fii(1:ions%space%dim, 1:ions%natoms))
304 ep%fii = m_zero
305
306 safe_allocate(ep%vdw_forces(1:ions%space%dim, 1:ions%natoms))
307 ep%vdw_forces = m_zero
308
309 safe_allocate(ep%photon_forces(1:ions%space%dim))
310 ep%photon_forces = m_zero
311
312 ep%local_potential_precalculated = .false.
313
314
315 ep%have_density = .false.
316 do ia = 1, ions%nspecies
317 if (local_potential_has_density(ions%space, ions%species(ia)%s)) then
318 ep%have_density = .true.
319 exit
320 end if
321 end do
322
323 if (ep%have_density) then
324 ep%poisson_solver => psolver
325 else
326 nullify(ep%poisson_solver)
327 end if
328
329 ! find out if we need non-local core corrections
330 ep%nlcc = .false.
331 do ia = 1, ions%nspecies
332 ep%nlcc = (ep%nlcc .or. ions%species(ia)%s%is_ps_with_nlcc())
333 end do
334
335 pop_sub(epot_init)
336 end subroutine epot_init
337
338 ! ---------------------------------------------------------
339 subroutine epot_end(ep)
340 type(epot_t), intent(inout) :: ep
341
342 integer :: iproj
343
344 push_sub(epot_end)
345
346 if (ep%have_density) then
347 nullify(ep%poisson_solver)
348 end if
349
350 safe_deallocate_a(ep%local_potential)
351 safe_deallocate_a(ep%fii)
352 safe_deallocate_a(ep%vdw_forces)
353 safe_deallocate_a(ep%vpsl)
354 safe_deallocate_a(ep%photon_forces)
355
356 ! the macroscopic fields
357 safe_deallocate_a(ep%e_field)
358 safe_deallocate_a(ep%v_ext)
359 safe_deallocate_a(ep%b_field)
360 safe_deallocate_a(ep%a_static)
361
362 do iproj = 1, ep%natoms
363 if (projector_is_null(ep%proj(iproj))) cycle
364 call projector_end(ep%proj(iproj))
365 end do
366
367 assert(allocated(ep%proj))
368 safe_deallocate_a(ep%proj)
369
370 pop_sub(epot_end)
371
372 end subroutine epot_end
373
374 ! ---------------------------------------------------------
378 subroutine epot_bind_poisson_solver(ep, psolver)
379 type(epot_t), intent(inout) :: ep
380 type(poisson_t), target, intent(in) :: psolver
381
383
384 if (ep%have_density) then
385 ep%poisson_solver => psolver
386 else
387 nullify(ep%poisson_solver)
388 end if
389
391 end subroutine epot_bind_poisson_solver
392
393 ! ---------------------------------------------------------
394 subroutine epot_generate(ep, namespace, mesh, ions, st_d)
395 type(epot_t), intent(inout) :: ep
396 type(namespace_t), intent(in) :: namespace
397 class(mesh_t), target, intent(in) :: mesh
398 type(ions_t), target, intent(inout) :: ions
399 type(states_elec_dim_t), intent(inout) :: st_d
400
401 integer :: ia
402 type(ps_t), pointer :: ps
403 logical, allocatable :: spec_checked(:)
404
405 call profiling_in("EPOT_GENERATE")
406 push_sub(epot_generate)
407
408 ! Local part
409 ep%vpsl = m_zero
410
411 ! we assume that we need to recalculate the ion-ion energy
412 call ion_interaction_calculate(ions%ion_interaction, ions%space, ions%latt, ions%atom, &
413 ions%natoms, ions%pos, mesh%box%bounding_box_l, ep%eii, ep%fii)
414
415 ! the pseudopotential part.
416 do ia = 1, ions%natoms
417 select type(spec=>ions%atom(ia)%species)
418 type is(pseudopotential_t)
419 call projector_end(ep%proj(ia))
420 call projector_init(ep%proj(ia), spec, namespace, st_d%dim, ep%proj_reltype)
421 end select
422 end do
423
424 do ia = ions%atoms_dist%start, ions%atoms_dist%end
425 if (ep%proj(ia)%type == proj_none) cycle
426 select type(spec=>ions%atom(ia)%species)
427 type is(pseudopotential_t)
428 ps => spec%ps
429 call submesh_init(ep%proj(ia)%sphere, ions%space, mesh, ions%latt, ions%pos(:, ia), ps%rc_max)
430 end select
431 end do
432
433 if (ions%atoms_dist%parallel) then
434 do ia = 1, ions%natoms
435 if (ep%proj(ia)%type == proj_none) cycle
436 select type(spec=>ions%atom(ia)%species)
437 type is(pseudopotential_t)
438 ps => spec%ps
439 call submesh_broadcast(ep%proj(ia)%sphere, ions%space, mesh, ions%pos(:, ia), ps%rc_max, &
440 ions%atoms_dist%process(ia), ions%atoms_dist%mpi_grp)
441 end select
442 end do
443 end if
444
445 do ia = 1, ions%natoms
446 select type(spec=>ions%atom(ia)%species)
447 type is(pseudopotential_t)
448 call projector_build(ep%proj(ia), spec, ep%so_strength)
449 if (.not. projector_is(ep%proj(ia), proj_none)) ep%non_local = .true.
450 end select
451 end do
452
453 ! Check once, for one atom of each species, that the projectors are properly
454 ! resolved on the grid, to warn about possible spurious (ghost) states
455 if (.not. ep%proj_check_done) then
456 safe_allocate(spec_checked(1:ions%nspecies))
457 spec_checked = .false.
458 do ia = 1, ions%natoms
459 if (ep%proj(ia)%type == proj_none) cycle
460 if (spec_checked(ions%atom(ia)%species%get_index())) cycle
461 select type(spec=>ions%atom(ia)%species)
462 type is(pseudopotential_t)
463 call projector_check_discretization(spec, ep%proj(ia)%sphere, namespace)
464 spec_checked(ions%atom(ia)%species%get_index()) = .true.
465 end select
466 end do
467 safe_deallocate_a(spec_checked)
468 ep%proj_check_done = .true.
469 end if
470
471 pop_sub(epot_generate)
472 call profiling_out("EPOT_GENERATE")
473 end subroutine epot_generate
474
475 ! ---------------------------------------------------------
476
477 logical pure function local_potential_has_density(space, species) result(has_density)
478 class(space_t), intent(in) :: space
479 class(species_t), intent(in) :: species
480
481 has_density = species%has_density .or. (species%is_ps() .and. space%is_periodic())
482
483 end function local_potential_has_density
484
485 ! ---------------------------------------------------------
486 subroutine epot_local_potential(ep, namespace, space, latt, mesh, species, pos, iatom, vpsl)
487 type(epot_t), intent(in) :: ep
488 type(namespace_t), intent(in) :: namespace
489 class(space_t), intent(in) :: space
490 type(lattice_vectors_t), intent(in) :: latt
491 class(mesh_t), intent(in) :: mesh
492 class(species_t), target, intent(in) :: species
493 real(real64), intent(in) :: pos(1:space%dim)
494 integer, intent(in) :: iatom
495 real(real64), contiguous, intent(inout) :: vpsl(:)
496
497 integer :: ip
498 real(real64) :: radius
499 real(real64), allocatable :: vl(:), rho(:)
500 type(submesh_t) :: sphere
501 type(ps_t), pointer :: ps
502
503 push_sub(epot_local_potential)
504 call profiling_in("EPOT_LOCAL")
505
506 if (ep%local_potential_precalculated) then
507
508 call lalg_axpy(mesh%np, m_one, ep%local_potential(:, iatom), vpsl)
509
510 else
511
512 !Local potential, we can get it by solving the Poisson equation
513 !(for all-electron species or pseudopotentials in periodic
514 !systems) or by applying it directly to the grid
515 safe_allocate(vl(1:mesh%np))
516
517 if (local_potential_has_density(space, species)) then
518 safe_allocate(rho(1:mesh%np))
519
520 call species_get_long_range_density(species, namespace, space, latt, pos, mesh, rho, sphere)
521
522 call dpoisson_solve(ep%poisson_solver, namespace, vl, rho, all_nodes = .false.)
523
524 safe_deallocate_a(rho)
525
526 else
527
528 call species_get_local(species, namespace, space, latt, pos, mesh, vl)
529
530 end if
531
532 call lalg_axpy(mesh%np, m_one, vl, vpsl)
533 safe_deallocate_a(vl)
534
535 !the localized part
536 select type(species)
537 class is(pseudopotential_t)
538
539 ps => species%ps
540
541 radius = min(ps%vl%x_threshold*1.05_real64, spline_range_max(ps%vl))
542 if (.not. submesh_compatible(sphere, radius, pos, minval(mesh%spacing(1:space%dim)))) then
543 call submesh_end(sphere)
544 call submesh_init(sphere, space, mesh, latt, pos, radius)
545 end if
546 safe_allocate(vl(1:sphere%np))
547 vl = m_zero
548
549 do ip = 1, sphere%np
550 if(sphere%r(ip) <= radius) then
551 vl(ip) = spline_eval(ps%vl, sphere%r(ip))
552 end if
553 end do
554
555 call submesh_add_to_mesh(sphere, vl, vpsl)
556
557 safe_deallocate_a(vl)
558 nullify(ps)
559
560 end select
561 call submesh_end(sphere)
562
563 end if
564
565 call profiling_out("EPOT_LOCAL")
566 pop_sub(epot_local_potential)
567 end subroutine epot_local_potential
568
569 ! ---------------------------------------------------------
570 subroutine epot_precalc_local_potential(ep, namespace, gr, ions)
571 type(epot_t), intent(inout) :: ep
572 type(namespace_t), intent(in) :: namespace
573 type(grid_t), intent(in) :: gr
574 type(ions_t), intent(in) :: ions
575
576 integer :: iatom
577
579
580 if (.not. allocated(ep%local_potential)) then
581 safe_allocate(ep%local_potential(1:gr%np, 1:ions%natoms))
582 end if
583
584 ep%local_potential_precalculated = .false.
585
586 do iatom = 1, ions%natoms
587 ep%local_potential(1:gr%np, iatom) = m_zero
588 call epot_local_potential(ep, namespace, ions%space, ions%latt, gr, ions%atom(iatom)%species, &
589 ions%pos(:, iatom), iatom, ep%local_potential(1:gr%np, iatom))!, time)
590 end do
591 ep%local_potential_precalculated = .true.
592
594 end subroutine epot_precalc_local_potential
595
596 ! ---------------------------------------------------------
597
598 logical function epot_have_external_potentials(ep)
599 type(epot_t), intent(in) :: ep
600
602
603 epot_have_external_potentials = allocated(ep%e_field)
604
606
608
609end module epot_oct_m
610
611!! Local Variables:
612!! mode: f90
613!! coding: utf-8
614!! End:
This module calculates the derivatives (gradients, Laplacians, etc.) of a function.
integer, parameter, public spinors
subroutine, public epot_bind_poisson_solver(ep, psolver)
Bind the Poisson solver if the potential manages a density. The Poisson solver pointer is aliased whe...
Definition: epot.F90:474
logical function, public epot_have_external_potentials(ep)
Definition: epot.F90:694
logical pure function, public local_potential_has_density(space, species)
Definition: epot.F90:573
integer, parameter, public spin_orbit
Definition: epot.F90:168
integer, parameter, public scalar_relativistic_zora
Definition: epot.F90:168
subroutine, public epot_end(ep)
Definition: epot.F90:435
integer, parameter, public fully_relativistic_zora
Definition: epot.F90:168
subroutine, public epot_precalc_local_potential(ep, namespace, gr, ions)
Definition: epot.F90:666
subroutine, public epot_local_potential(ep, namespace, space, latt, mesh, species, pos, iatom, vpsl)
Definition: epot.F90:582
subroutine, public epot_init(ep, namespace, gr, ions, psolver, ispin, xc_family, kpoints)
Definition: epot.F90:226
subroutine, public epot_generate(ep, namespace, mesh, ions, st_d)
Definition: epot.F90:490
real(real64), parameter, public p_g
Definition: global.F90:244
real(real64), parameter, public m_zero
Definition: global.F90:200
real(real64), parameter, public m_one
Definition: global.F90:201
This module implements the underlying real-space grid.
Definition: grid.F90:119
subroutine, public ion_interaction_calculate(this, space, latt, atom, natoms, pos, lsize, energy, force, energy_components, force_components)
Top level routine for computing electrostatic energies and forces between ions.
This module defines the meshes, which are used in Octopus.
Definition: mesh.F90:120
real(real64) function, public mesh_gcutoff(mesh)
mesh_gcutoff returns the "natural" band limitation of the grid mesh, in terms of the maximum G vector...
Definition: mesh.F90:451
subroutine, public messages_not_implemented(feature, namespace)
Definition: messages.F90:1068
subroutine, public messages_warning(no_lines, all_nodes, namespace)
Definition: messages.F90:525
subroutine, public messages_obsolete_variable(namespace, name, rep)
Definition: messages.F90:1000
character(len=256), dimension(max_lines), public message
to be output by fatal, warning
Definition: messages.F90:162
subroutine, public messages_fatal(no_lines, only_root_writes, namespace)
Definition: messages.F90:410
subroutine, public messages_input_error(namespace, var, details, row, column)
Definition: messages.F90:691
This module handles the communicators for the various parallelization strategies.
Definition: multicomm.F90:147
subroutine, public profiling_out(label)
Increment out counter and sum up difference between entry and exit time.
Definition: profiling.F90:631
subroutine, public profiling_in(label, exclude)
Increment in counter and save entry time.
Definition: profiling.F90:554
subroutine, public projector_build(p, ps, so_strength)
Definition: projector.F90:348
logical elemental function, public projector_is(p, type)
Definition: projector.F90:211
subroutine, public projector_init(p, pseudo, namespace, dim, reltype)
Definition: projector.F90:218
subroutine, public projector_end(p)
Definition: projector.F90:470
subroutine, public projector_check_discretization(pseudo, sm, namespace)
Check how well the nonlocal projectors are resolved on the real-space grid.
Definition: projector.F90:403
logical elemental function, public projector_is_null(p)
Definition: projector.F90:204
Definition: ps.F90:116
integer, parameter, public ps_filter_ts
Definition: ps.F90:166
integer, parameter, public ps_filter_none
Definition: ps.F90:166
integer, parameter, public proj_none
Definition: ps.F90:171
subroutine, public spline_filter_mask_init()
This module handles spin dimensions of the states and the k-point distribution.
subroutine, public submesh_broadcast(this, space, mesh, center, radius, root, mpi_grp)
Definition: submesh.F90:602
subroutine, public submesh_init(this, space, mesh, latt, center, rc)
Definition: submesh.F90:226
brief This module defines the class unit_t which is used by the unit_systems_oct_m module.
Definition: unit.F90:134
This module defines the unit system, used for input and output.
Definition: xc.F90:120
pure logical function, public family_is_mgga(family, only_collinear)
Is the xc function part of the mGGA family.
Definition: xc.F90:715
Describes mesh distribution to nodes.
Definition: mesh.F90:187
A type storing the information and data about a pseudopotential.
Definition: ps.F90:188
An abstract class for species. Derived classes include jellium, all electron, and pseudopotential spe...
Definition: species.F90:147
class for organizing spins and k-points
int true(void)