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 :: open => openpmd_iteration_open
104 PROCEDURE,
PUBLIC :: closed => openpmd_iteration_closed
105 END TYPE openpmd_iteration_type
107 TYPE openpmd_mesh_type
109 TYPE(C_PTR) :: c_ptr = c_null_ptr
111 PROCEDURE,
PUBLIC :: as_record_component => openpmd_mesh_as_record_component
112 PROCEDURE,
PUBLIC :: set_axis_labels => openpmd_mesh_set_axis_labels
113 PROCEDURE,
PUBLIC :: set_grid_global_offset => openpmd_mesh_set_grid_global_offset
114 PROCEDURE,
PUBLIC :: set_grid_spacing => openpmd_mesh_set_grid_spacing
115 PROCEDURE,
PUBLIC :: set_position => openpmd_mesh_set_position
116 END TYPE openpmd_mesh_type
118 TYPE openpmd_particle_species_type
120 TYPE(C_PTR) :: c_ptr = c_null_ptr
122 PROCEDURE,
PUBLIC :: get_record => openpmd_particle_species_get_record
123 END TYPE openpmd_particle_species_type
125 TYPE openpmd_record_component_type
127 TYPE(C_PTR) :: c_ptr = c_null_ptr
129 PROCEDURE,
PUBLIC :: make_empty => openpmd_record_component_make_empty
130 PROCEDURE,
PUBLIC :: make_constant_zero => openpmd_record_component_make_constant_zero
131 PROCEDURE,
PUBLIC :: reset_dataset => openpmd_record_component_reset_dataset
132 PROCEDURE,
PRIVATE :: store_chunk_1d_double &
133 => openpmd_record_component_store_chunk_1d_double
134 PROCEDURE,
PUBLIC :: store_chunk_span_1d_double &
135 => openpmd_record_component_store_chunk_span_1d_double
136 PROCEDURE,
PRIVATE :: store_chunk_2d_double &
137 => openpmd_record_component_store_chunk_2d_double
138 PROCEDURE,
PUBLIC :: store_chunk_span_2d_double &
139 => openpmd_record_component_store_chunk_span_2d_double
140 PROCEDURE,
PRIVATE :: store_chunk_3d_double &
141 => openpmd_record_component_store_chunk_3d_double
142 PROCEDURE,
PUBLIC :: store_chunk_span_3d_double &
143 => openpmd_record_component_store_chunk_span_3d_double
144 generic,
PUBLIC :: store_chunk => &
145 store_chunk_1d_double, &
146 store_chunk_2d_double, &
147 store_chunk_3d_double
148 END TYPE openpmd_record_component_type
150 TYPE openpmd_mesh_record_component_type
152 TYPE(C_PTR) :: c_ptr = c_null_ptr
153 END TYPE openpmd_mesh_record_component_type
155 TYPE openpmd_record_type
157 TYPE(C_PTR) :: c_ptr = c_null_ptr
159 PROCEDURE,
PUBLIC :: as_record_component => openpmd_record_as_record_component
160 PROCEDURE,
PUBLIC :: get_component => openpmd_record_get_component
161 END TYPE openpmd_record_type
163 TYPE openpmd_dynamic_memory_view_type_1d
165 INTEGER,
DIMENSION(1) :: chunk_extent
166 TYPE(C_PTR) :: c_ptr = c_null_ptr
170 PROCEDURE,
PUBLIC :: resolve_double &
171 => openpmd_dynamic_memory_view_resolve_1d_double
172 END TYPE openpmd_dynamic_memory_view_type_1d
173 TYPE openpmd_dynamic_memory_view_type_2d
175 INTEGER,
DIMENSION(2) :: chunk_extent
176 TYPE(C_PTR) :: c_ptr = c_null_ptr
180 PROCEDURE,
PUBLIC :: resolve_double &
181 => openpmd_dynamic_memory_view_resolve_2d_double
182 END TYPE openpmd_dynamic_memory_view_type_2d
183 TYPE openpmd_dynamic_memory_view_type_3d
185 INTEGER,
DIMENSION(3) :: chunk_extent
186 TYPE(C_PTR) :: c_ptr = c_null_ptr
190 PROCEDURE,
PUBLIC :: resolve_double &
191 => openpmd_dynamic_memory_view_resolve_3d_double
192 END TYPE openpmd_dynamic_memory_view_type_3d
195 PUBLIC :: openpmd_attributable_type
196 PUBLIC :: openpmd_iteration_type
197 PUBLIC :: openpmd_mesh_type
198 PUBLIC :: openpmd_particle_species_type
199 PUBLIC :: openpmd_record_component_type
200 PUBLIC :: openpmd_record_type
201 PUBLIC :: openpmd_series_type, openpmd_series_create
204 PUBLIC :: openpmd_access_create, openpmd_access_read_only
205 PUBLIC :: openpmd_get_default_extension
206 PUBLIC :: openpmd_json_merge
209 PUBLIC :: openpmd_type_arr_dbl_7
210 PUBLIC :: openpmd_type_bool
211 PUBLIC :: openpmd_type_cdouble
212 PUBLIC :: openpmd_type_cfloat
213 PUBLIC :: openpmd_type_char
214 PUBLIC :: openpmd_type_clong_double
215 PUBLIC :: openpmd_type_double
216 PUBLIC :: openpmd_type_float
217 PUBLIC :: openpmd_type_int
218 PUBLIC :: openpmd_type_long
219 PUBLIC :: openpmd_type_long_double
220 PUBLIC :: openpmd_type_longlong
221 PUBLIC :: openpmd_type_schar
222 PUBLIC :: openpmd_type_short
223 PUBLIC :: openpmd_type_string
224 PUBLIC :: openpmd_type_uchar
225 PUBLIC :: openpmd_type_uint
226 PUBLIC :: openpmd_type_ulong
227 PUBLIC :: openpmd_type_ulonglong
228 PUBLIC :: openpmd_type_ushort
229 PUBLIC :: openpmd_type_vec_cdouble
230 PUBLIC :: openpmd_type_vec_cfloat
231 PUBLIC :: openpmd_type_vec_char
232 PUBLIC :: openpmd_type_vec_clong_double
233 PUBLIC :: openpmd_type_vec_double
234 PUBLIC :: openpmd_type_vec_float
235 PUBLIC :: openpmd_type_vec_int
236 PUBLIC :: openpmd_type_vec_long
237 PUBLIC :: openpmd_type_vec_long_double
238 PUBLIC :: openpmd_type_vec_longlong
239 PUBLIC :: openpmd_type_vec_schar
240 PUBLIC :: openpmd_type_vec_short
241 PUBLIC :: openpmd_type_vec_string
242 PUBLIC :: openpmd_type_vec_uchar
243 PUBLIC :: openpmd_type_vec_uint
244 PUBLIC :: openpmd_type_vec_ulong
245 PUBLIC :: openpmd_type_vec_ulonglong
246 PUBLIC :: openpmd_type_vec_ushort
248 PUBLIC :: openpmd_series_as_attributable
249 PUBLIC :: openpmd_iteration_as_attributable
250 PUBLIC :: openpmd_record_component_as_attributable
251 PUBLIC :: openpmd_mesh_as_record_component
252 PUBLIC :: openpmd_record_as_record_component
253 PUBLIC :: openpmd_mesh_as_mesh_record_component
254 PUBLIC :: openpmd_mesh_record_component_as_record_component
255 PUBLIC :: openpmd_dynamic_memory_view_type_1d
256 PUBLIC :: openpmd_dynamic_memory_view_type_2d
257 PUBLIC :: openpmd_dynamic_memory_view_type_3d
270 FUNCTION as_pointer(this)
RESULT(res)
271 CLASS(openpmd_series_type),
INTENT(IN) :: this
275 END FUNCTION as_pointer
277 FUNCTION openpmd_series_as_attributable (this)
RESULT(res)
278 CLASS(openpmd_Series_type),
INTENT(IN) :: this
279 TYPE(openpmd_Attributable_type) :: res
282 SUBROUTINE openpmd_c_series_as_attributable (child, parent) &
283 BIND(C, name="openPMD_Series_upcast_to_Attributable")
285 TYPE(C_PTR),
VALUE :: child
286 TYPE(C_PTR) :: parent
287 END SUBROUTINE openpmd_c_series_as_attributable
290 CALL openpmd_c_series_as_attributable (this%c_ptr, res%c_ptr)
291 END FUNCTION openpmd_series_as_attributable
292 FUNCTION openpmd_iteration_as_attributable (this)
RESULT(res)
293 CLASS(openpmd_Iteration_type),
INTENT(IN) :: this
294 TYPE(openpmd_Attributable_type) :: res
297 SUBROUTINE openpmd_c_iteration_as_attributable (child, parent) &
298 BIND(C, name="openPMD_Iteration_upcast_to_Attributable")
300 TYPE(C_PTR),
VALUE :: child
301 TYPE(C_PTR) :: parent
302 END SUBROUTINE openpmd_c_iteration_as_attributable
305 CALL openpmd_c_iteration_as_attributable (this%c_ptr, res%c_ptr)
306 END FUNCTION openpmd_iteration_as_attributable
307 FUNCTION openpmd_record_component_as_attributable (this)
RESULT(res)
308 CLASS(openpmd_record_component_type),
INTENT(IN) :: this
309 TYPE(openpmd_Attributable_type) :: res
312 SUBROUTINE openpmd_c_record_component_as_attributable (child, parent) &
313 BIND(C, name="openPMD_RecordComponent_upcast_to_Attributable")
315 TYPE(C_PTR),
VALUE :: child
316 TYPE(C_PTR) :: parent
317 END SUBROUTINE openpmd_c_record_component_as_attributable
320 CALL openpmd_c_record_component_as_attributable (this%c_ptr, res%c_ptr)
321 END FUNCTION openpmd_record_component_as_attributable
322 FUNCTION openpmd_mesh_as_record_component (this)
RESULT(res)
323 CLASS(openpmd_Mesh_type),
INTENT(IN) :: this
324 TYPE(openpmd_record_component_type) :: res
327 SUBROUTINE openpmd_c_mesh_as_record_component (child, parent) &
328 BIND(C, name="openPMD_Mesh_upcast_to_RecordComponent")
330 TYPE(C_PTR),
VALUE :: child
331 TYPE(C_PTR) :: parent
332 END SUBROUTINE openpmd_c_mesh_as_record_component
335 CALL openpmd_c_mesh_as_record_component (this%c_ptr, res%c_ptr)
336 END FUNCTION openpmd_mesh_as_record_component
337 FUNCTION openpmd_record_as_record_component (this)
RESULT(res)
338 CLASS(openpmd_Record_type),
INTENT(IN) :: this
339 TYPE(openpmd_record_component_type) :: res
342 SUBROUTINE openpmd_c_record_as_record_component (child, parent) &
343 BIND(C, name="openPMD_Record_upcast_to_RecordComponent")
345 TYPE(C_PTR),
VALUE :: child
346 TYPE(C_PTR) :: parent
347 END SUBROUTINE openpmd_c_record_as_record_component
350 CALL openpmd_c_record_as_record_component (this%c_ptr, res%c_ptr)
351 END FUNCTION openpmd_record_as_record_component
352 FUNCTION openpmd_mesh_as_mesh_record_component (this)
RESULT(res)
353 CLASS(openpmd_Mesh_type),
INTENT(IN) :: this
354 TYPE(openpmd_mesh_record_component_type) :: res
357 SUBROUTINE openpmd_c_mesh_as_mesh_record_component (child, parent) &
358 BIND(C, name="openPMD_Mesh_upcast_to_MeshRecordComponent")
360 TYPE(C_PTR),
VALUE :: child
361 TYPE(C_PTR) :: parent
362 END SUBROUTINE openpmd_c_mesh_as_mesh_record_component
365 CALL openpmd_c_mesh_as_mesh_record_component (this%c_ptr, res%c_ptr)
366 END FUNCTION openpmd_mesh_as_mesh_record_component
367 FUNCTION openpmd_mesh_record_component_as_record_component (this)
RESULT(res)
368 CLASS(openpmd_mesh_record_component_type),
INTENT(IN) :: this
369 TYPE(openpmd_record_component_type) :: res
372 SUBROUTINE openpmd_c_mesh_record_component_as_record_component (child, parent) &
373 BIND(C, name="openPMD_MeshRecordComponent_upcast_to_RecordComponent")
375 TYPE(C_PTR),
VALUE :: child
376 TYPE(C_PTR) :: parent
377 END SUBROUTINE openpmd_c_mesh_record_component_as_record_component
380 CALL openpmd_c_mesh_record_component_as_record_component (this%c_ptr, res%c_ptr)
381 END FUNCTION openpmd_mesh_record_component_as_record_component
388 FUNCTION openpmd_series_present(this)
RESULT(res)
389 CLASS(openpmd_series_type),
INTENT(IN) :: this
391 INTEGER :: res_internal
394 FUNCTION openpmd_c_series_present(series)
RESULT(res) &
395 BIND(C, NAME="openPMD_Series_present")
396 IMPORT :: c_ptr, c_int
397 TYPE(C_PTR),
VALUE,
INTENT(IN) :: series
398 INTEGER(kind=C_INT) :: res
399 END FUNCTION openpmd_c_series_present
402 IF (.NOT. c_associated(this%c_ptr))
THEN
407 res_internal = openpmd_c_series_present(this%c_ptr)
408 res = res_internal /= 0
409 END FUNCTION openpmd_series_present
419 FUNCTION openpmd_series_create(path, access, mpi_comm, config)
RESULT(series)
420 CHARACTER(len=*),
INTENT(IN) :: path
421 INTEGER(kind=C_INT),
INTENT(IN) :: access
422 CLASS(mp_comm_type),
INTENT(in),
OPTIONAL :: mpi_comm
423 CHARACTER(len=*),
INTENT(IN),
OPTIONAL,
TARGET :: config
424 TYPE(openpmd_series_type) :: series
426 TYPE(c_ptr),
SAVE :: comm_c = c_null_ptr
427 CHARACTER(len=default_string_length),
TARGET,
SAVE :: default_config =
"{}"
428 CHARACTER(:),
POINTER :: my_config
437 SUBROUTINE cp2k_c_mpi_comm_f2c(comm_f, comm_c)
bind(C, name="CP2K_MPI_Comm_f2c")
439 INTEGER(kind=C_INT),
VALUE :: comm_f
440 TYPE(c_ptr) :: comm_c
441 END SUBROUTINE cp2k_c_mpi_comm_f2c
444 SUBROUTINE openpmd_c_series_create_mpi(path, access, mpi_comm, config, series) &
445 BIND(C, name="openPMD_Series_create_mpi")
446 IMPORT :: c_ptr, c_char, c_int
447 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: path
448 INTEGER(kind=C_INT),
VALUE :: access
449 TYPE(C_PTR),
value :: mpi_comm
450 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: config
451 TYPE(C_PTR) :: series
452 END SUBROUTINE openpmd_c_series_create_mpi
455 SUBROUTINE openpmd_c_series_create(path, access, config, series) &
456 BIND(C, name="openPMD_Series_create")
457 IMPORT :: c_ptr, c_char, c_int
458 TYPE(C_PTR) :: series
459 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: path
460 INTEGER(kind=C_INT),
VALUE :: access
461 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: config
462 END SUBROUTINE openpmd_c_series_create
465 IF (
PRESENT(config))
THEN
468 my_config => default_config
471 cpassert(.NOT. c_associated(series%c_ptr))
472 IF (
PRESENT(mpi_comm))
THEN
473 CALL cp2k_c_mpi_comm_f2c(mpi_comm%get_handle(), comm_c)
474 CALL openpmd_c_series_create_mpi( &
475 path=trim(path)//c_null_char, &
478 config=my_config//c_null_char, &
481 CALL openpmd_c_series_create( &
482 path=trim(path)//c_null_char, &
484 config=my_config//c_null_char, &
487 cpassert(c_associated(series%c_ptr))
488 END FUNCTION openpmd_series_create
494 SUBROUTINE openpmd_series_close(series)
495 CLASS(openpmd_series_type),
INTENT(INOUT) :: series
502 SUBROUTINE openpmd_c_series_close(series) &
503 BIND(C, name="openPMD_Series_close")
505 TYPE(C_PTR),
VALUE :: series
506 END SUBROUTINE openpmd_c_series_close
509 cpassert(c_associated(series%c_ptr))
510 CALL openpmd_c_series_close(series=series%c_ptr)
511 series%c_ptr = c_null_ptr
512 END SUBROUTINE openpmd_series_close
520 FUNCTION openpmd_series_write_iteration(this, index)
RESULT(iteration)
521 CLASS(openpmd_series_type) :: this
522 INTEGER,
TARGET :: index
523 TYPE(openpmd_iteration_type) :: iteration
525 INTEGER(8) :: cast_index
526 INTEGER(kind=C_INT) :: status
528 FUNCTION openpmd_c_series_write_iteration(series, index, iteration)
RESULT(status) &
529 BIND(C, name="openPMD_Series_write_Iteration")
530 IMPORT :: c_ptr, c_int64_t, c_int, c_size_t
531 TYPE(C_PTR),
VALUE :: series
532 INTEGER(kind=C_INT64_T),
VALUE :: index
533 TYPE(C_PTR) :: iteration
534 INTEGER(KIND=C_INT) :: status
535 END FUNCTION openpmd_c_series_write_iteration
538 cpassert(.NOT. c_associated(iteration%c_ptr))
540 status = openpmd_c_series_write_iteration(this%c_ptr, cast_index, iteration%c_ptr)
541 cpassert(c_associated(iteration%c_ptr))
542 END FUNCTION openpmd_series_write_iteration
544 FUNCTION openpmd_series_get_iteration(this, index)
RESULT(iteration)
545 CLASS(openpmd_series_type) :: this
546 INTEGER,
TARGET :: index
547 TYPE(openpmd_iteration_type) :: iteration
549 INTEGER(8) :: cast_index
550 INTEGER(kind=C_INT) :: status
552 FUNCTION openpmd_c_series_get_iteration(series, index, iteration)
RESULT(status) &
553 BIND(C, name="openPMD_Series_get_Iteration")
554 IMPORT :: c_ptr, c_int64_t, c_int, c_size_t
555 TYPE(C_PTR),
VALUE :: series
556 INTEGER(kind=C_INT64_T),
VALUE :: index
557 TYPE(C_PTR) :: iteration
558 INTEGER(KIND=C_INT) :: status
559 END FUNCTION openpmd_c_series_get_iteration
562 cpassert(.NOT. c_associated(iteration%c_ptr))
564 status = openpmd_c_series_get_iteration(this%c_ptr, cast_index, iteration%c_ptr)
565 cpassert(c_associated(iteration%c_ptr))
566 END FUNCTION openpmd_series_get_iteration
572 FUNCTION openpmd_get_default_extension()
RESULT(extension)
573 CHARACTER(len=default_string_length) :: extension
575 CHARACTER(kind=C_CHAR),
POINTER :: c_extension
576 INTEGER(C_SIZE_T) :: length_of_c_string, i
578 FUNCTION openpmd_c_get_default_extension()
RESULT(extension) &
579 BIND(c, name="openPMD_get_default_extension")
581 CHARACTER(kind=C_CHAR),
POINTER :: extension
582 END FUNCTION openpmd_c_get_default_extension
585 FUNCTION get_strlen(c_string)
RESULT(strlen) &
586 BIND(C, NAME="CP2K_strlen")
587 IMPORT :: c_char, c_size_t
588 CHARACTER(kind=C_CHAR),
DIMENSION(*),
INTENT(IN) :: c_string
589 INTEGER(C_SIZE_T) :: strlen
590 END FUNCTION get_strlen
593 c_extension => openpmd_c_get_default_extension()
596 IF (
ASSOCIATED(c_extension))
THEN
598 length_of_c_string = get_strlen(c_extension)
609 extension = trim(adjustl(transfer(c_extension(1:length_of_c_string), extension)))
611 DO i = length_of_c_string + 1, len(extension)
615 END FUNCTION openpmd_get_default_extension
623 SUBROUTINE openpmd_attributable_set_attribute_vec_int(this, name, vec)
624 CLASS(openpmd_attributable_type) :: this
625 CHARACTER(len=*),
INTENT(IN) :: name
626 INTEGER,
DIMENSION(:),
TARGET :: vec
628 INTEGER,
TARGET :: size_
630 SUBROUTINE openpmd_c_attributable_set_attribute_vec_int(attributable, name, vec, length) &
631 BIND(C, NAME="openPMD_attributable_set_attribute_vec_int")
632 IMPORT :: c_char, c_size_t, c_int, c_ptr
633 TYPE(C_PTR),
VALUE :: attributable
634 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: name
635 TYPE(C_PTR),
VALUE :: vec
636 INTEGER(kind=C_INT),
VALUE :: length
637 END SUBROUTINE openpmd_c_attributable_set_attribute_vec_int
641 CALL openpmd_c_attributable_set_attribute_vec_int( &
642 this%c_ptr, name//c_null_char, c_loc(vec(1)), size_)
644 END SUBROUTINE openpmd_attributable_set_attribute_vec_int
646 SUBROUTINE openpmd_attributable_series_flush(this, backendconfig)
647 CLASS(openpmd_attributable_type) :: this
648 CHARACTER(len=*),
INTENT(IN),
OPTIONAL :: backendconfig
649 CHARACTER(len=default_string_length),
SAVE :: my_backendconfig =
""
652 SUBROUTINE openpmd_c_attributable_series_flush(attributable, config) &
653 BIND(C, NAME="openPMD_Attributable_series_flush")
654 IMPORT :: c_char, c_size_t, c_int, c_ptr
655 TYPE(C_PTR),
VALUE :: attributable
656 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: config
657 END SUBROUTINE openpmd_c_attributable_series_flush
660 IF (
PRESENT(backendconfig)) my_backendconfig = backendconfig
661 CALL openpmd_c_attributable_series_flush(this%c_ptr, my_backendconfig//c_null_char)
662 END SUBROUTINE openpmd_attributable_series_flush
664 FUNCTION openpmd_json_merge(into, from, mpi_comm)
RESULT(merged)
665 CHARACTER(len=*),
INTENT(IN) :: into, from
666 CLASS(mp_comm_type),
INTENT(in),
OPTIONAL :: mpi_comm
667 CHARACTER(:),
ALLOCATABLE :: merged
668 CHARACTER(kind=C_CHAR),
POINTER :: c_merged
669 INTEGER(C_SIZE_T) :: length_of_c_string
670 TYPE(c_ptr),
SAVE :: comm_c = c_null_ptr
680 SUBROUTINE cp2k_c_mpi_comm_f2c(comm_f, comm_c)
bind(C, name="CP2K_MPI_Comm_f2c")
682 INTEGER(kind=C_INT),
VALUE :: comm_f
683 TYPE(c_ptr) :: comm_c
684 END SUBROUTINE cp2k_c_mpi_comm_f2c
687 FUNCTION openpmd_c_json_merge(into, from, mpi_comm)
RESULT(merged) &
688 BIND(C, NAME="openPMD_json_merge")
689 IMPORT :: c_char, c_int, c_ptr
690 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: into, from
691 TYPE(C_PTR),
value :: mpi_comm
692 CHARACTER(kind=C_CHAR),
POINTER :: merged
693 END FUNCTION openpmd_c_json_merge
696 FUNCTION get_strlen(c_string)
RESULT(strlen) &
697 BIND(C, NAME="CP2K_strlen")
698 IMPORT :: c_char, c_size_t
699 CHARACTER(kind=C_CHAR),
DIMENSION(*),
INTENT(IN) :: c_string
700 INTEGER(C_SIZE_T) :: strlen
701 END FUNCTION get_strlen
704 SUBROUTINE free(c_string) &
705 BIND(C, NAME="CP2K_free")
707 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: c_string
711 IF (
PRESENT(mpi_comm))
THEN
712 CALL cp2k_c_mpi_comm_f2c(mpi_comm%get_handle(), comm_c)
714 c_merged => openpmd_c_json_merge(into//c_null_char, from//c_null_char, comm_c)
715 length_of_c_string = get_strlen(c_merged)
716 ALLOCATE (
character(length_of_c_string) :: merged)
717 merged = trim(adjustl(transfer(c_merged(1:length_of_c_string), merged)))
719 END FUNCTION openpmd_json_merge
727 FUNCTION openpmd_iteration_get_mesh(this, name)
RESULT(mesh)
728 CLASS(openpmd_iteration_type) :: this
729 CHARACTER(len=*),
INTENT(IN) :: name
730 TYPE(openpmd_mesh_type) :: mesh
732 INTEGER(kind=C_INT) :: status
734 FUNCTION openpmd_c_iteration_get_mesh(iteration, name, mesh)
RESULT(status) &
735 BIND(C, name="openPMD_Iteration_get_mesh")
736 IMPORT :: c_ptr, c_int64_t, c_int, c_size_t, c_char
737 TYPE(C_PTR),
VALUE :: iteration
738 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: name
740 INTEGER(KIND=C_INT) :: status
741 END FUNCTION openpmd_c_iteration_get_mesh
744 cpassert(.NOT. c_associated(mesh%c_ptr))
745 status = openpmd_c_iteration_get_mesh(this%c_ptr, name//c_null_char, mesh%c_ptr)
746 cpassert(c_associated(mesh%c_ptr))
747 END FUNCTION openpmd_iteration_get_mesh
755 FUNCTION openpmd_iteration_get_particle_species(this, name)
RESULT(particle_species)
756 CLASS(openpmd_iteration_type) :: this
757 CHARACTER(len=*),
INTENT(IN) :: name
758 TYPE(openpmd_particle_species_type) :: particle_species
760 INTEGER(kind=C_INT) :: status
762 FUNCTION openpmd_c_iteration_get_particle_species(iteration, name, particle_species)
RESULT(status) &
763 BIND(C, name="openPMD_Iteration_get_particle_species")
764 IMPORT :: c_ptr, c_int64_t, c_int, c_size_t, c_char
765 TYPE(C_PTR),
VALUE :: iteration
766 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: name
767 TYPE(C_PTR) :: particle_species
768 INTEGER(KIND=C_INT) :: status
769 END FUNCTION openpmd_c_iteration_get_particle_species
772 cpassert(.NOT. c_associated(particle_species%c_ptr))
773 status = openpmd_c_iteration_get_particle_species( &
774 this%c_ptr, name//c_null_char, particle_species%c_ptr)
775 cpassert(c_associated(particle_species%c_ptr))
776 END FUNCTION openpmd_iteration_get_particle_species
782 SUBROUTINE openpmd_iteration_open(iteration)
783 CLASS(openpmd_iteration_type),
INTENT(INOUT) :: iteration
790 SUBROUTINE openpmd_c_iteration_open(iteration) &
791 BIND(C, name="openPMD_Iteration_open")
793 TYPE(C_PTR),
VALUE :: iteration
794 END SUBROUTINE openpmd_c_iteration_open
797 cpassert(c_associated(iteration%c_ptr))
798 CALL openpmd_c_iteration_open(iteration=iteration%c_ptr)
799 END SUBROUTINE openpmd_iteration_open
801 SUBROUTINE openpmd_iteration_close(iteration)
802 CLASS(openpmd_iteration_type),
INTENT(INOUT) :: iteration
809 SUBROUTINE openpmd_c_iteration_close(iteration) &
810 BIND(C, name="openPMD_Iteration_close")
812 TYPE(C_PTR),
VALUE :: iteration
813 END SUBROUTINE openpmd_c_iteration_close
816 cpassert(c_associated(iteration%c_ptr))
817 CALL openpmd_c_iteration_close(iteration=iteration%c_ptr)
818 iteration%c_ptr = c_null_ptr
819 END SUBROUTINE openpmd_iteration_close
821 FUNCTION openpmd_iteration_closed(iteration)
RESULT(res)
822 CLASS(openpmd_iteration_type),
INTENT(IN) :: iteration
825 INTEGER(kind=C_INT) :: res_tmp
832 FUNCTION openpmd_c_iteration_closed(iteration)
RESULT(res) &
833 BIND(C, name="openPMD_Iteration_closed")
834 IMPORT :: c_ptr, c_int
835 TYPE(C_PTR),
VALUE :: iteration
836 INTEGER(kind=C_INT) :: res
837 END FUNCTION openpmd_c_iteration_closed
840 cpassert(c_associated(iteration%c_ptr))
841 res_tmp = openpmd_c_iteration_closed(iteration=iteration%c_ptr)
842 IF (res_tmp == 0)
THEN
847 END FUNCTION openpmd_iteration_closed
855 SUBROUTINE openpmd_record_component_make_empty(this, dtype, dimensionality)
856 CLASS(openpmd_record_component_type) :: this
857 INTEGER(kind=C_INT) :: dtype
858 INTEGER :: dimensionality
860 INTEGER(kind=C_INT) :: status
862 FUNCTION openpmd_c_record_component_make_empty(record_component, dtype, dimensionality)
RESULT(status) &
863 BIND(C, name="openPMD_RecordComponent_makeEmpty")
864 IMPORT :: c_ptr, c_int64_t, c_int, c_size_t, c_char
865 TYPE(C_PTR),
VALUE :: record_component
866 INTEGER(KIND=C_INT),
VALUE :: dtype
867 INTEGER(KIND=C_INT),
VALUE :: dimensionality
868 INTEGER(KIND=C_INT) :: status
869 END FUNCTION openpmd_c_record_component_make_empty
872 status = openpmd_c_record_component_make_empty(this%c_ptr, dtype, dimensionality)
873 END SUBROUTINE openpmd_record_component_make_empty
881 SUBROUTINE openpmd_record_component_make_constant_zero(this, dtype, extent)
882 CLASS(openpmd_record_component_type) :: this
883 INTEGER(kind=C_INT) :: dtype
884 INTEGER,
DIMENSION(:),
TARGET :: extent
886 INTEGER(kind=C_INT) :: status
888 FUNCTION openpmd_c_record_component_make_constant( &
889 record_component, dtype, dimensions, extent, invert, value)
RESULT(status) &
890 BIND(C, name="openPMD_RecordComponent_makeConstant")
891 IMPORT :: c_ptr, c_int64_t, c_int, c_size_t, c_char
892 TYPE(C_PTR),
VALUE :: record_component
893 INTEGER(KIND=C_INT),
VALUE :: dtype
894 INTEGER(KIND=C_INT),
VALUE :: dimensions, invert
895 TYPE(C_PTR),
VALUE :: extent
896 TYPE(C_PTR),
VALUE :: value
897 INTEGER(KIND=C_INT) :: status
898 END FUNCTION openpmd_c_record_component_make_constant
901 status = openpmd_c_record_component_make_constant( &
902 this%c_ptr, dtype,
SIZE(extent), c_loc(extent(1)), 1, c_null_ptr)
903 END SUBROUTINE openpmd_record_component_make_constant_zero
905 SUBROUTINE openpmd_mesh_set_axis_labels(this, labels)
906 CLASS(openpmd_mesh_type) :: this
907 CHARACTER(len=*),
DIMENSION(:) :: labels
910 CHARACTER(len=default_string_length),
ALLOCATABLE,
TARGET :: labels_as_null_terminated_strings(:)
911 TYPE(C_PTR),
ALLOCATABLE,
TARGET :: labels_as_c_strings(:)
914 SUBROUTINE openpmd_c_mesh_set_axis_labels(mesh, labels, len_labels, invert) &
915 BIND(C, NAME="openPMD_Mesh_set_axis_labels")
916 IMPORT :: c_char, c_size_t, c_int, c_ptr
917 TYPE(C_PTR),
VALUE :: mesh
918 TYPE(C_PTR),
VALUE :: labels
919 INTEGER(kind=C_INT),
VALUE :: len_labels, invert
920 END SUBROUTINE openpmd_c_mesh_set_axis_labels
923 ALLOCATE (labels_as_null_terminated_strings(
SIZE(labels)))
924 ALLOCATE (labels_as_c_strings(
SIZE(labels)))
926 DO i = 1,
SIZE(labels)
927 labels_as_null_terminated_strings(i) = trim(labels(i))//c_null_char
928 labels_as_c_strings(i) = c_loc(labels_as_null_terminated_strings(i))
931 CALL openpmd_c_mesh_set_axis_labels(this%c_ptr, c_loc(labels_as_c_strings(1)),
SIZE(labels), invert=1)
933 DEALLOCATE (labels_as_c_strings)
934 DEALLOCATE (labels_as_null_terminated_strings)
935 END SUBROUTINE openpmd_mesh_set_axis_labels
937 SUBROUTINE openpmd_record_component_reset_dataset(this, dtype, extent, cfg)
938 CLASS(openpmd_record_component_type) :: this
939 INTEGER(kind=C_INT) :: dtype
940 INTEGER,
DIMENSION(:),
TARGET :: extent
941 CHARACTER(len=*),
OPTIONAL :: cfg
943 CHARACTER(len=default_string_length),
SAVE :: my_config =
"{}"
944 INTEGER(kind=C_INT) :: status
946 FUNCTION openpmd_c_record_component_reset_dataset( &
947 record_component, dtype, dimensions, extent, invert, cfg)
RESULT(status) &
948 BIND(C, name="openPMD_RecordComponent_resetDataset")
949 IMPORT :: c_ptr, c_int64_t, c_int, c_size_t, c_char
950 TYPE(C_PTR),
VALUE :: record_component
951 INTEGER(KIND=C_INT),
VALUE :: dtype
952 INTEGER(KIND=C_INT),
VALUE :: dimensions, invert
953 TYPE(C_PTR),
VALUE :: extent
954 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: cfg
955 INTEGER(KIND=C_INT) :: status
956 END FUNCTION openpmd_c_record_component_reset_dataset
959 IF (
PRESENT(cfg)) my_config = cfg
961 status = openpmd_c_record_component_reset_dataset( &
962 this%c_ptr, dtype,
SIZE(extent), c_loc(extent(1)), 1, my_config//c_null_char)
963 END SUBROUTINE openpmd_record_component_reset_dataset
966 SUBROUTINE openpmd_record_component_store_chunk_1d_double (record_component, data_, offset)
967 CLASS(openpmd_record_component_type) :: record_component
968 REAL(kind=
dp),
TARGET :: data_(:)
969 INTEGER,
DIMENSION(1),
TARGET :: offset, extent
971 INTEGER(kind=C_INT) :: status
974 FUNCTION openpmd_c_record_component_store_chunk( &
975 record_component, dtype, dimensions, offset, extent, invert, data_)
RESULT(status) &
976 BIND(C, name="openPMD_RecordComponent_storeChunk")
977 IMPORT :: c_ptr, c_int64_t, c_int, c_size_t, c_char
978 TYPE(C_PTR),
VALUE :: record_component
979 INTEGER(KIND=C_INT),
VALUE :: dtype
980 INTEGER(KIND=C_INT),
VALUE :: dimensions, invert
981 TYPE(C_PTR),
VALUE :: offset, extent
982 TYPE(C_PTR),
VALUE :: data_
983 INTEGER(KIND=C_INT) :: status
984 END FUNCTION openpmd_c_record_component_store_chunk
987 extent = shape(data_)
988 status = openpmd_c_record_component_store_chunk( &
989 record_component%c_ptr, &
990 openpmd_type_double, &
997 END SUBROUTINE openpmd_record_component_store_chunk_1d_double
999 FUNCTION openpmd_record_component_store_chunk_span_1d_double ( &
1000 record_component, offset, extent)
RESULT(memory_view)
1001 CLASS(openpmd_record_component_type) :: record_component
1002 INTEGER,
DIMENSION(1),
TARGET :: offset, extent
1004 TYPE(openpmd_dynamic_memory_view_type_1d) :: memory_view
1006 INTEGER(kind=C_INT) :: status
1009 FUNCTION openpmd_c_record_component_store_chunk_span( &
1010 record_component, dtype, dimensions, offset, extent, invert, memory_view)
RESULT(status) &
1011 BIND(C, name="openPMD_RecordComponent_storeChunkSpan")
1012 IMPORT :: c_ptr, c_int64_t, c_int, c_size_t, c_char
1013 TYPE(C_PTR),
VALUE :: record_component
1014 INTEGER(KIND=C_INT),
VALUE :: dtype
1015 INTEGER(KIND=C_INT),
VALUE :: dimensions, invert
1016 TYPE(C_PTR),
VALUE :: offset, extent
1017 TYPE(C_PTR) :: memory_view
1018 INTEGER(KIND=C_INT) :: status
1019 END FUNCTION openpmd_c_record_component_store_chunk_span
1022 memory_view%chunk_extent = extent
1023 status = openpmd_c_record_component_store_chunk_span( &
1024 record_component%c_ptr, &
1025 openpmd_type_double, &
1032 END FUNCTION openpmd_record_component_store_chunk_span_1d_double
1034 FUNCTION openpmd_dynamic_memory_view_resolve_1d_double (memory_view, deallocate)
RESULT(buffer)
1035 CLASS(openpmd_dynamic_memory_view_type_1d) :: memory_view
1036 LOGICAL :: deallocate
1037 REAL(kind=
dp),
POINTER :: buffer(:)
1039 INTEGER(kind=C_INT) :: status, deallocate_c
1040 TYPE(C_PTR),
TARGET :: c_buffer
1043 FUNCTION openpmd_c_dynamic_memory_view_resolve(memory_view, deallocate, write_buffer)
RESULT(status) &
1044 BIND(C, name="openPMD_DynamicMemoryView_resolve")
1045 IMPORT :: c_ptr, c_int
1046 TYPE(C_PTR),
VALUE :: memory_view
1047 INTEGER(KIND=C_INT),
VALUE :: deallocate
1048 TYPE(C_PTR) :: write_buffer
1049 INTEGER(KIND=C_INT) :: status
1050 END FUNCTION openpmd_c_dynamic_memory_view_resolve
1053 IF (deallocate)
THEN
1059 status = openpmd_c_dynamic_memory_view_resolve(memory_view%c_ptr, deallocate_c, c_buffer)
1060 CALL c_f_pointer(c_buffer, buffer, memory_view%chunk_extent)
1061 END FUNCTION openpmd_dynamic_memory_view_resolve_1d_double
1063 SUBROUTINE openpmd_record_component_store_chunk_2d_double (record_component, data_, offset)
1064 CLASS(openpmd_record_component_type) :: record_component
1065 REAL(kind=
dp),
TARGET :: data_(:,:)
1066 INTEGER,
DIMENSION(2),
TARGET :: offset, extent
1068 INTEGER(kind=C_INT) :: status
1071 FUNCTION openpmd_c_record_component_store_chunk( &
1072 record_component, dtype, dimensions, offset, extent, invert, data_)
RESULT(status) &
1073 BIND(C, name="openPMD_RecordComponent_storeChunk")
1074 IMPORT :: c_ptr, c_int64_t, c_int, c_size_t, c_char
1075 TYPE(C_PTR),
VALUE :: record_component
1076 INTEGER(KIND=C_INT),
VALUE :: dtype
1077 INTEGER(KIND=C_INT),
VALUE :: dimensions, invert
1078 TYPE(C_PTR),
VALUE :: offset, extent
1079 TYPE(C_PTR),
VALUE :: data_
1080 INTEGER(KIND=C_INT) :: status
1081 END FUNCTION openpmd_c_record_component_store_chunk
1084 extent = shape(data_)
1085 status = openpmd_c_record_component_store_chunk( &
1086 record_component%c_ptr, &
1087 openpmd_type_double, &
1094 END SUBROUTINE openpmd_record_component_store_chunk_2d_double
1096 FUNCTION openpmd_record_component_store_chunk_span_2d_double ( &
1097 record_component, offset, extent)
RESULT(memory_view)
1098 CLASS(openpmd_record_component_type) :: record_component
1099 INTEGER,
DIMENSION(2),
TARGET :: offset, extent
1101 TYPE(openpmd_dynamic_memory_view_type_2d) :: memory_view
1103 INTEGER(kind=C_INT) :: status
1106 FUNCTION openpmd_c_record_component_store_chunk_span( &
1107 record_component, dtype, dimensions, offset, extent, invert, memory_view)
RESULT(status) &
1108 BIND(C, name="openPMD_RecordComponent_storeChunkSpan")
1109 IMPORT :: c_ptr, c_int64_t, c_int, c_size_t, c_char
1110 TYPE(C_PTR),
VALUE :: record_component
1111 INTEGER(KIND=C_INT),
VALUE :: dtype
1112 INTEGER(KIND=C_INT),
VALUE :: dimensions, invert
1113 TYPE(C_PTR),
VALUE :: offset, extent
1114 TYPE(C_PTR) :: memory_view
1115 INTEGER(KIND=C_INT) :: status
1116 END FUNCTION openpmd_c_record_component_store_chunk_span
1119 memory_view%chunk_extent = extent
1120 status = openpmd_c_record_component_store_chunk_span( &
1121 record_component%c_ptr, &
1122 openpmd_type_double, &
1129 END FUNCTION openpmd_record_component_store_chunk_span_2d_double
1131 FUNCTION openpmd_dynamic_memory_view_resolve_2d_double (memory_view, deallocate)
RESULT(buffer)
1132 CLASS(openpmd_dynamic_memory_view_type_2d) :: memory_view
1133 LOGICAL :: deallocate
1134 REAL(kind=
dp),
POINTER :: buffer(:,:)
1136 INTEGER(kind=C_INT) :: status, deallocate_c
1137 TYPE(C_PTR),
TARGET :: c_buffer
1140 FUNCTION openpmd_c_dynamic_memory_view_resolve(memory_view, deallocate, write_buffer)
RESULT(status) &
1141 BIND(C, name="openPMD_DynamicMemoryView_resolve")
1142 IMPORT :: c_ptr, c_int
1143 TYPE(C_PTR),
VALUE :: memory_view
1144 INTEGER(KIND=C_INT),
VALUE :: deallocate
1145 TYPE(C_PTR) :: write_buffer
1146 INTEGER(KIND=C_INT) :: status
1147 END FUNCTION openpmd_c_dynamic_memory_view_resolve
1150 IF (deallocate)
THEN
1156 status = openpmd_c_dynamic_memory_view_resolve(memory_view%c_ptr, deallocate_c, c_buffer)
1157 CALL c_f_pointer(c_buffer, buffer, memory_view%chunk_extent)
1158 END FUNCTION openpmd_dynamic_memory_view_resolve_2d_double
1160 SUBROUTINE openpmd_record_component_store_chunk_3d_double (record_component, data_, offset)
1161 CLASS(openpmd_record_component_type) :: record_component
1162 REAL(kind=
dp),
TARGET :: data_(:,:,:)
1163 INTEGER,
DIMENSION(3),
TARGET :: offset, extent
1165 INTEGER(kind=C_INT) :: status
1168 FUNCTION openpmd_c_record_component_store_chunk( &
1169 record_component, dtype, dimensions, offset, extent, invert, data_)
RESULT(status) &
1170 BIND(C, name="openPMD_RecordComponent_storeChunk")
1171 IMPORT :: c_ptr, c_int64_t, c_int, c_size_t, c_char
1172 TYPE(C_PTR),
VALUE :: record_component
1173 INTEGER(KIND=C_INT),
VALUE :: dtype
1174 INTEGER(KIND=C_INT),
VALUE :: dimensions, invert
1175 TYPE(C_PTR),
VALUE :: offset, extent
1176 TYPE(C_PTR),
VALUE :: data_
1177 INTEGER(KIND=C_INT) :: status
1178 END FUNCTION openpmd_c_record_component_store_chunk
1181 extent = shape(data_)
1182 status = openpmd_c_record_component_store_chunk( &
1183 record_component%c_ptr, &
1184 openpmd_type_double, &
1191 END SUBROUTINE openpmd_record_component_store_chunk_3d_double
1193 FUNCTION openpmd_record_component_store_chunk_span_3d_double ( &
1194 record_component, offset, extent)
RESULT(memory_view)
1195 CLASS(openpmd_record_component_type) :: record_component
1196 INTEGER,
DIMENSION(3),
TARGET :: offset, extent
1198 TYPE(openpmd_dynamic_memory_view_type_3d) :: memory_view
1200 INTEGER(kind=C_INT) :: status
1203 FUNCTION openpmd_c_record_component_store_chunk_span( &
1204 record_component, dtype, dimensions, offset, extent, invert, memory_view)
RESULT(status) &
1205 BIND(C, name="openPMD_RecordComponent_storeChunkSpan")
1206 IMPORT :: c_ptr, c_int64_t, c_int, c_size_t, c_char
1207 TYPE(C_PTR),
VALUE :: record_component
1208 INTEGER(KIND=C_INT),
VALUE :: dtype
1209 INTEGER(KIND=C_INT),
VALUE :: dimensions, invert
1210 TYPE(C_PTR),
VALUE :: offset, extent
1211 TYPE(C_PTR) :: memory_view
1212 INTEGER(KIND=C_INT) :: status
1213 END FUNCTION openpmd_c_record_component_store_chunk_span
1216 memory_view%chunk_extent = extent
1217 status = openpmd_c_record_component_store_chunk_span( &
1218 record_component%c_ptr, &
1219 openpmd_type_double, &
1226 END FUNCTION openpmd_record_component_store_chunk_span_3d_double
1228 FUNCTION openpmd_dynamic_memory_view_resolve_3d_double (memory_view, deallocate)
RESULT(buffer)
1229 CLASS(openpmd_dynamic_memory_view_type_3d) :: memory_view
1230 LOGICAL :: deallocate
1231 REAL(kind=
dp),
POINTER :: buffer(:,:,:)
1233 INTEGER(kind=C_INT) :: status, deallocate_c
1234 TYPE(C_PTR),
TARGET :: c_buffer
1237 FUNCTION openpmd_c_dynamic_memory_view_resolve(memory_view, deallocate, write_buffer)
RESULT(status) &
1238 BIND(C, name="openPMD_DynamicMemoryView_resolve")
1239 IMPORT :: c_ptr, c_int
1240 TYPE(C_PTR),
VALUE :: memory_view
1241 INTEGER(KIND=C_INT),
VALUE :: deallocate
1242 TYPE(C_PTR) :: write_buffer
1243 INTEGER(KIND=C_INT) :: status
1244 END FUNCTION openpmd_c_dynamic_memory_view_resolve
1247 IF (deallocate)
THEN
1253 status = openpmd_c_dynamic_memory_view_resolve(memory_view%c_ptr, deallocate_c, c_buffer)
1254 CALL c_f_pointer(c_buffer, buffer, memory_view%chunk_extent)
1255 END FUNCTION openpmd_dynamic_memory_view_resolve_3d_double
1263 FUNCTION openpmd_particle_species_get_record(this, name)
RESULT(record)
1264 CLASS(openpmd_particle_species_type) :: this
1265 CHARACTER(len=*),
INTENT(IN) :: name
1266 TYPE(openpmd_record_type) :: record
1268 INTEGER(kind=C_INT) :: status
1270 FUNCTION openpmd_c_particle_species_get_record(particle_species, name, record)
RESULT(status) &
1271 BIND(C, name="openPMD_ParticleSpecies_get_Record")
1272 IMPORT :: c_ptr, c_int64_t, c_int, c_size_t, c_char
1273 TYPE(C_PTR),
VALUE :: particle_species
1274 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: name
1275 TYPE(C_PTR) :: record
1276 INTEGER(KIND=C_INT) :: status
1277 END FUNCTION openpmd_c_particle_species_get_record
1280 cpassert(.NOT. c_associated(record%c_ptr))
1281 status = openpmd_c_particle_species_get_record(this%c_ptr, name//c_null_char, record%c_ptr)
1282 cpassert(c_associated(record%c_ptr))
1283 END FUNCTION openpmd_particle_species_get_record
1291 FUNCTION openpmd_record_get_component(this, name)
RESULT(record_component)
1292 CLASS(openpmd_record_type) :: this
1293 CHARACTER(len=*),
INTENT(IN) :: name
1294 TYPE(openpmd_record_component_type) :: record_component
1296 INTEGER(kind=C_INT) :: status
1298 FUNCTION openpmd_c_record_get_component(record, name, record_component)
RESULT(status) &
1299 BIND(C, name="openPMD_Record_get_Component")
1300 IMPORT :: c_ptr, c_int64_t, c_int, c_size_t, c_char
1301 TYPE(C_PTR),
VALUE :: record
1302 CHARACTER(kind=C_CHAR),
DIMENSION(*) :: name
1303 TYPE(C_PTR) :: record_component
1304 INTEGER(KIND=C_INT) :: status
1305 END FUNCTION openpmd_c_record_get_component
1308 cpassert(.NOT. c_associated(record_component%c_ptr))
1309 status = openpmd_c_record_get_component(this%c_ptr, name//c_null_char, record_component%c_ptr)
1310 cpassert(c_associated(record_component%c_ptr))
1311 END FUNCTION openpmd_record_get_component
1314 SUBROUTINE openpmd_mesh_set_grid_global_offset (this, vec)
1315 CLASS(openpmd_mesh_type) :: this
1316 REAL(KIND=
dp),
DIMENSION(:),
TARGET :: vec
1318 INTEGER,
TARGET :: size_
1320 SUBROUTINE openpmd_c_set_vector_attribute(mesh, vec, length, invert) &
1321 BIND(C, NAME="openPMD_Mesh_setGridGlobalOffset")
1322 IMPORT :: c_char, c_size_t, c_int, c_ptr
1323 TYPE(C_PTR),
VALUE :: mesh
1324 TYPE(C_PTR),
VALUE :: vec
1325 INTEGER(kind=C_INT),
VALUE :: length, invert
1326 END SUBROUTINE openpmd_c_set_vector_attribute
1330 CALL openpmd_c_set_vector_attribute(this%c_ptr, c_loc(vec(1)), size_, 1)
1332 END SUBROUTINE openpmd_mesh_set_grid_global_offset
1333 SUBROUTINE openpmd_mesh_set_grid_spacing (this, vec)
1334 CLASS(openpmd_mesh_type) :: this
1335 REAL(KIND=
dp),
DIMENSION(:),
TARGET :: vec
1337 INTEGER,
TARGET :: size_
1339 SUBROUTINE openpmd_c_set_vector_attribute(mesh, vec, length, invert) &
1340 BIND(C, NAME="openPMD_Mesh_setGridSpacing")
1341 IMPORT :: c_char, c_size_t, c_int, c_ptr
1342 TYPE(C_PTR),
VALUE :: mesh
1343 TYPE(C_PTR),
VALUE :: vec
1344 INTEGER(kind=C_INT),
VALUE :: length, invert
1345 END SUBROUTINE openpmd_c_set_vector_attribute
1349 CALL openpmd_c_set_vector_attribute(this%c_ptr, c_loc(vec(1)), size_, 1)
1351 END SUBROUTINE openpmd_mesh_set_grid_spacing
1352 SUBROUTINE openpmd_mesh_set_position (this, vec)
1353 CLASS(openpmd_mesh_type) :: this
1354 REAL(KIND=
dp),
DIMENSION(:),
TARGET :: vec
1356 INTEGER,
TARGET :: size_
1358 SUBROUTINE openpmd_c_set_vector_attribute(mesh, vec, length, invert) &
1359 BIND(C, NAME="openPMD_Mesh_setPosition")
1360 IMPORT :: c_char, c_size_t, c_int, c_ptr
1361 TYPE(C_PTR),
VALUE :: mesh
1362 TYPE(C_PTR),
VALUE :: vec
1363 INTEGER(kind=C_INT),
VALUE :: length, invert
1364 END SUBROUTINE openpmd_c_set_vector_attribute
1368 CALL openpmd_c_set_vector_attribute(this%c_ptr, c_loc(vec(1)), size_, 1)
1370 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.