26 #include "../base/base_uses.f90"
31 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'cp_result_methods'
33 PUBLIC :: put_results, &
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)
60 TYPE(cp_result_type),
POINTER :: results
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)
94 TYPE(cp_result_type),
POINTER :: results
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
127 TYPE(cp_result_type),
POINTER :: results
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)
160 TYPE(cp_result_type),
POINTER :: results
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)
233 TYPE(cp_result_type),
POINTER :: results
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)
305 TYPE(cp_result_type),
POINTER :: results
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
362 TYPE(cp_result_type),
POINTER :: results
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, &
369 TYPE(cp_result_type),
POINTER :: clean_results
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))
434 TYPE(cp_result_type),
POINTER :: results
435 INTEGER,
INTENT(IN) :: source
436 TYPE(mp_para_env_type),
POINTER :: para_env
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.