25 use,
intrinsic :: iso_fortran_env
50 integer,
public :: ndim
53 integer,
public :: ntype_of_particle
55 integer :: max_particles_per_type
57 integer,
public :: nparticle = 0
59 integer :: ndensities_to_calculate
68 character(80),
allocatable :: labels_particles(:)
70 integer,
allocatable,
public :: particletype(:)
71 integer,
allocatable,
public :: nparticles_per_type(:)
72 integer,
allocatable,
public :: particles_of_type(:,:)
73 integer,
allocatable,
public :: bosonfermion(:)
75 integer,
allocatable :: exchange_symmetry(:,:,:)
77 real(real64),
allocatable :: mass_particle(:)
79 real(real64),
allocatable,
public :: charge_particle(:)
88 character(80),
allocatable :: labels_densities(:)
90 integer,
allocatable :: particle_kept_densities(:)
102 type(modelmb_particle_t),
intent(inout) :: this
103 type(namespace_t),
intent(in) :: namespace
104 class(space_t),
intent(in) :: space
106 integer :: ipart, ncols, nline, itmp, jtmp, ntype
121 call parse_variable(namespace,
'NParticleModelmb', 0, this%nparticle)
123 if (this%nparticle == 0)
then
149 call parse_variable(namespace,
'NTypeParticleModelmb', 1, this%ntype_of_particle)
151 if (this%ntype_of_particle > this%nparticle)
then
152 write (
message(1),
'(2a,2I6)')
' Number of types of modelmb particles should be <= Number of modelmb particles ', &
153 this%ntype_of_particle, this%nparticle
157 if (this%ndim*this%nparticle /= space%dim)
then
158 message(1) =
' Number of modelmb particles * dimension of modelmb space must be = Ndim'
164 ntype = this%ntype_of_particle
165 safe_allocate(this%labels_particles(1:this%nparticle))
166 safe_allocate(this%particletype(1:this%nparticle))
167 safe_allocate(this%mass_particle(1:this%nparticle))
168 safe_allocate(this%charge_particle(1:this%nparticle))
169 safe_allocate(this%bosonfermion(1:this%nparticle))
170 safe_allocate(this%nparticles_per_type(1:ntype))
171 safe_allocate(this%particles_of_type(1:this%nparticle, 1:ntype))
174 this%labels_particles =
'electron'
175 this%particletype = 1
176 this%mass_particle =
m_one
177 this%charge_particle =
m_one
178 this%bosonfermion = 1
207 if (
parse_block(namespace,
'DescribeParticlesModelmb', blk) == 0)
then
216 if (nline /= this%nparticle)
then
220 do ipart = 1, this%nparticle
227 write (
message(1),
'(a,a)')
'labels_particles = ', this%labels_particles(ipart)
228 write (
message(2),
'(a,i6)')
'particletype = ', this%particletype(ipart)
229 write (
message(3),
'(a,E20.10)')
'mass_particle = ', this%mass_particle(ipart)
230 write (
message(4),
'(a,E20.10)')
'charge_particle = ', this%charge_particle(ipart)
231 write (
message(5),
'(a,i6)')
'bosonfermion = ', this%bosonfermion(ipart)
238 this%nparticles_per_type = 0
239 this%particles_of_type = 0
240 do ipart = 1, this%nparticle
241 this%nparticles_per_type(this%particletype(ipart)) = &
242 this%nparticles_per_type(this%particletype(ipart)) + 1
243 this%particles_of_type(this%nparticles_per_type(this%particletype(ipart)), &
244 this%particletype(ipart)) = ipart
247 this%max_particles_per_type = maxval(this%nparticles_per_type)
248 itmp = this%max_particles_per_type
249 jtmp = this%ntype_of_particle
250 safe_allocate(this%exchange_symmetry(1:itmp, 1:itmp, 1:jtmp))
251 this%exchange_symmetry = 0
263 safe_deallocate_a(this%labels_particles)
264 safe_deallocate_a(this%particletype)
265 safe_deallocate_a(this%mass_particle)
266 safe_deallocate_a(this%charge_particle)
267 safe_deallocate_a(this%nparticles_per_type)
268 safe_deallocate_a(this%particles_of_type)
269 safe_deallocate_a(this%exchange_symmetry)
270 safe_deallocate_a(this%bosonfermion)
272 safe_deallocate_a(this%labels_densities)
273 safe_deallocate_a(this%particle_kept_densities)
286 modelmb_out%ndim = modelmb_in%ndim
287 modelmb_out%ntype_of_particle = modelmb_in%ntype_of_particle
288 modelmb_out%max_particles_per_type = modelmb_in%max_particles_per_type
289 modelmb_out%nparticle = modelmb_in%nparticle
290 modelmb_out%ndensities_to_calculate = modelmb_in%ndensities_to_calculate
292 safe_allocate_source_a(modelmb_out%labels_particles,modelmb_in%labels_particles)
293 safe_allocate_source_a(modelmb_out%particletype,modelmb_in%particletype)
294 safe_allocate_source_a(modelmb_out%mass_particle,modelmb_in%mass_particle)
295 safe_allocate_source_a(modelmb_out%charge_particle,modelmb_in%charge_particle)
296 safe_allocate_source_a(modelmb_out%nparticles_per_type,modelmb_in%nparticles_per_type)
297 safe_allocate_source_a(modelmb_out%particles_of_type,modelmb_in%particles_of_type)
298 safe_allocate_source_a(modelmb_out%exchange_symmetry,modelmb_in%exchange_symmetry)
299 safe_allocate_source_a(modelmb_out%bosonfermion,modelmb_in%bosonfermion)
301 safe_allocate_source_a(modelmb_out%labels_densities,modelmb_in%labels_densities)
302 safe_allocate_source_a(modelmb_out%particle_kept_densities,modelmb_in%particle_kept_densities)
310 real(real64),
intent(inout) :: masses(:)
312 real(real64),
parameter :: tol_mass = 1.e-10_real64
313 integer :: dimcounter,ipart
319 do ipart = 1,this%nparticle
320 if (abs(this%mass_particle(ipart)-1.0_real64) > tol_mass)
then
321 masses(dimcounter+1:dimcounter+this%ndim) = this%mass_particle(ipart)
323 dimcounter = dimcounter+this%ndim
Prints out to iunit a message in the form: ["InputVariable" = value] where "InputVariable" is given b...
real(real64), parameter, public m_one
character(len=256), dimension(max_lines), public message
to be output by fatal, warning
subroutine, public messages_fatal(no_lines, only_root_writes, namespace)
subroutine, public messages_input_error(namespace, var, details, row, column)
subroutine, public messages_experimental(name, namespace)
subroutine, public messages_info(no_lines, iunit, debug_only, stress, all_nodes, namespace)
general module for modelmb particles
subroutine, public modelmb_copy_masses(this, masses)
Copy masses for particles. To be used for the derivative object.
subroutine, public modelmb_particles_end(this)
subroutine, public modelmb_particles_init(this, namespace, space)
==============================================================
subroutine, public modelmb_particles_copy(modelmb_out, modelmb_in)
integer function, public parse_block(namespace, name, blk, check_varinfo_)
==============================================================