89 LOGICAL,
INTENT(in),
OPTIONAL :: listbased_distribution
90 INTEGER,
DIMENSION(:),
INTENT(in),
OPTIONAL :: n_el
91 INTEGER,
INTENT(in),
OPTIONAL :: n_lists
93 INTEGER :: ilist, my_n_lists
96 IF (
PRESENT(n_el)) my_n_lists =
SIZE(n_el)
97 IF (
PRESENT(n_lists)) my_n_lists = n_lists
99 ALLOCATE (distribution_1d)
101 distribution_1d%ref_count = 1
103 distribution_1d%para_env => para_env
104 CALL para_env%retain()
106 distribution_1d%listbased_distribution = .false.
107 IF (
PRESENT(listbased_distribution))
THEN
108 distribution_1d%listbased_distribution = listbased_distribution
111 ALLOCATE (distribution_1d%n_el(my_n_lists), distribution_1d%list(my_n_lists))
113 IF (
PRESENT(n_el))
THEN
114 distribution_1d%n_el(1:my_n_lists) = n_el(1:my_n_lists)
115 DO ilist = 1, my_n_lists
116 ALLOCATE (distribution_1d%list(ilist)%array(n_el(ilist)))
117 distribution_1d%list(ilist)%array = -1
120 distribution_1d%n_el(1:my_n_lists) = 0
121 DO ilist = 1, my_n_lists
122 NULLIFY (distribution_1d%list(ilist)%array)
152 INTEGER :: ilist, iparticle_kind, iparticle_local, &
153 nparticle_kind, nparticle_local
154 TYPE(local_particle_type),
DIMENSION(:),
POINTER :: local_particle_set
156 IF (
ASSOCIATED(distribution_1d))
THEN
157 cpassert(distribution_1d%ref_count > 0)
158 distribution_1d%ref_count = distribution_1d%ref_count - 1
159 IF (distribution_1d%ref_count == 0)
THEN
160 DEALLOCATE (distribution_1d%n_el)
162 DO ilist = 1,
SIZE(distribution_1d%list)
163 DEALLOCATE (distribution_1d%list(ilist)%array)
165 DEALLOCATE (distribution_1d%list)
169 local_particle_set => distribution_1d%local_particle_set
171 IF (
ASSOCIATED(local_particle_set))
THEN
172 nparticle_kind =
SIZE(local_particle_set)
173 DO iparticle_kind = 1, nparticle_kind
174 IF (
ASSOCIATED(local_particle_set(iparticle_kind)%rng))
THEN
175 nparticle_local =
SIZE(local_particle_set(iparticle_kind)%rng)
176 DO iparticle_local = 1, nparticle_local
177 IF (
ASSOCIATED(local_particle_set(iparticle_kind)% &
178 rng(iparticle_local)%stream))
THEN
179 DEALLOCATE (local_particle_set(iparticle_kind)% &
180 rng(iparticle_local)%stream)
183 DEALLOCATE (local_particle_set(iparticle_kind)%rng)
186 DEALLOCATE (local_particle_set)
191 DEALLOCATE (distribution_1d)