1!
2! Distributed under the OSI-approved Apache License, Version 2.0.  See
3!  accompanying file Copyright.txt for details.
4!
5!  adios2_mod.f90 : ADIOS2 Fortran bindings central module
6!
7!   Created on: Mar 13, 2017
8!       Author: William F Godoy godoywf@ornl.gov
9!
10
11module adios2_parameters_mod
12    implicit none
13
14    ! Debug mode
15    logical, parameter :: adios2_debug_mode_on = .true.
16    logical, parameter :: adios2_debug_mode_off = .false.
17
18    ! Types
19    integer, parameter :: adios2_type_unknown = -1
20
21    integer, parameter :: adios2_type_character = 0
22    integer, parameter :: adios2_type_string = 0
23
24    integer, parameter :: adios2_type_real4 = 1
25    integer, parameter :: adios2_type_real  = 1
26
27    integer, parameter :: adios2_type_real8 = 2
28    integer, parameter :: adios2_type_dp    = 2
29    integer, parameter :: adios2_type_double_precision = 2
30
31    integer, parameter :: adios2_type_complex4 = 3
32    integer, parameter :: adios2_type_complex = 3
33
34    integer, parameter :: adios2_type_complex8 = 4
35    integer, parameter :: adios2_type_complex_dp = 4
36
37    integer, parameter :: adios2_type_integer1 = 5
38    integer, parameter :: adios2_type_integer2 = 6
39    integer, parameter :: adios2_type_integer4 = 7
40    integer, parameter :: adios2_type_integer8 = 8
41
42    ! is_constant_dims
43    logical, parameter :: adios2_constant_dims = .true.
44    logical, parameter :: adios2_variable_dims = .false.
45
46    ! Variable Found or not found, ierr value
47    integer, parameter :: adios2_not_found = -1
48    integer, parameter :: adios2_found = 0
49
50    ! error
51    integer, parameter :: adios2_error_none = 0
52    integer, parameter :: adios2_error_invalid_argument = 1
53    integer, parameter :: adios2_error_system_error = 2
54    integer, parameter :: adios2_error_runtime_error = 3
55    integer, parameter :: adios2_error_exception = 4
56
57    ! Mode
58    integer, parameter :: adios2_mode_undefined = 0
59    integer, parameter :: adios2_mode_write = 1
60    integer, parameter :: adios2_mode_read = 2
61    integer, parameter :: adios2_mode_append = 3
62    integer, parameter :: adios2_mode_deferred = 4
63    integer, parameter :: adios2_mode_sync = 5
64
65    ! Step Mode
66    integer, parameter :: adios2_step_mode_append = 0
67    integer, parameter :: adios2_step_mode_update = 1
68    integer, parameter :: adios2_step_mode_read = 2
69
70    ! Step Status
71    integer, parameter :: adios2_step_status_other_error = -1
72    integer, parameter :: adios2_step_status_ok = 0
73    integer, parameter :: adios2_step_status_not_ready = 1
74    integer, parameter :: adios2_step_status_end_of_stream = 2
75
76    !> Fixed size for string array, used in variables and attributes,
77    !! must be less or equal than C equivalent in adios2_c_types.h
78    integer, parameter :: adios2_string_array_element_max_size = 4096
79
80    integer(kind=8), parameter, dimension(1) :: adios2_null_dims = (/-1/)
81    integer(kind=8), parameter :: adios2_local_value_dim = -2
82
83    logical, parameter :: adios2_advance_yes = .true.
84    logical, parameter :: adios2_advance_no  = .false.
85
86    ! Low level API handlers
87    type adios2_adios
88        integer(kind=8):: f2c = 0_8
89        logical :: valid = .false.
90    end type
91
92    type adios2_io
93        integer(kind=8):: f2c = 0_8
94        logical :: valid = .false.
95        character(len=15):: engine_type = 'BPFile'
96    end type
97
98    type adios2_variable
99        integer(kind=8):: f2c = 0_8
100        logical :: valid = .false.
101        character(len=4096):: name = ''
102        integer :: type = -1
103        integer :: ndims = -1
104    end type
105
106    type adios2_attribute
107        integer(kind=8):: f2c = 0_8
108        logical :: valid = .false.
109        logical :: is_value = .false.
110        character(len=4096):: name = ''
111        integer :: type = -1
112        integer :: length = -1
113    end type
114
115    type adios2_engine
116        integer(kind=8):: f2c = 0_8
117        logical :: valid = .false.
118        character(len=64):: name = ''
119        character(len=15):: type = ''
120        integer :: mode = adios2_mode_undefined
121    end type
122
123    type adios2_operator
124        integer(kind=8):: f2c = 0_8
125        logical :: valid = .false.
126        character(len=64):: name = ''
127        character(len=64):: type = ''
128    end type
129
130end module
131