26#include "../base/base_uses.f90"
31 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'cp_result_methods'
40 MODULE PROCEDURE put_result_r1, put_result_r2
44 MODULE PROCEDURE get_result_r1, get_result_r2, get_nreps
59 SUBROUTINE put_result_r1(results, description, values)
61 CHARACTER(LEN=default_string_length),
INTENT(IN) :: description
62 REAL(KIND=
dp),
DIMENSION(:),
INTENT(IN) :: values
64 INTEGER :: isize, jsize
67 cpassert(
ASSOCIATED(results))
68 cpassert(description(1:1) ==
'[')
69 check =
SIZE(results%result_label) ==
SIZE(results%result_value)
71 isize =
SIZE(results%result_label)
74 CALL reallocate(results%result_label, 1, isize + 1)
77 results%result_label(isize + 1) = description
79 results%result_value(isize + 1)%value%real_type = values
81 END SUBROUTINE put_result_r1
93 SUBROUTINE put_result_r2(results, description, values)
95 CHARACTER(LEN=default_string_length),
INTENT(IN) :: description
96 REAL(KIND=
dp),
DIMENSION(:, :),
INTENT(IN) :: values
98 INTEGER :: isize, jsize
101 cpassert(
ASSOCIATED(results))
102 cpassert(description(1:1) ==
'[')
103 check =
SIZE(results%result_label) ==
SIZE(results%result_value)
105 isize =
SIZE(results%result_label)
106 jsize =
SIZE(values, 1)*
SIZE(values, 2)
108 CALL reallocate(results%result_label, 1, isize + 1)
111 results%result_label(isize + 1) = description
113 results%result_value(isize + 1)%value%real_type = reshape(values, [jsize])
115 END SUBROUTINE put_result_r2
128 CHARACTER(LEN=default_string_length),
INTENT(IN) :: description
133 cpassert(
ASSOCIATED(results))
134 nlist =
SIZE(results%result_value)
137 IF (trim(results%result_label(i)) == trim(description))
THEN
159 SUBROUTINE get_result_r1(results, description, values, nval, n_rep, n_entries)
161 CHARACTER(LEN=default_string_length),
INTENT(IN) :: description
162 REAL(KIND=
dp),
DIMENSION(:),
INTENT(OUT) :: values
163 INTEGER,
INTENT(IN),
OPTIONAL :: nval
164 INTEGER,
INTENT(OUT),
OPTIONAL :: n_rep, n_entries
166 INTEGER :: i, k, nlist, nrep, size_res, size_values
168 cpassert(
ASSOCIATED(results))
169 nlist =
SIZE(results%result_value)
170 cpassert(description(1:1) ==
'[')
171 cpassert(
SIZE(results%result_label) == nlist)
174 IF (trim(results%result_label(i)) == trim(description)) nrep = nrep + 1
177 IF (
PRESENT(n_rep))
THEN
182 CALL cp_abort(__location__, &
183 " Trying to access result ("//trim(description)//
") which was never stored!")
186 IF (trim(results%result_label(i)) == trim(description))
THEN
188 cpabort(
"Attempt to retrieve a RESULT which is not a REAL!")
190 size_res =
SIZE(results%result_value(i)%value%real_type)
194 IF (
PRESENT(n_entries)) n_entries = size_res
195 size_values =
SIZE(values, 1)
196 IF (
PRESENT(nval))
THEN
197 cpassert(size_res == size_values)
199 cpassert(nrep*size_res == size_values)
203 IF (trim(results%result_label(i)) == trim(description))
THEN
205 IF (
PRESENT(nval))
THEN
207 values = results%result_value(i)%value%real_type
211 values((k - 1)*size_res + 1:k*size_res) = results%result_value(i)%value%real_type
216 END SUBROUTINE get_result_r1
232 SUBROUTINE get_result_r2(results, description, values, nval, n_rep, n_entries)
234 CHARACTER(LEN=default_string_length),
INTENT(IN) :: description
235 REAL(KIND=
dp),
DIMENSION(:, :),
INTENT(OUT) :: values
236 INTEGER,
INTENT(IN),
OPTIONAL :: nval
237 INTEGER,
INTENT(OUT),
OPTIONAL :: n_rep, n_entries
239 INTEGER :: i, k, nlist, nrep, size_res, size_values
241 cpassert(
ASSOCIATED(results))
242 nlist =
SIZE(results%result_value)
243 cpassert(description(1:1) ==
'[')
244 cpassert(
SIZE(results%result_label) == nlist)
247 IF (trim(results%result_label(i)) == trim(description)) nrep = nrep + 1
250 IF (
PRESENT(n_rep))
THEN
255 CALL cp_abort(__location__, &
256 " Trying to access result ("//trim(description)//
") which was never stored!")
259 IF (trim(results%result_label(i)) == trim(description))
THEN
261 cpabort(
"Attempt to retrieve a RESULT which is not a REAL!")
263 size_res =
SIZE(results%result_value(i)%value%real_type)
267 IF (
PRESENT(n_entries)) n_entries = size_res
268 size_values =
SIZE(values, 1)*
SIZE(values, 2)
269 IF (
PRESENT(nval))
THEN
270 cpassert(size_res == size_values)
272 cpassert(nrep*size_res == size_values)
276 IF (trim(results%result_label(i)) == trim(description))
THEN
278 IF (
PRESENT(nval))
THEN
280 values = reshape(results%result_value(i)%value%real_type, [
SIZE(values, 1),
SIZE(values, 2)])
284 values((k - 1)*size_res + 1:k*size_res, :) = reshape(results%result_value(i)%value%real_type, &
285 [
SIZE(values, 1),
SIZE(values, 2)])
290 END SUBROUTINE get_result_r2
304 SUBROUTINE get_nreps(results, description, n_rep, n_entries, type_in_use)
306 CHARACTER(LEN=default_string_length),
INTENT(IN) :: description
307 INTEGER,
INTENT(OUT),
OPTIONAL :: n_rep, n_entries, type_in_use
311 cpassert(
ASSOCIATED(results))
312 nlist =
SIZE(results%result_value)
313 cpassert(description(1:1) ==
'[')
314 cpassert(
SIZE(results%result_label) == nlist)
315 IF (
PRESENT(n_rep))
THEN
318 IF (trim(results%result_label(i)) == trim(description)) n_rep = n_rep + 1
321 IF (
PRESENT(n_entries))
THEN
324 IF (trim(results%result_label(i)) == trim(description))
THEN
325 SELECT CASE (results%result_value(i)%value%type_in_use)
327 n_entries = n_entries +
SIZE(results%result_value(i)%value%real_type)
329 n_entries = n_entries +
SIZE(results%result_value(i)%value%integer_type)
331 n_entries = n_entries +
SIZE(results%result_value(i)%value%logical_type)
333 cpabort(
"Type not implemented in cp_result_type")
339 IF (
PRESENT(type_in_use))
THEN
341 IF (trim(results%result_label(i)) == trim(description))
THEN
342 type_in_use = results%result_value(i)%value%type_in_use
347 END SUBROUTINE get_nreps
362 CHARACTER(LEN=default_string_length),
INTENT(IN), &
363 OPTIONAL :: description
364 INTEGER,
INTENT(IN),
OPTIONAL :: nval
366 INTEGER :: entry_deleted, i, k, new_size, nlist, &
370 cpassert(
ASSOCIATED(results))
372 IF (
PRESENT(description))
THEN
373 cpassert(description(1:1) ==
'[')
374 nlist =
SIZE(results%result_value)
377 IF (trim(results%result_label(i)) == trim(description)) nrep = nrep + 1
383 IF (trim(results%result_label(i)) == trim(description))
THEN
385 IF (
PRESENT(nval))
THEN
387 entry_deleted = entry_deleted + 1
391 entry_deleted = entry_deleted + 1
395 cpassert(nlist - entry_deleted >= 0)
396 new_size = nlist - entry_deleted
397 NULLIFY (clean_results)
400 ALLOCATE (clean_results%result_label(new_size))
401 ALLOCATE (clean_results%result_value(new_size))
403 NULLIFY (clean_results%result_value(i)%value)
408 IF (trim(results%result_label(i)) /= trim(description))
THEN
410 clean_results%result_label(k) = results%result_label(i)
412 results%result_value(i)%value)
420 ALLOCATE (results%result_label(new_size))
421 ALLOCATE (results%result_value(new_size))
434 INTEGER,
INTENT(IN) :: source
438 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: size_value, type_in_use
440 cpassert(
ASSOCIATED(results))
442 IF (para_env%mepos == source) nlist =
SIZE(results%result_value)
443 CALL para_env%bcast(nlist, source)
445 ALLOCATE (size_value(nlist))
446 ALLOCATE (type_in_use(nlist))
447 IF (para_env%mepos == source)
THEN
449 CALL get_nreps(results, description=results%result_label(i), &
450 n_entries=size_value(i), type_in_use=type_in_use(i))
453 CALL para_env%bcast(size_value, source)
454 CALL para_env%bcast(type_in_use, source)
456 IF (para_env%mepos /= source)
THEN
458 ALLOCATE (results%result_value(nlist))
459 ALLOCATE (results%result_label(nlist))
461 results%result_label(i) =
""
462 NULLIFY (results%result_value(i)%value)
465 type_in_use=type_in_use(i), size_value=size_value(i))
469 CALL para_env%bcast(results%result_label(i), source)
470 SELECT CASE (results%result_value(i)%value%type_in_use)
472 CALL para_env%bcast(results%result_value(i)%value%real_type, source)
474 CALL para_env%bcast(results%result_value(i)%value%integer_type, source)
476 CALL para_env%bcast(results%result_value(i)%value%logical_type, source)
478 cpabort(
"Type not implemented in cp_result_type")
481 DEALLOCATE (type_in_use)
482 DEALLOCATE (size_value)
set of type/routines to handle the storage of results in force_envs
subroutine, public cp_results_mp_bcast(results, source, para_env)
broadcast results type
subroutine, public cp_results_erase(results, description, nval)
erase a part of result_list
logical function, public test_for_result(results, description)
test for a certain result in the result_list
set of type/routines to handle the storage of results in force_envs
integer, parameter, public result_type_real
subroutine, public cp_result_copy(results_in, results_out)
Copies the cp_result type.
integer, parameter, public result_type_logical
subroutine, public cp_result_release(results)
Releases cp_result type.
subroutine, public cp_result_value_create(value)
Allocates and intitializes the cp_result_value type.
subroutine, public cp_result_clean(results)
Releases cp_result clean.
integer, parameter, public result_type_integer
subroutine, public cp_result_create(results)
Allocates and intitializes the cp_result.
subroutine, public cp_result_value_p_reallocate(result_value, istart, iend)
Reallocates the cp_result_value type.
subroutine, public cp_result_value_copy(value_out, value_in)
Copies the cp_result_value type.
subroutine, public cp_result_value_init(value, type_in_use, size_value)
Setup of the cp_result_value type.
Defines the basic variable types.
integer, parameter, public dp
integer, parameter, public default_string_length
Utility routines for the memory handling.
Interface to the message passing library MPI.
contains arbitrary information which need to be stored
stores all the informations relevant to an mpi environment