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)