10 use fckit_c_interop_module,
only: c_ptr_to_string
12 use string_f_c_mod,
only: f_c_string
19 integer,
parameter ::
clen = 2048
23 type(c_ptr) :: ptr = c_null_ptr
29 character(len=clen) :: field_io_name
30 character(len=clen) :: field_name
31 character(len=clen) :: array_kind
33 character(len=clen) :: long_name
34 character(len=clen) :: space
35 character(len=clen) :: stagger_loc
37 character(len=clen) :: units
38 character(len=clen) :: io_file
49 long_name, space, stagger_loc, tracer, units, io_file) &
50 bind(c, name=
'fields_metadata_get_field_f')
52 integer,
parameter ::
clen = 2048
53 type(c_ptr),
value :: ptr
54 character(len=1, kind=c_char),
intent(in) :: field_io_name(clen)
55 character(len=1, kind=c_char),
intent(inout) :: field_name(clen)
56 character(len=1, kind=c_char),
intent(inout) :: array_kind(clen)
57 integer(kind=c_int),
intent(inout) :: levels
58 character(len=1, kind=c_char),
intent(inout) :: long_name(clen)
59 character(len=1, kind=c_char),
intent(inout) :: space(clen)
60 character(len=1, kind=c_char),
intent(inout) :: stagger_loc(clen)
61 logical(c_bool),
intent(inout) :: tracer
62 character(len=1, kind=c_char),
intent(inout) :: units(clen)
63 character(len=1, kind=c_char),
intent(inout) :: io_file(clen)
73 function create(c_ptr_this)
result(this)
75 type(c_ptr),
value :: c_ptr_this
84 function get_field(self, field_io_name_in)
result(field)
87 character(len=*),
intent(in) :: field_io_name_in
90 character(len=1, kind=c_char),
allocatable :: field_io_name(:)
93 character(len=1, kind=c_char),
allocatable :: field_name(:)
94 character(len=1, kind=c_char),
allocatable :: array_kind(:)
95 character(len=1, kind=c_char),
allocatable :: long_name(:)
96 character(len=1, kind=c_char),
allocatable :: space(:)
97 character(len=1, kind=c_char),
allocatable :: stagger_loc(:)
98 character(len=1, kind=c_char),
allocatable :: units(:)
99 character(len=1, kind=c_char),
allocatable :: io_file(:)
101 character(len=clen, kind=c_char) :: field_name_
103 integer(c_int) :: levels
104 logical(c_bool) :: tracer
109 iolen = len(trim(field_io_name_in))
110 allocate(field_io_name(
clen))
113 field_io_name(n) = field_io_name_in(n:n)
115 field_io_name(iolen+1) = c_null_char
118 allocate(field_name(
clen))
119 allocate(array_kind(
clen))
120 allocate(long_name(
clen))
121 allocate(space(
clen))
122 allocate(stagger_loc(
clen))
123 allocate(units(
clen))
124 allocate(io_file(
clen))
126 field_name = c_null_char
127 array_kind = c_null_char
128 long_name = c_null_char
130 stagger_loc = c_null_char
132 io_file = c_null_char
136 long_name, space, stagger_loc, tracer, units, io_file )
139 field%field_io_name =
''
141 if (field_io_name(n) == c_null_char)
exit
142 field%field_io_name(n:n) = field_io_name(n)
146 field%field_name =
''
148 if (field_name(n) == c_null_char)
exit
149 field%field_name(n:n) = field_name(n)
153 field%array_kind =
''
155 if (array_kind(n) == c_null_char)
exit
156 field%array_kind(n:n) = array_kind(n)
160 field%levels = levels
165 if (long_name(n) == c_null_char)
exit
166 field%long_name(n:n) = long_name(n)
172 if (space(n) == c_null_char)
exit
173 field%space(n:n) = space(n)
177 field%stagger_loc =
''
179 if (stagger_loc(n) == c_null_char)
exit
180 field%stagger_loc(n:n) = stagger_loc(n)
184 field%tracer = tracer
189 if (units(n) == c_null_char)
exit
190 field%units(n:n) = units(n)
196 if (io_file(n) == c_null_char)
exit
197 field%io_file(n:n) = io_file(n)