12 USE iso_c_binding,
ONLY: &
26#include "./base/base_uses.f90"
32 INTEGER,
PARAMETER :: openpmd_access_create = 0
33 INTEGER,
PARAMETER :: openpmd_access_read_only = 1
35 INTEGER,
PARAMETER :: openpmd_type_char = 0
36 INTEGER,
PARAMETER :: openpmd_type_uchar = 1
37 INTEGER,
PARAMETER :: openpmd_type_schar = 2
38 INTEGER,
PARAMETER :: openpmd_type_short = 3
39 INTEGER,
PARAMETER :: openpmd_type_int = 4
40 INTEGER,
PARAMETER :: openpmd_type_long = 5
41 INTEGER,
PARAMETER :: openpmd_type_longlong = 6
42 INTEGER,
PARAMETER :: openpmd_type_ushort = 7
43 INTEGER,
PARAMETER :: openpmd_type_uint = 8
44 INTEGER,
PARAMETER :: openpmd_type_ulong = 9
45 INTEGER,
PARAMETER :: openpmd_type_ulonglong = 10
46 INTEGER,
PARAMETER :: openpmd_type_float = 11
47 INTEGER,
PARAMETER :: openpmd_type_double = 12
48 INTEGER,
PARAMETER :: openpmd_type_long_double = 13
49 INTEGER,
PARAMETER :: openpmd_type_cfloat = 14
50 INTEGER,
PARAMETER :: openpmd_type_cdouble = 15
51 INTEGER,
PARAMETER :: openpmd_type_clong_double = 16
52 INTEGER,
PARAMETER :: openpmd_type_string = 17
53 INTEGER,
PARAMETER :: openpmd_type_vec_char = 18
54 INTEGER,
PARAMETER :: openpmd_type_vec_short = 19
55 INTEGER,
PARAMETER :: openpmd_type_vec_int = 20
56 INTEGER,
PARAMETER :: openpmd_type_vec_long = 21
57 INTEGER,
PARAMETER :: openpmd_type_vec_longlong = 22
58 INTEGER,
PARAMETER :: openpmd_type_vec_uchar = 23
59 INTEGER,
PARAMETER :: openpmd_type_vec_ushort = 24
60 INTEGER,
PARAMETER :: openpmd_type_vec_uint = 25
61 INTEGER,
PARAMETER :: openpmd_type_vec_ulong = 26
62 INTEGER,
PARAMETER :: openpmd_type_vec_ulonglong = 27
63 INTEGER,
PARAMETER :: openpmd_type_vec_float = 28
64 INTEGER,
PARAMETER :: openpmd_type_vec_double = 29
65 INTEGER,
PARAMETER :: openpmd_type_vec_long_double = 30
66 INTEGER,
PARAMETER :: openpmd_type_vec_cfloat = 31
67 INTEGER,
PARAMETER :: openpmd_type_vec_cdouble = 32
68 INTEGER,
PARAMETER :: openpmd_type_vec_clong_double = 33
69 INTEGER,
PARAMETER :: openpmd_type_vec_schar = 34
70 INTEGER,
PARAMETER :: openpmd_type_vec_string = 35
71 INTEGER,
PARAMETER :: openpmd_type_arr_dbl_7 = 36
72 INTEGER,
PARAMETER :: openpmd_type_bool = 37
75 TYPE openpmd_attributable_type
77 TYPE(C_PTR) :: c_ptr = c_null_ptr
79 PROCEDURE,
PUBLIC :: set_attribute_vec_int => openpmd_attributable_set_attribute_vec_int
80 PROCEDURE,
PUBLIC :: series_flush => openpmd_attributable_series_flush
81 END TYPE openpmd_attributable_type
83 TYPE openpmd_series_type
85 TYPE(C_PTR) :: c_ptr = c_null_ptr
87 PROCEDURE,
PUBLIC :: as_pointer
88 PROCEDURE,
PUBLIC :: as_attributable => openpmd_series_as_attributable
89 PROCEDURE,
PUBLIC :: close => openpmd_series_close
90 PROCEDURE,
PUBLIC :: present => openpmd_series_present
91 PROCEDURE,
PUBLIC :: write_iteration => openpmd_series_write_iteration
92 PROCEDURE,
PUBLIC :: get_iteration => openpmd_series_get_iteration
93 END TYPE openpmd_series_type
95 TYPE openpmd_iteration_type
97 TYPE(C_PTR) :: c_ptr = c_null_ptr
99 PROCEDURE,
PUBLIC :: as_attributable => openpmd_iteration_as_attributable
100 PROCEDURE,
PUBLIC :: get_mesh => openpmd_iteration_get_mesh
101 PROCEDURE,
PUBLIC :: get_particle_species => openpmd_iteration_get_particle_species
102 PROCEDURE,
PUBLIC :: close => openpmd_iteration_close
103 PROCEDURE,
PUBLIC :: closed => openpmd_iteration_closed
104 END TYPE openpmd_iteration_type
106 TYPE openpmd_mesh_type
108 TYPE(C_PTR) :: c_ptr = c_null_ptr
110 PROCEDURE,
PUBLIC :: as_record_component => openpmd_mesh_as_record_component
111 PROCEDURE,
PUBLIC :: set_axis_labels => openpmd_mesh_set_axis_labels
112 PROCEDURE,
PUBLIC :: set_grid_global_offset => openpmd_mesh_set_grid_global_offset
113 PROCEDURE,
PUBLIC :: set_grid_spacing => openpmd_mesh_set_grid_spacing
114 PROCEDURE,
PUBLIC :: set_position => openpmd_mesh_set_position
115 END TYPE openpmd_mesh_type
117 TYPE openpmd_particle_species_type
119 TYPE(C_PTR) :: c_ptr = c_null_ptr
121 PROCEDURE,
PUBLIC :: get_record => openpmd_particle_species_get_record
122 END TYPE openpmd_particle_species_type
124 TYPE openpmd_record_component_type
126 TYPE(C_PTR) :: c_ptr = c_null_ptr
128 PROCEDURE,
PUBLIC :: make_empty => openpmd_record_component_make_empty
129 PROCEDURE,
PUBLIC :: make_constant_zero => openpmd_record_component_make_constant_zero
130 PROCEDURE,
PUBLIC :: reset_dataset => openpmd_record_component_reset_dataset
131 PROCEDURE,
PRIVATE :: store_chunk_1d_double &
132 => openpmd_record_component_store_chunk_1d_double
133 PROCEDURE,
PUBLIC :: store_chunk_span_1d_double &
134 => openpmd_record_component_store_chunk_span_1d_double
135 PROCEDURE,
PRIVATE :: store_chunk_2d_double &
136 => openpmd_record_component_store_chunk_2d_double
137 PROCEDURE,
PUBLIC :: store_chunk_span_2d_double &
138 => openpmd_record_component_store_chunk_span_2d_double
139 PROCEDURE,
PRIVATE :: store_chunk_3d_double &
140 => openpmd_record_component_store_chunk_3d_double
141 PROCEDURE,
PUBLIC :: store_chunk_span_3d_double &
142 => openpmd_record_component_store_chunk_span_3d_double
143 generic,
PUBLIC :: store_chunk => &
144 store_chunk_1d_double, &
145 store_chunk_2d_double, &
146 store_chunk_3d_double
147 END TYPE openpmd_record_component_type
149 TYPE openpmd_mesh_record_component_type
151 TYPE(C_PTR) :: c_ptr = c_null_ptr
152 END TYPE openpmd_mesh_record_component_type
154 TYPE openpmd_record_type
156 TYPE(C_PTR) :: c_ptr = c_null_ptr
158 PROCEDURE,
PUBLIC :: as_record_component => openpmd_record_as_record_component
159 PROCEDURE,
PUBLIC :: get_component => openpmd_record_get_component
160 END TYPE openpmd_record_type
162 TYPE openpmd_dynamic_memory_view_type_1d
164 INTEGER,
DIMENSION(1) :: chunk_extent
165 TYPE(C_PTR) :: c_ptr = c_null_ptr
169 PROCEDURE,
PUBLIC :: resolve_double &
170 => openpmd_dynamic_memory_view_resolve_1d_double
171 END TYPE openpmd_dynamic_memory_view_type_1d
172 TYPE openpmd_dynamic_memory_view_type_2d
174 INTEGER,
DIMENSION(2) :: chunk_extent
175 TYPE(C_PTR) :: c_ptr = c_null_ptr
179 PROCEDURE,
PUBLIC :: resolve_double &
180 => openpmd_dynamic_memory_view_resolve_2d_double
181 END TYPE openpmd_dynamic_memory_view_type_2d
182 TYPE openpmd_dynamic_memory_view_type_3d
184 INTEGER,
DIMENSION(3) :: chunk_extent
185 TYPE(C_PTR) :: c_ptr = c_null_ptr
189 PROCEDURE,
PUBLIC :: resolve_double &
190 => openpmd_dynamic_memory_view_resolve_3d_double
191 END TYPE openpmd_dynamic_memory_view_type_3d
194 PUBLIC :: openpmd_attributable_type
195 PUBLIC :: openpmd_iteration_type
196 PUBLIC :: openpmd_mesh_type
197 PUBLIC :: openpmd_particle_species_type
198 PUBLIC :: openpmd_record_component_type
199 PUBLIC :: openpmd_record_type
200 PUBLIC :: openpmd_series_type, openpmd_series_create
203 PUBLIC :: openpmd_access_create, openpmd_access_read_only
204 PUBLIC :: openpmd_get_default_extension
205 PUBLIC :: openpmd_json_merge
208 PUBLIC :: openpmd_type_arr_dbl_7
209 PUBLIC :: openpmd_type_bool
210 PUBLIC :: openpmd_type_cdouble
211 PUBLIC :: openpmd_type_cfloat
212 PUBLIC :: openpmd_type_char
213 PUBLIC :: openpmd_type_clong_double
214 PUBLIC :: openpmd_type_double
215 PUBLIC :: openpmd_type_float
216 PUBLIC :: openpmd_type_int
217 PUBLIC :: openpmd_type_long
218 PUBLIC :: openpmd_type_long_double
219 PUBLIC :: openpmd_type_longlong
220 PUBLIC :: openpmd_type_schar
221 PUBLIC :: openpmd_type_short
222 PUBLIC :: openpmd_type_string
223 PUBLIC :: openpmd_type_uchar
224 PUBLIC :: openpmd_type_uint
225 PUBLIC :: openpmd_type_ulong
226 PUBLIC :: openpmd_type_ulonglong
227 PUBLIC :: openpmd_type_ushort
228 PUBLIC :: openpmd_type_vec_cdouble
229 PUBLIC :: openpmd_type_vec_cfloat
230 PUBLIC :: openpmd_type_vec_char
231 PUBLIC :: openpmd_type_vec_clong_double
232 PUBLIC :: openpmd_type_vec_double
233 PUBLIC :: openpmd_type_vec_float
234 PUBLIC :: openpmd_type_vec_int
235 PUBLIC :: openpmd_type_vec_long
236 PUBLIC :: openpmd_type_vec_long_double
237 PUBLIC :: openpmd_type_vec_longlong
238 PUBLIC :: openpmd_type_vec_schar
239 PUBLIC :: openpmd_type_vec_short
240 PUBLIC :: openpmd_type_vec_string
241 PUBLIC :: openpmd_type_vec_uchar
242 PUBLIC :: openpmd_type_vec_uint
243 PUBLIC :: openpmd_type_vec_ulong
244 PUBLIC :: openpmd_type_vec_ulonglong
245 PUBLIC :: openpmd_type_vec_ushort
247 PUBLIC :: openpmd_series_as_attributable
248 PUBLIC :: openpmd_iteration_as_attributable
249 PUBLIC :: openpmd_record_component_as_attributable
250 PUBLIC :: openpmd_mesh_as_record_component
251 PUBLIC :: openpmd_record_as_record_component
252 PUBLIC :: openpmd_mesh_as_mesh_record_component
253 PUBLIC :: openpmd_mesh_record_component_as_record_component
254 PUBLIC :: openpmd_dynamic_memory_view_type_1d
255 PUBLIC :: openpmd_dynamic_memory_view_type_2d
256 PUBLIC :: openpmd_dynamic_memory_view_type_3d
269 FUNCTION as_pointer(this)
RESULT(res)
270 CLASS(openpmd_series_type),
INTENT(IN) :: this
274 END FUNCTION as_pointer
276 FUNCTION openpmd_series_as_attributable (this)
RESULT(res)
277 CLASS(openpmd_Series_type),
INTENT(IN) :: this
278 TYPE(openpmd_Attributable_type) :: res
281 SUBROUTINE openpmd_c_series_as_attributable (child, parent) &
282 BIND(C, name="openPMD_Series_upcast_to_Attributable")
284 TYPE(C_PTR),
VALUE :: child
285 TYPE(C_PTR) :: parent
286 END SUBROUTINE openpmd_c_series_as_attributable
289 CALL openpmd_c_series_as_attributable (this%c_ptr, res%c_ptr)
290 END FUNCTION openpmd_series_as_attributable
291 FUNCTION openpmd_iteration_as_attributable (this)
RESULT(res)
292 CLASS(openpmd_Iteration_type),
INTENT(IN) :: this
293 TYPE(openpmd_Attributable_type) :: res
296 SUBROUTINE openpmd_c_iteration_as_attributable (child, parent) &
297 BIND(C, name="openPMD_Iteration_upcast_to_Attributable")
299 TYPE(C_PTR),
VALUE :: child
300 TYPE(C_PTR) :: parent
301 END SUBROUTINE openpmd_c_iteration_as_attributable
304 CALL openpmd_c_iteration_as_attributable (this%c_ptr, res%c_ptr)
305 END FUNCTION openpmd_iteration_as_attributable
306 FUNCTION openpmd_record_component_as_attributable (this)
RESULT(res)
307 CLASS(openpmd_record_component_type),
INTENT(IN) :: this
308 TYPE(openpmd_Attributable_type) :: res
311 SUBROUTINE openpmd_c_record_component_as_attributable (child, parent) &
312 BIND(C, name="openPMD_RecordComponent_upcast_to_Attributable")
314 TYPE(C_PTR),
VALUE :: child
315 TYPE(C_PTR) :: parent
316 END SUBROUTINE openpmd_c_record_component_as_attributable
319 CALL openpmd_c_record_component_as_attributable (this%c_ptr, res%c_ptr)
320 END FUNCTION openpmd_record_component_as_attributable
321 FUNCTION openpmd_mesh_as_record_component (this)
RESULT(res)
322 CLASS(openpmd_Mesh_type),
INTENT(IN) :: this
323 TYPE(openpmd_record_component_type) :: res
326 SUBROUTINE openpmd_c_mesh_as_record_component (child, parent) &
327 BIND(C, name="openPMD_Mesh_upcast_to_RecordComponent")
329 TYPE(C_PTR),
VALUE :: child
330 TYPE(C_PTR) :: parent
331 END SUBROUTINE openpmd_c_mesh_as_record_component
334 CALL openpmd_c_mesh_as_record_component (this%c_ptr, res%c_ptr)
335 END FUNCTION openpmd_mesh_as_record_component
336 FUNCTION openpmd_record_as_record_component (this)
RESULT(res)
337 CLASS(openpmd_Record_type),
INTENT(IN) :: this
338 TYPE(openpmd_record_component_type) :: res
341 SUBROUTINE openpmd_c_record_as_record_component (child, parent) &
342 BIND(C, name="openPMD_Record_upcast_to_RecordComponent")
344 TYPE(C_PTR),
VALUE :: child
345 TYPE(C_PTR) :: parent
346 END SUBROUTINE openpmd_c_record_as_record_component
349 CALL openpmd_c_record_as_record_component (this%c_ptr, res%c_ptr)
350 END FUNCTION openpmd_record_as_record_component
351 FUNCTION openpmd_mesh_as_mesh_record_component (this)
RESULT(res)
352 CLASS(openpmd_Mesh_type),
INTENT(IN) :: this
353 TYPE(openpmd_mesh_record_component_type) :: res
356 SUBROUTINE openpmd_c_mesh_as_mesh_record_component (child, parent) &
357 BIND(C, name="openPMD_Mesh_upcast_to_MeshRecordComponent")
359 TYPE(C_PTR),
VALUE :: child
360 TYPE(C_PTR) :: parent
361 END SUBROUTINE openpmd_c_mesh_as_mesh_record_component
364 CALL openpmd_c_mesh_as_mesh_record_component (this%c_ptr, res%c_ptr)
365 END FUNCTION openpmd_mesh_as_mesh_record_component
366 FUNCTION openpmd_mesh_record_component_as_record_component (this)
RESULT(res)
367 CLASS(openpmd_mesh_record_component_type),
INTENT(IN) :: this
368 TYPE(openpmd_record_component_type) :: res
371 SUBROUTINE openpmd_c_mesh_record_component_as_record_component (child, parent) &
372 BIND(C, name="openPMD_MeshRecordComponent_upcast_to_RecordComponent")
374 TYPE(C_PTR),
VALUE :: child
375 TYPE(C_PTR) :: parent
376 END SUBROUTINE openpmd_c_mesh_record_component_as_record_component
379 CALL openpmd_c_mesh_record_component_as_record_component (this%c_ptr, res%c_ptr)
380 END FUNCTION openpmd_mesh_record_component_as_record_component
387 FUNCTION openpmd_series_present(this)
RESULT(res)
388 CLASS(openpmd_series_type),
INTENT(IN) :: this
390 INTEGER :: res_internal
393 FUNCTION openpmd_c_series_present(series)
RESULT(res) &
394 BIND(C, NAME="openPMD_Series_present")
395 IMPORT :: c_ptr, c_int
396 TYPE(C_PTR),
VALUE,
INTENT(IN) :: series
397 INTEGER(kind=C_INT) :: res
398 END FUNCTION openpmd_c_series_present
401 IF (.NOT. c_associated(this%c_ptr))
THEN
406 res_internal = openpmd_c_series_present(this%c_ptr)
407 res = res_internal /= 0
408 END FUNCTION openpmd_series_present
418 FUNCTION openpmd_series_create(path, access, mpi_comm, config)
RESULT(series)
419 CHARACTER(len=*),
INTENT(IN) :: path
420 INTEGER(kind=C_INT),
INTENT(IN) :: access
421 CLASS(mp_comm_type),
INTENT(in),
OPTIONAL :: mpi_comm
422 CHARACTER(len=*),
INTENT(IN),
OPTIONAL,
TARGET :: config
423 TYPE(openpmd_series_type) :: series
425 TYPE(c_ptr),
SAVE :: comm_c = c_null_ptr
426 CHARACTER(len=default_string_length),
TARGET,
SAVE :: default_config =
"{}"
427 CHARACTER(:),
POINTER :: my_config
436 SUBROUTINE cp2k_c_mpi_comm_f2c(comm_f, comm_c)
bind(C, name="CP2K_MPI_Comm_f2c")
438 INTEGER(kind=C_INT),
VALUE :: comm_f
439 TYPE(c_ptr) :: comm_c
440 END SUBROUTINE cp2k_c_mpi_comm_f2c
443 SUBROUTINE openpmd_c_series_create_mpi(path, access, mpi_comm, config, series) &
444 BIND(C, name="openPMD_Series_create_mpi")
445 IMPORT :: c_ptr, c_char, c_int
446 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: path
447 INTEGER(kind=C_INT),
VALUE :: access
448 TYPE(C_PTR),
value :: mpi_comm
449 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: config
450 TYPE(C_PTR) :: series
451 END SUBROUTINE openpmd_c_series_create_mpi
454 SUBROUTINE openpmd_c_series_create(path, access, config, series) &
455 BIND(C, name="openPMD_Series_create")
456 IMPORT :: c_ptr, c_char, c_int
457 TYPE(C_PTR) :: series
458 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: path
459 INTEGER(kind=C_INT),
VALUE :: access
460 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: config
461 END SUBROUTINE openpmd_c_series_create
464 IF (
PRESENT(config))
THEN
467 my_config => default_config
470 cpassert(.NOT. c_associated(series%c_ptr))
471 IF (
PRESENT(mpi_comm))
THEN
472 CALL cp2k_c_mpi_comm_f2c(mpi_comm%get_handle(), comm_c)
473 CALL openpmd_c_series_create_mpi( &
474 path=trim(path)//c_null_char, &
477 config=my_config//c_null_char, &
480 CALL openpmd_c_series_create( &
481 path=trim(path)//c_null_char, &
483 config=my_config//c_null_char, &
486 cpassert(c_associated(series%c_ptr))
487 END FUNCTION openpmd_series_create
493 SUBROUTINE openpmd_series_close(series)
494 CLASS(openpmd_series_type),
INTENT(INOUT) :: series
501 SUBROUTINE openpmd_c_series_close(series) &
502 BIND(C, name="openPMD_Series_close")
504 TYPE(C_PTR),
VALUE :: series
505 END SUBROUTINE openpmd_c_series_close
508 cpassert(c_associated(series%c_ptr))
509 CALL openpmd_c_series_close(series=series%c_ptr)
510 series%c_ptr = c_null_ptr
511 END SUBROUTINE openpmd_series_close
519 FUNCTION openpmd_series_write_iteration(this, index)
RESULT(iteration)
520 CLASS(openpmd_series_type) :: this
521 INTEGER,
TARGET :: index
522 TYPE(openpmd_iteration_type) :: iteration
524 INTEGER(8) :: cast_index
525 INTEGER(kind=C_INT) :: status
527 FUNCTION openpmd_c_series_write_iteration(series, index, iteration)
RESULT(status) &
528 BIND(C, name="openPMD_Series_write_Iteration")
529 IMPORT :: c_ptr, c_int64_t, c_int, c_size_t
530 TYPE(C_PTR),
VALUE :: series
531 INTEGER(kind=C_INT64_T),
VALUE :: index
532 TYPE(C_PTR) :: iteration
533 INTEGER(KIND=C_INT) :: status
534 END FUNCTION openpmd_c_series_write_iteration
537 cpassert(.NOT. c_associated(iteration%c_ptr))
539 status = openpmd_c_series_write_iteration(this%c_ptr, cast_index, iteration%c_ptr)
540 cpassert(c_associated(iteration%c_ptr))
541 END FUNCTION openpmd_series_write_iteration
543 FUNCTION openpmd_series_get_iteration(this, index)
RESULT(iteration)
544 CLASS(openpmd_series_type) :: this
545 INTEGER,
TARGET :: index
546 TYPE(openpmd_iteration_type) :: iteration
548 INTEGER(8) :: cast_index
549 INTEGER(kind=C_INT) :: status
551 FUNCTION openpmd_c_series_get_iteration(series, index, iteration)
RESULT(status) &
552 BIND(C, name="openPMD_Series_get_Iteration")
553 IMPORT :: c_ptr, c_int64_t, c_int, c_size_t
554 TYPE(C_PTR),
VALUE :: series
555 INTEGER(kind=C_INT64_T),
VALUE :: index
556 TYPE(C_PTR) :: iteration
557 INTEGER(KIND=C_INT) :: status
558 END FUNCTION openpmd_c_series_get_iteration
561 cpassert(.NOT. c_associated(iteration%c_ptr))
563 status = openpmd_c_series_get_iteration(this%c_ptr, cast_index, iteration%c_ptr)
564 cpassert(c_associated(iteration%c_ptr))
565 END FUNCTION openpmd_series_get_iteration
571 FUNCTION openpmd_get_default_extension()
RESULT(extension)
572 CHARACTER(len=default_string_length) :: extension
574 CHARACTER(kind=C_CHAR),
POINTER :: c_extension
575 INTEGER(C_SIZE_T) :: length_of_c_string, i
577 FUNCTION openpmd_c_get_default_extension()
RESULT(extension) &
578 BIND(c, name="openPMD_get_default_extension")
580 CHARACTER(kind=C_CHAR),
POINTER :: extension
581 END FUNCTION openpmd_c_get_default_extension
584 FUNCTION get_strlen(c_string)
RESULT(strlen) &
585 BIND(C, NAME="CP2K_strlen")
586 IMPORT :: c_char, c_size_t
587 CHARACTER(kind=C_CHAR),
DIMENSION(*),
INTENT(IN) :: c_string
588 INTEGER(C_SIZE_T) :: strlen
589 END FUNCTION get_strlen
592 c_extension => openpmd_c_get_default_extension()
595 IF (
ASSOCIATED(c_extension))
THEN
597 length_of_c_string = get_strlen(c_extension)
608 extension = trim(adjustl(transfer(c_extension(1:length_of_c_string), extension)))
610 DO i = length_of_c_string + 1, len(extension)
614 END FUNCTION openpmd_get_default_extension
622 SUBROUTINE openpmd_attributable_set_attribute_vec_int(this, name, vec)
623 CLASS(openpmd_attributable_type) :: this
624 CHARACTER(len=*),
INTENT(IN) :: name
625 INTEGER,
DIMENSION(:),
TARGET :: vec
627 INTEGER,
TARGET :: size_
629 SUBROUTINE openpmd_c_attributable_set_attribute_vec_int(attributable, name, vec, length) &
630 BIND(C, NAME="openPMD_attributable_set_attribute_vec_int")
631 IMPORT :: c_char, c_size_t, c_int, c_ptr
632 TYPE(C_PTR),
VALUE :: attributable
633 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: name
634 TYPE(C_PTR),
VALUE :: vec
635 INTEGER(kind=C_INT),
VALUE :: length
636 END SUBROUTINE openpmd_c_attributable_set_attribute_vec_int
640 CALL openpmd_c_attributable_set_attribute_vec_int( &
641 this%c_ptr, name//c_null_char, c_loc(vec(1)), size_)
643 END SUBROUTINE openpmd_attributable_set_attribute_vec_int
645 SUBROUTINE openpmd_attributable_series_flush(this, backendconfig)
646 CLASS(openpmd_attributable_type) :: this
647 CHARACTER(len=*),
INTENT(IN),
OPTIONAL :: backendconfig
648 CHARACTER(len=default_string_length),
SAVE :: my_backendconfig =
""
651 SUBROUTINE openpmd_c_attributable_series_flush(attributable, config) &
652 BIND(C, NAME="openPMD_Attributable_series_flush")
653 IMPORT :: c_char, c_size_t, c_int, c_ptr
654 TYPE(C_PTR),
VALUE :: attributable
655 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: config
656 END SUBROUTINE openpmd_c_attributable_series_flush
659 IF (
PRESENT(backendconfig)) my_backendconfig = backendconfig
660 CALL openpmd_c_attributable_series_flush(this%c_ptr, my_backendconfig//c_null_char)
661 END SUBROUTINE openpmd_attributable_series_flush
663 FUNCTION openpmd_json_merge(into, from, mpi_comm)
RESULT(merged)
664 CHARACTER(len=*),
INTENT(IN) :: into, from
665 CLASS(mp_comm_type),
INTENT(in),
OPTIONAL :: mpi_comm
666 CHARACTER(:),
ALLOCATABLE :: merged
667 CHARACTER(kind=C_CHAR),
POINTER :: c_merged
668 INTEGER(C_SIZE_T) :: length_of_c_string
669 TYPE(c_ptr),
SAVE :: comm_c = c_null_ptr
679 SUBROUTINE cp2k_c_mpi_comm_f2c(comm_f, comm_c)
bind(C, name="CP2K_MPI_Comm_f2c")
681 INTEGER(kind=C_INT),
VALUE :: comm_f
682 TYPE(c_ptr) :: comm_c
683 END SUBROUTINE cp2k_c_mpi_comm_f2c
686 FUNCTION openpmd_c_json_merge(into, from, mpi_comm)
RESULT(merged) &
687 BIND(C, NAME="openPMD_json_merge")
688 IMPORT :: c_char, c_int, c_ptr
689 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: into, from
690 TYPE(C_PTR),
value :: mpi_comm
691 CHARACTER(kind=C_CHAR),
POINTER :: merged
692 END FUNCTION openpmd_c_json_merge
695 FUNCTION get_strlen(c_string)
RESULT(strlen) &
696 BIND(C, NAME="CP2K_strlen")
697 IMPORT :: c_char, c_size_t
698 CHARACTER(kind=C_CHAR),
DIMENSION(*),
INTENT(IN) :: c_string
699 INTEGER(C_SIZE_T) :: strlen
700 END FUNCTION get_strlen
703 SUBROUTINE free(c_string) &
704 BIND(C, NAME="CP2K_free")
706 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: c_string
710 IF (
PRESENT(mpi_comm))
THEN
711 CALL cp2k_c_mpi_comm_f2c(mpi_comm%get_handle(), comm_c)
713 c_merged => openpmd_c_json_merge(into//c_null_char, from//c_null_char, comm_c)
714 length_of_c_string = get_strlen(c_merged)
715 ALLOCATE (
character(length_of_c_string) :: merged)
716 merged = trim(adjustl(transfer(c_merged(1:length_of_c_string), merged)))
718 END FUNCTION openpmd_json_merge
726 FUNCTION openpmd_iteration_get_mesh(this, name)
RESULT(mesh)
727 CLASS(openpmd_iteration_type) :: this
728 CHARACTER(len=*),
INTENT(IN) :: name
729 TYPE(openpmd_mesh_type) :: mesh
731 INTEGER(kind=C_INT) :: status
733 FUNCTION openpmd_c_iteration_get_mesh(iteration, name, mesh)
RESULT(status) &
734 BIND(C, name="openPMD_Iteration_get_mesh")
735 IMPORT :: c_ptr, c_int64_t, c_int, c_size_t, c_char
736 TYPE(C_PTR),
VALUE :: iteration
737 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: name
739 INTEGER(KIND=C_INT) :: status
740 END FUNCTION openpmd_c_iteration_get_mesh
743 cpassert(.NOT. c_associated(mesh%c_ptr))
744 status = openpmd_c_iteration_get_mesh(this%c_ptr, name//c_null_char, mesh%c_ptr)
745 cpassert(c_associated(mesh%c_ptr))
746 END FUNCTION openpmd_iteration_get_mesh
754 FUNCTION openpmd_iteration_get_particle_species(this, name)
RESULT(particle_species)
755 CLASS(openpmd_iteration_type) :: this
756 CHARACTER(len=*),
INTENT(IN) :: name
757 TYPE(openpmd_particle_species_type) :: particle_species
759 INTEGER(kind=C_INT) :: status
761 FUNCTION openpmd_c_iteration_get_particle_species(iteration, name, particle_species)
RESULT(status) &
762 BIND(C, name="openPMD_Iteration_get_particle_species")
763 IMPORT :: c_ptr, c_int64_t, c_int, c_size_t, c_char
764 TYPE(C_PTR),
VALUE :: iteration
765 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: name
766 TYPE(C_PTR) :: particle_species
767 INTEGER(KIND=C_INT) :: status
768 END FUNCTION openpmd_c_iteration_get_particle_species
771 cpassert(.NOT. c_associated(particle_species%c_ptr))
772 status = openpmd_c_iteration_get_particle_species( &
773 this%c_ptr, name//c_null_char, particle_species%c_ptr)
774 cpassert(c_associated(particle_species%c_ptr))
775 END FUNCTION openpmd_iteration_get_particle_species
781 SUBROUTINE openpmd_iteration_close(iteration)
782 CLASS(openpmd_iteration_type),
INTENT(INOUT) :: iteration
789 SUBROUTINE openpmd_c_iteration_close(iteration) &
790 BIND(C, name="openPMD_Iteration_close")
792 TYPE(C_PTR),
VALUE :: iteration
793 END SUBROUTINE openpmd_c_iteration_close
796 cpassert(c_associated(iteration%c_ptr))
797 CALL openpmd_c_iteration_close(iteration=iteration%c_ptr)
798 iteration%c_ptr = c_null_ptr
799 END SUBROUTINE openpmd_iteration_close
801 FUNCTION openpmd_iteration_closed(iteration)
RESULT(res)
802 CLASS(openpmd_iteration_type),
INTENT(IN) :: iteration
805 INTEGER(kind=C_INT) :: res_tmp
812 FUNCTION openpmd_c_iteration_closed(iteration)
RESULT(res) &
813 BIND(C, name="openPMD_Iteration_closed")
814 IMPORT :: c_ptr, c_int
815 TYPE(C_PTR),
VALUE :: iteration
816 INTEGER(kind=C_INT) :: res
817 END FUNCTION openpmd_c_iteration_closed
820 cpassert(c_associated(iteration%c_ptr))
821 res_tmp = openpmd_c_iteration_closed(iteration=iteration%c_ptr)
822 IF (res_tmp == 0)
THEN
827 END FUNCTION openpmd_iteration_closed
835 SUBROUTINE openpmd_record_component_make_empty(this, dtype, dimensionality)
836 CLASS(openpmd_record_component_type) :: this
837 INTEGER(kind=C_INT) :: dtype
838 INTEGER :: dimensionality
840 INTEGER(kind=C_INT) :: status
842 FUNCTION openpmd_c_record_component_make_empty(record_component, dtype, dimensionality)
RESULT(status) &
843 BIND(C, name="openPMD_RecordComponent_makeEmpty")
844 IMPORT :: c_ptr, c_int64_t, c_int, c_size_t, c_char
845 TYPE(C_PTR),
VALUE :: record_component
846 INTEGER(KIND=C_INT),
VALUE :: dtype
847 INTEGER(KIND=C_INT),
VALUE :: dimensionality
848 INTEGER(KIND=C_INT) :: status
849 END FUNCTION openpmd_c_record_component_make_empty
852 status = openpmd_c_record_component_make_empty(this%c_ptr, dtype, dimensionality)
853 END SUBROUTINE openpmd_record_component_make_empty
861 SUBROUTINE openpmd_record_component_make_constant_zero(this, dtype, extent)
862 CLASS(openpmd_record_component_type) :: this
863 INTEGER(kind=C_INT) :: dtype
864 INTEGER,
DIMENSION(:),
TARGET :: extent
866 INTEGER(kind=C_INT) :: status
868 FUNCTION openpmd_c_record_component_make_constant( &
869 record_component, dtype, dimensions, extent, invert, value)
RESULT(status) &
870 BIND(C, name="openPMD_RecordComponent_makeConstant")
871 IMPORT :: c_ptr, c_int64_t, c_int, c_size_t, c_char
872 TYPE(C_PTR),
VALUE :: record_component
873 INTEGER(KIND=C_INT),
VALUE :: dtype
874 INTEGER(KIND=C_INT),
VALUE :: dimensions, invert
875 TYPE(C_PTR),
VALUE :: extent
876 TYPE(C_PTR),
VALUE :: value
877 INTEGER(KIND=C_INT) :: status
878 END FUNCTION openpmd_c_record_component_make_constant
881 status = openpmd_c_record_component_make_constant( &
882 this%c_ptr, dtype,
SIZE(extent), c_loc(extent(1)), 1, c_null_ptr)
883 END SUBROUTINE openpmd_record_component_make_constant_zero
885 SUBROUTINE openpmd_mesh_set_axis_labels(this, labels)
886 CLASS(openpmd_mesh_type) :: this
887 CHARACTER(len=*),
DIMENSION(:) :: labels
890 CHARACTER(len=default_string_length),
ALLOCATABLE,
TARGET :: labels_as_null_terminated_strings(:)
891 TYPE(C_PTR),
ALLOCATABLE,
TARGET :: labels_as_c_strings(:)
894 SUBROUTINE openpmd_c_mesh_set_axis_labels(mesh, labels, len_labels, invert) &
895 BIND(C, NAME="openPMD_Mesh_set_axis_labels")
896 IMPORT :: c_char, c_size_t, c_int, c_ptr
897 TYPE(C_PTR),
VALUE :: mesh
898 TYPE(C_PTR),
VALUE :: labels
899 INTEGER(kind=C_INT),
VALUE :: len_labels, invert
900 END SUBROUTINE openpmd_c_mesh_set_axis_labels
903 ALLOCATE (labels_as_null_terminated_strings(
SIZE(labels)))
904 ALLOCATE (labels_as_c_strings(
SIZE(labels)))
906 DO i = 1,
SIZE(labels)
907 labels_as_null_terminated_strings(i) = trim(labels(i))//c_null_char
908 labels_as_c_strings(i) = c_loc(labels_as_null_terminated_strings(i))
911 CALL openpmd_c_mesh_set_axis_labels(this%c_ptr, c_loc(labels_as_c_strings(1)),
SIZE(labels), invert=1)
913 DEALLOCATE (labels_as_c_strings)
914 DEALLOCATE (labels_as_null_terminated_strings)
915 END SUBROUTINE openpmd_mesh_set_axis_labels
917 SUBROUTINE openpmd_record_component_reset_dataset(this, dtype, extent, cfg)
918 CLASS(openpmd_record_component_type) :: this
919 INTEGER(kind=C_INT) :: dtype
920 INTEGER,
DIMENSION(:),
TARGET :: extent
921 CHARACTER(len=*),
OPTIONAL :: cfg
923 CHARACTER(len=default_string_length),
SAVE :: my_config =
"{}"
924 INTEGER(kind=C_INT) :: status
926 FUNCTION openpmd_c_record_component_reset_dataset( &
927 record_component, dtype, dimensions, extent, invert, cfg)
RESULT(status) &
928 BIND(C, name="openPMD_RecordComponent_resetDataset")
929 IMPORT :: c_ptr, c_int64_t, c_int, c_size_t, c_char
930 TYPE(C_PTR),
VALUE :: record_component
931 INTEGER(KIND=C_INT),
VALUE :: dtype
932 INTEGER(KIND=C_INT),
VALUE :: dimensions, invert
933 TYPE(C_PTR),
VALUE :: extent
934 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: cfg
935 INTEGER(KIND=C_INT) :: status
936 END FUNCTION openpmd_c_record_component_reset_dataset
939 IF (
PRESENT(cfg)) my_config = cfg
941 status = openpmd_c_record_component_reset_dataset( &
942 this%c_ptr, dtype,
SIZE(extent), c_loc(extent(1)), 1, my_config//c_null_char)
943 END SUBROUTINE openpmd_record_component_reset_dataset
946 SUBROUTINE openpmd_record_component_store_chunk_1d_double (record_component, data_, offset)
947 CLASS(openpmd_record_component_type) :: record_component
948 REAL(kind=
dp),
TARGET :: data_(:)
949 INTEGER,
DIMENSION(1),
TARGET :: offset, extent
951 INTEGER(kind=C_INT) :: status
954 FUNCTION openpmd_c_record_component_store_chunk( &
955 record_component, dtype, dimensions, offset, extent, invert, data_)
RESULT(status) &
956 BIND(C, name="openPMD_RecordComponent_storeChunk")
957 IMPORT :: c_ptr, c_int64_t, c_int, c_size_t, c_char
958 TYPE(C_PTR),
VALUE :: record_component
959 INTEGER(KIND=C_INT),
VALUE :: dtype
960 INTEGER(KIND=C_INT),
VALUE :: dimensions, invert
961 TYPE(C_PTR),
VALUE :: offset, extent
962 TYPE(C_PTR),
VALUE :: data_
963 INTEGER(KIND=C_INT) :: status
964 END FUNCTION openpmd_c_record_component_store_chunk
967 extent = shape(data_)
968 status = openpmd_c_record_component_store_chunk( &
969 record_component%c_ptr, &
970 openpmd_type_double, &
977 END SUBROUTINE openpmd_record_component_store_chunk_1d_double
979 FUNCTION openpmd_record_component_store_chunk_span_1d_double ( &
980 record_component, offset, extent)
RESULT(memory_view)
981 CLASS(openpmd_record_component_type) :: record_component
982 INTEGER,
DIMENSION(1),
TARGET :: offset, extent
984 TYPE(openpmd_dynamic_memory_view_type_1d) :: memory_view
986 INTEGER(kind=C_INT) :: status
989 FUNCTION openpmd_c_record_component_store_chunk_span( &
990 record_component, dtype, dimensions, offset, extent, invert, memory_view)
RESULT(status) &
991 BIND(C, name="openPMD_RecordComponent_storeChunkSpan")
992 IMPORT :: c_ptr, c_int64_t, c_int, c_size_t, c_char
993 TYPE(C_PTR),
VALUE :: record_component
994 INTEGER(KIND=C_INT),
VALUE :: dtype
995 INTEGER(KIND=C_INT),
VALUE :: dimensions, invert
996 TYPE(C_PTR),
VALUE :: offset, extent
997 TYPE(C_PTR) :: memory_view
998 INTEGER(KIND=C_INT) :: status
999 END FUNCTION openpmd_c_record_component_store_chunk_span
1002 memory_view%chunk_extent = extent
1003 status = openpmd_c_record_component_store_chunk_span( &
1004 record_component%c_ptr, &
1005 openpmd_type_double, &
1012 END FUNCTION openpmd_record_component_store_chunk_span_1d_double
1014 FUNCTION openpmd_dynamic_memory_view_resolve_1d_double (memory_view, deallocate)
RESULT(buffer)
1015 CLASS(openpmd_dynamic_memory_view_type_1d) :: memory_view
1016 LOGICAL :: deallocate
1017 REAL(kind=
dp),
POINTER :: buffer(:)
1019 INTEGER(kind=C_INT) :: status, deallocate_c
1020 TYPE(C_PTR),
TARGET :: c_buffer
1023 FUNCTION openpmd_c_dynamic_memory_view_resolve(memory_view, deallocate, write_buffer)
RESULT(status) &
1024 BIND(C, name="openPMD_DynamicMemoryView_resolve")
1025 IMPORT :: c_ptr, c_int
1026 TYPE(C_PTR),
VALUE :: memory_view
1027 INTEGER(KIND=C_INT),
VALUE :: deallocate
1028 TYPE(C_PTR) :: write_buffer
1029 INTEGER(KIND=C_INT) :: status
1030 END FUNCTION openpmd_c_dynamic_memory_view_resolve
1033 IF (deallocate)
THEN
1039 status = openpmd_c_dynamic_memory_view_resolve(memory_view%c_ptr, deallocate_c, c_buffer)
1040 CALL c_f_pointer(c_buffer, buffer, memory_view%chunk_extent)
1041 END FUNCTION openpmd_dynamic_memory_view_resolve_1d_double
1043 SUBROUTINE openpmd_record_component_store_chunk_2d_double (record_component, data_, offset)
1044 CLASS(openpmd_record_component_type) :: record_component
1045 REAL(kind=
dp),
TARGET :: data_(:,:)
1046 INTEGER,
DIMENSION(2),
TARGET :: offset, extent
1048 INTEGER(kind=C_INT) :: status
1051 FUNCTION openpmd_c_record_component_store_chunk( &
1052 record_component, dtype, dimensions, offset, extent, invert, data_)
RESULT(status) &
1053 BIND(C, name="openPMD_RecordComponent_storeChunk")
1054 IMPORT :: c_ptr, c_int64_t, c_int, c_size_t, c_char
1055 TYPE(C_PTR),
VALUE :: record_component
1056 INTEGER(KIND=C_INT),
VALUE :: dtype
1057 INTEGER(KIND=C_INT),
VALUE :: dimensions, invert
1058 TYPE(C_PTR),
VALUE :: offset, extent
1059 TYPE(C_PTR),
VALUE :: data_
1060 INTEGER(KIND=C_INT) :: status
1061 END FUNCTION openpmd_c_record_component_store_chunk
1064 extent = shape(data_)
1065 status = openpmd_c_record_component_store_chunk( &
1066 record_component%c_ptr, &
1067 openpmd_type_double, &
1074 END SUBROUTINE openpmd_record_component_store_chunk_2d_double
1076 FUNCTION openpmd_record_component_store_chunk_span_2d_double ( &
1077 record_component, offset, extent)
RESULT(memory_view)
1078 CLASS(openpmd_record_component_type) :: record_component
1079 INTEGER,
DIMENSION(2),
TARGET :: offset, extent
1081 TYPE(openpmd_dynamic_memory_view_type_2d) :: memory_view
1083 INTEGER(kind=C_INT) :: status
1086 FUNCTION openpmd_c_record_component_store_chunk_span( &
1087 record_component, dtype, dimensions, offset, extent, invert, memory_view)
RESULT(status) &
1088 BIND(C, name="openPMD_RecordComponent_storeChunkSpan")
1089 IMPORT :: c_ptr, c_int64_t, c_int, c_size_t, c_char
1090 TYPE(C_PTR),
VALUE :: record_component
1091 INTEGER(KIND=C_INT),
VALUE :: dtype
1092 INTEGER(KIND=C_INT),
VALUE :: dimensions, invert
1093 TYPE(C_PTR),
VALUE :: offset, extent
1094 TYPE(C_PTR) :: memory_view
1095 INTEGER(KIND=C_INT) :: status
1096 END FUNCTION openpmd_c_record_component_store_chunk_span
1099 memory_view%chunk_extent = extent
1100 status = openpmd_c_record_component_store_chunk_span( &
1101 record_component%c_ptr, &
1102 openpmd_type_double, &
1109 END FUNCTION openpmd_record_component_store_chunk_span_2d_double
1111 FUNCTION openpmd_dynamic_memory_view_resolve_2d_double (memory_view, deallocate)
RESULT(buffer)
1112 CLASS(openpmd_dynamic_memory_view_type_2d) :: memory_view
1113 LOGICAL :: deallocate
1114 REAL(kind=
dp),
POINTER :: buffer(:,:)
1116 INTEGER(kind=C_INT) :: status, deallocate_c
1117 TYPE(C_PTR),
TARGET :: c_buffer
1120 FUNCTION openpmd_c_dynamic_memory_view_resolve(memory_view, deallocate, write_buffer)
RESULT(status) &
1121 BIND(C, name="openPMD_DynamicMemoryView_resolve")
1122 IMPORT :: c_ptr, c_int
1123 TYPE(C_PTR),
VALUE :: memory_view
1124 INTEGER(KIND=C_INT),
VALUE :: deallocate
1125 TYPE(C_PTR) :: write_buffer
1126 INTEGER(KIND=C_INT) :: status
1127 END FUNCTION openpmd_c_dynamic_memory_view_resolve
1130 IF (deallocate)
THEN
1136 status = openpmd_c_dynamic_memory_view_resolve(memory_view%c_ptr, deallocate_c, c_buffer)
1137 CALL c_f_pointer(c_buffer, buffer, memory_view%chunk_extent)
1138 END FUNCTION openpmd_dynamic_memory_view_resolve_2d_double
1140 SUBROUTINE openpmd_record_component_store_chunk_3d_double (record_component, data_, offset)
1141 CLASS(openpmd_record_component_type) :: record_component
1142 REAL(kind=
dp),
TARGET :: data_(:,:,:)
1143 INTEGER,
DIMENSION(3),
TARGET :: offset, extent
1145 INTEGER(kind=C_INT) :: status
1148 FUNCTION openpmd_c_record_component_store_chunk( &
1149 record_component, dtype, dimensions, offset, extent, invert, data_)
RESULT(status) &
1150 BIND(C, name="openPMD_RecordComponent_storeChunk")
1151 IMPORT :: c_ptr, c_int64_t, c_int, c_size_t, c_char
1152 TYPE(C_PTR),
VALUE :: record_component
1153 INTEGER(KIND=C_INT),
VALUE :: dtype
1154 INTEGER(KIND=C_INT),
VALUE :: dimensions, invert
1155 TYPE(C_PTR),
VALUE :: offset, extent
1156 TYPE(C_PTR),
VALUE :: data_
1157 INTEGER(KIND=C_INT) :: status
1158 END FUNCTION openpmd_c_record_component_store_chunk
1161 extent = shape(data_)
1162 status = openpmd_c_record_component_store_chunk( &
1163 record_component%c_ptr, &
1164 openpmd_type_double, &
1171 END SUBROUTINE openpmd_record_component_store_chunk_3d_double
1173 FUNCTION openpmd_record_component_store_chunk_span_3d_double ( &
1174 record_component, offset, extent)
RESULT(memory_view)
1175 CLASS(openpmd_record_component_type) :: record_component
1176 INTEGER,
DIMENSION(3),
TARGET :: offset, extent
1178 TYPE(openpmd_dynamic_memory_view_type_3d) :: memory_view
1180 INTEGER(kind=C_INT) :: status
1183 FUNCTION openpmd_c_record_component_store_chunk_span( &
1184 record_component, dtype, dimensions, offset, extent, invert, memory_view)
RESULT(status) &
1185 BIND(C, name="openPMD_RecordComponent_storeChunkSpan")
1186 IMPORT :: c_ptr, c_int64_t, c_int, c_size_t, c_char
1187 TYPE(C_PTR),
VALUE :: record_component
1188 INTEGER(KIND=C_INT),
VALUE :: dtype
1189 INTEGER(KIND=C_INT),
VALUE :: dimensions, invert
1190 TYPE(C_PTR),
VALUE :: offset, extent
1191 TYPE(C_PTR) :: memory_view
1192 INTEGER(KIND=C_INT) :: status
1193 END FUNCTION openpmd_c_record_component_store_chunk_span
1196 memory_view%chunk_extent = extent
1197 status = openpmd_c_record_component_store_chunk_span( &
1198 record_component%c_ptr, &
1199 openpmd_type_double, &
1206 END FUNCTION openpmd_record_component_store_chunk_span_3d_double
1208 FUNCTION openpmd_dynamic_memory_view_resolve_3d_double (memory_view, deallocate)
RESULT(buffer)
1209 CLASS(openpmd_dynamic_memory_view_type_3d) :: memory_view
1210 LOGICAL :: deallocate
1211 REAL(kind=
dp),
POINTER :: buffer(:,:,:)
1213 INTEGER(kind=C_INT) :: status, deallocate_c
1214 TYPE(C_PTR),
TARGET :: c_buffer
1217 FUNCTION openpmd_c_dynamic_memory_view_resolve(memory_view, deallocate, write_buffer)
RESULT(status) &
1218 BIND(C, name="openPMD_DynamicMemoryView_resolve")
1219 IMPORT :: c_ptr, c_int
1220 TYPE(C_PTR),
VALUE :: memory_view
1221 INTEGER(KIND=C_INT),
VALUE :: deallocate
1222 TYPE(C_PTR) :: write_buffer
1223 INTEGER(KIND=C_INT) :: status
1224 END FUNCTION openpmd_c_dynamic_memory_view_resolve
1227 IF (deallocate)
THEN
1233 status = openpmd_c_dynamic_memory_view_resolve(memory_view%c_ptr, deallocate_c, c_buffer)
1234 CALL c_f_pointer(c_buffer, buffer, memory_view%chunk_extent)
1235 END FUNCTION openpmd_dynamic_memory_view_resolve_3d_double
1243 FUNCTION openpmd_particle_species_get_record(this, name)
RESULT(record)
1244 CLASS(openpmd_particle_species_type) :: this
1245 CHARACTER(len=*),
INTENT(IN) :: name
1246 TYPE(openpmd_record_type) :: record
1248 INTEGER(kind=C_INT) :: status
1250 FUNCTION openpmd_c_particle_species_get_record(particle_species, name, record)
RESULT(status) &
1251 BIND(C, name="openPMD_ParticleSpecies_get_Record")
1252 IMPORT :: c_ptr, c_int64_t, c_int, c_size_t, c_char
1253 TYPE(C_PTR),
VALUE :: particle_species
1254 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: name
1255 TYPE(C_PTR) :: record
1256 INTEGER(KIND=C_INT) :: status
1257 END FUNCTION openpmd_c_particle_species_get_record
1260 cpassert(.NOT. c_associated(record%c_ptr))
1261 status = openpmd_c_particle_species_get_record(this%c_ptr, name//c_null_char, record%c_ptr)
1262 cpassert(c_associated(record%c_ptr))
1263 END FUNCTION openpmd_particle_species_get_record
1271 FUNCTION openpmd_record_get_component(this, name)
RESULT(record_component)
1272 CLASS(openpmd_record_type) :: this
1273 CHARACTER(len=*),
INTENT(IN) :: name
1274 TYPE(openpmd_record_component_type) :: record_component
1276 INTEGER(kind=C_INT) :: status
1278 FUNCTION openpmd_c_record_get_component(record, name, record_component)
RESULT(status) &
1279 BIND(C, name="openPMD_Record_get_Component")
1280 IMPORT :: c_ptr, c_int64_t, c_int, c_size_t, c_char
1281 TYPE(C_PTR),
VALUE :: record
1282 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: name
1283 TYPE(C_PTR) :: record_component
1284 INTEGER(KIND=C_INT) :: status
1285 END FUNCTION openpmd_c_record_get_component
1288 cpassert(.NOT. c_associated(record_component%c_ptr))
1289 status = openpmd_c_record_get_component(this%c_ptr, name//c_null_char, record_component%c_ptr)
1290 cpassert(c_associated(record_component%c_ptr))
1291 END FUNCTION openpmd_record_get_component
1294 SUBROUTINE openpmd_mesh_set_grid_global_offset (this, vec)
1295 CLASS(openpmd_mesh_type) :: this
1296 REAL(KIND=
dp),
DIMENSION(:),
TARGET :: vec
1298 INTEGER,
TARGET :: size_
1300 SUBROUTINE openpmd_c_set_vector_attribute(mesh, vec, length, invert) &
1301 BIND(C, NAME="openPMD_Mesh_setGridGlobalOffset")
1302 IMPORT :: c_char, c_size_t, c_int, c_ptr
1303 TYPE(C_PTR),
VALUE :: mesh
1304 TYPE(C_PTR),
VALUE :: vec
1305 INTEGER(kind=C_INT),
VALUE :: length, invert
1306 END SUBROUTINE openpmd_c_set_vector_attribute
1310 CALL openpmd_c_set_vector_attribute(this%c_ptr, c_loc(vec(1)), size_, 1)
1312 END SUBROUTINE openpmd_mesh_set_grid_global_offset
1313 SUBROUTINE openpmd_mesh_set_grid_spacing (this, vec)
1314 CLASS(openpmd_mesh_type) :: this
1315 REAL(KIND=
dp),
DIMENSION(:),
TARGET :: vec
1317 INTEGER,
TARGET :: size_
1319 SUBROUTINE openpmd_c_set_vector_attribute(mesh, vec, length, invert) &
1320 BIND(C, NAME="openPMD_Mesh_setGridSpacing")
1321 IMPORT :: c_char, c_size_t, c_int, c_ptr
1322 TYPE(C_PTR),
VALUE :: mesh
1323 TYPE(C_PTR),
VALUE :: vec
1324 INTEGER(kind=C_INT),
VALUE :: length, invert
1325 END SUBROUTINE openpmd_c_set_vector_attribute
1329 CALL openpmd_c_set_vector_attribute(this%c_ptr, c_loc(vec(1)), size_, 1)
1331 END SUBROUTINE openpmd_mesh_set_grid_spacing
1332 SUBROUTINE openpmd_mesh_set_position (this, vec)
1333 CLASS(openpmd_mesh_type) :: this
1334 REAL(KIND=
dp),
DIMENSION(:),
TARGET :: vec
1336 INTEGER,
TARGET :: size_
1338 SUBROUTINE openpmd_c_set_vector_attribute(mesh, vec, length, invert) &
1339 BIND(C, NAME="openPMD_Mesh_setPosition")
1340 IMPORT :: c_char, c_size_t, c_int, c_ptr
1341 TYPE(C_PTR),
VALUE :: mesh
1342 TYPE(C_PTR),
VALUE :: vec
1343 INTEGER(kind=C_INT),
VALUE :: length, invert
1344 END SUBROUTINE openpmd_c_set_vector_attribute
1348 CALL openpmd_c_set_vector_attribute(this%c_ptr, c_loc(vec(1)), size_, 1)
1350 END SUBROUTINE openpmd_mesh_set_position
Defines the basic variable types.
integer, parameter, public dp
integer, parameter, public default_string_length
integer, parameter, public sp
Interface to the message passing library MPI.