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!")
187 IF (trim(results%result_label(i)) == trim(description))
THEN
189 cpabort(
"Attempt to retrieve a RESULT which is not a REAL!")
192 size_res =
SIZE(results%result_value(i)%value%real_type)
196 IF (
PRESENT(n_entries)) n_entries = size_res
197 size_values =
SIZE(values, 1)
198 IF (
PRESENT(nval))
THEN
199 cpassert(size_res == size_values)
201 cpassert(nrep*size_res == size_values)
205 IF (trim(results%result_label(i)) == trim(description))
THEN
207 IF (
PRESENT(nval))
THEN
209 values = results%result_value(i)%value%real_type
213 values((k - 1)*size_res + 1:k*size_res) = results%result_value(i)%value%real_type
218 END SUBROUTINE get_result_r1
234 SUBROUTINE get_result_r2(results, description, values, nval, n_rep, n_entries)
236 CHARACTER(LEN=default_string_length),
INTENT(IN) :: description
237 REAL(KIND=
dp),
DIMENSION(:, :),
INTENT(OUT) :: values
238 INTEGER,
INTENT(IN),
OPTIONAL :: nval
239 INTEGER,
INTENT(OUT),
OPTIONAL :: n_rep, n_entries
241 INTEGER :: i, k, nlist, nrep, size_res, size_values
243 cpassert(
ASSOCIATED(results))
244 nlist =
SIZE(results%result_value)
245 cpassert(description(1:1) ==
'[')
246 cpassert(
SIZE(results%result_label) == nlist)
249 IF (trim(results%result_label(i)) == trim(description)) nrep = nrep + 1
252 IF (
PRESENT(n_rep))
THEN
257 CALL cp_abort(__location__, &
258 " Trying to access result ("//trim(description)//
") which was never stored!")
262 IF (trim(results%result_label(i)) == trim(description))
THEN
264 cpabort(
"Attempt to retrieve a RESULT which is not a REAL!")
267 size_res =
SIZE(results%result_value(i)%value%real_type)
271 IF (
PRESENT(n_entries)) n_entries = size_res
272 size_values =
SIZE(values, 1)*
SIZE(values, 2)
273 IF (
PRESENT(nval))
THEN
274 cpassert(size_res == size_values)
276 cpassert(nrep*size_res == size_values)
280 IF (trim(results%result_label(i)) == trim(description))
THEN
282 IF (
PRESENT(nval))
THEN
284 values = reshape(results%result_value(i)%value%real_type, [
SIZE(values, 1),
SIZE(values, 2)])
288 values((k - 1)*size_res + 1:k*size_res, :) = reshape(results%result_value(i)%value%real_type, &
289 [
SIZE(values, 1),
SIZE(values, 2)])
294 END SUBROUTINE get_result_r2
308 SUBROUTINE get_nreps(results, description, n_rep, n_entries, type_in_use)
310 CHARACTER(LEN=default_string_length),
INTENT(IN) :: description
311 INTEGER,
INTENT(OUT),
OPTIONAL :: n_rep, n_entries, type_in_use
315 cpassert(
ASSOCIATED(results))
316 nlist =
SIZE(results%result_value)
317 cpassert(description(1:1) ==
'[')
318 cpassert(
SIZE(results%result_label) == nlist)
319 IF (
PRESENT(n_rep))
THEN
322 IF (trim(results%result_label(i)) == trim(description)) n_rep = n_rep + 1
325 IF (
PRESENT(n_entries))
THEN
328 IF (trim(results%result_label(i)) == trim(description))
THEN
329 SELECT CASE (results%result_value(i)%value%type_in_use)
331 n_entries = n_entries +
SIZE(results%result_value(i)%value%real_type)
333 n_entries = n_entries +
SIZE(results%result_value(i)%value%integer_type)
335 n_entries = n_entries +
SIZE(results%result_value(i)%value%logical_type)
337 cpabort(
"Type not implemented in cp_result_type")
343 IF (
PRESENT(type_in_use))
THEN
345 IF (trim(results%result_label(i)) == trim(description))
THEN
346 type_in_use = results%result_value(i)%value%type_in_use
351 END SUBROUTINE get_nreps
366 CHARACTER(LEN=default_string_length),
INTENT(IN), &
367 OPTIONAL :: description
368 INTEGER,
INTENT(IN),
OPTIONAL :: nval
370 INTEGER :: entry_deleted, i, k, new_size, nlist, &
374 cpassert(
ASSOCIATED(results))
376 IF (
PRESENT(description))
THEN
377 cpassert(description(1:1) ==
'[')
378 nlist =
SIZE(results%result_value)
381 IF (trim(results%result_label(i)) == trim(description)) nrep = nrep + 1
387 IF (trim(results%result_label(i)) == trim(description))
THEN
389 IF (
PRESENT(nval))
THEN
391 entry_deleted = entry_deleted + 1
395 entry_deleted = entry_deleted + 1
399 cpassert(nlist - entry_deleted >= 0)
400 new_size = nlist - entry_deleted
401 NULLIFY (clean_results)
404 ALLOCATE (clean_results%result_label(new_size))
405 ALLOCATE (clean_results%result_value(new_size))
407 NULLIFY (clean_results%result_value(i)%value)
412 IF (trim(results%result_label(i)) /= trim(description))
THEN
414 clean_results%result_label(k) = results%result_label(i)
416 results%result_value(i)%value)
424 ALLOCATE (results%result_label(new_size))
425 ALLOCATE (results%result_value(new_size))
438 INTEGER,
INTENT(IN) :: source
442 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: size_value, type_in_use
444 cpassert(
ASSOCIATED(results))
446 IF (para_env%mepos == source) nlist =
SIZE(results%result_value)
447 CALL para_env%bcast(nlist, source)
449 ALLOCATE (size_value(nlist))
450 ALLOCATE (type_in_use(nlist))
451 IF (para_env%mepos == source)
THEN
453 CALL get_nreps(results, description=results%result_label(i), &
454 n_entries=size_value(i), type_in_use=type_in_use(i))
457 CALL para_env%bcast(size_value, source)
458 CALL para_env%bcast(type_in_use, source)
460 IF (para_env%mepos /= source)
THEN
462 ALLOCATE (results%result_value(nlist))
463 ALLOCATE (results%result_label(nlist))
465 results%result_label(i) =
""
466 NULLIFY (results%result_value(i)%value)
469 type_in_use=type_in_use(i), size_value=size_value(i))
473 CALL para_env%bcast(results%result_label(i), source)
474 SELECT CASE (results%result_value(i)%value%type_in_use)
476 CALL para_env%bcast(results%result_value(i)%value%real_type, source)
478 CALL para_env%bcast(results%result_value(i)%value%integer_type, source)
480 CALL para_env%bcast(results%result_value(i)%value%logical_type, source)
482 cpabort(
"Type not implemented in cp_result_type")
485 DEALLOCATE (type_in_use)
486 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