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)
340 IF (
PRESENT(type_in_use))
THEN
342 IF (trim(results%result_label(i)) == trim(description))
THEN
343 type_in_use = results%result_value(i)%value%type_in_use
348 END SUBROUTINE get_nreps
363 CHARACTER(LEN=default_string_length),
INTENT(IN), &
364 OPTIONAL :: description
365 INTEGER,
INTENT(IN),
OPTIONAL :: nval
367 INTEGER :: entry_deleted, i, k, new_size, nlist, &
371 cpassert(
ASSOCIATED(results))
373 IF (
PRESENT(description))
THEN
374 cpassert(description(1:1) ==
'[')
375 nlist =
SIZE(results%result_value)
378 IF (trim(results%result_label(i)) == trim(description)) nrep = nrep + 1
380 IF (nrep .NE. 0)
THEN
384 IF (trim(results%result_label(i)) == trim(description))
THEN
386 IF (
PRESENT(nval))
THEN
388 entry_deleted = entry_deleted + 1
392 entry_deleted = entry_deleted + 1
396 cpassert(nlist - entry_deleted >= 0)
397 new_size = nlist - entry_deleted
398 NULLIFY (clean_results)
401 ALLOCATE (clean_results%result_label(new_size))
402 ALLOCATE (clean_results%result_value(new_size))
404 NULLIFY (clean_results%result_value(i)%value)
409 IF (trim(results%result_label(i)) /= trim(description))
THEN
411 clean_results%result_label(k) = results%result_label(i)
413 results%result_value(i)%value)
421 ALLOCATE (results%result_label(new_size))
422 ALLOCATE (results%result_value(new_size))
435 INTEGER,
INTENT(IN) :: source
439 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: size_value, type_in_use
441 cpassert(
ASSOCIATED(results))
443 IF (para_env%mepos == source) nlist =
SIZE(results%result_value)
444 CALL para_env%bcast(nlist, source)
446 ALLOCATE (size_value(nlist))
447 ALLOCATE (type_in_use(nlist))
448 IF (para_env%mepos == source)
THEN
450 CALL get_nreps(results, description=results%result_label(i), &
451 n_entries=size_value(i), type_in_use=type_in_use(i))
454 CALL para_env%bcast(size_value, source)
455 CALL para_env%bcast(type_in_use, source)
457 IF (para_env%mepos /= source)
THEN
459 ALLOCATE (results%result_value(nlist))
460 ALLOCATE (results%result_label(nlist))
462 results%result_label(i) =
""
463 NULLIFY (results%result_value(i)%value)
466 type_in_use=type_in_use(i), size_value=size_value(i))
470 CALL para_env%bcast(results%result_label(i), source)
471 SELECT CASE (results%result_value(i)%value%type_in_use)
473 CALL para_env%bcast(results%result_value(i)%value%real_type, source)
475 CALL para_env%bcast(results%result_value(i)%value%integer_type, source)
477 CALL para_env%bcast(results%result_value(i)%value%logical_type, source)
479 cpabort(
"Type not implemented in cp_result_type")
482 DEALLOCATE (type_in_use)
483 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