27 character(len=LABEL_LEN) :: label =
""
28 class(species_t),
pointer :: species => null()
29 integer,
allocatable :: c(:)
32 real(real64),
allocatable :: f_ii(:)
33 real(real64),
allocatable :: f_vdw(:)
34 real(real64),
allocatable :: f_loc(:)
35 real(real64),
allocatable :: f_nl(:)
36 real(real64),
allocatable :: f_fields(:)
37 real(real64),
allocatable :: f_u(:)
38 real(real64),
allocatable :: f_scf(:)
39 real(real64),
allocatable :: f_nlcc(:)
40 real(real64),
allocatable :: f_photons(:)
43 generic ::
assignment(=) => copy
55 subroutine atom_init(this, dim, label, species)
56 type(atom_t),
intent(out) :: this
57 integer,
intent(in) :: dim
58 character(len=*),
intent(in) :: label
59 class(species_t),
target,
optional,
intent(in) :: species
63 this%label = trim(adjustl(label))
64 this%species => null()
65 if (
present(species)) this%species => species
67 safe_allocate(this%c(1:dim))
70 safe_allocate(this%f_ii(1:dim))
71 safe_allocate(this%f_vdw(1:dim))
72 safe_allocate(this%f_loc(1:dim))
73 safe_allocate(this%f_nl(1:dim))
74 safe_allocate(this%f_fields(1:dim))
75 safe_allocate(this%f_u(1:dim))
76 safe_allocate(this%f_scf(1:dim))
77 safe_allocate(this%f_nlcc(1:dim))
78 safe_allocate(this%f_photons(1:dim))
94 class(atom_t),
intent(out) :: atom_out
95 class(atom_t),
intent(in) :: atom_in
99 atom_out%label = atom_in%label
100 atom_out%species => atom_in%species
102 safe_allocate_source_a(atom_out%c, atom_in%c)
103 safe_allocate_source_a(atom_out%f_ii, atom_in%f_ii)
104 safe_allocate_source_a(atom_out%f_vdw, atom_in%f_vdw)
105 safe_allocate_source_a(atom_out%f_loc, atom_in%f_loc)
106 safe_allocate_source_a(atom_out%f_nl, atom_in%f_nl)
107 safe_allocate_source_a(atom_out%f_fields, atom_in%f_fields)
108 safe_allocate_source_a(atom_out%f_u, atom_in%f_u)
109 safe_allocate_source_a(atom_out%f_scf, atom_in%f_scf)
110 safe_allocate_source_a(atom_out%f_nlcc, atom_in%f_nlcc)
111 safe_allocate_source_a(atom_out%f_photons, atom_in%f_photons)
118 type(atom_t),
intent(inout) :: this
123 this%species => null()
125 safe_deallocate_a(this%c)
127 safe_deallocate_a(this%f_ii)
128 safe_deallocate_a(this%f_vdw)
129 safe_deallocate_a(this%f_loc)
130 safe_deallocate_a(this%f_nl)
131 safe_deallocate_a(this%f_fields)
132 safe_deallocate_a(this%f_u)
133 safe_deallocate_a(this%f_scf)
134 safe_deallocate_a(this%f_nlcc)
135 safe_deallocate_a(this%f_photons)
143 type(atom_t),
intent(in) :: this
145 character(len=len_trim(adjustl(this%label))) :: label
147 label=trim(adjustl(this%label))
153 type(
atom_t),
intent(inout) :: this
154 class(
species_t),
target,
intent(in) :: species
158 this%species => species
165 type(
atom_t),
target,
intent(in) :: this
166 class(
species_t),
pointer,
intent(out) :: species
171 if (
associated(this%species)) species => this%species
177 type(
atom_t),
intent(in) :: this
178 type(
atom_t),
intent(in) :: that
188 type(
atom_t),
intent(in) :: this
199 type(
atom_t),
intent(in) :: atom(:)
205 select type(spec => atom(i)%species)
216 type(
atom_t),
intent(in) :: atom(:)
222 select type(spec => atom(i)%species)
subroutine atom_copy(atom_out, atom_in)
pure logical function, public all_species_are_jellium_slab(atom)
Check if all species are jellium slab.
pure character(len=len_trim(adjustl(this%label))) function, public atom_get_label(this)
subroutine atom_finalize(this)
elemental logical function atom_same_species_aa(this, that)
pure logical function, public any_species_is_jellium_sphere(atom)
Check if any species is a jellium sphere.
elemental logical function atom_same_species_as(this, species)
subroutine, public atom_init(this, dim, label, species)
subroutine, public atom_get_species(this, species)
subroutine, public atom_set_species(this, species)
real(real64), parameter, public m_zero
brief This module defines the class unit_t which is used by the unit_systems_oct_m module.
This module defines the unit system, used for input and output.
An abstract class for species. Derived classes include jellium, all electron, and pseudopotential spe...