! >>> Warning: This is a generated file. If you modify it, you get what you deserve. <<<
!
! Generated by "../../../../libcdi/interfaces/f2003/bindGen.rb" from input file "../../../../libcdi/src/cdi.h".

module mo_cdi
  use iso_c_binding
  implicit none
  private

  public ctrim
  public c_len

  interface
    integer(c_size_t) function lib_strlen(charPtr) bind(c, name = "strlen")
      import c_size_t, c_ptr
      type(c_ptr), value :: charPtr
    end function lib_strlen

    subroutine lib_free(pointer) bind(c, name = "free")
      import c_ptr
      type(c_ptr), value :: pointer
    end subroutine lib_free
  end interface

  integer(c_int), public, parameter :: CDI_MAX_NAME = 256
  integer(c_int), public, parameter :: CDI_UNDEFID = -1
  integer(c_int), public, parameter :: CDI_GLOBAL = -1
  integer(c_int), public, parameter :: CDI_BIGENDIAN = 0
  integer(c_int), public, parameter :: CDI_LITTLEENDIAN = 1
  integer(c_int), public, parameter :: CDI_PDPENDIAN = 2
  integer(c_int), public, parameter :: CDI_REAL = 1
  integer(c_int), public, parameter :: CDI_COMP = 2
  integer(c_int), public, parameter :: CDI_BOTH = 3
  integer(c_int), public, parameter :: CDI_NOERR = 0
  integer(c_int), public, parameter :: CDI_EEOF = -1
  integer(c_int), public, parameter :: CDI_ETMOF = -9
  integer(c_int), public, parameter :: CDI_ESYSTEM = -10
  integer(c_int), public, parameter :: CDI_EINVAL = -20
  integer(c_int), public, parameter :: CDI_EISDIR = -21
  integer(c_int), public, parameter :: CDI_EISEMPTY = -22
  integer(c_int), public, parameter :: CDI_EUFTYPE = -23
  integer(c_int), public, parameter :: CDI_ELIBNAVAIL = -24
  integer(c_int), public, parameter :: CDI_EUFSTRUCT = -25
  integer(c_int), public, parameter :: CDI_EUNC4 = -26
  integer(c_int), public, parameter :: CDI_EDIMSIZE = -27
  integer(c_int), public, parameter :: CDI_ELIMIT = -99
  integer(c_int), public, parameter :: CDI_FILETYPE_GRB = 1
  integer(c_int), public, parameter :: CDI_FILETYPE_GRB2 = 2
  integer(c_int), public, parameter :: CDI_FILETYPE_NC = 3
  integer(c_int), public, parameter :: CDI_FILETYPE_NC2 = 4
  integer(c_int), public, parameter :: CDI_FILETYPE_NC4 = 5
  integer(c_int), public, parameter :: CDI_FILETYPE_NC4C = 6
  integer(c_int), public, parameter :: CDI_FILETYPE_NC5 = 7
  integer(c_int), public, parameter :: CDI_FILETYPE_SRV = 8
  integer(c_int), public, parameter :: CDI_FILETYPE_EXT = 9
  integer(c_int), public, parameter :: CDI_FILETYPE_IEG = 10
  integer(c_int), public, parameter :: FILETYPE_GRB = 1
  integer(c_int), public, parameter :: FILETYPE_GRB2 = 2
  integer(c_int), public, parameter :: FILETYPE_NC = 3
  integer(c_int), public, parameter :: FILETYPE_NC2 = 4
  integer(c_int), public, parameter :: FILETYPE_NC4 = 5
  integer(c_int), public, parameter :: FILETYPE_NC4C = 6
  integer(c_int), public, parameter :: FILETYPE_SRV = 7
  integer(c_int), public, parameter :: FILETYPE_EXT = 8
  integer(c_int), public, parameter :: FILETYPE_IEG = 9
  integer(c_int), public, parameter :: CDI_COMPRESS_NONE = 0
  integer(c_int), public, parameter :: CDI_COMPRESS_SZIP = 1
  integer(c_int), public, parameter :: CDI_COMPRESS_AEC = 2
  integer(c_int), public, parameter :: CDI_COMPRESS_ZIP = 3
  integer(c_int), public, parameter :: CDI_COMPRESS_JPEG = 4
  integer(c_int), public, parameter :: CDI_DATATYPE_PACK = 0
  integer(c_int), public, parameter :: CDI_DATATYPE_PACK1 = 1
  integer(c_int), public, parameter :: CDI_DATATYPE_PACK2 = 2
  integer(c_int), public, parameter :: CDI_DATATYPE_PACK3 = 3
  integer(c_int), public, parameter :: CDI_DATATYPE_PACK4 = 4
  integer(c_int), public, parameter :: CDI_DATATYPE_PACK5 = 5
  integer(c_int), public, parameter :: CDI_DATATYPE_PACK6 = 6
  integer(c_int), public, parameter :: CDI_DATATYPE_PACK7 = 7
  integer(c_int), public, parameter :: CDI_DATATYPE_PACK8 = 8
  integer(c_int), public, parameter :: CDI_DATATYPE_PACK9 = 9
  integer(c_int), public, parameter :: CDI_DATATYPE_PACK10 = 10
  integer(c_int), public, parameter :: CDI_DATATYPE_PACK11 = 11
  integer(c_int), public, parameter :: CDI_DATATYPE_PACK12 = 12
  integer(c_int), public, parameter :: CDI_DATATYPE_PACK13 = 13
  integer(c_int), public, parameter :: CDI_DATATYPE_PACK14 = 14
  integer(c_int), public, parameter :: CDI_DATATYPE_PACK15 = 15
  integer(c_int), public, parameter :: CDI_DATATYPE_PACK16 = 16
  integer(c_int), public, parameter :: CDI_DATATYPE_PACK17 = 17
  integer(c_int), public, parameter :: CDI_DATATYPE_PACK18 = 18
  integer(c_int), public, parameter :: CDI_DATATYPE_PACK19 = 19
  integer(c_int), public, parameter :: CDI_DATATYPE_PACK20 = 20
  integer(c_int), public, parameter :: CDI_DATATYPE_PACK21 = 21
  integer(c_int), public, parameter :: CDI_DATATYPE_PACK22 = 22
  integer(c_int), public, parameter :: CDI_DATATYPE_PACK23 = 23
  integer(c_int), public, parameter :: CDI_DATATYPE_PACK24 = 24
  integer(c_int), public, parameter :: CDI_DATATYPE_PACK25 = 25
  integer(c_int), public, parameter :: CDI_DATATYPE_PACK26 = 26
  integer(c_int), public, parameter :: CDI_DATATYPE_PACK27 = 27
  integer(c_int), public, parameter :: CDI_DATATYPE_PACK28 = 28
  integer(c_int), public, parameter :: CDI_DATATYPE_PACK29 = 29
  integer(c_int), public, parameter :: CDI_DATATYPE_PACK30 = 30
  integer(c_int), public, parameter :: CDI_DATATYPE_PACK31 = 31
  integer(c_int), public, parameter :: CDI_DATATYPE_PACK32 = 32
  integer(c_int), public, parameter :: CDI_DATATYPE_CPX32 = 64
  integer(c_int), public, parameter :: CDI_DATATYPE_CPX64 = 128
  integer(c_int), public, parameter :: CDI_DATATYPE_FLT32 = 132
  integer(c_int), public, parameter :: CDI_DATATYPE_FLT64 = 164
  integer(c_int), public, parameter :: CDI_DATATYPE_INT8 = 208
  integer(c_int), public, parameter :: CDI_DATATYPE_INT16 = 216
  integer(c_int), public, parameter :: CDI_DATATYPE_INT32 = 232
  integer(c_int), public, parameter :: CDI_DATATYPE_UINT8 = 308
  integer(c_int), public, parameter :: CDI_DATATYPE_UINT16 = 316
  integer(c_int), public, parameter :: CDI_DATATYPE_UINT32 = 332
  integer(c_int), public, parameter :: DATATYPE_PACK = 0
  integer(c_int), public, parameter :: DATATYPE_PACK8 = 8
  integer(c_int), public, parameter :: DATATYPE_PACK16 = 16
  integer(c_int), public, parameter :: DATATYPE_PACK24 = 24
  integer(c_int), public, parameter :: DATATYPE_FLT32 = 132
  integer(c_int), public, parameter :: DATATYPE_FLT64 = 164
  integer(c_int), public, parameter :: DATATYPE_INT32 = 232
  integer(c_int), public, parameter :: CDI_DATATYPE_INT = 251
  integer(c_int), public, parameter :: CDI_DATATYPE_FLT = 252
  integer(c_int), public, parameter :: CDI_DATATYPE_TXT = 253
  integer(c_int), public, parameter :: CDI_DATATYPE_CPX = 254
  integer(c_int), public, parameter :: CDI_DATATYPE_UCHAR = 255
  integer(c_int), public, parameter :: CDI_DATATYPE_LONG = 256
  integer(c_int), public, parameter :: CDI_DATATYPE_UINT = 257
  integer(c_int), public, parameter :: DATATYPE_INT = 251
  integer(c_int), public, parameter :: DATATYPE_FLT = 252
  integer(c_int), public, parameter :: DATATYPE_TXT = 253
  integer(c_int), public, parameter :: DATATYPE_CPX = 254
  integer(c_int), public, parameter :: DATATYPE_UCHAR = 255
  integer(c_int), public, parameter :: DATATYPE_LONG = 256
  integer(c_int), public, parameter :: CDI_CHUNK_AUTO = 1
  integer(c_int), public, parameter :: CDI_CHUNK_GRID = 2
  integer(c_int), public, parameter :: CDI_CHUNK_LINES = 3
  integer(c_int), public, parameter :: GRID_GENERIC = 1
  integer(c_int), public, parameter :: GRID_GAUSSIAN = 2
  integer(c_int), public, parameter :: GRID_GAUSSIAN_REDUCED = 3
  integer(c_int), public, parameter :: GRID_LONLAT = 4
  integer(c_int), public, parameter :: GRID_SPECTRAL = 5
  integer(c_int), public, parameter :: GRID_FOURIER = 6
  integer(c_int), public, parameter :: GRID_GME = 7
  integer(c_int), public, parameter :: GRID_TRAJECTORY = 8
  integer(c_int), public, parameter :: GRID_UNSTRUCTURED = 9
  integer(c_int), public, parameter :: GRID_CURVILINEAR = 10
  integer(c_int), public, parameter :: GRID_LCC = 11
  integer(c_int), public, parameter :: GRID_PROJECTION = 12
  integer(c_int), public, parameter :: GRID_CHARXY = 13
  integer(c_int), public, parameter :: CDI_PROJ_RLL = 21
  integer(c_int), public, parameter :: CDI_PROJ_LCC = 22
  integer(c_int), public, parameter :: CDI_PROJ_LAEA = 23
  integer(c_int), public, parameter :: CDI_PROJ_SINU = 24
  integer(c_int), public, parameter :: ZAXIS_SURFACE = 0
  integer(c_int), public, parameter :: ZAXIS_GENERIC = 1
  integer(c_int), public, parameter :: ZAXIS_HYBRID = 2
  integer(c_int), public, parameter :: ZAXIS_HYBRID_HALF = 3
  integer(c_int), public, parameter :: ZAXIS_PRESSURE = 4
  integer(c_int), public, parameter :: ZAXIS_HEIGHT = 5
  integer(c_int), public, parameter :: ZAXIS_DEPTH_BELOW_SEA = 6
  integer(c_int), public, parameter :: ZAXIS_DEPTH_BELOW_LAND = 7
  integer(c_int), public, parameter :: ZAXIS_ISENTROPIC = 8
  integer(c_int), public, parameter :: ZAXIS_TRAJECTORY = 9
  integer(c_int), public, parameter :: ZAXIS_ALTITUDE = 10
  integer(c_int), public, parameter :: ZAXIS_SIGMA = 11
  integer(c_int), public, parameter :: ZAXIS_MEANSEA = 12
  integer(c_int), public, parameter :: ZAXIS_TOA = 13
  integer(c_int), public, parameter :: ZAXIS_SEA_BOTTOM = 14
  integer(c_int), public, parameter :: ZAXIS_ATMOSPHERE = 15
  integer(c_int), public, parameter :: ZAXIS_CLOUD_BASE = 16
  integer(c_int), public, parameter :: ZAXIS_CLOUD_TOP = 17
  integer(c_int), public, parameter :: ZAXIS_ISOTHERM_ZERO = 18
  integer(c_int), public, parameter :: ZAXIS_SNOW = 19
  integer(c_int), public, parameter :: ZAXIS_LAKE_BOTTOM = 20
  integer(c_int), public, parameter :: ZAXIS_SEDIMENT_BOTTOM = 21
  integer(c_int), public, parameter :: ZAXIS_SEDIMENT_BOTTOM_TA = 22
  integer(c_int), public, parameter :: ZAXIS_SEDIMENT_BOTTOM_TW = 23
  integer(c_int), public, parameter :: ZAXIS_MIX_LAYER = 24
  integer(c_int), public, parameter :: ZAXIS_REFERENCE = 25
  integer(c_int), public, parameter :: ZAXIS_CHAR = 26
  integer(c_int), public, parameter :: MAX_KV_PAIRS_MATCH = 10
  integer(c_int), public, parameter :: TIME_CONSTANT = 0
  integer(c_int), public, parameter :: TIME_VARYING = 1
  integer(c_int), public, parameter :: TIME_VARIABLE = 1
  integer(c_int), public, parameter :: TSTEP_INSTANT = 1
  integer(c_int), public, parameter :: TSTEP_AVG = 2
  integer(c_int), public, parameter :: TSTEP_ACCUM = 3
  integer(c_int), public, parameter :: TSTEP_MAX = 4
  integer(c_int), public, parameter :: TSTEP_MIN = 5
  integer(c_int), public, parameter :: TSTEP_DIFF = 6
  integer(c_int), public, parameter :: TSTEP_RMS = 7
  integer(c_int), public, parameter :: TSTEP_SD = 8
  integer(c_int), public, parameter :: TSTEP_COV = 9
  integer(c_int), public, parameter :: TSTEP_RATIO = 10
  integer(c_int), public, parameter :: TSTEP_RANGE = 11
  integer(c_int), public, parameter :: TSTEP_INSTANT2 = 12
  integer(c_int), public, parameter :: TSTEP_INSTANT3 = 13
  integer(c_int), public, parameter :: TAXIS_ABSOLUTE = 1
  integer(c_int), public, parameter :: TAXIS_RELATIVE = 2
  integer(c_int), public, parameter :: TAXIS_FORECAST = 3
  integer(c_int), public, parameter :: TUNIT_SECOND = 1
  integer(c_int), public, parameter :: TUNIT_MINUTE = 2
  integer(c_int), public, parameter :: TUNIT_QUARTER = 3
  integer(c_int), public, parameter :: TUNIT_30MINUTES = 4
  integer(c_int), public, parameter :: TUNIT_HOUR = 5
  integer(c_int), public, parameter :: TUNIT_3HOURS = 6
  integer(c_int), public, parameter :: TUNIT_6HOURS = 7
  integer(c_int), public, parameter :: TUNIT_12HOURS = 8
  integer(c_int), public, parameter :: TUNIT_DAY = 9
  integer(c_int), public, parameter :: TUNIT_MONTH = 10
  integer(c_int), public, parameter :: TUNIT_YEAR = 11
  integer(c_int), public, parameter :: CALENDAR_STANDARD = 0
  integer(c_int), public, parameter :: CALENDAR_GREGORIAN = 1
  integer(c_int), public, parameter :: CALENDAR_PROLEPTIC = 2
  integer(c_int), public, parameter :: CALENDAR_360DAYS = 3
  integer(c_int), public, parameter :: CALENDAR_365DAYS = 4
  integer(c_int), public, parameter :: CALENDAR_366DAYS = 5
  integer(c_int), public, parameter :: CALENDAR_NONE = 6
  integer(c_int), public, parameter :: CDI_UUID_SIZE = 16

  public t_CdiParam
  type, bind(c) :: t_CdiParam
    integer(c_int) :: discipline
    integer(c_int) :: category
    integer(c_int) :: number
  end type t_CdiParam

  public :: t_CdiIterator
  type :: t_CdiIterator
    type(c_ptr) :: ptr
  end type t_CdiIterator

  public :: t_CdiGribIterator
  type :: t_CdiGribIterator
    type(c_ptr) :: ptr
  end type t_CdiGribIterator
  public :: cdiReset
  public :: cdiStringError
  public :: cdiDebug
  public :: cdiLibraryVersion
  public :: cdiPrintVersion
  public :: cdiHaveFiletype
  public :: cdiDefMissval
  public :: cdiInqMissval
  public :: cdiDefGlobal
  public :: namespaceNew
  public :: namespaceSetActive
  public :: namespaceGetActive
  public :: namespaceDelete
  public :: cdiParamToString
  public :: cdiDecodeParam
  public :: cdiEncodeParam
  public :: cdiDecodeDate
  public :: cdiEncodeDate
  public :: cdiDecodeTime
  public :: cdiEncodeTime
  public :: cdiGetFiletype
  public :: streamOpenRead
  public :: streamOpenWrite
  public :: streamOpenAppend
  public :: streamClose
  public :: streamSync
  public :: streamDefVlist
  public :: streamInqVlist
  public :: streamInqFiletype
  public :: streamDefByteorder
  public :: streamInqByteorder
  public :: streamDefCompType
  public :: streamInqCompType
  public :: streamDefCompLevel
  public :: streamInqCompLevel
  public :: streamDefTimestep
  public :: streamInqTimestep
  public :: streamInqCurTimestepID
  public :: streamFilename
  public :: streamFilesuffix
  public :: streamNvals
  public :: streamInqNvars
  public :: streamWriteVar
  public :: streamWriteVarF
  public :: streamReadVar
  public :: streamReadVarF
  public :: streamWriteVarSlice
  public :: streamWriteVarSliceF
  public :: streamReadVarSlice
  public :: streamReadVarSliceF
  public :: streamWriteVarChunk
  public :: streamDefRecord
  public :: streamInqRecord
  public :: streamWriteRecord
  public :: streamWriteRecordF
  public :: streamReadRecord
  public :: streamReadRecordF
  public :: streamCopyRecord
  public :: cdiIterator_new
  public :: cdiIterator_clone
  public :: cdiIterator_serialize
  public :: cdiIterator_deserialize
  public :: cdiIterator_delete
  public :: cdiIterator_nextField
  public :: cdiIterator_inqStartTime
  public :: cdiIterator_inqEndTime
  public :: cdiIterator_inqRTime
  public :: cdiIterator_inqVTime
  public :: cdiIterator_inqLevelType
  public :: cdiIterator_inqLevel
  public :: cdiIterator_inqLevelUuid
  public :: cdiIterator_inqTile
  public :: cdiIterator_inqTileCount
  public :: cdiIterator_inqParam
  public :: cdiIterator_inqParamParts
  public :: cdiIterator_inqDatatype
  public :: cdiIterator_inqFiletype
  public :: cdiIterator_inqTsteptype
  public :: cdiIterator_inqVariableName
  public :: cdiIterator_inqGridId
  public :: cdiIterator_readField
  public :: cdiIterator_readFieldF
  public :: cdiGribIterator_clone
  public :: cdiGribIterator_delete
  public :: cdiGribIterator_getLong
  public :: cdiGribIterator_getDouble
  public :: cdiGribIterator_getLength
  public :: cdiGribIterator_getString
  public :: cdiGribIterator_getSize
  public :: cdiGribIterator_getLongArray
  public :: cdiGribIterator_getDoubleArray
  public :: cdiGribIterator_inqEdition
  public :: cdiGribIterator_inqLongValue
  public :: cdiGribIterator_inqLongDefaultValue
  public :: cdiGribIterator_inqDoubleValue
  public :: cdiGribIterator_inqDoubleDefaultValue
  public :: cdiGribIterator_inqStringValue
  public :: vlistCreate
  public :: vlistDestroy
  public :: vlistDuplicate
  public :: vlistCopy
  public :: vlistCopyFlag
  public :: vlistClearFlag
  public :: vlistCat
  public :: vlistMerge
  public :: vlistPrint
  public :: vlistNumber
  public :: vlistNvars
  public :: vlistNgrids
  public :: vlistNzaxis
  public :: vlistNsubtypes
  public :: vlistDefNtsteps
  public :: vlistNtsteps
  public :: vlistGridsizeMax
  public :: vlistGrid
  public :: vlistGridIndex
  public :: vlistChangeGridIndex
  public :: vlistChangeGrid
  public :: vlistZaxis
  public :: vlistZaxisIndex
  public :: vlistChangeZaxisIndex
  public :: vlistChangeZaxis
  public :: vlistNrecs
  public :: vlistSubtype
  public :: vlistSubtypeIndex
  public :: vlistDefTaxis
  public :: vlistInqTaxis
  public :: vlistDefTable
  public :: vlistInqTable
  public :: vlistDefInstitut
  public :: vlistInqInstitut
  public :: vlistDefModel
  public :: vlistInqModel
  public :: vlistDefVarTiles
  public :: vlistDefVar
  public :: vlistChangeVarGrid
  public :: vlistChangeVarZaxis
  public :: vlistInqVar
  public :: vlistInqVarGrid
  public :: vlistInqVarZaxis
  public :: vlistInqVarID
  public :: vlistDefVarTimetype
  public :: vlistInqVarTimetype
  public :: vlistDefVarTsteptype
  public :: vlistInqVarTsteptype
  public :: vlistDefVarCompType
  public :: vlistInqVarCompType
  public :: vlistDefVarCompLevel
  public :: vlistInqVarCompLevel
  public :: vlistDefVarParam
  public :: vlistInqVarParam
  public :: vlistDefVarCode
  public :: vlistInqVarCode
  public :: vlistDefVarDatatype
  public :: vlistInqVarDatatype
  public :: vlistDefVarChunkType
  public :: vlistInqVarChunkType
  public :: vlistDefVarXYZ
  public :: vlistInqVarXYZ
  public :: vlistInqVarNumber
  public :: vlistDefVarInstitut
  public :: vlistInqVarInstitut
  public :: vlistDefVarModel
  public :: vlistInqVarModel
  public :: vlistDefVarTable
  public :: vlistInqVarTable
  public :: vlistDefVarName
  public :: vlistInqVarName
  public :: vlistCopyVarName
  public :: vlistDefVarStdname
  public :: vlistInqVarStdname
  public :: vlistDefVarLongname
  public :: vlistInqVarLongname
  public :: vlistDefVarUnits
  public :: vlistInqVarUnits
  public :: vlistDefVarMissval
  public :: vlistInqVarMissval
  public :: vlistDefVarExtra
  public :: vlistInqVarExtra
  public :: vlistDefVarScalefactor
  public :: vlistInqVarScalefactor
  public :: vlistDefVarAddoffset
  public :: vlistInqVarAddoffset
  public :: vlistDefVarTimave
  public :: vlistInqVarTimave
  public :: vlistInqVarSize
  public :: vlistDefIndex
  public :: vlistInqIndex
  public :: vlistDefFlag
  public :: vlistInqFlag
  public :: vlistFindVar
  public :: vlistFindLevel
  public :: vlistMergedVar
  public :: vlistMergedLevel
  public :: cdiClearAdditionalKeys
  public :: cdiDefAdditionalKey
  public :: vlistDefVarIntKey
  public :: vlistDefVarDblKey
  public :: vlistHasVarKey
  public :: vlistInqVarDblKey
  public :: vlistInqVarIntKey
  public :: cdiInqNatts
  public :: cdiInqAtt
  public :: cdiDelAtt
  public :: cdiCopyAtts
  public :: cdiDefAttInt
  public :: cdiDefAttFlt
  public :: cdiDefAttTxt
  public :: cdiInqAttInt
  public :: cdiInqAttFlt
  public :: cdiInqAttTxt
  public :: gridName
  public :: gridNamePtr
  public :: gridCompress
  public :: gridDefMaskGME
  public :: gridInqMaskGME
  public :: gridDefMask
  public :: gridInqMask
  public :: gridPrint
  public :: gridCreate
  public :: gridDestroy
  public :: gridDuplicate
  public :: gridDefProj
  public :: gridInqProj
  public :: gridInqProjType
  public :: gridInqType
  public :: gridInqSize
  public :: gridDefXsize
  public :: gridInqXsize
  public :: gridDefYsize
  public :: gridInqYsize
  public :: gridDefNP
  public :: gridInqNP
  public :: gridDefXvals
  public :: gridInqXvals
  public :: gridInqXIsc
  public :: gridDefYvals
  public :: gridInqYvals
  public :: gridInqYIsc
  integer(c_int), public, parameter :: CDI_KEY_TABLESVERSION = 801
  integer(c_int), public, parameter :: CDI_KEY_LOCALTABLESVERSION = 802
  integer(c_int), public, parameter :: CDI_KEY_TYPEOFGENERATINGPROCESS = 803
  integer(c_int), public, parameter :: CDI_KEY_PRODUCTDEFINITIONTEMPLATE = 804
  integer(c_int), public, parameter :: CDI_KEY_TYPEOFPROCESSEDDATA = 805
  integer(c_int), public, parameter :: CDI_KEY_SHAPEOFTHEEARTH = 806
  integer(c_int), public, parameter :: CDI_KEY_BACKGROUNDPROCESS = 807
  integer(c_int), public, parameter :: CDI_KEY_TYPEOFENSEMBLEFORECAST = 808
  integer(c_int), public, parameter :: CDI_KEY_NUMBEROFFORECASTSINENSEMBLE =&
  & 809
  integer(c_int), public, parameter :: CDI_KEY_PERTURBATIONNUMBER = 810
  integer(c_int), public, parameter :: CDI_KEY_CENTRE = 811
  integer(c_int), public, parameter :: CDI_KEY_SUBCENTRE = 812
  integer(c_int), public, parameter :: CDI_KEY_MPIMTYPE = 813
  integer(c_int), public, parameter :: CDI_KEY_MPIMCLASS = 814
  integer(c_int), public, parameter :: CDI_KEY_MPIMUSER = 815
  integer(c_int), public, parameter :: CDI_KEY_REVSTATUS = 816
  integer(c_int), public, parameter :: CDI_KEY_REVNUMBER = 817
  integer(c_int), public, parameter :: CDI_KEY_GRIB2LOCALSECTIONNUMBER = 818
  integer(c_int), public, parameter :: CDI_KEY_SECTION2PADDINGLENGTH = 819
  integer(c_int), public, parameter :: CDI_KEY_SECTION2PADDING = 820
  public :: cdiDefKeyInt
  public :: cdiInqKeyInt
  public :: cdiDefKeyBytes
  public :: cdiInqKeyBytes
  public :: cdiDefKeyString
  public :: cdiInqKeyString
  public :: cdiInqKeyLen
  public :: cdiCopyKeys
  integer(c_int), public, parameter :: CDI_KEY_XNAME = 901
  integer(c_int), public, parameter :: CDI_KEY_XDIMNAME = 902
  integer(c_int), public, parameter :: CDI_KEY_XLONGNAME = 903
  integer(c_int), public, parameter :: CDI_KEY_XUNITS = 904
  integer(c_int), public, parameter :: CDI_KEY_YNAME = 911
  integer(c_int), public, parameter :: CDI_KEY_YDIMNAME = 912
  integer(c_int), public, parameter :: CDI_KEY_YLONGNAME = 913
  integer(c_int), public, parameter :: CDI_KEY_YUNITS = 914
  integer(c_int), public, parameter :: CDI_KEY_VDIMNAME = 920
  integer(c_int), public, parameter :: CDI_KEY_MAPPING = 921
  integer(c_int), public, parameter :: CDI_KEY_MAPNAME = 922
  integer(c_int), public, parameter :: CDI_KEY_NAME = 941
  integer(c_int), public, parameter :: CDI_KEY_DIMNAME = 942
  integer(c_int), public, parameter :: CDI_KEY_LONGNAME = 943
  integer(c_int), public, parameter :: CDI_KEY_UNITS = 944
  integer(c_int), public, parameter :: CDI_KEY_PSNAME = 950
  integer(c_int), public, parameter :: CDI_KEY_P0NAME = 951
  integer(c_int), public, parameter :: CDI_KEY_P0VALUE = 952
  public :: cdiGridDefKeyStr
  public :: cdiGridInqKeyStr
  public :: cdiZaxisDefKeyStr
  public :: cdiZaxisInqKeyStr
  public :: cdiZaxisDefKeyFlt
  public :: cdiZaxisInqKeyFlt
  public :: gridDefXname
  public :: gridInqXname
  public :: gridDefXlongname
  public :: gridInqXlongname
  public :: gridDefXunits
  public :: gridInqXunits
  public :: gridDefYname
  public :: gridInqYname
  public :: gridDefYlongname
  public :: gridInqYlongname
  public :: gridDefYunits
  public :: gridInqYunits
  public :: gridInqXstdname
  public :: gridInqYstdname
  public :: gridDefDatatype
  public :: gridInqDatatype
  public :: gridInqXval
  public :: gridInqYval
  public :: gridInqXinc
  public :: gridInqYinc
  public :: gridIsCircular
  public :: gridInqTrunc
  public :: gridDefTrunc
  public :: gridDefNumber
  public :: gridInqNumber
  public :: gridDefPosition
  public :: gridInqPosition
  public :: gridDefReference
  public :: gridInqReference
  public :: gridDefUUID
  public :: gridInqUUID
  public :: gridDefParamRLL
  public :: gridInqParamRLL
  public :: gridDefParamGME
  public :: gridInqParamGME
  public :: gridDefParamLCC
  public :: gridInqParamLCC
  public :: gridDefArea
  public :: gridInqArea
  public :: gridHasArea
  public :: gridDefNvertex
  public :: gridInqNvertex
  public :: gridDefXbounds
  public :: gridInqXbounds
  public :: gridInqXboundsPart
  public :: gridDefYbounds
  public :: gridInqYbounds
  public :: gridInqYboundsPart
  public :: gridDefRowlon
  public :: gridInqRowlon
  public :: gridChangeType
  public :: gridDefComplexPacking
  public :: gridInqComplexPacking
  public :: gridDefUvRelativeToGrid
  public :: gridInqUvRelativeToGrid
  public :: gridDefScanningMode
  public :: gridInqScanningMode
  public :: zaxisName
  public :: zaxisNamePtr
  public :: zaxisCreate
  public :: zaxisDestroy
  public :: zaxisInqType
  public :: zaxisInqSize
  public :: zaxisDuplicate
  public :: zaxisPrint
  public :: zaxisDefLevels
  public :: zaxisInqLevels
  public :: zaxisInqCLen
  public :: zaxisDefLevel
  public :: zaxisInqLevel
  public :: zaxisDefNlevRef
  public :: zaxisInqNlevRef
  public :: zaxisDefNumber
  public :: zaxisInqNumber
  public :: zaxisDefUUID
  public :: zaxisInqUUID
  public :: zaxisDefName
  public :: zaxisInqName
  public :: zaxisDefLongname
  public :: zaxisInqLongname
  public :: zaxisDefUnits
  public :: zaxisInqUnits
  public :: zaxisInqStdname
  public :: zaxisDefDatatype
  public :: zaxisInqDatatype
  public :: zaxisDefPositive
  public :: zaxisInqPositive
  public :: zaxisDefScalar
  public :: zaxisInqScalar
  public :: zaxisDefLtype
  public :: zaxisInqLtype
  public :: zaxisDefVct
  public :: zaxisInqVct
  public :: zaxisInqVctSize
  public :: zaxisInqVctPtr
  public :: zaxisDefLbounds
  public :: zaxisInqLbounds
  public :: zaxisInqLbound
  public :: zaxisDefUbounds
  public :: zaxisInqUbounds
  public :: zaxisInqUbound
  public :: zaxisDefWeights
  public :: zaxisInqWeights
  public :: zaxisChangeType
  public :: taxisCreate
  public :: taxisDestroy
  public :: taxisDuplicate
  public :: taxisCopyTimestep
  public :: taxisDefType
  public :: taxisDefVdate
  public :: taxisDefVtime
  public :: taxisInqVdate
  public :: taxisInqVtime
  public :: taxisDefRdate
  public :: taxisDefRtime
  public :: taxisInqRdate
  public :: taxisInqRtime
  public :: taxisDefFdate
  public :: taxisDefFtime
  public :: taxisInqFdate
  public :: taxisInqFtime
  public :: taxisHasBounds
  public :: taxisWithBounds
  public :: taxisDeleteBounds
  public :: taxisDefVdateBounds
  public :: taxisDefVtimeBounds
  public :: taxisInqVdateBounds
  public :: taxisInqVtimeBounds
  public :: taxisDefCalendar
  public :: taxisInqCalendar
  public :: taxisDefTunit
  public :: taxisInqTunit
  public :: taxisDefForecastTunit
  public :: taxisInqForecastTunit
  public :: taxisDefForecastPeriod
  public :: taxisInqForecastPeriod
  public :: taxisDefNumavg
  public :: taxisInqType
  public :: taxisInqNumavg
  public :: tunitNamePtr
  public :: institutDef
  public :: institutInq
  public :: institutInqNumber
  public :: institutInqCenter
  public :: institutInqSubcenter
  public :: institutInqNamePtr
  public :: institutInqLongnamePtr
  public :: modelDef
  public :: modelInq
  public :: modelInqInstitut
  public :: modelInqGribID
  public :: modelInqNamePtr
  public :: tableWrite
  public :: tableRead
  public :: tableDef
  public :: tableInqNamePtr
  public :: tableInq
  public :: tableInqNumber
  public :: tableInqNum
  public :: tableInqModel
  public :: tableInqEntry
  public :: streamDefHistory
  public :: streamInqHistorySize
  public :: streamInqHistoryString
  public :: subtypeCreate
  public :: subtypePrint
  public :: subtypeCompare
  public :: subtypeInqSize
  public :: subtypeInqActiveIndex
  public :: subtypeDefActiveIndex
  public :: subtypeInqTile
  public :: subtypeInqAttribute
  public :: vlistInqVarSubtype
  public :: gribapiLibraryVersion

  interface
    subroutine cdiReset() bind(c, name = 'cdiReset')
    end subroutine cdiReset

    subroutine cdiDebug(debug_dummy) bind(c, name = 'cdiDebug')
      import c_int
      integer(c_int), value :: debug_dummy
    end subroutine cdiDebug

    subroutine cdiPrintVersion() bind(c, name = 'cdiPrintVersion')
    end subroutine cdiPrintVersion

    function cdiHaveFiletype(filetype_dummy) bind(c, name = 'cdiHaveFiletype')&
    & result(f_result)
      import c_int
      integer(c_int), value :: filetype_dummy
      integer(c_int) :: f_result
    end function cdiHaveFiletype

    subroutine cdiDefMissval(missval_dummy) bind(c, name = 'cdiDefMissval')
      import c_double
      real(c_double), value :: missval_dummy
    end subroutine cdiDefMissval

    function cdiInqMissval() bind(c, name = 'cdiInqMissval') result(f_result)
      import c_double
      real(c_double) :: f_result
    end function cdiInqMissval

    function namespaceNew() bind(c, name = 'namespaceNew') result(f_result)
      import c_int
      integer(c_int) :: f_result
    end function namespaceNew

    subroutine namespaceSetActive(namespaceID_dummy) bind(c, name =&
    & 'namespaceSetActive')
      import c_int
      integer(c_int), value :: namespaceID_dummy
    end subroutine namespaceSetActive

    function namespaceGetActive() bind(c, name = 'namespaceGetActive')&
    & result(f_result)
      import c_int
      integer(c_int) :: f_result
    end function namespaceGetActive

    subroutine namespaceDelete(namespaceID_dummy) bind(c, name =&
    & 'namespaceDelete')
      import c_int
      integer(c_int), value :: namespaceID_dummy
    end subroutine namespaceDelete

    subroutine cdiDecodeParam(param_dummy, pnum_dummy, pcat_dummy, pdis_dummy)&
    & bind(c, name = 'cdiDecodeParam')
      import c_int
      integer(c_int), value :: param_dummy
      integer(c_int), intent(inout) :: pnum_dummy
      integer(c_int), intent(inout) :: pcat_dummy
      integer(c_int), intent(inout) :: pdis_dummy
    end subroutine cdiDecodeParam

    function cdiEncodeParam(pnum_dummy, pcat_dummy, pdis_dummy) bind(c, name =&
    & 'cdiEncodeParam') result(f_result)
      import c_int
      integer(c_int), value :: pnum_dummy
      integer(c_int), value :: pcat_dummy
      integer(c_int), value :: pdis_dummy
      integer(c_int) :: f_result
    end function cdiEncodeParam

    subroutine cdiDecodeDate(date_dummy, year_dummy, month_dummy, day_dummy)&
    & bind(c, name = 'cdiDecodeDate')
      import c_int, c_int64_t
      integer(c_int64_t), value :: date_dummy
      integer(c_int), intent(inout) :: year_dummy
      integer(c_int), intent(inout) :: month_dummy
      integer(c_int), intent(inout) :: day_dummy
    end subroutine cdiDecodeDate

    function cdiEncodeDate(year_dummy, month_dummy, day_dummy) bind(c, name =&
    & 'cdiEncodeDate') result(f_result)
      import c_int, c_int64_t
      integer(c_int), value :: year_dummy
      integer(c_int), value :: month_dummy
      integer(c_int), value :: day_dummy
      integer(c_int64_t) :: f_result
    end function cdiEncodeDate

    subroutine cdiDecodeTime(time_dummy, hour_dummy, minute_dummy,&
    & second_dummy) bind(c, name = 'cdiDecodeTime')
      import c_int
      integer(c_int), value :: time_dummy
      integer(c_int), intent(inout) :: hour_dummy
      integer(c_int), intent(inout) :: minute_dummy
      integer(c_int), intent(inout) :: second_dummy
    end subroutine cdiDecodeTime

    function cdiEncodeTime(hour_dummy, minute_dummy, second_dummy) bind(c, name&
    & = 'cdiEncodeTime') result(f_result)
      import c_int
      integer(c_int), value :: hour_dummy
      integer(c_int), value :: minute_dummy
      integer(c_int), value :: second_dummy
      integer(c_int) :: f_result
    end function cdiEncodeTime

    subroutine streamClose(streamID_dummy) bind(c, name = 'streamClose')
      import c_int
      integer(c_int), value :: streamID_dummy
    end subroutine streamClose

    subroutine streamSync(streamID_dummy) bind(c, name = 'streamSync')
      import c_int
      integer(c_int), value :: streamID_dummy
    end subroutine streamSync

    subroutine streamDefVlist(streamID_dummy, vlistID_dummy) bind(c, name =&
    & 'streamDefVlist')
      import c_int
      integer(c_int), value :: streamID_dummy
      integer(c_int), value :: vlistID_dummy
    end subroutine streamDefVlist

    function streamInqVlist(streamID_dummy) bind(c, name = 'streamInqVlist')&
    & result(f_result)
      import c_int
      integer(c_int), value :: streamID_dummy
      integer(c_int) :: f_result
    end function streamInqVlist

    function streamInqFiletype(streamID_dummy) bind(c, name =&
    & 'streamInqFiletype') result(f_result)
      import c_int
      integer(c_int), value :: streamID_dummy
      integer(c_int) :: f_result
    end function streamInqFiletype

    subroutine streamDefByteorder(streamID_dummy, byteorder_dummy) bind(c, name&
    & = 'streamDefByteorder')
      import c_int
      integer(c_int), value :: streamID_dummy
      integer(c_int), value :: byteorder_dummy
    end subroutine streamDefByteorder

    function streamInqByteorder(streamID_dummy) bind(c, name =&
    & 'streamInqByteorder') result(f_result)
      import c_int
      integer(c_int), value :: streamID_dummy
      integer(c_int) :: f_result
    end function streamInqByteorder

    subroutine streamDefCompType(streamID_dummy, comptype_dummy) bind(c, name =&
    & 'streamDefCompType')
      import c_int
      integer(c_int), value :: streamID_dummy
      integer(c_int), value :: comptype_dummy
    end subroutine streamDefCompType

    function streamInqCompType(streamID_dummy) bind(c, name =&
    & 'streamInqCompType') result(f_result)
      import c_int
      integer(c_int), value :: streamID_dummy
      integer(c_int) :: f_result
    end function streamInqCompType

    subroutine streamDefCompLevel(streamID_dummy, complevel_dummy) bind(c, name&
    & = 'streamDefCompLevel')
      import c_int
      integer(c_int), value :: streamID_dummy
      integer(c_int), value :: complevel_dummy
    end subroutine streamDefCompLevel

    function streamInqCompLevel(streamID_dummy) bind(c, name =&
    & 'streamInqCompLevel') result(f_result)
      import c_int
      integer(c_int), value :: streamID_dummy
      integer(c_int) :: f_result
    end function streamInqCompLevel

    function streamDefTimestep(streamID_dummy, tsID_dummy) bind(c, name =&
    & 'streamDefTimestep') result(f_result)
      import c_int
      integer(c_int), value :: streamID_dummy
      integer(c_int), value :: tsID_dummy
      integer(c_int) :: f_result
    end function streamDefTimestep

    function streamInqTimestep(streamID_dummy, tsID_dummy) bind(c, name =&
    & 'streamInqTimestep') result(f_result)
      import c_int
      integer(c_int), value :: streamID_dummy
      integer(c_int), value :: tsID_dummy
      integer(c_int) :: f_result
    end function streamInqTimestep

    function streamInqCurTimestepID(streamID_dummy) bind(c, name =&
    & 'streamInqCurTimestepID') result(f_result)
      import c_int
      integer(c_int), value :: streamID_dummy
      integer(c_int) :: f_result
    end function streamInqCurTimestepID

    function streamNvals(streamID_dummy) bind(c, name = 'streamNvals')&
    & result(f_result)
      import c_int, c_size_t
      integer(c_int), value :: streamID_dummy
      integer(c_size_t) :: f_result
    end function streamNvals

    function streamInqNvars(streamID_dummy) bind(c, name = 'streamInqNvars')&
    & result(f_result)
      import c_int
      integer(c_int), value :: streamID_dummy
      integer(c_int) :: f_result
    end function streamInqNvars

    subroutine streamWriteVar(streamID_dummy, varID_dummy, data_dummy,&
    & nmiss_dummy) bind(c, name = 'streamWriteVar')
      import c_double, c_int, c_size_t
      integer(c_int), value :: streamID_dummy
      integer(c_int), value :: varID_dummy
      real(c_double), intent(in) :: data_dummy(*)
      integer(c_size_t), value :: nmiss_dummy
    end subroutine streamWriteVar

    subroutine streamWriteVarF(streamID_dummy, varID_dummy, data_dummy,&
    & nmiss_dummy) bind(c, name = 'streamWriteVarF')
      import c_float, c_int, c_size_t
      integer(c_int), value :: streamID_dummy
      integer(c_int), value :: varID_dummy
      real(c_float), intent(in) :: data_dummy(*)
      integer(c_size_t), value :: nmiss_dummy
    end subroutine streamWriteVarF

    subroutine streamReadVar(streamID_dummy, varID_dummy, data_dummy,&
    & nmiss_dummy) bind(c, name = 'streamReadVar')
      import c_double, c_int, c_size_t
      integer(c_int), value :: streamID_dummy
      integer(c_int), value :: varID_dummy
      real(c_double), intent(inout) :: data_dummy(*)
      integer(c_size_t), intent(inout) :: nmiss_dummy
    end subroutine streamReadVar

    subroutine streamReadVarF(streamID_dummy, varID_dummy, data_dummy,&
    & nmiss_dummy) bind(c, name = 'streamReadVarF')
      import c_float, c_int, c_size_t
      integer(c_int), value :: streamID_dummy
      integer(c_int), value :: varID_dummy
      real(c_float), intent(inout) :: data_dummy(*)
      integer(c_size_t), intent(inout) :: nmiss_dummy
    end subroutine streamReadVarF

    subroutine streamWriteVarSlice(streamID_dummy, varID_dummy, levelID_dummy,&
    & data_dummy, nmiss_dummy) bind(c, name = 'streamWriteVarSlice')
      import c_double, c_int, c_size_t
      integer(c_int), value :: streamID_dummy
      integer(c_int), value :: varID_dummy
      integer(c_int), value :: levelID_dummy
      real(c_double), intent(in) :: data_dummy(*)
      integer(c_size_t), value :: nmiss_dummy
    end subroutine streamWriteVarSlice

    subroutine streamWriteVarSliceF(streamID_dummy, varID_dummy, levelID_dummy,&
    & data_dummy, nmiss_dummy) bind(c, name = 'streamWriteVarSliceF')
      import c_float, c_int, c_size_t
      integer(c_int), value :: streamID_dummy
      integer(c_int), value :: varID_dummy
      integer(c_int), value :: levelID_dummy
      real(c_float), intent(in) :: data_dummy(*)
      integer(c_size_t), value :: nmiss_dummy
    end subroutine streamWriteVarSliceF

    subroutine streamReadVarSlice(streamID_dummy, varID_dummy, levelID_dummy,&
    & data_dummy, nmiss_dummy) bind(c, name = 'streamReadVarSlice')
      import c_double, c_int, c_size_t
      integer(c_int), value :: streamID_dummy
      integer(c_int), value :: varID_dummy
      integer(c_int), value :: levelID_dummy
      real(c_double), intent(inout) :: data_dummy(*)
      integer(c_size_t), intent(inout) :: nmiss_dummy
    end subroutine streamReadVarSlice

    subroutine streamReadVarSliceF(streamID_dummy, varID_dummy, levelID_dummy,&
    & data_dummy, nmiss_dummy) bind(c, name = 'streamReadVarSliceF')
      import c_float, c_int, c_size_t
      integer(c_int), value :: streamID_dummy
      integer(c_int), value :: varID_dummy
      integer(c_int), value :: levelID_dummy
      real(c_float), intent(inout) :: data_dummy(*)
      integer(c_size_t), intent(inout) :: nmiss_dummy
    end subroutine streamReadVarSliceF

    subroutine streamWriteVarChunk(streamID_dummy, varID_dummy, rect_dummy,&
    & data_dummy, nmiss_dummy) bind(c, name = 'streamWriteVarChunk')
      import c_double, c_int, c_size_t
      integer(c_int), value :: streamID_dummy
      integer(c_int), value :: varID_dummy
      integer(c_int), intent(in) :: rect_dummy(2, 3)
      real(c_double), intent(in) :: data_dummy(*)
      integer(c_size_t), value :: nmiss_dummy
    end subroutine streamWriteVarChunk

    subroutine streamDefRecord(streamID_dummy, varID_dummy, levelID_dummy)&
    & bind(c, name = 'streamDefRecord')
      import c_int
      integer(c_int), value :: streamID_dummy
      integer(c_int), value :: varID_dummy
      integer(c_int), value :: levelID_dummy
    end subroutine streamDefRecord

    subroutine streamInqRecord(streamID_dummy, varID_dummy, levelID_dummy)&
    & bind(c, name = 'streamInqRecord')
      import c_int
      integer(c_int), value :: streamID_dummy
      integer(c_int), intent(inout) :: varID_dummy
      integer(c_int), intent(inout) :: levelID_dummy
    end subroutine streamInqRecord

    subroutine streamWriteRecord(streamID_dummy, data_dummy, nmiss_dummy)&
    & bind(c, name = 'streamWriteRecord')
      import c_double, c_int, c_size_t
      integer(c_int), value :: streamID_dummy
      real(c_double), intent(in) :: data_dummy(*)
      integer(c_size_t), value :: nmiss_dummy
    end subroutine streamWriteRecord

    subroutine streamWriteRecordF(streamID_dummy, data_dummy, nmiss_dummy)&
    & bind(c, name = 'streamWriteRecordF')
      import c_float, c_int, c_size_t
      integer(c_int), value :: streamID_dummy
      real(c_float), intent(in) :: data_dummy(*)
      integer(c_size_t), value :: nmiss_dummy
    end subroutine streamWriteRecordF

    subroutine streamReadRecord(streamID_dummy, data_dummy, nmiss_dummy)&
    & bind(c, name = 'streamReadRecord')
      import c_double, c_int, c_size_t
      integer(c_int), value :: streamID_dummy
      real(c_double), intent(inout) :: data_dummy(*)
      integer(c_size_t), intent(inout) :: nmiss_dummy
    end subroutine streamReadRecord

    subroutine streamReadRecordF(streamID_dummy, data_dummy, nmiss_dummy)&
    & bind(c, name = 'streamReadRecordF')
      import c_float, c_int, c_size_t
      integer(c_int), value :: streamID_dummy
      real(c_float), intent(inout) :: data_dummy(*)
      integer(c_size_t), intent(inout) :: nmiss_dummy
    end subroutine streamReadRecordF

    subroutine streamCopyRecord(streamIDdest_dummy, streamIDsrc_dummy) bind(c,&
    & name = 'streamCopyRecord')
      import c_int
      integer(c_int), value :: streamIDdest_dummy
      integer(c_int), value :: streamIDsrc_dummy
    end subroutine streamCopyRecord

    function vlistCreate() bind(c, name = 'vlistCreate') result(f_result)
      import c_int
      integer(c_int) :: f_result
    end function vlistCreate

    subroutine vlistDestroy(vlistID_dummy) bind(c, name = 'vlistDestroy')
      import c_int
      integer(c_int), value :: vlistID_dummy
    end subroutine vlistDestroy

    function vlistDuplicate(vlistID_dummy) bind(c, name = 'vlistDuplicate')&
    & result(f_result)
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int) :: f_result
    end function vlistDuplicate

    subroutine vlistCopy(vlistID2_dummy, vlistID1_dummy) bind(c, name =&
    & 'vlistCopy')
      import c_int
      integer(c_int), value :: vlistID2_dummy
      integer(c_int), value :: vlistID1_dummy
    end subroutine vlistCopy

    subroutine vlistCopyFlag(vlistID2_dummy, vlistID1_dummy) bind(c, name =&
    & 'vlistCopyFlag')
      import c_int
      integer(c_int), value :: vlistID2_dummy
      integer(c_int), value :: vlistID1_dummy
    end subroutine vlistCopyFlag

    subroutine vlistClearFlag(vlistID_dummy) bind(c, name = 'vlistClearFlag')
      import c_int
      integer(c_int), value :: vlistID_dummy
    end subroutine vlistClearFlag

    subroutine vlistCat(vlistID2_dummy, vlistID1_dummy) bind(c, name =&
    & 'vlistCat')
      import c_int
      integer(c_int), value :: vlistID2_dummy
      integer(c_int), value :: vlistID1_dummy
    end subroutine vlistCat

    subroutine vlistMerge(vlistID2_dummy, vlistID1_dummy) bind(c, name =&
    & 'vlistMerge')
      import c_int
      integer(c_int), value :: vlistID2_dummy
      integer(c_int), value :: vlistID1_dummy
    end subroutine vlistMerge

    subroutine vlistPrint(vlistID_dummy) bind(c, name = 'vlistPrint')
      import c_int
      integer(c_int), value :: vlistID_dummy
    end subroutine vlistPrint

    function vlistNumber(vlistID_dummy) bind(c, name = 'vlistNumber')&
    & result(f_result)
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int) :: f_result
    end function vlistNumber

    function vlistNvars(vlistID_dummy) bind(c, name = 'vlistNvars')&
    & result(f_result)
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int) :: f_result
    end function vlistNvars

    function vlistNgrids(vlistID_dummy) bind(c, name = 'vlistNgrids')&
    & result(f_result)
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int) :: f_result
    end function vlistNgrids

    function vlistNzaxis(vlistID_dummy) bind(c, name = 'vlistNzaxis')&
    & result(f_result)
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int) :: f_result
    end function vlistNzaxis

    function vlistNsubtypes(vlistID_dummy) bind(c, name = 'vlistNsubtypes')&
    & result(f_result)
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int) :: f_result
    end function vlistNsubtypes

    subroutine vlistDefNtsteps(vlistID_dummy, nts_dummy) bind(c, name =&
    & 'vlistDefNtsteps')
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: nts_dummy
    end subroutine vlistDefNtsteps

    function vlistNtsteps(vlistID_dummy) bind(c, name = 'vlistNtsteps')&
    & result(f_result)
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int) :: f_result
    end function vlistNtsteps

    function vlistGridsizeMax(vlistID_dummy) bind(c, name = 'vlistGridsizeMax')&
    & result(f_result)
      import c_int, c_size_t
      integer(c_int), value :: vlistID_dummy
      integer(c_size_t) :: f_result
    end function vlistGridsizeMax

    function vlistGrid(vlistID_dummy, index_dummy) bind(c, name = 'vlistGrid')&
    & result(f_result)
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: index_dummy
      integer(c_int) :: f_result
    end function vlistGrid

    function vlistGridIndex(vlistID_dummy, gridID_dummy) bind(c, name =&
    & 'vlistGridIndex') result(f_result)
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: gridID_dummy
      integer(c_int) :: f_result
    end function vlistGridIndex

    subroutine vlistChangeGridIndex(vlistID_dummy, index_dummy, gridID_dummy)&
    & bind(c, name = 'vlistChangeGridIndex')
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: index_dummy
      integer(c_int), value :: gridID_dummy
    end subroutine vlistChangeGridIndex

    subroutine vlistChangeGrid(vlistID_dummy, gridID1_dummy, gridID2_dummy)&
    & bind(c, name = 'vlistChangeGrid')
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: gridID1_dummy
      integer(c_int), value :: gridID2_dummy
    end subroutine vlistChangeGrid

    function vlistZaxis(vlistID_dummy, index_dummy) bind(c, name =&
    & 'vlistZaxis') result(f_result)
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: index_dummy
      integer(c_int) :: f_result
    end function vlistZaxis

    function vlistZaxisIndex(vlistID_dummy, zaxisID_dummy) bind(c, name =&
    & 'vlistZaxisIndex') result(f_result)
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: zaxisID_dummy
      integer(c_int) :: f_result
    end function vlistZaxisIndex

    subroutine vlistChangeZaxisIndex(vlistID_dummy, index_dummy, zaxisID_dummy)&
    & bind(c, name = 'vlistChangeZaxisIndex')
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: index_dummy
      integer(c_int), value :: zaxisID_dummy
    end subroutine vlistChangeZaxisIndex

    subroutine vlistChangeZaxis(vlistID_dummy, zaxisID1_dummy, zaxisID2_dummy)&
    & bind(c, name = 'vlistChangeZaxis')
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: zaxisID1_dummy
      integer(c_int), value :: zaxisID2_dummy
    end subroutine vlistChangeZaxis

    function vlistNrecs(vlistID_dummy) bind(c, name = 'vlistNrecs')&
    & result(f_result)
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int) :: f_result
    end function vlistNrecs

    function vlistSubtype(vlistID_dummy, index_dummy) bind(c, name =&
    & 'vlistSubtype') result(f_result)
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: index_dummy
      integer(c_int) :: f_result
    end function vlistSubtype

    function vlistSubtypeIndex(vlistID_dummy, subtypeID_dummy) bind(c, name =&
    & 'vlistSubtypeIndex') result(f_result)
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: subtypeID_dummy
      integer(c_int) :: f_result
    end function vlistSubtypeIndex

    subroutine vlistDefTaxis(vlistID_dummy, taxisID_dummy) bind(c, name =&
    & 'vlistDefTaxis')
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: taxisID_dummy
    end subroutine vlistDefTaxis

    function vlistInqTaxis(vlistID_dummy) bind(c, name = 'vlistInqTaxis')&
    & result(f_result)
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int) :: f_result
    end function vlistInqTaxis

    subroutine vlistDefTable(vlistID_dummy, tableID_dummy) bind(c, name =&
    & 'vlistDefTable')
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: tableID_dummy
    end subroutine vlistDefTable

    function vlistInqTable(vlistID_dummy) bind(c, name = 'vlistInqTable')&
    & result(f_result)
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int) :: f_result
    end function vlistInqTable

    subroutine vlistDefInstitut(vlistID_dummy, instID_dummy) bind(c, name =&
    & 'vlistDefInstitut')
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: instID_dummy
    end subroutine vlistDefInstitut

    function vlistInqInstitut(vlistID_dummy) bind(c, name = 'vlistInqInstitut')&
    & result(f_result)
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int) :: f_result
    end function vlistInqInstitut

    subroutine vlistDefModel(vlistID_dummy, modelID_dummy) bind(c, name =&
    & 'vlistDefModel')
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: modelID_dummy
    end subroutine vlistDefModel

    function vlistInqModel(vlistID_dummy) bind(c, name = 'vlistInqModel')&
    & result(f_result)
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int) :: f_result
    end function vlistInqModel

    function vlistDefVarTiles(vlistID_dummy, gridID_dummy, zaxisID_dummy,&
    & timetype_dummy, tilesetID_dummy) bind(c, name = 'vlistDefVarTiles')&
    & result(f_result)
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: gridID_dummy
      integer(c_int), value :: zaxisID_dummy
      integer(c_int), value :: timetype_dummy
      integer(c_int), value :: tilesetID_dummy
      integer(c_int) :: f_result
    end function vlistDefVarTiles

    function vlistDefVar(vlistID_dummy, gridID_dummy, zaxisID_dummy,&
    & timetype_dummy) bind(c, name = 'vlistDefVar') result(f_result)
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: gridID_dummy
      integer(c_int), value :: zaxisID_dummy
      integer(c_int), value :: timetype_dummy
      integer(c_int) :: f_result
    end function vlistDefVar

    subroutine vlistChangeVarGrid(vlistID_dummy, varID_dummy, gridID_dummy)&
    & bind(c, name = 'vlistChangeVarGrid')
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: varID_dummy
      integer(c_int), value :: gridID_dummy
    end subroutine vlistChangeVarGrid

    subroutine vlistChangeVarZaxis(vlistID_dummy, varID_dummy, zaxisID_dummy)&
    & bind(c, name = 'vlistChangeVarZaxis')
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: varID_dummy
      integer(c_int), value :: zaxisID_dummy
    end subroutine vlistChangeVarZaxis

    subroutine vlistInqVar(vlistID_dummy, varID_dummy, gridID_dummy,&
    & zaxisID_dummy, timetype_dummy) bind(c, name = 'vlistInqVar')
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: varID_dummy
      integer(c_int), intent(inout) :: gridID_dummy
      integer(c_int), intent(inout) :: zaxisID_dummy
      integer(c_int), intent(inout) :: timetype_dummy
    end subroutine vlistInqVar

    function vlistInqVarGrid(vlistID_dummy, varID_dummy) bind(c, name =&
    & 'vlistInqVarGrid') result(f_result)
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: varID_dummy
      integer(c_int) :: f_result
    end function vlistInqVarGrid

    function vlistInqVarZaxis(vlistID_dummy, varID_dummy) bind(c, name =&
    & 'vlistInqVarZaxis') result(f_result)
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: varID_dummy
      integer(c_int) :: f_result
    end function vlistInqVarZaxis

    function vlistInqVarID(vlistID_dummy, code_dummy) bind(c, name =&
    & 'vlistInqVarID') result(f_result)
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: code_dummy
      integer(c_int) :: f_result
    end function vlistInqVarID

    subroutine vlistDefVarTimetype(vlistID_dummy, varID_dummy, timetype_dummy)&
    & bind(c, name = 'vlistDefVarTimetype')
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: varID_dummy
      integer(c_int), value :: timetype_dummy
    end subroutine vlistDefVarTimetype

    function vlistInqVarTimetype(vlistID_dummy, varID_dummy) bind(c, name =&
    & 'vlistInqVarTimetype') result(f_result)
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: varID_dummy
      integer(c_int) :: f_result
    end function vlistInqVarTimetype

    subroutine vlistDefVarTsteptype(vlistID_dummy, varID_dummy,&
    & tsteptype_dummy) bind(c, name = 'vlistDefVarTsteptype')
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: varID_dummy
      integer(c_int), value :: tsteptype_dummy
    end subroutine vlistDefVarTsteptype

    function vlistInqVarTsteptype(vlistID_dummy, varID_dummy) bind(c, name =&
    & 'vlistInqVarTsteptype') result(f_result)
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: varID_dummy
      integer(c_int) :: f_result
    end function vlistInqVarTsteptype

    subroutine vlistDefVarCompType(vlistID_dummy, varID_dummy, comptype_dummy)&
    & bind(c, name = 'vlistDefVarCompType')
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: varID_dummy
      integer(c_int), value :: comptype_dummy
    end subroutine vlistDefVarCompType

    function vlistInqVarCompType(vlistID_dummy, varID_dummy) bind(c, name =&
    & 'vlistInqVarCompType') result(f_result)
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: varID_dummy
      integer(c_int) :: f_result
    end function vlistInqVarCompType

    subroutine vlistDefVarCompLevel(vlistID_dummy, varID_dummy,&
    & complevel_dummy) bind(c, name = 'vlistDefVarCompLevel')
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: varID_dummy
      integer(c_int), value :: complevel_dummy
    end subroutine vlistDefVarCompLevel

    function vlistInqVarCompLevel(vlistID_dummy, varID_dummy) bind(c, name =&
    & 'vlistInqVarCompLevel') result(f_result)
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: varID_dummy
      integer(c_int) :: f_result
    end function vlistInqVarCompLevel

    subroutine vlistDefVarParam(vlistID_dummy, varID_dummy, param_dummy)&
    & bind(c, name = 'vlistDefVarParam')
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: varID_dummy
      integer(c_int), value :: param_dummy
    end subroutine vlistDefVarParam

    function vlistInqVarParam(vlistID_dummy, varID_dummy) bind(c, name =&
    & 'vlistInqVarParam') result(f_result)
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: varID_dummy
      integer(c_int) :: f_result
    end function vlistInqVarParam

    subroutine vlistDefVarCode(vlistID_dummy, varID_dummy, code_dummy) bind(c,&
    & name = 'vlistDefVarCode')
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: varID_dummy
      integer(c_int), value :: code_dummy
    end subroutine vlistDefVarCode

    function vlistInqVarCode(vlistID_dummy, varID_dummy) bind(c, name =&
    & 'vlistInqVarCode') result(f_result)
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: varID_dummy
      integer(c_int) :: f_result
    end function vlistInqVarCode

    subroutine vlistDefVarDatatype(vlistID_dummy, varID_dummy, datatype_dummy)&
    & bind(c, name = 'vlistDefVarDatatype')
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: varID_dummy
      integer(c_int), value :: datatype_dummy
    end subroutine vlistDefVarDatatype

    function vlistInqVarDatatype(vlistID_dummy, varID_dummy) bind(c, name =&
    & 'vlistInqVarDatatype') result(f_result)
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: varID_dummy
      integer(c_int) :: f_result
    end function vlistInqVarDatatype

    subroutine vlistDefVarChunkType(vlistID_dummy, varID_dummy,&
    & chunktype_dummy) bind(c, name = 'vlistDefVarChunkType')
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: varID_dummy
      integer(c_int), value :: chunktype_dummy
    end subroutine vlistDefVarChunkType

    function vlistInqVarChunkType(vlistID_dummy, varID_dummy) bind(c, name =&
    & 'vlistInqVarChunkType') result(f_result)
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: varID_dummy
      integer(c_int) :: f_result
    end function vlistInqVarChunkType

    subroutine vlistDefVarXYZ(vlistID_dummy, varID_dummy, xyz_dummy) bind(c,&
    & name = 'vlistDefVarXYZ')
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: varID_dummy
      integer(c_int), value :: xyz_dummy
    end subroutine vlistDefVarXYZ

    function vlistInqVarXYZ(vlistID_dummy, varID_dummy) bind(c, name =&
    & 'vlistInqVarXYZ') result(f_result)
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: varID_dummy
      integer(c_int) :: f_result
    end function vlistInqVarXYZ

    function vlistInqVarNumber(vlistID_dummy, varID_dummy) bind(c, name =&
    & 'vlistInqVarNumber') result(f_result)
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: varID_dummy
      integer(c_int) :: f_result
    end function vlistInqVarNumber

    subroutine vlistDefVarInstitut(vlistID_dummy, varID_dummy, instID_dummy)&
    & bind(c, name = 'vlistDefVarInstitut')
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: varID_dummy
      integer(c_int), value :: instID_dummy
    end subroutine vlistDefVarInstitut

    function vlistInqVarInstitut(vlistID_dummy, varID_dummy) bind(c, name =&
    & 'vlistInqVarInstitut') result(f_result)
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: varID_dummy
      integer(c_int) :: f_result
    end function vlistInqVarInstitut

    subroutine vlistDefVarModel(vlistID_dummy, varID_dummy, modelID_dummy)&
    & bind(c, name = 'vlistDefVarModel')
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: varID_dummy
      integer(c_int), value :: modelID_dummy
    end subroutine vlistDefVarModel

    function vlistInqVarModel(vlistID_dummy, varID_dummy) bind(c, name =&
    & 'vlistInqVarModel') result(f_result)
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: varID_dummy
      integer(c_int) :: f_result
    end function vlistInqVarModel

    subroutine vlistDefVarTable(vlistID_dummy, varID_dummy, tableID_dummy)&
    & bind(c, name = 'vlistDefVarTable')
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: varID_dummy
      integer(c_int), value :: tableID_dummy
    end subroutine vlistDefVarTable

    function vlistInqVarTable(vlistID_dummy, varID_dummy) bind(c, name =&
    & 'vlistInqVarTable') result(f_result)
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: varID_dummy
      integer(c_int) :: f_result
    end function vlistInqVarTable

    subroutine vlistDefVarMissval(vlistID_dummy, varID_dummy, missval_dummy)&
    & bind(c, name = 'vlistDefVarMissval')
      import c_double, c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: varID_dummy
      real(c_double), value :: missval_dummy
    end subroutine vlistDefVarMissval

    function vlistInqVarMissval(vlistID_dummy, varID_dummy) bind(c, name =&
    & 'vlistInqVarMissval') result(f_result)
      import c_double, c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: varID_dummy
      real(c_double) :: f_result
    end function vlistInqVarMissval

    subroutine vlistDefVarScalefactor(vlistID_dummy, varID_dummy,&
    & scalefactor_dummy) bind(c, name = 'vlistDefVarScalefactor')
      import c_double, c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: varID_dummy
      real(c_double), value :: scalefactor_dummy
    end subroutine vlistDefVarScalefactor

    function vlistInqVarScalefactor(vlistID_dummy, varID_dummy) bind(c, name =&
    & 'vlistInqVarScalefactor') result(f_result)
      import c_double, c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: varID_dummy
      real(c_double) :: f_result
    end function vlistInqVarScalefactor

    subroutine vlistDefVarAddoffset(vlistID_dummy, varID_dummy,&
    & addoffset_dummy) bind(c, name = 'vlistDefVarAddoffset')
      import c_double, c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: varID_dummy
      real(c_double), value :: addoffset_dummy
    end subroutine vlistDefVarAddoffset

    function vlistInqVarAddoffset(vlistID_dummy, varID_dummy) bind(c, name =&
    & 'vlistInqVarAddoffset') result(f_result)
      import c_double, c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: varID_dummy
      real(c_double) :: f_result
    end function vlistInqVarAddoffset

    subroutine vlistDefVarTimave(vlistID_dummy, varID_dummy, timave_dummy)&
    & bind(c, name = 'vlistDefVarTimave')
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: varID_dummy
      integer(c_int), value :: timave_dummy
    end subroutine vlistDefVarTimave

    function vlistInqVarTimave(vlistID_dummy, varID_dummy) bind(c, name =&
    & 'vlistInqVarTimave') result(f_result)
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: varID_dummy
      integer(c_int) :: f_result
    end function vlistInqVarTimave

    function vlistInqVarSize(vlistID_dummy, varID_dummy) bind(c, name =&
    & 'vlistInqVarSize') result(f_result)
      import c_int, c_size_t
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: varID_dummy
      integer(c_size_t) :: f_result
    end function vlistInqVarSize

    subroutine vlistDefIndex(vlistID_dummy, varID_dummy, levID_dummy,&
    & index_dummy) bind(c, name = 'vlistDefIndex')
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: varID_dummy
      integer(c_int), value :: levID_dummy
      integer(c_int), value :: index_dummy
    end subroutine vlistDefIndex

    function vlistInqIndex(vlistID_dummy, varID_dummy, levID_dummy) bind(c,&
    & name = 'vlistInqIndex') result(f_result)
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: varID_dummy
      integer(c_int), value :: levID_dummy
      integer(c_int) :: f_result
    end function vlistInqIndex

    subroutine vlistDefFlag(vlistID_dummy, varID_dummy, levID_dummy,&
    & flag_dummy) bind(c, name = 'vlistDefFlag')
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: varID_dummy
      integer(c_int), value :: levID_dummy
      integer(c_int), value :: flag_dummy
    end subroutine vlistDefFlag

    function vlistInqFlag(vlistID_dummy, varID_dummy, levID_dummy) bind(c, name&
    & = 'vlistInqFlag') result(f_result)
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: varID_dummy
      integer(c_int), value :: levID_dummy
      integer(c_int) :: f_result
    end function vlistInqFlag

    function vlistFindVar(vlistID_dummy, fvarID_dummy) bind(c, name =&
    & 'vlistFindVar') result(f_result)
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: fvarID_dummy
      integer(c_int) :: f_result
    end function vlistFindVar

    function vlistFindLevel(vlistID_dummy, fvarID_dummy, flevelID_dummy)&
    & bind(c, name = 'vlistFindLevel') result(f_result)
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: fvarID_dummy
      integer(c_int), value :: flevelID_dummy
      integer(c_int) :: f_result
    end function vlistFindLevel

    function vlistMergedVar(vlistID_dummy, varID_dummy) bind(c, name =&
    & 'vlistMergedVar') result(f_result)
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: varID_dummy
      integer(c_int) :: f_result
    end function vlistMergedVar

    function vlistMergedLevel(vlistID_dummy, varID_dummy, levelID_dummy)&
    & bind(c, name = 'vlistMergedLevel') result(f_result)
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: varID_dummy
      integer(c_int), value :: levelID_dummy
      integer(c_int) :: f_result
    end function vlistMergedLevel

    subroutine cdiClearAdditionalKeys() bind(c, name =&
    & 'cdiClearAdditionalKeys')
    end subroutine cdiClearAdditionalKeys

    function cdiInqNatts(cdiID_dummy, varID_dummy, nattsp_dummy) bind(c, name =&
    & 'cdiInqNatts') result(f_result)
      import c_int
      integer(c_int), value :: cdiID_dummy
      integer(c_int), value :: varID_dummy
      integer(c_int), intent(inout) :: nattsp_dummy
      integer(c_int) :: f_result
    end function cdiInqNatts

    function cdiCopyAtts(cdiID1_dummy, varID1_dummy, cdiID2_dummy,&
    & varID2_dummy) bind(c, name = 'cdiCopyAtts') result(f_result)
      import c_int
      integer(c_int), value :: cdiID1_dummy
      integer(c_int), value :: varID1_dummy
      integer(c_int), value :: cdiID2_dummy
      integer(c_int), value :: varID2_dummy
      integer(c_int) :: f_result
    end function cdiCopyAtts

    subroutine gridCompress(gridID_dummy) bind(c, name = 'gridCompress')
      import c_int
      integer(c_int), value :: gridID_dummy
    end subroutine gridCompress

    subroutine gridDefMaskGME(gridID_dummy, mask_dummy) bind(c, name =&
    & 'gridDefMaskGME')
      import c_int
      integer(c_int), value :: gridID_dummy
      integer(c_int), intent(in) :: mask_dummy(*)
    end subroutine gridDefMaskGME

    function gridInqMaskGME(gridID_dummy, mask_dummy) bind(c, name =&
    & 'gridInqMaskGME') result(f_result)
      import c_int
      integer(c_int), value :: gridID_dummy
      integer(c_int), intent(inout) :: mask_dummy(*)
      integer(c_int) :: f_result
    end function gridInqMaskGME

    subroutine gridDefMask(gridID_dummy, mask_dummy) bind(c, name =&
    & 'gridDefMask')
      import c_int
      integer(c_int), value :: gridID_dummy
      integer(c_int), intent(in) :: mask_dummy(*)
    end subroutine gridDefMask

    function gridInqMask(gridID_dummy, mask_dummy) bind(c, name =&
    & 'gridInqMask') result(f_result)
      import c_int
      integer(c_int), value :: gridID_dummy
      integer(c_int), intent(inout) :: mask_dummy(*)
      integer(c_int) :: f_result
    end function gridInqMask

    subroutine gridPrint(gridID_dummy, opt_dummy) bind(c, name = 'gridPrint')
      import c_int
      integer(c_int), value :: gridID_dummy
      integer(c_int), value :: opt_dummy
    end subroutine gridPrint

    function gridCreate(gridtype_dummy, size_dummy) bind(c, name =&
    & 'gridCreate') result(f_result)
      import c_int, c_size_t
      integer(c_int), value :: gridtype_dummy
      integer(c_size_t), value :: size_dummy
      integer(c_int) :: f_result
    end function gridCreate

    subroutine gridDestroy(gridID_dummy) bind(c, name = 'gridDestroy')
      import c_int
      integer(c_int), value :: gridID_dummy
    end subroutine gridDestroy

    function gridDuplicate(gridID_dummy) bind(c, name = 'gridDuplicate')&
    & result(f_result)
      import c_int
      integer(c_int), value :: gridID_dummy
      integer(c_int) :: f_result
    end function gridDuplicate

    subroutine gridDefProj(gridID_dummy, projID_dummy) bind(c, name =&
    & 'gridDefProj')
      import c_int
      integer(c_int), value :: gridID_dummy
      integer(c_int), value :: projID_dummy
    end subroutine gridDefProj

    function gridInqProj(gridID_dummy) bind(c, name = 'gridInqProj')&
    & result(f_result)
      import c_int
      integer(c_int), value :: gridID_dummy
      integer(c_int) :: f_result
    end function gridInqProj

    function gridInqProjType(gridID_dummy) bind(c, name = 'gridInqProjType')&
    & result(f_result)
      import c_int
      integer(c_int), value :: gridID_dummy
      integer(c_int) :: f_result
    end function gridInqProjType

    function gridInqType(gridID_dummy) bind(c, name = 'gridInqType')&
    & result(f_result)
      import c_int
      integer(c_int), value :: gridID_dummy
      integer(c_int) :: f_result
    end function gridInqType

    function gridInqSize(gridID_dummy) bind(c, name = 'gridInqSize')&
    & result(f_result)
      import c_int, c_size_t
      integer(c_int), value :: gridID_dummy
      integer(c_size_t) :: f_result
    end function gridInqSize

    subroutine gridDefXsize(gridID_dummy, xsize_dummy) bind(c, name =&
    & 'gridDefXsize')
      import c_int, c_size_t
      integer(c_int), value :: gridID_dummy
      integer(c_size_t), value :: xsize_dummy
    end subroutine gridDefXsize

    function gridInqXsize(gridID_dummy) bind(c, name = 'gridInqXsize')&
    & result(f_result)
      import c_int, c_size_t
      integer(c_int), value :: gridID_dummy
      integer(c_size_t) :: f_result
    end function gridInqXsize

    subroutine gridDefYsize(gridID_dummy, ysize_dummy) bind(c, name =&
    & 'gridDefYsize')
      import c_int, c_size_t
      integer(c_int), value :: gridID_dummy
      integer(c_size_t), value :: ysize_dummy
    end subroutine gridDefYsize

    function gridInqYsize(gridID_dummy) bind(c, name = 'gridInqYsize')&
    & result(f_result)
      import c_int, c_size_t
      integer(c_int), value :: gridID_dummy
      integer(c_size_t) :: f_result
    end function gridInqYsize

    subroutine gridDefNP(gridID_dummy, np_dummy) bind(c, name = 'gridDefNP')
      import c_int
      integer(c_int), value :: gridID_dummy
      integer(c_int), value :: np_dummy
    end subroutine gridDefNP

    function gridInqNP(gridID_dummy) bind(c, name = 'gridInqNP')&
    & result(f_result)
      import c_int
      integer(c_int), value :: gridID_dummy
      integer(c_int) :: f_result
    end function gridInqNP

    subroutine gridDefXvals(gridID_dummy, xvals_dummy) bind(c, name =&
    & 'gridDefXvals')
      import c_double, c_int
      integer(c_int), value :: gridID_dummy
      real(c_double), intent(in) :: xvals_dummy(*)
    end subroutine gridDefXvals

    function gridInqXvals(gridID_dummy, xvals_dummy) bind(c, name =&
    & 'gridInqXvals') result(f_result)
      import c_double, c_int, c_size_t
      integer(c_int), value :: gridID_dummy
      real(c_double), intent(inout) :: xvals_dummy(*)
      integer(c_size_t) :: f_result
    end function gridInqXvals

    function gridInqXIsc(gridID_dummy) bind(c, name = 'gridInqXIsc')&
    & result(f_result)
      import c_int
      integer(c_int), value :: gridID_dummy
      integer(c_int) :: f_result
    end function gridInqXIsc

    subroutine gridDefYvals(gridID_dummy, yvals_dummy) bind(c, name =&
    & 'gridDefYvals')
      import c_double, c_int
      integer(c_int), value :: gridID_dummy
      real(c_double), intent(in) :: yvals_dummy(*)
    end subroutine gridDefYvals

    function gridInqYvals(gridID_dummy, yvals_dummy) bind(c, name =&
    & 'gridInqYvals') result(f_result)
      import c_double, c_int, c_size_t
      integer(c_int), value :: gridID_dummy
      real(c_double), intent(inout) :: yvals_dummy(*)
      integer(c_size_t) :: f_result
    end function gridInqYvals

    function gridInqYIsc(gridID_dummy) bind(c, name = 'gridInqYIsc')&
    & result(f_result)
      import c_int
      integer(c_int), value :: gridID_dummy
      integer(c_int) :: f_result
    end function gridInqYIsc

    function cdiDefKeyInt(cdiID_dummy, varID_dummy, key_dummy, value_dummy)&
    & bind(c, name = 'cdiDefKeyInt') result(f_result)
      import c_int
      integer(c_int), value :: cdiID_dummy
      integer(c_int), value :: varID_dummy
      integer(c_int), value :: key_dummy
      integer(c_int), value :: value_dummy
      integer(c_int) :: f_result
    end function cdiDefKeyInt

    function cdiInqKeyInt(cdiID_dummy, varID_dummy, key_dummy, value_dummy)&
    & bind(c, name = 'cdiInqKeyInt') result(f_result)
      import c_int
      integer(c_int), value :: cdiID_dummy
      integer(c_int), value :: varID_dummy
      integer(c_int), value :: key_dummy
      integer(c_int), intent(inout) :: value_dummy
      integer(c_int) :: f_result
    end function cdiInqKeyInt

    function cdiDefKeyBytes(cdiID_dummy, varID_dummy, key_dummy, bytes_dummy,&
    & length_dummy) bind(c, name = 'cdiDefKeyBytes') result(f_result)
      import c_int, c_signed_char
      integer(c_int), value :: cdiID_dummy
      integer(c_int), value :: varID_dummy
      integer(c_int), value :: key_dummy
      integer(kind = c_signed_char), intent(in) :: bytes_dummy(*)
      integer(c_int), value :: length_dummy
      integer(c_int) :: f_result
    end function cdiDefKeyBytes

    function cdiInqKeyBytes(cdiID_dummy, varID_dummy, key_dummy, bytes_dummy,&
    & length_dummy) bind(c, name = 'cdiInqKeyBytes') result(f_result)
      import c_int, c_signed_char
      integer(c_int), value :: cdiID_dummy
      integer(c_int), value :: varID_dummy
      integer(c_int), value :: key_dummy
      integer(kind = c_signed_char), intent(inout) :: bytes_dummy(*)
      integer(c_int), intent(inout) :: length_dummy
      integer(c_int) :: f_result
    end function cdiInqKeyBytes

    function cdiInqKeyLen(cdiID_dummy, varID_dummy, key_dummy, length_dummy)&
    & bind(c, name = 'cdiInqKeyLen') result(f_result)
      import c_int
      integer(c_int), value :: cdiID_dummy
      integer(c_int), value :: varID_dummy
      integer(c_int), value :: key_dummy
      integer(c_int), intent(inout) :: length_dummy
      integer(c_int) :: f_result
    end function cdiInqKeyLen

    function cdiCopyKeys(cdiID1_dummy, varID1_dummy, cdiID2_dummy,&
    & varID2_dummy) bind(c, name = 'cdiCopyKeys') result(f_result)
      import c_int
      integer(c_int), value :: cdiID1_dummy
      integer(c_int), value :: varID1_dummy
      integer(c_int), value :: cdiID2_dummy
      integer(c_int), value :: varID2_dummy
      integer(c_int) :: f_result
    end function cdiCopyKeys

    function cdiZaxisDefKeyFlt(zaxisID_dummy, key_dummy, value_dummy) bind(c,&
    & name = 'cdiZaxisDefKeyFlt') result(f_result)
      import c_double, c_int
      integer(c_int), value :: zaxisID_dummy
      integer(c_int), value :: key_dummy
      real(c_double), value :: value_dummy
      integer(c_int) :: f_result
    end function cdiZaxisDefKeyFlt

    function cdiZaxisInqKeyFlt(zaxisID_dummy, key_dummy, value_dummy) bind(c,&
    & name = 'cdiZaxisInqKeyFlt') result(f_result)
      import c_double, c_int
      integer(c_int), value :: zaxisID_dummy
      integer(c_int), value :: key_dummy
      real(c_double), intent(inout) :: value_dummy
      integer(c_int) :: f_result
    end function cdiZaxisInqKeyFlt

    subroutine gridDefDatatype(gridID_dummy, prec_dummy) bind(c, name =&
    & 'gridDefDatatype')
      import c_int
      integer(c_int), value :: gridID_dummy
      integer(c_int), value :: prec_dummy
    end subroutine gridDefDatatype

    function gridInqDatatype(gridID_dummy) bind(c, name = 'gridInqDatatype')&
    & result(f_result)
      import c_int
      integer(c_int), value :: gridID_dummy
      integer(c_int) :: f_result
    end function gridInqDatatype

    function gridInqXval(gridID_dummy, index_dummy) bind(c, name =&
    & 'gridInqXval') result(f_result)
      import c_double, c_int, c_size_t
      integer(c_int), value :: gridID_dummy
      integer(c_size_t), value :: index_dummy
      real(c_double) :: f_result
    end function gridInqXval

    function gridInqYval(gridID_dummy, index_dummy) bind(c, name =&
    & 'gridInqYval') result(f_result)
      import c_double, c_int, c_size_t
      integer(c_int), value :: gridID_dummy
      integer(c_size_t), value :: index_dummy
      real(c_double) :: f_result
    end function gridInqYval

    function gridInqXinc(gridID_dummy) bind(c, name = 'gridInqXinc')&
    & result(f_result)
      import c_double, c_int
      integer(c_int), value :: gridID_dummy
      real(c_double) :: f_result
    end function gridInqXinc

    function gridInqYinc(gridID_dummy) bind(c, name = 'gridInqYinc')&
    & result(f_result)
      import c_double, c_int
      integer(c_int), value :: gridID_dummy
      real(c_double) :: f_result
    end function gridInqYinc

    function gridIsCircular(gridID_dummy) bind(c, name = 'gridIsCircular')&
    & result(f_result)
      import c_int
      integer(c_int), value :: gridID_dummy
      integer(c_int) :: f_result
    end function gridIsCircular

    function gridInqTrunc(gridID_dummy) bind(c, name = 'gridInqTrunc')&
    & result(f_result)
      import c_int
      integer(c_int), value :: gridID_dummy
      integer(c_int) :: f_result
    end function gridInqTrunc

    subroutine gridDefTrunc(gridID_dummy, trunc_dummy) bind(c, name =&
    & 'gridDefTrunc')
      import c_int
      integer(c_int), value :: gridID_dummy
      integer(c_int), value :: trunc_dummy
    end subroutine gridDefTrunc

    subroutine gridDefNumber(gridID_dummy, number_dummy) bind(c, name =&
    & 'gridDefNumber')
      import c_int
      integer(c_int), value :: gridID_dummy
      integer(c_int), value :: number_dummy
    end subroutine gridDefNumber

    function gridInqNumber(gridID_dummy) bind(c, name = 'gridInqNumber')&
    & result(f_result)
      import c_int
      integer(c_int), value :: gridID_dummy
      integer(c_int) :: f_result
    end function gridInqNumber

    subroutine gridDefPosition(gridID_dummy, position_dummy) bind(c, name =&
    & 'gridDefPosition')
      import c_int
      integer(c_int), value :: gridID_dummy
      integer(c_int), value :: position_dummy
    end subroutine gridDefPosition

    function gridInqPosition(gridID_dummy) bind(c, name = 'gridInqPosition')&
    & result(f_result)
      import c_int
      integer(c_int), value :: gridID_dummy
      integer(c_int) :: f_result
    end function gridInqPosition

    subroutine gridDefUUID(gridID_dummy, uuid_dummy) bind(c, name =&
    & 'gridDefUUID')
      import CDI_UUID_SIZE, c_int, c_signed_char
      integer(c_int), value :: gridID_dummy
      integer(kind = c_signed_char), intent(in) :: uuid_dummy(CDI_UUID_SIZE)
    end subroutine gridDefUUID

    subroutine gridInqUUID(gridID_dummy, uuid_dummy) bind(c, name =&
    & 'gridInqUUID')
      import CDI_UUID_SIZE, c_int, c_signed_char
      integer(c_int), value :: gridID_dummy
      integer(kind = c_signed_char), intent(inout) :: uuid_dummy(CDI_UUID_SIZE)
    end subroutine gridInqUUID

    subroutine gridDefParamRLL(gridID_dummy, xpole_dummy, ypole_dummy,&
    & angle_dummy) bind(c, name = 'gridDefParamRLL')
      import c_double, c_int
      integer(c_int), value :: gridID_dummy
      real(c_double), value :: xpole_dummy
      real(c_double), value :: ypole_dummy
      real(c_double), value :: angle_dummy
    end subroutine gridDefParamRLL

    subroutine gridInqParamRLL(gridID_dummy, xpole_dummy, ypole_dummy,&
    & angle_dummy) bind(c, name = 'gridInqParamRLL')
      import c_double, c_int
      integer(c_int), value :: gridID_dummy
      real(c_double), intent(inout) :: xpole_dummy
      real(c_double), intent(inout) :: ypole_dummy
      real(c_double), intent(inout) :: angle_dummy
    end subroutine gridInqParamRLL

    subroutine gridDefParamGME(gridID_dummy, nd_dummy, ni_dummy, ni2_dummy,&
    & ni3_dummy) bind(c, name = 'gridDefParamGME')
      import c_int
      integer(c_int), value :: gridID_dummy
      integer(c_int), value :: nd_dummy
      integer(c_int), value :: ni_dummy
      integer(c_int), value :: ni2_dummy
      integer(c_int), value :: ni3_dummy
    end subroutine gridDefParamGME

    subroutine gridInqParamGME(gridID_dummy, nd_dummy, ni_dummy, ni2_dummy,&
    & ni3_dummy) bind(c, name = 'gridInqParamGME')
      import c_int
      integer(c_int), value :: gridID_dummy
      integer(c_int), intent(inout) :: nd_dummy
      integer(c_int), intent(inout) :: ni_dummy
      integer(c_int), intent(inout) :: ni2_dummy
      integer(c_int), intent(inout) :: ni3_dummy
    end subroutine gridInqParamGME

    subroutine gridDefParamLCC(gridID_dummy, missval_dummy, lon_0_dummy,&
    & lat_0_dummy, lat_1_dummy, lat_2_dummy, a_dummy, rf_dummy, xval_0_dummy,&
    & yval_0_dummy, x_0_dummy, y_0_dummy) bind(c, name = 'gridDefParamLCC')
      import c_double, c_int
      integer(c_int), value :: gridID_dummy
      real(c_double), value :: missval_dummy
      real(c_double), value :: lon_0_dummy
      real(c_double), value :: lat_0_dummy
      real(c_double), value :: lat_1_dummy
      real(c_double), value :: lat_2_dummy
      real(c_double), value :: a_dummy
      real(c_double), value :: rf_dummy
      real(c_double), value :: xval_0_dummy
      real(c_double), value :: yval_0_dummy
      real(c_double), value :: x_0_dummy
      real(c_double), value :: y_0_dummy
    end subroutine gridDefParamLCC

    function gridInqParamLCC(gridID_dummy, missval_dummy, lon_0_dummy,&
    & lat_0_dummy, lat_1_dummy, lat_2_dummy, a_dummy, rf_dummy, xval_0_dummy,&
    & yval_0_dummy, x_0_dummy, y_0_dummy) bind(c, name = 'gridInqParamLCC')&
    & result(f_result)
      import c_double, c_int
      integer(c_int), value :: gridID_dummy
      real(c_double), value :: missval_dummy
      real(c_double), intent(inout) :: lon_0_dummy
      real(c_double), intent(inout) :: lat_0_dummy
      real(c_double), intent(inout) :: lat_1_dummy
      real(c_double), intent(inout) :: lat_2_dummy
      real(c_double), intent(inout) :: a_dummy
      real(c_double), intent(inout) :: rf_dummy
      real(c_double), intent(inout) :: xval_0_dummy
      real(c_double), intent(inout) :: yval_0_dummy
      real(c_double), intent(inout) :: x_0_dummy
      real(c_double), intent(inout) :: y_0_dummy
      integer(c_int) :: f_result
    end function gridInqParamLCC

    subroutine gridDefArea(gridID_dummy, area_dummy) bind(c, name =&
    & 'gridDefArea')
      import c_double, c_int
      integer(c_int), value :: gridID_dummy
      real(c_double), intent(in) :: area_dummy(*)
    end subroutine gridDefArea

    subroutine gridInqArea(gridID_dummy, area_dummy) bind(c, name =&
    & 'gridInqArea')
      import c_double, c_int
      integer(c_int), value :: gridID_dummy
      real(c_double), intent(inout) :: area_dummy(*)
    end subroutine gridInqArea

    function gridHasArea(gridID_dummy) bind(c, name = 'gridHasArea')&
    & result(f_result)
      import c_int
      integer(c_int), value :: gridID_dummy
      integer(c_int) :: f_result
    end function gridHasArea

    subroutine gridDefNvertex(gridID_dummy, nvertex_dummy) bind(c, name =&
    & 'gridDefNvertex')
      import c_int
      integer(c_int), value :: gridID_dummy
      integer(c_int), value :: nvertex_dummy
    end subroutine gridDefNvertex

    function gridInqNvertex(gridID_dummy) bind(c, name = 'gridInqNvertex')&
    & result(f_result)
      import c_int
      integer(c_int), value :: gridID_dummy
      integer(c_int) :: f_result
    end function gridInqNvertex

    subroutine gridDefXbounds(gridID_dummy, xbounds_dummy) bind(c, name =&
    & 'gridDefXbounds')
      import c_double, c_int
      integer(c_int), value :: gridID_dummy
      real(c_double), intent(in) :: xbounds_dummy(*)
    end subroutine gridDefXbounds

    function gridInqXbounds(gridID_dummy, xbounds_dummy) bind(c, name =&
    & 'gridInqXbounds') result(f_result)
      import c_double, c_int, c_size_t
      integer(c_int), value :: gridID_dummy
      real(c_double), intent(inout) :: xbounds_dummy(*)
      integer(c_size_t) :: f_result
    end function gridInqXbounds

    function gridInqXboundsPart(gridID_dummy, start_dummy, size_dummy,&
    & xbounds_dummy) bind(c, name = 'gridInqXboundsPart') result(f_result)
      import c_double, c_int, c_size_t
      integer(c_int), value :: gridID_dummy
      integer(c_int), value :: start_dummy
      integer(c_size_t), value :: size_dummy
      real(c_double), intent(inout) :: xbounds_dummy(*)
      integer(c_size_t) :: f_result
    end function gridInqXboundsPart

    subroutine gridDefYbounds(gridID_dummy, ybounds_dummy) bind(c, name =&
    & 'gridDefYbounds')
      import c_double, c_int
      integer(c_int), value :: gridID_dummy
      real(c_double), intent(in) :: ybounds_dummy(*)
    end subroutine gridDefYbounds

    function gridInqYbounds(gridID_dummy, ybounds_dummy) bind(c, name =&
    & 'gridInqYbounds') result(f_result)
      import c_double, c_int, c_size_t
      integer(c_int), value :: gridID_dummy
      real(c_double), intent(inout) :: ybounds_dummy(*)
      integer(c_size_t) :: f_result
    end function gridInqYbounds

    function gridInqYboundsPart(gridID_dummy, start_dummy, size_dummy,&
    & ybounds_dummy) bind(c, name = 'gridInqYboundsPart') result(f_result)
      import c_double, c_int, c_size_t
      integer(c_int), value :: gridID_dummy
      integer(c_int), value :: start_dummy
      integer(c_size_t), value :: size_dummy
      real(c_double), intent(inout) :: ybounds_dummy(*)
      integer(c_size_t) :: f_result
    end function gridInqYboundsPart

    subroutine gridDefRowlon(gridID_dummy, nrowlon_dummy, rowlon_dummy) bind(c,&
    & name = 'gridDefRowlon')
      import c_int
      integer(c_int), value :: gridID_dummy
      integer(c_int), value :: nrowlon_dummy
      integer(c_int), intent(in) :: rowlon_dummy(*)
    end subroutine gridDefRowlon

    subroutine gridInqRowlon(gridID_dummy, rowlon_dummy) bind(c, name =&
    & 'gridInqRowlon')
      import c_int
      integer(c_int), value :: gridID_dummy
      integer(c_int), intent(inout) :: rowlon_dummy(*)
    end subroutine gridInqRowlon

    subroutine gridChangeType(gridID_dummy, gridtype_dummy) bind(c, name =&
    & 'gridChangeType')
      import c_int
      integer(c_int), value :: gridID_dummy
      integer(c_int), value :: gridtype_dummy
    end subroutine gridChangeType

    subroutine gridDefComplexPacking(gridID_dummy, lpack_dummy) bind(c, name =&
    & 'gridDefComplexPacking')
      import c_int
      integer(c_int), value :: gridID_dummy
      integer(c_int), value :: lpack_dummy
    end subroutine gridDefComplexPacking

    function gridInqComplexPacking(gridID_dummy) bind(c, name =&
    & 'gridInqComplexPacking') result(f_result)
      import c_int
      integer(c_int), value :: gridID_dummy
      integer(c_int) :: f_result
    end function gridInqComplexPacking

    subroutine gridDefUvRelativeToGrid(gridID_dummy, uvRelativeToGrid_dummy)&
    & bind(c, name = 'gridDefUvRelativeToGrid')
      import c_int
      integer(c_int), value :: gridID_dummy
      integer(c_int), value :: uvRelativeToGrid_dummy
    end subroutine gridDefUvRelativeToGrid

    function gridInqUvRelativeToGrid(gridID_dummy) bind(c, name =&
    & 'gridInqUvRelativeToGrid') result(f_result)
      import c_int
      integer(c_int), value :: gridID_dummy
      integer(c_int) :: f_result
    end function gridInqUvRelativeToGrid

    subroutine gridDefScanningMode(gridID_dummy, mode_dummy) bind(c, name =&
    & 'gridDefScanningMode')
      import c_int
      integer(c_int), value :: gridID_dummy
      integer(c_int), value :: mode_dummy
    end subroutine gridDefScanningMode

    function gridInqScanningMode(gridID_dummy) bind(c, name =&
    & 'gridInqScanningMode') result(f_result)
      import c_int
      integer(c_int), value :: gridID_dummy
      integer(c_int) :: f_result
    end function gridInqScanningMode

    function zaxisCreate(zaxistype_dummy, size_dummy) bind(c, name =&
    & 'zaxisCreate') result(f_result)
      import c_int
      integer(c_int), value :: zaxistype_dummy
      integer(c_int), value :: size_dummy
      integer(c_int) :: f_result
    end function zaxisCreate

    subroutine zaxisDestroy(zaxisID_dummy) bind(c, name = 'zaxisDestroy')
      import c_int
      integer(c_int), value :: zaxisID_dummy
    end subroutine zaxisDestroy

    function zaxisInqType(zaxisID_dummy) bind(c, name = 'zaxisInqType')&
    & result(f_result)
      import c_int
      integer(c_int), value :: zaxisID_dummy
      integer(c_int) :: f_result
    end function zaxisInqType

    function zaxisInqSize(zaxisID_dummy) bind(c, name = 'zaxisInqSize')&
    & result(f_result)
      import c_int
      integer(c_int), value :: zaxisID_dummy
      integer(c_int) :: f_result
    end function zaxisInqSize

    function zaxisDuplicate(zaxisID_dummy) bind(c, name = 'zaxisDuplicate')&
    & result(f_result)
      import c_int
      integer(c_int), value :: zaxisID_dummy
      integer(c_int) :: f_result
    end function zaxisDuplicate

    subroutine zaxisPrint(zaxisID_dummy) bind(c, name = 'zaxisPrint')
      import c_int
      integer(c_int), value :: zaxisID_dummy
    end subroutine zaxisPrint

    subroutine zaxisDefLevels(zaxisID_dummy, levels_dummy) bind(c, name =&
    & 'zaxisDefLevels')
      import c_double, c_int
      integer(c_int), value :: zaxisID_dummy
      real(c_double), intent(in) :: levels_dummy(*)
    end subroutine zaxisDefLevels

    function zaxisInqLevels(zaxisID_dummy, levels_dummy) bind(c, name =&
    & 'zaxisInqLevels') result(f_result)
      import c_double, c_int
      integer(c_int), value :: zaxisID_dummy
      real(c_double), intent(inout) :: levels_dummy(*)
      integer(c_int) :: f_result
    end function zaxisInqLevels

    function zaxisInqCLen(zaxisID_dummy) bind(c, name = 'zaxisInqCLen')&
    & result(f_result)
      import c_int
      integer(c_int), value :: zaxisID_dummy
      integer(c_int) :: f_result
    end function zaxisInqCLen

    subroutine zaxisDefLevel(zaxisID_dummy, levelID_dummy, levels_dummy)&
    & bind(c, name = 'zaxisDefLevel')
      import c_double, c_int
      integer(c_int), value :: zaxisID_dummy
      integer(c_int), value :: levelID_dummy
      real(c_double), value :: levels_dummy
    end subroutine zaxisDefLevel

    function zaxisInqLevel(zaxisID_dummy, levelID_dummy) bind(c, name =&
    & 'zaxisInqLevel') result(f_result)
      import c_double, c_int
      integer(c_int), value :: zaxisID_dummy
      integer(c_int), value :: levelID_dummy
      real(c_double) :: f_result
    end function zaxisInqLevel

    subroutine zaxisDefNlevRef(gridID_dummy, nhlev_dummy) bind(c, name =&
    & 'zaxisDefNlevRef')
      import c_int
      integer(c_int), value :: gridID_dummy
      integer(c_int), value :: nhlev_dummy
    end subroutine zaxisDefNlevRef

    function zaxisInqNlevRef(gridID_dummy) bind(c, name = 'zaxisInqNlevRef')&
    & result(f_result)
      import c_int
      integer(c_int), value :: gridID_dummy
      integer(c_int) :: f_result
    end function zaxisInqNlevRef

    subroutine zaxisDefNumber(gridID_dummy, number_dummy) bind(c, name =&
    & 'zaxisDefNumber')
      import c_int
      integer(c_int), value :: gridID_dummy
      integer(c_int), value :: number_dummy
    end subroutine zaxisDefNumber

    function zaxisInqNumber(gridID_dummy) bind(c, name = 'zaxisInqNumber')&
    & result(f_result)
      import c_int
      integer(c_int), value :: gridID_dummy
      integer(c_int) :: f_result
    end function zaxisInqNumber

    subroutine zaxisDefUUID(zaxisID_dummy, uuid_dummy) bind(c, name =&
    & 'zaxisDefUUID')
      import CDI_UUID_SIZE, c_int, c_signed_char
      integer(c_int), value :: zaxisID_dummy
      integer(kind = c_signed_char), intent(in) :: uuid_dummy(CDI_UUID_SIZE)
    end subroutine zaxisDefUUID

    subroutine zaxisInqUUID(zaxisID_dummy, uuid_dummy) bind(c, name =&
    & 'zaxisInqUUID')
      import CDI_UUID_SIZE, c_int, c_signed_char
      integer(c_int), value :: zaxisID_dummy
      integer(kind = c_signed_char), intent(inout) :: uuid_dummy(CDI_UUID_SIZE)
    end subroutine zaxisInqUUID

    subroutine zaxisDefDatatype(zaxisID_dummy, prec_dummy) bind(c, name =&
    & 'zaxisDefDatatype')
      import c_int
      integer(c_int), value :: zaxisID_dummy
      integer(c_int), value :: prec_dummy
    end subroutine zaxisDefDatatype

    function zaxisInqDatatype(zaxisID_dummy) bind(c, name = 'zaxisInqDatatype')&
    & result(f_result)
      import c_int
      integer(c_int), value :: zaxisID_dummy
      integer(c_int) :: f_result
    end function zaxisInqDatatype

    subroutine zaxisDefPositive(zaxisID_dummy, positive_dummy) bind(c, name =&
    & 'zaxisDefPositive')
      import c_int
      integer(c_int), value :: zaxisID_dummy
      integer(c_int), value :: positive_dummy
    end subroutine zaxisDefPositive

    function zaxisInqPositive(zaxisID_dummy) bind(c, name = 'zaxisInqPositive')&
    & result(f_result)
      import c_int
      integer(c_int), value :: zaxisID_dummy
      integer(c_int) :: f_result
    end function zaxisInqPositive

    subroutine zaxisDefScalar(zaxisID_dummy) bind(c, name = 'zaxisDefScalar')
      import c_int
      integer(c_int), value :: zaxisID_dummy
    end subroutine zaxisDefScalar

    function zaxisInqScalar(zaxisID_dummy) bind(c, name = 'zaxisInqScalar')&
    & result(f_result)
      import c_int
      integer(c_int), value :: zaxisID_dummy
      integer(c_int) :: f_result
    end function zaxisInqScalar

    subroutine zaxisDefLtype(zaxisID_dummy, ltype_dummy) bind(c, name =&
    & 'zaxisDefLtype')
      import c_int
      integer(c_int), value :: zaxisID_dummy
      integer(c_int), value :: ltype_dummy
    end subroutine zaxisDefLtype

    function zaxisInqLtype(zaxisID_dummy) bind(c, name = 'zaxisInqLtype')&
    & result(f_result)
      import c_int
      integer(c_int), value :: zaxisID_dummy
      integer(c_int) :: f_result
    end function zaxisInqLtype

    subroutine zaxisDefVct(zaxisID_dummy, size_dummy, vct_dummy) bind(c, name =&
    & 'zaxisDefVct')
      import c_double, c_int
      integer(c_int), value :: zaxisID_dummy
      integer(c_int), value :: size_dummy
      real(c_double), intent(in) :: vct_dummy(*)
    end subroutine zaxisDefVct

    subroutine zaxisInqVct(zaxisID_dummy, vct_dummy) bind(c, name =&
    & 'zaxisInqVct')
      import c_double, c_int
      integer(c_int), value :: zaxisID_dummy
      real(c_double), intent(inout) :: vct_dummy(*)
    end subroutine zaxisInqVct

    function zaxisInqVctSize(zaxisID_dummy) bind(c, name = 'zaxisInqVctSize')&
    & result(f_result)
      import c_int
      integer(c_int), value :: zaxisID_dummy
      integer(c_int) :: f_result
    end function zaxisInqVctSize

    function zaxisInqVctPtr(zaxisID_dummy) bind(c, name = 'zaxisInqVctPtr')&
    & result(f_result)
      import c_int, c_ptr
      integer(c_int), value :: zaxisID_dummy
      type(c_ptr) :: f_result
    end function zaxisInqVctPtr

    subroutine zaxisDefLbounds(zaxisID_dummy, lbounds_dummy) bind(c, name =&
    & 'zaxisDefLbounds')
      import c_double, c_int
      integer(c_int), value :: zaxisID_dummy
      real(c_double), intent(in) :: lbounds_dummy(*)
    end subroutine zaxisDefLbounds

    function zaxisInqLbound(zaxisID_dummy, index_dummy) bind(c, name =&
    & 'zaxisInqLbound') result(f_result)
      import c_double, c_int
      integer(c_int), value :: zaxisID_dummy
      integer(c_int), value :: index_dummy
      real(c_double) :: f_result
    end function zaxisInqLbound

    subroutine zaxisDefUbounds(zaxisID_dummy, ubounds_dummy) bind(c, name =&
    & 'zaxisDefUbounds')
      import c_double, c_int
      integer(c_int), value :: zaxisID_dummy
      real(c_double), intent(in) :: ubounds_dummy(*)
    end subroutine zaxisDefUbounds

    function zaxisInqUbound(zaxisID_dummy, index_dummy) bind(c, name =&
    & 'zaxisInqUbound') result(f_result)
      import c_double, c_int
      integer(c_int), value :: zaxisID_dummy
      integer(c_int), value :: index_dummy
      real(c_double) :: f_result
    end function zaxisInqUbound

    subroutine zaxisDefWeights(zaxisID_dummy, weights_dummy) bind(c, name =&
    & 'zaxisDefWeights')
      import c_double, c_int
      integer(c_int), value :: zaxisID_dummy
      real(c_double), intent(in) :: weights_dummy(*)
    end subroutine zaxisDefWeights

    subroutine zaxisChangeType(zaxisID_dummy, zaxistype_dummy) bind(c, name =&
    & 'zaxisChangeType')
      import c_int
      integer(c_int), value :: zaxisID_dummy
      integer(c_int), value :: zaxistype_dummy
    end subroutine zaxisChangeType

    function taxisCreate(timetype_dummy) bind(c, name = 'taxisCreate')&
    & result(f_result)
      import c_int
      integer(c_int), value :: timetype_dummy
      integer(c_int) :: f_result
    end function taxisCreate

    subroutine taxisDestroy(taxisID_dummy) bind(c, name = 'taxisDestroy')
      import c_int
      integer(c_int), value :: taxisID_dummy
    end subroutine taxisDestroy

    function taxisDuplicate(taxisID_dummy) bind(c, name = 'taxisDuplicate')&
    & result(f_result)
      import c_int
      integer(c_int), value :: taxisID_dummy
      integer(c_int) :: f_result
    end function taxisDuplicate

    subroutine taxisCopyTimestep(taxisIDdes_dummy, taxisIDsrc_dummy) bind(c,&
    & name = 'taxisCopyTimestep')
      import c_int
      integer(c_int), value :: taxisIDdes_dummy
      integer(c_int), value :: taxisIDsrc_dummy
    end subroutine taxisCopyTimestep

    subroutine taxisDefType(taxisID_dummy, type_dummy) bind(c, name =&
    & 'taxisDefType')
      import c_int
      integer(c_int), value :: taxisID_dummy
      integer(c_int), value :: type_dummy
    end subroutine taxisDefType

    subroutine taxisDefVdate(taxisID_dummy, date_dummy) bind(c, name =&
    & 'taxisDefVdate')
      import c_int, c_int64_t
      integer(c_int), value :: taxisID_dummy
      integer(c_int64_t), value :: date_dummy
    end subroutine taxisDefVdate

    subroutine taxisDefVtime(taxisID_dummy, time_dummy) bind(c, name =&
    & 'taxisDefVtime')
      import c_int
      integer(c_int), value :: taxisID_dummy
      integer(c_int), value :: time_dummy
    end subroutine taxisDefVtime

    function taxisInqVdate(taxisID_dummy) bind(c, name = 'taxisInqVdate')&
    & result(f_result)
      import c_int, c_int64_t
      integer(c_int), value :: taxisID_dummy
      integer(c_int64_t) :: f_result
    end function taxisInqVdate

    function taxisInqVtime(taxisID_dummy) bind(c, name = 'taxisInqVtime')&
    & result(f_result)
      import c_int
      integer(c_int), value :: taxisID_dummy
      integer(c_int) :: f_result
    end function taxisInqVtime

    subroutine taxisDefRdate(taxisID_dummy, date_dummy) bind(c, name =&
    & 'taxisDefRdate')
      import c_int, c_int64_t
      integer(c_int), value :: taxisID_dummy
      integer(c_int64_t), value :: date_dummy
    end subroutine taxisDefRdate

    subroutine taxisDefRtime(taxisID_dummy, time_dummy) bind(c, name =&
    & 'taxisDefRtime')
      import c_int
      integer(c_int), value :: taxisID_dummy
      integer(c_int), value :: time_dummy
    end subroutine taxisDefRtime

    function taxisInqRdate(taxisID_dummy) bind(c, name = 'taxisInqRdate')&
    & result(f_result)
      import c_int, c_int64_t
      integer(c_int), value :: taxisID_dummy
      integer(c_int64_t) :: f_result
    end function taxisInqRdate

    function taxisInqRtime(taxisID_dummy) bind(c, name = 'taxisInqRtime')&
    & result(f_result)
      import c_int
      integer(c_int), value :: taxisID_dummy
      integer(c_int) :: f_result
    end function taxisInqRtime

    subroutine taxisDefFdate(taxisID_dummy, date_dummy) bind(c, name =&
    & 'taxisDefFdate')
      import c_int, c_int64_t
      integer(c_int), value :: taxisID_dummy
      integer(c_int64_t), value :: date_dummy
    end subroutine taxisDefFdate

    subroutine taxisDefFtime(taxisID_dummy, time_dummy) bind(c, name =&
    & 'taxisDefFtime')
      import c_int
      integer(c_int), value :: taxisID_dummy
      integer(c_int), value :: time_dummy
    end subroutine taxisDefFtime

    function taxisInqFdate(taxisID_dummy) bind(c, name = 'taxisInqFdate')&
    & result(f_result)
      import c_int, c_int64_t
      integer(c_int), value :: taxisID_dummy
      integer(c_int64_t) :: f_result
    end function taxisInqFdate

    function taxisInqFtime(taxisID_dummy) bind(c, name = 'taxisInqFtime')&
    & result(f_result)
      import c_int
      integer(c_int), value :: taxisID_dummy
      integer(c_int) :: f_result
    end function taxisInqFtime

    function taxisHasBounds(taxisID_dummy) bind(c, name = 'taxisHasBounds')&
    & result(f_result)
      import c_int
      integer(c_int), value :: taxisID_dummy
      integer(c_int) :: f_result
    end function taxisHasBounds

    subroutine taxisWithBounds(taxisID_dummy) bind(c, name = 'taxisWithBounds')
      import c_int
      integer(c_int), value :: taxisID_dummy
    end subroutine taxisWithBounds

    subroutine taxisDeleteBounds(taxisID_dummy) bind(c, name =&
    & 'taxisDeleteBounds')
      import c_int
      integer(c_int), value :: taxisID_dummy
    end subroutine taxisDeleteBounds

    subroutine taxisDefVdateBounds(taxisID_dummy, vdate_lb_dummy,&
    & vdate_ub_dummy) bind(c, name = 'taxisDefVdateBounds')
      import c_int, c_int64_t
      integer(c_int), value :: taxisID_dummy
      integer(c_int64_t), value :: vdate_lb_dummy
      integer(c_int64_t), value :: vdate_ub_dummy
    end subroutine taxisDefVdateBounds

    subroutine taxisDefVtimeBounds(taxisID_dummy, vtime_lb_dummy,&
    & vtime_ub_dummy) bind(c, name = 'taxisDefVtimeBounds')
      import c_int
      integer(c_int), value :: taxisID_dummy
      integer(c_int), value :: vtime_lb_dummy
      integer(c_int), value :: vtime_ub_dummy
    end subroutine taxisDefVtimeBounds

    subroutine taxisInqVdateBounds(taxisID_dummy, vdate_lb_dummy,&
    & vdate_ub_dummy) bind(c, name = 'taxisInqVdateBounds')
      import c_int, c_int64_t
      integer(c_int), value :: taxisID_dummy
      integer(c_int64_t), intent(inout) :: vdate_lb_dummy
      integer(c_int64_t), intent(inout) :: vdate_ub_dummy
    end subroutine taxisInqVdateBounds

    subroutine taxisInqVtimeBounds(taxisID_dummy, vtime_lb_dummy,&
    & vtime_ub_dummy) bind(c, name = 'taxisInqVtimeBounds')
      import c_int
      integer(c_int), value :: taxisID_dummy
      integer(c_int), intent(inout) :: vtime_lb_dummy
      integer(c_int), intent(inout) :: vtime_ub_dummy
    end subroutine taxisInqVtimeBounds

    subroutine taxisDefCalendar(taxisID_dummy, calendar_dummy) bind(c, name =&
    & 'taxisDefCalendar')
      import c_int
      integer(c_int), value :: taxisID_dummy
      integer(c_int), value :: calendar_dummy
    end subroutine taxisDefCalendar

    function taxisInqCalendar(taxisID_dummy) bind(c, name = 'taxisInqCalendar')&
    & result(f_result)
      import c_int
      integer(c_int), value :: taxisID_dummy
      integer(c_int) :: f_result
    end function taxisInqCalendar

    subroutine taxisDefTunit(taxisID_dummy, tunit_dummy) bind(c, name =&
    & 'taxisDefTunit')
      import c_int
      integer(c_int), value :: taxisID_dummy
      integer(c_int), value :: tunit_dummy
    end subroutine taxisDefTunit

    function taxisInqTunit(taxisID_dummy) bind(c, name = 'taxisInqTunit')&
    & result(f_result)
      import c_int
      integer(c_int), value :: taxisID_dummy
      integer(c_int) :: f_result
    end function taxisInqTunit

    subroutine taxisDefForecastTunit(taxisID_dummy, tunit_dummy) bind(c, name =&
    & 'taxisDefForecastTunit')
      import c_int
      integer(c_int), value :: taxisID_dummy
      integer(c_int), value :: tunit_dummy
    end subroutine taxisDefForecastTunit

    function taxisInqForecastTunit(taxisID_dummy) bind(c, name =&
    & 'taxisInqForecastTunit') result(f_result)
      import c_int
      integer(c_int), value :: taxisID_dummy
      integer(c_int) :: f_result
    end function taxisInqForecastTunit

    subroutine taxisDefForecastPeriod(taxisID_dummy, fc_period_dummy) bind(c,&
    & name = 'taxisDefForecastPeriod')
      import c_double, c_int
      integer(c_int), value :: taxisID_dummy
      real(c_double), value :: fc_period_dummy
    end subroutine taxisDefForecastPeriod

    function taxisInqForecastPeriod(taxisID_dummy) bind(c, name =&
    & 'taxisInqForecastPeriod') result(f_result)
      import c_double, c_int
      integer(c_int), value :: taxisID_dummy
      real(c_double) :: f_result
    end function taxisInqForecastPeriod

    subroutine taxisDefNumavg(taxisID_dummy, numavg_dummy) bind(c, name =&
    & 'taxisDefNumavg')
      import c_int
      integer(c_int), value :: taxisID_dummy
      integer(c_int), value :: numavg_dummy
    end subroutine taxisDefNumavg

    function taxisInqType(taxisID_dummy) bind(c, name = 'taxisInqType')&
    & result(f_result)
      import c_int
      integer(c_int), value :: taxisID_dummy
      integer(c_int) :: f_result
    end function taxisInqType

    function taxisInqNumavg(taxisID_dummy) bind(c, name = 'taxisInqNumavg')&
    & result(f_result)
      import c_int
      integer(c_int), value :: taxisID_dummy
      integer(c_int) :: f_result
    end function taxisInqNumavg

    function institutInqNumber() bind(c, name = 'institutInqNumber')&
    & result(f_result)
      import c_int
      integer(c_int) :: f_result
    end function institutInqNumber

    function institutInqCenter(instID_dummy) bind(c, name =&
    & 'institutInqCenter') result(f_result)
      import c_int
      integer(c_int), value :: instID_dummy
      integer(c_int) :: f_result
    end function institutInqCenter

    function institutInqSubcenter(instID_dummy) bind(c, name =&
    & 'institutInqSubcenter') result(f_result)
      import c_int
      integer(c_int), value :: instID_dummy
      integer(c_int) :: f_result
    end function institutInqSubcenter

    function modelInqInstitut(modelID_dummy) bind(c, name = 'modelInqInstitut')&
    & result(f_result)
      import c_int
      integer(c_int), value :: modelID_dummy
      integer(c_int) :: f_result
    end function modelInqInstitut

    function modelInqGribID(modelID_dummy) bind(c, name = 'modelInqGribID')&
    & result(f_result)
      import c_int
      integer(c_int), value :: modelID_dummy
      integer(c_int) :: f_result
    end function modelInqGribID

    function tableInqNumber() bind(c, name = 'tableInqNumber') result(f_result)
      import c_int
      integer(c_int) :: f_result
    end function tableInqNumber

    function tableInqNum(tableID_dummy) bind(c, name = 'tableInqNum')&
    & result(f_result)
      import c_int
      integer(c_int), value :: tableID_dummy
      integer(c_int) :: f_result
    end function tableInqNum

    function tableInqModel(tableID_dummy) bind(c, name = 'tableInqModel')&
    & result(f_result)
      import c_int
      integer(c_int), value :: tableID_dummy
      integer(c_int) :: f_result
    end function tableInqModel

    function streamInqHistorySize(streamID_dummy) bind(c, name =&
    & 'streamInqHistorySize') result(f_result)
      import c_int
      integer(c_int), value :: streamID_dummy
      integer(c_int) :: f_result
    end function streamInqHistorySize

    function subtypeCreate(subtype_dummy) bind(c, name = 'subtypeCreate')&
    & result(f_result)
      import c_int
      integer(c_int), value :: subtype_dummy
      integer(c_int) :: f_result
    end function subtypeCreate

    subroutine subtypePrint(subtypeID_dummy) bind(c, name = 'subtypePrint')
      import c_int
      integer(c_int), value :: subtypeID_dummy
    end subroutine subtypePrint

    function subtypeCompare(subtypeID1_dummy, subtypeID2_dummy) bind(c, name =&
    & 'subtypeCompare') result(f_result)
      import c_int
      integer(c_int), value :: subtypeID1_dummy
      integer(c_int), value :: subtypeID2_dummy
      integer(c_int) :: f_result
    end function subtypeCompare

    function subtypeInqSize(subtypeID_dummy) bind(c, name = 'subtypeInqSize')&
    & result(f_result)
      import c_int
      integer(c_int), value :: subtypeID_dummy
      integer(c_int) :: f_result
    end function subtypeInqSize

    function subtypeInqActiveIndex(subtypeID_dummy) bind(c, name =&
    & 'subtypeInqActiveIndex') result(f_result)
      import c_int
      integer(c_int), value :: subtypeID_dummy
      integer(c_int) :: f_result
    end function subtypeInqActiveIndex

    subroutine subtypeDefActiveIndex(subtypeID_dummy, index_dummy) bind(c, name&
    & = 'subtypeDefActiveIndex')
      import c_int
      integer(c_int), value :: subtypeID_dummy
      integer(c_int), value :: index_dummy
    end subroutine subtypeDefActiveIndex

    function subtypeInqTile(subtypeID_dummy, tileindex_dummy, attribute_dummy)&
    & bind(c, name = 'subtypeInqTile') result(f_result)
      import c_int
      integer(c_int), value :: subtypeID_dummy
      integer(c_int), value :: tileindex_dummy
      integer(c_int), value :: attribute_dummy
      integer(c_int) :: f_result
    end function subtypeInqTile

    function vlistInqVarSubtype(vlistID_dummy, varID_dummy) bind(c, name =&
    & 'vlistInqVarSubtype') result(f_result)
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: varID_dummy
      integer(c_int) :: f_result
    end function vlistInqVarSubtype

    subroutine gribapiLibraryVersion(major_version_dummy, minor_version_dummy,&
    & revision_version_dummy) bind(c, name = 'gribapiLibraryVersion')
      import c_int
      integer(c_int), intent(inout) :: major_version_dummy
      integer(c_int), intent(inout) :: minor_version_dummy
      integer(c_int), intent(inout) :: revision_version_dummy
    end subroutine gribapiLibraryVersion

  end interface

contains

  subroutine ctrim(str)
    character(kind = c_char, len = *), intent(inout) :: str
    integer :: i

    do i=1,len(str)
      if (str(i:i) == c_null_char) then
        str(i:len(str)) = ' '
        exit
      end if
    end do
  end subroutine ctrim

  function c_len(s) result(i)
    character(kind = c_char, len = *), intent(in) :: s
    integer :: i

    do i = 1, len(s)
      if (s(i:i) == c_null_char) exit
    end do
    i = i - 1
  end function

  function cdiStringError(cdiErrno_dummy) result(f_result)
    character(kind = c_char), dimension(:), pointer :: f_result
    integer(c_int), value :: cdiErrno_dummy
    type(c_ptr) :: ptr
    integer :: rv_shape(1)
    interface
      function lib_cdiStringError(cdiErrno_dummy) bind(c, name =&
      & 'cdiStringError') result(c_result)
        import c_int, c_ptr
        type(c_ptr) :: c_result
        integer(c_int), value :: cdiErrno_dummy
      end function lib_cdiStringError
    end interface
    f_result => null()
    ptr = lib_cdiStringError(cdiErrno_dummy)
    if(c_associated(ptr)) then
      rv_shape(1) = int(lib_strlen(ptr))
      call c_f_pointer(ptr, f_result, rv_shape)
    end if
  end function cdiStringError

  function cdiLibraryVersion() result(f_result)
    character(kind = c_char), dimension(:), pointer :: f_result
    type(c_ptr) :: ptr
    integer :: rv_shape(1)
    interface
      function lib_cdiLibraryVersion() bind(c, name = 'cdiLibraryVersion')&
      & result(c_result)
        import c_ptr
        type(c_ptr) :: c_result
      end function lib_cdiLibraryVersion
    end interface
    f_result => null()
    ptr = lib_cdiLibraryVersion()
    if(c_associated(ptr)) then
      rv_shape(1) = int(lib_strlen(ptr))
      call c_f_pointer(ptr, f_result, rv_shape)
    end if
  end function cdiLibraryVersion

  subroutine cdiDefGlobal(string_dummy, val_dummy)
    character(kind = c_char, len = *), intent(in) :: string_dummy
    integer(c_int), value :: val_dummy
    character(kind = c_char) :: string_temp(len(string_dummy) + 1)
    integer :: string_i
    interface
      subroutine lib_cdiDefGlobal(string_dummy, val_dummy) bind(c, name =&
      & 'cdiDefGlobal')
        import c_char, c_int
        character(kind = c_char) :: string_dummy(*)
        integer(c_int), value :: val_dummy
      end subroutine lib_cdiDefGlobal
    end interface
    do string_i = 1, len(string_dummy)
      string_temp(string_i) = string_dummy(string_i:string_i)
    end do
    string_temp(len(string_dummy) + 1) = c_null_char
    call lib_cdiDefGlobal(string_temp, val_dummy)
  end subroutine cdiDefGlobal

  subroutine cdiParamToString(param_dummy, paramstr_dummy, maxlen_dummy)
    integer(c_int), value :: param_dummy
    character(kind = c_char, len = *), intent(inout) :: paramstr_dummy
    integer(c_int), value :: maxlen_dummy
    character(kind = c_char) :: paramstr_temp(len(paramstr_dummy) + 1)
    integer :: paramstr_i
    interface
      subroutine lib_cdiParamToString(param_dummy, paramstr_dummy,&
      & maxlen_dummy) bind(c, name = 'cdiParamToString')
        import c_char, c_int
        integer(c_int), value :: param_dummy
        character(kind = c_char) :: paramstr_dummy(*)
        integer(c_int), value :: maxlen_dummy
      end subroutine lib_cdiParamToString
    end interface
    paramstr_temp(len(paramstr_dummy) + 1) = c_null_char
    do paramstr_i = len(paramstr_dummy), 1, -1
      if(paramstr_dummy(paramstr_i:paramstr_i) /= ' ') exit
      paramstr_temp(paramstr_i) = c_null_char
    end do
    do paramstr_i = paramstr_i, 1, -1
        paramstr_temp(paramstr_i) = paramstr_dummy(paramstr_i:paramstr_i)
    end do
    call lib_cdiParamToString(param_dummy, paramstr_temp, maxlen_dummy)
    do paramstr_i = 1, len(paramstr_dummy)
      if(paramstr_temp(paramstr_i) == c_null_char) exit
      paramstr_dummy(paramstr_i:paramstr_i) = paramstr_temp(paramstr_i)
    end do
    do paramstr_i = paramstr_i, len(paramstr_dummy)
      paramstr_dummy(paramstr_i:paramstr_i) = ' '
    end do
  end subroutine cdiParamToString

  function cdiGetFiletype(path_dummy, byteorder_dummy) result(f_result)
    integer(c_int) :: f_result
    character(kind = c_char, len = *), intent(in) :: path_dummy
    integer(c_int), intent(inout) :: byteorder_dummy
    character(kind = c_char) :: path_temp(len(path_dummy) + 1)
    integer :: path_i
    interface
      function lib_cdiGetFiletype(path_dummy, byteorder_dummy) bind(c, name =&
      & 'cdiGetFiletype') result(c_result)
        import c_char, c_int
        integer(c_int) :: c_result
        character(kind = c_char) :: path_dummy(*)
        integer(c_int), intent(inout) :: byteorder_dummy
      end function lib_cdiGetFiletype
    end interface
    do path_i = 1, len(path_dummy)
      path_temp(path_i) = path_dummy(path_i:path_i)
    end do
    path_temp(len(path_dummy) + 1) = c_null_char
    f_result = lib_cdiGetFiletype(path_temp, byteorder_dummy)
  end function cdiGetFiletype

  function streamOpenRead(path_dummy) result(f_result)
    integer(c_int) :: f_result
    character(kind = c_char, len = *), intent(in) :: path_dummy
    character(kind = c_char) :: path_temp(len(path_dummy) + 1)
    integer :: path_i
    interface
      function lib_streamOpenRead(path_dummy) bind(c, name = 'streamOpenRead')&
      & result(c_result)
        import c_char, c_int
        integer(c_int) :: c_result
        character(kind = c_char) :: path_dummy(*)
      end function lib_streamOpenRead
    end interface
    do path_i = 1, len(path_dummy)
      path_temp(path_i) = path_dummy(path_i:path_i)
    end do
    path_temp(len(path_dummy) + 1) = c_null_char
    f_result = lib_streamOpenRead(path_temp)
  end function streamOpenRead

  function streamOpenWrite(path_dummy, filetype_dummy) result(f_result)
    integer(c_int) :: f_result
    character(kind = c_char, len = *), intent(in) :: path_dummy
    integer(c_int), value :: filetype_dummy
    character(kind = c_char) :: path_temp(len(path_dummy) + 1)
    integer :: path_i
    interface
      function lib_streamOpenWrite(path_dummy, filetype_dummy) bind(c, name =&
      & 'streamOpenWrite') result(c_result)
        import c_char, c_int
        integer(c_int) :: c_result
        character(kind = c_char) :: path_dummy(*)
        integer(c_int), value :: filetype_dummy
      end function lib_streamOpenWrite
    end interface
    do path_i = 1, len(path_dummy)
      path_temp(path_i) = path_dummy(path_i:path_i)
    end do
    path_temp(len(path_dummy) + 1) = c_null_char
    f_result = lib_streamOpenWrite(path_temp, filetype_dummy)
  end function streamOpenWrite

  function streamOpenAppend(path_dummy) result(f_result)
    integer(c_int) :: f_result
    character(kind = c_char, len = *), intent(in) :: path_dummy
    character(kind = c_char) :: path_temp(len(path_dummy) + 1)
    integer :: path_i
    interface
      function lib_streamOpenAppend(path_dummy) bind(c, name =&
      & 'streamOpenAppend') result(c_result)
        import c_char, c_int
        integer(c_int) :: c_result
        character(kind = c_char) :: path_dummy(*)
      end function lib_streamOpenAppend
    end interface
    do path_i = 1, len(path_dummy)
      path_temp(path_i) = path_dummy(path_i:path_i)
    end do
    path_temp(len(path_dummy) + 1) = c_null_char
    f_result = lib_streamOpenAppend(path_temp)
  end function streamOpenAppend

  function streamFilename(streamID_dummy) result(f_result)
    character(kind = c_char), dimension(:), pointer :: f_result
    integer(c_int), value :: streamID_dummy
    type(c_ptr) :: ptr
    integer :: rv_shape(1)
    interface
      function lib_streamFilename(streamID_dummy) bind(c, name =&
      & 'streamFilename') result(c_result)
        import c_int, c_ptr
        type(c_ptr) :: c_result
        integer(c_int), value :: streamID_dummy
      end function lib_streamFilename
    end interface
    f_result => null()
    ptr = lib_streamFilename(streamID_dummy)
    if(c_associated(ptr)) then
      rv_shape(1) = int(lib_strlen(ptr))
      call c_f_pointer(ptr, f_result, rv_shape)
    end if
  end function streamFilename

  function streamFilesuffix(filetype_dummy) result(f_result)
    character(kind = c_char), dimension(:), pointer :: f_result
    integer(c_int), value :: filetype_dummy
    type(c_ptr) :: ptr
    integer :: rv_shape(1)
    interface
      function lib_streamFilesuffix(filetype_dummy) bind(c, name =&
      & 'streamFilesuffix') result(c_result)
        import c_int, c_ptr
        type(c_ptr) :: c_result
        integer(c_int), value :: filetype_dummy
      end function lib_streamFilesuffix
    end interface
    f_result => null()
    ptr = lib_streamFilesuffix(filetype_dummy)
    if(c_associated(ptr)) then
      rv_shape(1) = int(lib_strlen(ptr))
      call c_f_pointer(ptr, f_result, rv_shape)
    end if
  end function streamFilesuffix

  function cdiIterator_new(path_dummy) result(f_result)
    type(t_CdiIterator) :: f_result
    character(kind = c_char, len = *), intent(in) :: path_dummy
    character(kind = c_char) :: path_temp(len(path_dummy) + 1)
    integer :: path_i
    interface
      function lib_cdiIterator_new(path_dummy) bind(c, name =&
      & 'cdiIterator_new') result(c_result)
        import c_char, c_ptr
        type(c_ptr) :: c_result
        character(kind = c_char) :: path_dummy(*)
      end function lib_cdiIterator_new
    end interface
    do path_i = 1, len(path_dummy)
      path_temp(path_i) = path_dummy(path_i:path_i)
    end do
    path_temp(len(path_dummy) + 1) = c_null_char
    f_result%ptr = lib_cdiIterator_new(path_temp)
  end function cdiIterator_new

  function cdiIterator_clone(me_dummy) result(f_result)
    type(t_CdiIterator) :: f_result
    type(t_CdiIterator), intent(in) :: me_dummy
    interface
      function lib_cdiIterator_clone(me_dummy) bind(c, name =&
      & 'cdiIterator_clone') result(c_result)
        import c_ptr
        type(c_ptr) :: c_result
        type(c_ptr), value :: me_dummy
      end function lib_cdiIterator_clone
    end interface
    f_result%ptr = lib_cdiIterator_clone(me_dummy%ptr)
  end function cdiIterator_clone

  function cdiIterator_serialize(me_dummy) result(f_result)
    character(kind = c_char), dimension(:), pointer :: f_result
    type(t_CdiIterator), intent(in) :: me_dummy
    type(c_ptr) :: cString
    integer :: rv_shape(1)
    character(kind = c_char), dimension(:), pointer :: temp
    interface
      function lib_cdiIterator_serialize(me_dummy) bind(c, name =&
      & 'cdiIterator_serialize') result(c_result)
        import c_ptr
        type(c_ptr) :: c_result
        type(c_ptr), value :: me_dummy
      end function lib_cdiIterator_serialize
    end interface
    cString = lib_cdiIterator_serialize(me_dummy%ptr)
    if(c_associated(cString)) then
      rv_shape(1) = int(lib_strlen(cString))
      call c_f_pointer(cString, temp, rv_shape)
      allocate(f_result(rv_shape(1)))
      f_result = temp
      call lib_free(cString)
    else
      f_result => null()
    end if
  end function cdiIterator_serialize

  function cdiIterator_deserialize(description_dummy) result(f_result)
    type(t_CdiIterator) :: f_result
    character(kind = c_char, len = *), intent(in) :: description_dummy
    character(kind = c_char) :: description_temp(len(description_dummy) + 1)
    integer :: description_i
    interface
      function lib_cdiIterator_deserialize(description_dummy) bind(c, name =&
      & 'cdiIterator_deserialize') result(c_result)
        import c_char, c_ptr
        type(c_ptr) :: c_result
        character(kind = c_char) :: description_dummy(*)
      end function lib_cdiIterator_deserialize
    end interface
    do description_i = 1, len(description_dummy)
      description_temp(description_i) =&
      & description_dummy(description_i:description_i)
    end do
    description_temp(len(description_dummy) + 1) = c_null_char
    f_result%ptr = lib_cdiIterator_deserialize(description_temp)
  end function cdiIterator_deserialize

  subroutine cdiIterator_delete(me_dummy)
    type(t_CdiIterator), intent(in) :: me_dummy
    interface
      subroutine lib_cdiIterator_delete(me_dummy) bind(c, name =&
      & 'cdiIterator_delete')
        import c_ptr
        type(c_ptr), value :: me_dummy
      end subroutine lib_cdiIterator_delete
    end interface
    call lib_cdiIterator_delete(me_dummy%ptr)
  end subroutine cdiIterator_delete

  function cdiIterator_nextField(me_dummy) result(f_result)
    integer(c_int) :: f_result
    type(t_CdiIterator), intent(in) :: me_dummy
    interface
      function lib_cdiIterator_nextField(me_dummy) bind(c, name =&
      & 'cdiIterator_nextField') result(c_result)
        import c_int, c_ptr
        integer(c_int) :: c_result
        type(c_ptr), value :: me_dummy
      end function lib_cdiIterator_nextField
    end interface
    f_result = lib_cdiIterator_nextField(me_dummy%ptr)
  end function cdiIterator_nextField

  function cdiIterator_inqStartTime(me_dummy) result(f_result)
    character(kind = c_char), dimension(:), pointer :: f_result
    type(t_CdiIterator), intent(in) :: me_dummy
    type(c_ptr) :: cString
    integer :: rv_shape(1)
    character(kind = c_char), dimension(:), pointer :: temp
    interface
      function lib_cdiIterator_inqStartTime(me_dummy) bind(c, name =&
      & 'cdiIterator_inqStartTime') result(c_result)
        import c_ptr
        type(c_ptr) :: c_result
        type(c_ptr), value :: me_dummy
      end function lib_cdiIterator_inqStartTime
    end interface
    cString = lib_cdiIterator_inqStartTime(me_dummy%ptr)
    if(c_associated(cString)) then
      rv_shape(1) = int(lib_strlen(cString))
      call c_f_pointer(cString, temp, rv_shape)
      allocate(f_result(rv_shape(1)))
      f_result = temp
      call lib_free(cString)
    else
      f_result => null()
    end if
  end function cdiIterator_inqStartTime

  function cdiIterator_inqEndTime(me_dummy) result(f_result)
    character(kind = c_char), dimension(:), pointer :: f_result
    type(t_CdiIterator), intent(in) :: me_dummy
    type(c_ptr) :: cString
    integer :: rv_shape(1)
    character(kind = c_char), dimension(:), pointer :: temp
    interface
      function lib_cdiIterator_inqEndTime(me_dummy) bind(c, name =&
      & 'cdiIterator_inqEndTime') result(c_result)
        import c_ptr
        type(c_ptr) :: c_result
        type(c_ptr), value :: me_dummy
      end function lib_cdiIterator_inqEndTime
    end interface
    cString = lib_cdiIterator_inqEndTime(me_dummy%ptr)
    if(c_associated(cString)) then
      rv_shape(1) = int(lib_strlen(cString))
      call c_f_pointer(cString, temp, rv_shape)
      allocate(f_result(rv_shape(1)))
      f_result = temp
      call lib_free(cString)
    else
      f_result => null()
    end if
  end function cdiIterator_inqEndTime

  function cdiIterator_inqRTime(me_dummy) result(f_result)
    character(kind = c_char), dimension(:), pointer :: f_result
    type(t_CdiIterator), intent(in) :: me_dummy
    type(c_ptr) :: cString
    integer :: rv_shape(1)
    character(kind = c_char), dimension(:), pointer :: temp
    interface
      function lib_cdiIterator_inqRTime(me_dummy) bind(c, name =&
      & 'cdiIterator_inqRTime') result(c_result)
        import c_ptr
        type(c_ptr) :: c_result
        type(c_ptr), value :: me_dummy
      end function lib_cdiIterator_inqRTime
    end interface
    cString = lib_cdiIterator_inqRTime(me_dummy%ptr)
    if(c_associated(cString)) then
      rv_shape(1) = int(lib_strlen(cString))
      call c_f_pointer(cString, temp, rv_shape)
      allocate(f_result(rv_shape(1)))
      f_result = temp
      call lib_free(cString)
    else
      f_result => null()
    end if
  end function cdiIterator_inqRTime

  function cdiIterator_inqVTime(me_dummy) result(f_result)
    character(kind = c_char), dimension(:), pointer :: f_result
    type(t_CdiIterator), intent(in) :: me_dummy
    type(c_ptr) :: cString
    integer :: rv_shape(1)
    character(kind = c_char), dimension(:), pointer :: temp
    interface
      function lib_cdiIterator_inqVTime(me_dummy) bind(c, name =&
      & 'cdiIterator_inqVTime') result(c_result)
        import c_ptr
        type(c_ptr) :: c_result
        type(c_ptr), value :: me_dummy
      end function lib_cdiIterator_inqVTime
    end interface
    cString = lib_cdiIterator_inqVTime(me_dummy%ptr)
    if(c_associated(cString)) then
      rv_shape(1) = int(lib_strlen(cString))
      call c_f_pointer(cString, temp, rv_shape)
      allocate(f_result(rv_shape(1)))
      f_result = temp
      call lib_free(cString)
    else
      f_result => null()
    end if
  end function cdiIterator_inqVTime

  function cdiIterator_inqLevelType(me_dummy, levelSelector_dummy, outName,&
  & outLongName, outStdName, outUnit) result(f_result)
    integer(c_int) :: f_result
    type(t_CdiIterator), intent(in) :: me_dummy
    integer(c_int), value :: levelSelector_dummy
    character(kind = c_char), pointer, optional, intent(inout) :: outName(:)
    character(kind = c_char), pointer, optional, intent(inout) ::&
    & outLongName(:)
    character(kind = c_char), pointer, optional, intent(inout) :: outStdName(:)
    character(kind = c_char), pointer, optional, intent(inout) :: outUnit(:)
    type(c_ptr), target :: outName_cptr
    type(c_ptr) :: outName_handle
    integer :: outName_shape(1)
    character(kind = c_char), pointer :: outName_fptr(:)
    type(c_ptr), target :: outLongName_cptr
    type(c_ptr) :: outLongName_handle
    integer :: outLongName_shape(1)
    character(kind = c_char), pointer :: outLongName_fptr(:)
    type(c_ptr), target :: outStdName_cptr
    type(c_ptr) :: outStdName_handle
    integer :: outStdName_shape(1)
    character(kind = c_char), pointer :: outStdName_fptr(:)
    type(c_ptr), target :: outUnit_cptr
    type(c_ptr) :: outUnit_handle
    integer :: outUnit_shape(1)
    character(kind = c_char), pointer :: outUnit_fptr(:)
    interface
      function lib_cdiIterator_inqLevelType(me_dummy, levelSelector_dummy,&
      & outName, outLongName, outStdName, outUnit) bind(c, name =&
      & 'cdiIterator_inqLevelType') result(c_result)
        import c_int, c_ptr
        integer(c_int) :: c_result
        type(c_ptr), value :: me_dummy
        integer(c_int), value :: levelSelector_dummy
        type(c_ptr), value :: outName
        type(c_ptr), value :: outLongName
        type(c_ptr), value :: outStdName
        type(c_ptr), value :: outUnit
      end function lib_cdiIterator_inqLevelType
    end interface
    outName_handle = c_null_ptr
    if(present(outName)) outName_handle = c_loc(outName_cptr)
    outLongName_handle = c_null_ptr
    if(present(outLongName)) outLongName_handle = c_loc(outLongName_cptr)
    outStdName_handle = c_null_ptr
    if(present(outStdName)) outStdName_handle = c_loc(outStdName_cptr)
    outUnit_handle = c_null_ptr
    if(present(outUnit)) outUnit_handle = c_loc(outUnit_cptr)
    f_result = lib_cdiIterator_inqLevelType(me_dummy%ptr, levelSelector_dummy,&
    & outName_handle, outLongName_handle, outStdName_handle, outUnit_handle)
    if(present(outName)) then
      if(c_associated(outName_cptr)) then
        outName_shape(1) = int(lib_strlen(outName_cptr))
        call c_f_pointer(outName_cptr, outName_fptr, outName_shape)
        allocate(outName(outName_shape(1)))
        outName = outName_fptr
        call lib_free(outName_cptr)
      else
        outName => null()
      end if
    end if
    if(present(outLongName)) then
      if(c_associated(outLongName_cptr)) then
        outLongName_shape(1) = int(lib_strlen(outLongName_cptr))
        call c_f_pointer(outLongName_cptr, outLongName_fptr, outLongName_shape)
        allocate(outLongName(outLongName_shape(1)))
        outLongName = outLongName_fptr
        call lib_free(outLongName_cptr)
      else
        outLongName => null()
      end if
    end if
    if(present(outStdName)) then
      if(c_associated(outStdName_cptr)) then
        outStdName_shape(1) = int(lib_strlen(outStdName_cptr))
        call c_f_pointer(outStdName_cptr, outStdName_fptr, outStdName_shape)
        allocate(outStdName(outStdName_shape(1)))
        outStdName = outStdName_fptr
        call lib_free(outStdName_cptr)
      else
        outStdName => null()
      end if
    end if
    if(present(outUnit)) then
      if(c_associated(outUnit_cptr)) then
        outUnit_shape(1) = int(lib_strlen(outUnit_cptr))
        call c_f_pointer(outUnit_cptr, outUnit_fptr, outUnit_shape)
        allocate(outUnit(outUnit_shape(1)))
        outUnit = outUnit_fptr
        call lib_free(outUnit_cptr)
      else
        outUnit => null()
      end if
    end if
  end function cdiIterator_inqLevelType

  function cdiIterator_inqLevel(me_dummy, levelSelector_dummy, outValue1,&
  & outValue2) result(f_result)
    integer(c_int) :: f_result
    type(t_CdiIterator), intent(in) :: me_dummy
    integer(c_int), value :: levelSelector_dummy
    real(c_double), target, optional, intent(inout) :: outValue1
    real(c_double), target, optional, intent(inout) :: outValue2
    type(c_ptr) :: outValue1_cptr
    type(c_ptr) :: outValue2_cptr
    interface
      function lib_cdiIterator_inqLevel(me_dummy, levelSelector_dummy,&
      & outValue1, outValue2) bind(c, name = 'cdiIterator_inqLevel')&
      & result(c_result)
        import c_int, c_ptr
        integer(c_int) :: c_result
        type(c_ptr), value :: me_dummy
        integer(c_int), value :: levelSelector_dummy
        type(c_ptr), value :: outValue1
        type(c_ptr), value :: outValue2
      end function lib_cdiIterator_inqLevel
    end interface
    outValue1_cptr = c_null_ptr
    if(present(outValue1)) outValue1_cptr = c_loc(outValue1)
    outValue2_cptr = c_null_ptr
    if(present(outValue2)) outValue2_cptr = c_loc(outValue2)
    f_result = lib_cdiIterator_inqLevel(me_dummy%ptr, levelSelector_dummy,&
    & outValue1_cptr, outValue2_cptr)
  end function cdiIterator_inqLevel

  function cdiIterator_inqLevelUuid(me_dummy, outVgridNumber, outLevelCount,&
  & outUuid) result(f_result)
    integer(c_int) :: f_result
    type(t_CdiIterator), intent(in) :: me_dummy
    integer(c_int), optional, target, intent(inout) :: outVgridNumber
    integer(c_int), optional, target, intent(inout) :: outLevelCount
    integer(kind = c_signed_char), target, optional, intent(inout) ::&
    & outUuid(CDI_UUID_SIZE)
    type(c_ptr) :: outVgridNumber_cptr
    type(c_ptr) :: outLevelCount_cptr
    type(c_ptr) :: outUuid_cptr
    interface
      function lib_cdiIterator_inqLevelUuid(me_dummy, outVgridNumber,&
      & outLevelCount, outUuid) bind(c, name = 'cdiIterator_inqLevelUuid')&
      & result(c_result)
        import c_int, c_ptr
        integer(c_int) :: c_result
        type(c_ptr), value :: me_dummy
        type(c_ptr), value :: outVgridNumber
        type(c_ptr), value :: outLevelCount
        type(c_ptr), value :: outUuid
      end function lib_cdiIterator_inqLevelUuid
    end interface
    outVgridNumber_cptr = c_null_ptr
    if(present(outVgridNumber)) outVgridNumber_cptr = c_loc(outVgridNumber)
    outLevelCount_cptr = c_null_ptr
    if(present(outLevelCount)) outLevelCount_cptr = c_loc(outLevelCount)
    outUuid_cptr = c_null_ptr
    if(present(outUuid)) outUuid_cptr = c_loc(outUuid)
    f_result = lib_cdiIterator_inqLevelUuid(me_dummy%ptr, outVgridNumber_cptr,&
    & outLevelCount_cptr, outUuid_cptr)
  end function cdiIterator_inqLevelUuid

  function cdiIterator_inqTile(me_dummy, outTileIndex_dummy,&
  & outTileAttribute_dummy) result(f_result)
    integer(c_int) :: f_result
    type(t_CdiIterator), intent(in) :: me_dummy
    integer(c_int), intent(inout) :: outTileIndex_dummy
    integer(c_int), intent(inout) :: outTileAttribute_dummy
    interface
      function lib_cdiIterator_inqTile(me_dummy, outTileIndex_dummy,&
      & outTileAttribute_dummy) bind(c, name = 'cdiIterator_inqTile')&
      & result(c_result)
        import c_int, c_ptr
        integer(c_int) :: c_result
        type(c_ptr), value :: me_dummy
        integer(c_int), intent(inout) :: outTileIndex_dummy
        integer(c_int), intent(inout) :: outTileAttribute_dummy
      end function lib_cdiIterator_inqTile
    end interface
    f_result = lib_cdiIterator_inqTile(me_dummy%ptr, outTileIndex_dummy,&
    & outTileAttribute_dummy)
  end function cdiIterator_inqTile

  function cdiIterator_inqTileCount(me_dummy, outTileCount_dummy,&
  & outTileAttributeCount_dummy) result(f_result)
    integer(c_int) :: f_result
    type(t_CdiIterator), intent(in) :: me_dummy
    integer(c_int), intent(inout) :: outTileCount_dummy
    integer(c_int), intent(inout) :: outTileAttributeCount_dummy
    interface
      function lib_cdiIterator_inqTileCount(me_dummy, outTileCount_dummy,&
      & outTileAttributeCount_dummy) bind(c, name = 'cdiIterator_inqTileCount')&
      & result(c_result)
        import c_int, c_ptr
        integer(c_int) :: c_result
        type(c_ptr), value :: me_dummy
        integer(c_int), intent(inout) :: outTileCount_dummy
        integer(c_int), intent(inout) :: outTileAttributeCount_dummy
      end function lib_cdiIterator_inqTileCount
    end interface
    f_result = lib_cdiIterator_inqTileCount(me_dummy%ptr, outTileCount_dummy,&
    & outTileAttributeCount_dummy)
  end function cdiIterator_inqTileCount

  function cdiIterator_inqParam(me_dummy) result(f_result)
    type(t_CdiParam) :: f_result
    type(t_CdiIterator), intent(in) :: me_dummy
    interface
      function lib_cdiIterator_inqParam(me_dummy) bind(c, name =&
      & 'cdiIterator_inqParam') result(c_result)
        import c_ptr, t_CdiParam
        type(t_CdiParam) :: c_result
        type(c_ptr), value :: me_dummy
      end function lib_cdiIterator_inqParam
    end interface
    f_result = lib_cdiIterator_inqParam(me_dummy%ptr)
  end function cdiIterator_inqParam

  subroutine cdiIterator_inqParamParts(me_dummy, outDiscipline_dummy,&
  & outCategory_dummy, outNumber_dummy)
    type(t_CdiIterator), intent(in) :: me_dummy
    integer(c_int), intent(inout) :: outDiscipline_dummy
    integer(c_int), intent(inout) :: outCategory_dummy
    integer(c_int), intent(inout) :: outNumber_dummy
    interface
      subroutine lib_cdiIterator_inqParamParts(me_dummy, outDiscipline_dummy,&
      & outCategory_dummy, outNumber_dummy) bind(c, name =&
      & 'cdiIterator_inqParamParts')
        import c_int, c_ptr
        type(c_ptr), value :: me_dummy
        integer(c_int), intent(inout) :: outDiscipline_dummy
        integer(c_int), intent(inout) :: outCategory_dummy
        integer(c_int), intent(inout) :: outNumber_dummy
      end subroutine lib_cdiIterator_inqParamParts
    end interface
    call lib_cdiIterator_inqParamParts(me_dummy%ptr, outDiscipline_dummy,&
    & outCategory_dummy, outNumber_dummy)
  end subroutine cdiIterator_inqParamParts

  function cdiIterator_inqDatatype(me_dummy) result(f_result)
    integer(c_int) :: f_result
    type(t_CdiIterator), intent(in) :: me_dummy
    interface
      function lib_cdiIterator_inqDatatype(me_dummy) bind(c, name =&
      & 'cdiIterator_inqDatatype') result(c_result)
        import c_int, c_ptr
        integer(c_int) :: c_result
        type(c_ptr), value :: me_dummy
      end function lib_cdiIterator_inqDatatype
    end interface
    f_result = lib_cdiIterator_inqDatatype(me_dummy%ptr)
  end function cdiIterator_inqDatatype

  function cdiIterator_inqFiletype(me_dummy) result(f_result)
    integer(c_int) :: f_result
    type(t_CdiIterator), intent(in) :: me_dummy
    interface
      function lib_cdiIterator_inqFiletype(me_dummy) bind(c, name =&
      & 'cdiIterator_inqFiletype') result(c_result)
        import c_int, c_ptr
        integer(c_int) :: c_result
        type(c_ptr), value :: me_dummy
      end function lib_cdiIterator_inqFiletype
    end interface
    f_result = lib_cdiIterator_inqFiletype(me_dummy%ptr)
  end function cdiIterator_inqFiletype

  function cdiIterator_inqTsteptype(me_dummy) result(f_result)
    integer(c_int) :: f_result
    type(t_CdiIterator), intent(in) :: me_dummy
    interface
      function lib_cdiIterator_inqTsteptype(me_dummy) bind(c, name =&
      & 'cdiIterator_inqTsteptype') result(c_result)
        import c_int, c_ptr
        integer(c_int) :: c_result
        type(c_ptr), value :: me_dummy
      end function lib_cdiIterator_inqTsteptype
    end interface
    f_result = lib_cdiIterator_inqTsteptype(me_dummy%ptr)
  end function cdiIterator_inqTsteptype

  function cdiIterator_inqVariableName(me_dummy) result(f_result)
    character(kind = c_char), dimension(:), pointer :: f_result
    type(t_CdiIterator), intent(in) :: me_dummy
    type(c_ptr) :: cString
    integer :: rv_shape(1)
    character(kind = c_char), dimension(:), pointer :: temp
    interface
      function lib_cdiIterator_inqVariableName(me_dummy) bind(c, name =&
      & 'cdiIterator_inqVariableName') result(c_result)
        import c_ptr
        type(c_ptr) :: c_result
        type(c_ptr), value :: me_dummy
      end function lib_cdiIterator_inqVariableName
    end interface
    cString = lib_cdiIterator_inqVariableName(me_dummy%ptr)
    if(c_associated(cString)) then
      rv_shape(1) = int(lib_strlen(cString))
      call c_f_pointer(cString, temp, rv_shape)
      allocate(f_result(rv_shape(1)))
      f_result = temp
      call lib_free(cString)
    else
      f_result => null()
    end if
  end function cdiIterator_inqVariableName

  function cdiIterator_inqGridId(me_dummy) result(f_result)
    integer(c_int) :: f_result
    type(t_CdiIterator), intent(in) :: me_dummy
    interface
      function lib_cdiIterator_inqGridId(me_dummy) bind(c, name =&
      & 'cdiIterator_inqGridId') result(c_result)
        import c_int, c_ptr
        integer(c_int) :: c_result
        type(c_ptr), value :: me_dummy
      end function lib_cdiIterator_inqGridId
    end interface
    f_result = lib_cdiIterator_inqGridId(me_dummy%ptr)
  end function cdiIterator_inqGridId

  subroutine cdiIterator_readField(me_dummy, data_dummy, nmiss)
    type(t_CdiIterator), intent(in) :: me_dummy
    real(c_double), intent(inout) :: data_dummy(*)
    integer(c_size_t), optional, target, intent(inout) :: nmiss
    type(c_ptr) :: nmiss_cptr
    interface
      subroutine lib_cdiIterator_readField(me_dummy, data_dummy, nmiss) bind(c,&
      & name = 'cdiIterator_readField')
        import c_double, c_ptr
        type(c_ptr), value :: me_dummy
        real(c_double), intent(inout) :: data_dummy(*)
        type(c_ptr), value :: nmiss
      end subroutine lib_cdiIterator_readField
    end interface
    nmiss_cptr = c_null_ptr
    if(present(nmiss)) nmiss_cptr = c_loc(nmiss)
    call lib_cdiIterator_readField(me_dummy%ptr, data_dummy, nmiss_cptr)
  end subroutine cdiIterator_readField

  subroutine cdiIterator_readFieldF(me_dummy, data_dummy, nmiss)
    type(t_CdiIterator), intent(in) :: me_dummy
    real(c_float), intent(inout) :: data_dummy(*)
    integer(c_size_t), optional, target, intent(inout) :: nmiss
    type(c_ptr) :: nmiss_cptr
    interface
      subroutine lib_cdiIterator_readFieldF(me_dummy, data_dummy, nmiss)&
      & bind(c, name = 'cdiIterator_readFieldF')
        import c_float, c_ptr
        type(c_ptr), value :: me_dummy
        real(c_float), intent(inout) :: data_dummy(*)
        type(c_ptr), value :: nmiss
      end subroutine lib_cdiIterator_readFieldF
    end interface
    nmiss_cptr = c_null_ptr
    if(present(nmiss)) nmiss_cptr = c_loc(nmiss)
    call lib_cdiIterator_readFieldF(me_dummy%ptr, data_dummy, nmiss_cptr)
  end subroutine cdiIterator_readFieldF

  function cdiGribIterator_clone(me_dummy) result(f_result)
    type(t_CdiGribIterator) :: f_result
    type(t_CdiIterator), intent(in) :: me_dummy
    interface
      function lib_cdiGribIterator_clone(me_dummy) bind(c, name =&
      & 'cdiGribIterator_clone') result(c_result)
        import c_ptr
        type(c_ptr) :: c_result
        type(c_ptr), value :: me_dummy
      end function lib_cdiGribIterator_clone
    end interface
    f_result%ptr = lib_cdiGribIterator_clone(me_dummy%ptr)
  end function cdiGribIterator_clone

  subroutine cdiGribIterator_delete(me_dummy)
    type(t_CdiGribIterator), intent(in) :: me_dummy
    interface
      subroutine lib_cdiGribIterator_delete(me_dummy) bind(c, name =&
      & 'cdiGribIterator_delete')
        import c_ptr
        type(c_ptr), value :: me_dummy
      end subroutine lib_cdiGribIterator_delete
    end interface
    call lib_cdiGribIterator_delete(me_dummy%ptr)
  end subroutine cdiGribIterator_delete

  function cdiGribIterator_getLong(me_dummy, key_dummy, value_dummy)&
  & result(f_result)
    integer(c_int) :: f_result
    type(t_CdiGribIterator), intent(in) :: me_dummy
    character(kind = c_char, len = *), intent(in) :: key_dummy
    integer(c_long), intent(inout) :: value_dummy
    character(kind = c_char) :: key_temp(len(key_dummy) + 1)
    integer :: key_i
    interface
      function lib_cdiGribIterator_getLong(me_dummy, key_dummy, value_dummy)&
      & bind(c, name = 'cdiGribIterator_getLong') result(c_result)
        import c_char, c_int, c_long, c_ptr
        integer(c_int) :: c_result
        type(c_ptr), value :: me_dummy
        character(kind = c_char) :: key_dummy(*)
        integer(c_long), intent(inout) :: value_dummy
      end function lib_cdiGribIterator_getLong
    end interface
    do key_i = 1, len(key_dummy)
      key_temp(key_i) = key_dummy(key_i:key_i)
    end do
    key_temp(len(key_dummy) + 1) = c_null_char
    f_result = lib_cdiGribIterator_getLong(me_dummy%ptr, key_temp, value_dummy)
  end function cdiGribIterator_getLong

  function cdiGribIterator_getDouble(me_dummy, key_dummy, value_dummy)&
  & result(f_result)
    integer(c_int) :: f_result
    type(t_CdiGribIterator), intent(in) :: me_dummy
    character(kind = c_char, len = *), intent(in) :: key_dummy
    real(c_double), intent(inout) :: value_dummy
    character(kind = c_char) :: key_temp(len(key_dummy) + 1)
    integer :: key_i
    interface
      function lib_cdiGribIterator_getDouble(me_dummy, key_dummy, value_dummy)&
      & bind(c, name = 'cdiGribIterator_getDouble') result(c_result)
        import c_char, c_double, c_int, c_ptr
        integer(c_int) :: c_result
        type(c_ptr), value :: me_dummy
        character(kind = c_char) :: key_dummy(*)
        real(c_double), intent(inout) :: value_dummy
      end function lib_cdiGribIterator_getDouble
    end interface
    do key_i = 1, len(key_dummy)
      key_temp(key_i) = key_dummy(key_i:key_i)
    end do
    key_temp(len(key_dummy) + 1) = c_null_char
    f_result = lib_cdiGribIterator_getDouble(me_dummy%ptr, key_temp,&
    & value_dummy)
  end function cdiGribIterator_getDouble

  function cdiGribIterator_getLength(me_dummy, key_dummy, value_dummy)&
  & result(f_result)
    integer(c_int) :: f_result
    type(t_CdiGribIterator), intent(in) :: me_dummy
    character(kind = c_char, len = *), intent(in) :: key_dummy
    integer(c_size_t), intent(inout) :: value_dummy
    character(kind = c_char) :: key_temp(len(key_dummy) + 1)
    integer :: key_i
    interface
      function lib_cdiGribIterator_getLength(me_dummy, key_dummy, value_dummy)&
      & bind(c, name = 'cdiGribIterator_getLength') result(c_result)
        import c_char, c_int, c_ptr, c_size_t
        integer(c_int) :: c_result
        type(c_ptr), value :: me_dummy
        character(kind = c_char) :: key_dummy(*)
        integer(c_size_t), intent(inout) :: value_dummy
      end function lib_cdiGribIterator_getLength
    end interface
    do key_i = 1, len(key_dummy)
      key_temp(key_i) = key_dummy(key_i:key_i)
    end do
    key_temp(len(key_dummy) + 1) = c_null_char
    f_result = lib_cdiGribIterator_getLength(me_dummy%ptr, key_temp,&
    & value_dummy)
  end function cdiGribIterator_getLength

  function cdiGribIterator_getString(me_dummy, key_dummy, value_dummy,&
  & length_dummy) result(f_result)
    integer(c_int) :: f_result
    type(t_CdiGribIterator), intent(in) :: me_dummy
    character(kind = c_char, len = *), intent(in) :: key_dummy
    character(kind = c_char, len = *), intent(inout) :: value_dummy
    integer(c_size_t), intent(inout) :: length_dummy
    character(kind = c_char) :: key_temp(len(key_dummy) + 1)
    integer :: key_i
    character(kind = c_char) :: value_temp(len(value_dummy) + 1)
    integer :: value_i
    interface
      function lib_cdiGribIterator_getString(me_dummy, key_dummy, value_dummy,&
      & length_dummy) bind(c, name = 'cdiGribIterator_getString')&
      & result(c_result)
        import c_char, c_int, c_ptr, c_size_t
        integer(c_int) :: c_result
        type(c_ptr), value :: me_dummy
        character(kind = c_char) :: key_dummy(*)
        character(kind = c_char) :: value_dummy(*)
        integer(c_size_t), intent(inout) :: length_dummy
      end function lib_cdiGribIterator_getString
    end interface
    do key_i = 1, len(key_dummy)
      key_temp(key_i) = key_dummy(key_i:key_i)
    end do
    key_temp(len(key_dummy) + 1) = c_null_char
    value_temp(len(value_dummy) + 1) = c_null_char
    do value_i = len(value_dummy), 1, -1
      if(value_dummy(value_i:value_i) /= ' ') exit
      value_temp(value_i) = c_null_char
    end do
    do value_i = value_i, 1, -1
        value_temp(value_i) = value_dummy(value_i:value_i)
    end do
    f_result = lib_cdiGribIterator_getString(me_dummy%ptr, key_temp,&
    & value_temp, length_dummy)
    do value_i = 1, len(value_dummy)
      if(value_temp(value_i) == c_null_char) exit
      value_dummy(value_i:value_i) = value_temp(value_i)
    end do
    do value_i = value_i, len(value_dummy)
      value_dummy(value_i:value_i) = ' '
    end do
  end function cdiGribIterator_getString

  function cdiGribIterator_getSize(me_dummy, key_dummy, value_dummy)&
  & result(f_result)
    integer(c_int) :: f_result
    type(t_CdiGribIterator), intent(in) :: me_dummy
    character(kind = c_char, len = *), intent(in) :: key_dummy
    integer(c_size_t), intent(inout) :: value_dummy
    character(kind = c_char) :: key_temp(len(key_dummy) + 1)
    integer :: key_i
    interface
      function lib_cdiGribIterator_getSize(me_dummy, key_dummy, value_dummy)&
      & bind(c, name = 'cdiGribIterator_getSize') result(c_result)
        import c_char, c_int, c_ptr, c_size_t
        integer(c_int) :: c_result
        type(c_ptr), value :: me_dummy
        character(kind = c_char) :: key_dummy(*)
        integer(c_size_t), intent(inout) :: value_dummy
      end function lib_cdiGribIterator_getSize
    end interface
    do key_i = 1, len(key_dummy)
      key_temp(key_i) = key_dummy(key_i:key_i)
    end do
    key_temp(len(key_dummy) + 1) = c_null_char
    f_result = lib_cdiGribIterator_getSize(me_dummy%ptr, key_temp, value_dummy)
  end function cdiGribIterator_getSize

  function cdiGribIterator_getLongArray(me_dummy, key_dummy, value_dummy,&
  & array_size_dummy) result(f_result)
    integer(c_int) :: f_result
    type(t_CdiGribIterator), intent(in) :: me_dummy
    character(kind = c_char, len = *), intent(in) :: key_dummy
    integer(c_long), intent(inout) :: value_dummy
    integer(c_size_t), intent(inout) :: array_size_dummy
    character(kind = c_char) :: key_temp(len(key_dummy) + 1)
    integer :: key_i
    interface
      function lib_cdiGribIterator_getLongArray(me_dummy, key_dummy,&
      & value_dummy, array_size_dummy) bind(c, name =&
      & 'cdiGribIterator_getLongArray') result(c_result)
        import c_char, c_int, c_long, c_ptr, c_size_t
        integer(c_int) :: c_result
        type(c_ptr), value :: me_dummy
        character(kind = c_char) :: key_dummy(*)
        integer(c_long), intent(inout) :: value_dummy
        integer(c_size_t), intent(inout) :: array_size_dummy
      end function lib_cdiGribIterator_getLongArray
    end interface
    do key_i = 1, len(key_dummy)
      key_temp(key_i) = key_dummy(key_i:key_i)
    end do
    key_temp(len(key_dummy) + 1) = c_null_char
    f_result = lib_cdiGribIterator_getLongArray(me_dummy%ptr, key_temp,&
    & value_dummy, array_size_dummy)
  end function cdiGribIterator_getLongArray

  function cdiGribIterator_getDoubleArray(me_dummy, key_dummy, value_dummy,&
  & array_size_dummy) result(f_result)
    integer(c_int) :: f_result
    type(t_CdiGribIterator), intent(in) :: me_dummy
    character(kind = c_char, len = *), intent(in) :: key_dummy
    real(c_double), intent(inout) :: value_dummy
    integer(c_size_t), intent(inout) :: array_size_dummy
    character(kind = c_char) :: key_temp(len(key_dummy) + 1)
    integer :: key_i
    interface
      function lib_cdiGribIterator_getDoubleArray(me_dummy, key_dummy,&
      & value_dummy, array_size_dummy) bind(c, name =&
      & 'cdiGribIterator_getDoubleArray') result(c_result)
        import c_char, c_double, c_int, c_ptr, c_size_t
        integer(c_int) :: c_result
        type(c_ptr), value :: me_dummy
        character(kind = c_char) :: key_dummy(*)
        real(c_double), intent(inout) :: value_dummy
        integer(c_size_t), intent(inout) :: array_size_dummy
      end function lib_cdiGribIterator_getDoubleArray
    end interface
    do key_i = 1, len(key_dummy)
      key_temp(key_i) = key_dummy(key_i:key_i)
    end do
    key_temp(len(key_dummy) + 1) = c_null_char
    f_result = lib_cdiGribIterator_getDoubleArray(me_dummy%ptr, key_temp,&
    & value_dummy, array_size_dummy)
  end function cdiGribIterator_getDoubleArray

  function cdiGribIterator_inqEdition(me_dummy) result(f_result)
    integer(c_int) :: f_result
    type(t_CdiGribIterator), intent(in) :: me_dummy
    interface
      function lib_cdiGribIterator_inqEdition(me_dummy) bind(c, name =&
      & 'cdiGribIterator_inqEdition') result(c_result)
        import c_int, c_ptr
        integer(c_int) :: c_result
        type(c_ptr), value :: me_dummy
      end function lib_cdiGribIterator_inqEdition
    end interface
    f_result = lib_cdiGribIterator_inqEdition(me_dummy%ptr)
  end function cdiGribIterator_inqEdition

  function cdiGribIterator_inqLongValue(me_dummy, key_dummy) result(f_result)
    integer(c_long) :: f_result
    type(t_CdiGribIterator), intent(in) :: me_dummy
    character(kind = c_char, len = *), intent(in) :: key_dummy
    character(kind = c_char) :: key_temp(len(key_dummy) + 1)
    integer :: key_i
    interface
      function lib_cdiGribIterator_inqLongValue(me_dummy, key_dummy) bind(c,&
      & name = 'cdiGribIterator_inqLongValue') result(c_result)
        import c_char, c_long, c_ptr
        integer(c_long) :: c_result
        type(c_ptr), value :: me_dummy
        character(kind = c_char) :: key_dummy(*)
      end function lib_cdiGribIterator_inqLongValue
    end interface
    do key_i = 1, len(key_dummy)
      key_temp(key_i) = key_dummy(key_i:key_i)
    end do
    key_temp(len(key_dummy) + 1) = c_null_char
    f_result = lib_cdiGribIterator_inqLongValue(me_dummy%ptr, key_temp)
  end function cdiGribIterator_inqLongValue

  function cdiGribIterator_inqLongDefaultValue(me_dummy, key_dummy,&
  & defaultValue_dummy) result(f_result)
    integer(c_long) :: f_result
    type(t_CdiGribIterator), intent(in) :: me_dummy
    character(kind = c_char, len = *), intent(in) :: key_dummy
    integer(c_long), value :: defaultValue_dummy
    character(kind = c_char) :: key_temp(len(key_dummy) + 1)
    integer :: key_i
    interface
      function lib_cdiGribIterator_inqLongDefaultValue(me_dummy, key_dummy,&
      & defaultValue_dummy) bind(c, name =&
      & 'cdiGribIterator_inqLongDefaultValue') result(c_result)
        import c_char, c_long, c_ptr
        integer(c_long) :: c_result
        type(c_ptr), value :: me_dummy
        character(kind = c_char) :: key_dummy(*)
        integer(c_long), value :: defaultValue_dummy
      end function lib_cdiGribIterator_inqLongDefaultValue
    end interface
    do key_i = 1, len(key_dummy)
      key_temp(key_i) = key_dummy(key_i:key_i)
    end do
    key_temp(len(key_dummy) + 1) = c_null_char
    f_result = lib_cdiGribIterator_inqLongDefaultValue(me_dummy%ptr, key_temp,&
    & defaultValue_dummy)
  end function cdiGribIterator_inqLongDefaultValue

  function cdiGribIterator_inqDoubleValue(me_dummy, key_dummy) result(f_result)
    real(c_double) :: f_result
    type(t_CdiGribIterator), intent(in) :: me_dummy
    character(kind = c_char, len = *), intent(in) :: key_dummy
    character(kind = c_char) :: key_temp(len(key_dummy) + 1)
    integer :: key_i
    interface
      function lib_cdiGribIterator_inqDoubleValue(me_dummy, key_dummy) bind(c,&
      & name = 'cdiGribIterator_inqDoubleValue') result(c_result)
        import c_char, c_double, c_ptr
        real(c_double) :: c_result
        type(c_ptr), value :: me_dummy
        character(kind = c_char) :: key_dummy(*)
      end function lib_cdiGribIterator_inqDoubleValue
    end interface
    do key_i = 1, len(key_dummy)
      key_temp(key_i) = key_dummy(key_i:key_i)
    end do
    key_temp(len(key_dummy) + 1) = c_null_char
    f_result = lib_cdiGribIterator_inqDoubleValue(me_dummy%ptr, key_temp)
  end function cdiGribIterator_inqDoubleValue

  function cdiGribIterator_inqDoubleDefaultValue(me_dummy, key_dummy,&
  & defaultValue_dummy) result(f_result)
    real(c_double) :: f_result
    type(t_CdiGribIterator), intent(in) :: me_dummy
    character(kind = c_char, len = *), intent(in) :: key_dummy
    real(c_double), value :: defaultValue_dummy
    character(kind = c_char) :: key_temp(len(key_dummy) + 1)
    integer :: key_i
    interface
      function lib_cdiGribIterator_inqDoubleDefaultValue(me_dummy, key_dummy,&
      & defaultValue_dummy) bind(c, name =&
      & 'cdiGribIterator_inqDoubleDefaultValue') result(c_result)
        import c_char, c_double, c_ptr
        real(c_double) :: c_result
        type(c_ptr), value :: me_dummy
        character(kind = c_char) :: key_dummy(*)
        real(c_double), value :: defaultValue_dummy
      end function lib_cdiGribIterator_inqDoubleDefaultValue
    end interface
    do key_i = 1, len(key_dummy)
      key_temp(key_i) = key_dummy(key_i:key_i)
    end do
    key_temp(len(key_dummy) + 1) = c_null_char
    f_result = lib_cdiGribIterator_inqDoubleDefaultValue(me_dummy%ptr,&
    & key_temp, defaultValue_dummy)
  end function cdiGribIterator_inqDoubleDefaultValue

  function cdiGribIterator_inqStringValue(me_dummy, key_dummy) result(f_result)
    character(kind = c_char), dimension(:), pointer :: f_result
    type(t_CdiGribIterator), intent(in) :: me_dummy
    character(kind = c_char, len = *), intent(in) :: key_dummy
    character(kind = c_char) :: key_temp(len(key_dummy) + 1)
    integer :: key_i
    type(c_ptr) :: cString
    integer :: rv_shape(1)
    character(kind = c_char), dimension(:), pointer :: temp
    interface
      function lib_cdiGribIterator_inqStringValue(me_dummy, key_dummy) bind(c,&
      & name = 'cdiGribIterator_inqStringValue') result(c_result)
        import c_char, c_ptr
        type(c_ptr) :: c_result
        type(c_ptr), value :: me_dummy
        character(kind = c_char) :: key_dummy(*)
      end function lib_cdiGribIterator_inqStringValue
    end interface
    do key_i = 1, len(key_dummy)
      key_temp(key_i) = key_dummy(key_i:key_i)
    end do
    key_temp(len(key_dummy) + 1) = c_null_char
    cString = lib_cdiGribIterator_inqStringValue(me_dummy%ptr, key_temp)
    if(c_associated(cString)) then
      rv_shape(1) = int(lib_strlen(cString))
      call c_f_pointer(cString, temp, rv_shape)
      allocate(f_result(rv_shape(1)))
      f_result = temp
      call lib_free(cString)
    else
      f_result => null()
    end if
  end function cdiGribIterator_inqStringValue

  subroutine vlistDefVarName(vlistID_dummy, varID_dummy, name_dummy)
    integer(c_int), value :: vlistID_dummy
    integer(c_int), value :: varID_dummy
    character(kind = c_char, len = *), intent(in) :: name_dummy
    character(kind = c_char) :: name_temp(len(name_dummy) + 1)
    integer :: name_i
    interface
      subroutine lib_vlistDefVarName(vlistID_dummy, varID_dummy, name_dummy)&
      & bind(c, name = 'vlistDefVarName')
        import c_char, c_int
        integer(c_int), value :: vlistID_dummy
        integer(c_int), value :: varID_dummy
        character(kind = c_char) :: name_dummy(*)
      end subroutine lib_vlistDefVarName
    end interface
    do name_i = 1, len(name_dummy)
      name_temp(name_i) = name_dummy(name_i:name_i)
    end do
    name_temp(len(name_dummy) + 1) = c_null_char
    call lib_vlistDefVarName(vlistID_dummy, varID_dummy, name_temp)
  end subroutine vlistDefVarName

  subroutine vlistInqVarName(vlistID_dummy, varID_dummy, name_dummy)
    integer(c_int), value :: vlistID_dummy
    integer(c_int), value :: varID_dummy
    character(kind = c_char, len = *), intent(inout) :: name_dummy
    character(kind = c_char) :: name_temp(len(name_dummy) + 1)
    integer :: name_i
    interface
      subroutine lib_vlistInqVarName(vlistID_dummy, varID_dummy, name_dummy)&
      & bind(c, name = 'vlistInqVarName')
        import c_char, c_int
        integer(c_int), value :: vlistID_dummy
        integer(c_int), value :: varID_dummy
        character(kind = c_char) :: name_dummy(*)
      end subroutine lib_vlistInqVarName
    end interface
    name_temp(len(name_dummy) + 1) = c_null_char
    do name_i = len(name_dummy), 1, -1
      if(name_dummy(name_i:name_i) /= ' ') exit
      name_temp(name_i) = c_null_char
    end do
    do name_i = name_i, 1, -1
        name_temp(name_i) = name_dummy(name_i:name_i)
    end do
    call lib_vlistInqVarName(vlistID_dummy, varID_dummy, name_temp)
    do name_i = 1, len(name_dummy)
      if(name_temp(name_i) == c_null_char) exit
      name_dummy(name_i:name_i) = name_temp(name_i)
    end do
    do name_i = name_i, len(name_dummy)
      name_dummy(name_i:name_i) = ' '
    end do
  end subroutine vlistInqVarName

  function vlistCopyVarName(vlistId_dummy, varId_dummy) result(f_result)
    character(kind = c_char), dimension(:), pointer :: f_result
    integer(c_int), value :: vlistId_dummy
    integer(c_int), value :: varId_dummy
    type(c_ptr) :: cString
    integer :: rv_shape(1)
    character(kind = c_char), dimension(:), pointer :: temp
    interface
      function lib_vlistCopyVarName(vlistId_dummy, varId_dummy) bind(c, name =&
      & 'vlistCopyVarName') result(c_result)
        import c_int, c_ptr
        type(c_ptr) :: c_result
        integer(c_int), value :: vlistId_dummy
        integer(c_int), value :: varId_dummy
      end function lib_vlistCopyVarName
    end interface
    cString = lib_vlistCopyVarName(vlistId_dummy, varId_dummy)
    if(c_associated(cString)) then
      rv_shape(1) = int(lib_strlen(cString))
      call c_f_pointer(cString, temp, rv_shape)
      allocate(f_result(rv_shape(1)))
      f_result = temp
      call lib_free(cString)
    else
      f_result => null()
    end if
  end function vlistCopyVarName

  subroutine vlistDefVarStdname(vlistID_dummy, varID_dummy, stdname_dummy)
    integer(c_int), value :: vlistID_dummy
    integer(c_int), value :: varID_dummy
    character(kind = c_char, len = *), intent(in) :: stdname_dummy
    character(kind = c_char) :: stdname_temp(len(stdname_dummy) + 1)
    integer :: stdname_i
    interface
      subroutine lib_vlistDefVarStdname(vlistID_dummy, varID_dummy,&
      & stdname_dummy) bind(c, name = 'vlistDefVarStdname')
        import c_char, c_int
        integer(c_int), value :: vlistID_dummy
        integer(c_int), value :: varID_dummy
        character(kind = c_char) :: stdname_dummy(*)
      end subroutine lib_vlistDefVarStdname
    end interface
    do stdname_i = 1, len(stdname_dummy)
      stdname_temp(stdname_i) = stdname_dummy(stdname_i:stdname_i)
    end do
    stdname_temp(len(stdname_dummy) + 1) = c_null_char
    call lib_vlistDefVarStdname(vlistID_dummy, varID_dummy, stdname_temp)
  end subroutine vlistDefVarStdname

  subroutine vlistInqVarStdname(vlistID_dummy, varID_dummy, stdname_dummy)
    integer(c_int), value :: vlistID_dummy
    integer(c_int), value :: varID_dummy
    character(kind = c_char, len = *), intent(inout) :: stdname_dummy
    character(kind = c_char) :: stdname_temp(len(stdname_dummy) + 1)
    integer :: stdname_i
    interface
      subroutine lib_vlistInqVarStdname(vlistID_dummy, varID_dummy,&
      & stdname_dummy) bind(c, name = 'vlistInqVarStdname')
        import c_char, c_int
        integer(c_int), value :: vlistID_dummy
        integer(c_int), value :: varID_dummy
        character(kind = c_char) :: stdname_dummy(*)
      end subroutine lib_vlistInqVarStdname
    end interface
    stdname_temp(len(stdname_dummy) + 1) = c_null_char
    do stdname_i = len(stdname_dummy), 1, -1
      if(stdname_dummy(stdname_i:stdname_i) /= ' ') exit
      stdname_temp(stdname_i) = c_null_char
    end do
    do stdname_i = stdname_i, 1, -1
        stdname_temp(stdname_i) = stdname_dummy(stdname_i:stdname_i)
    end do
    call lib_vlistInqVarStdname(vlistID_dummy, varID_dummy, stdname_temp)
    do stdname_i = 1, len(stdname_dummy)
      if(stdname_temp(stdname_i) == c_null_char) exit
      stdname_dummy(stdname_i:stdname_i) = stdname_temp(stdname_i)
    end do
    do stdname_i = stdname_i, len(stdname_dummy)
      stdname_dummy(stdname_i:stdname_i) = ' '
    end do
  end subroutine vlistInqVarStdname

  subroutine vlistDefVarLongname(vlistID_dummy, varID_dummy, longname_dummy)
    integer(c_int), value :: vlistID_dummy
    integer(c_int), value :: varID_dummy
    character(kind = c_char, len = *), intent(in) :: longname_dummy
    character(kind = c_char) :: longname_temp(len(longname_dummy) + 1)
    integer :: longname_i
    interface
      subroutine lib_vlistDefVarLongname(vlistID_dummy, varID_dummy,&
      & longname_dummy) bind(c, name = 'vlistDefVarLongname')
        import c_char, c_int
        integer(c_int), value :: vlistID_dummy
        integer(c_int), value :: varID_dummy
        character(kind = c_char) :: longname_dummy(*)
      end subroutine lib_vlistDefVarLongname
    end interface
    do longname_i = 1, len(longname_dummy)
      longname_temp(longname_i) = longname_dummy(longname_i:longname_i)
    end do
    longname_temp(len(longname_dummy) + 1) = c_null_char
    call lib_vlistDefVarLongname(vlistID_dummy, varID_dummy, longname_temp)
  end subroutine vlistDefVarLongname

  subroutine vlistInqVarLongname(vlistID_dummy, varID_dummy, longname_dummy)
    integer(c_int), value :: vlistID_dummy
    integer(c_int), value :: varID_dummy
    character(kind = c_char, len = *), intent(inout) :: longname_dummy
    character(kind = c_char) :: longname_temp(len(longname_dummy) + 1)
    integer :: longname_i
    interface
      subroutine lib_vlistInqVarLongname(vlistID_dummy, varID_dummy,&
      & longname_dummy) bind(c, name = 'vlistInqVarLongname')
        import c_char, c_int
        integer(c_int), value :: vlistID_dummy
        integer(c_int), value :: varID_dummy
        character(kind = c_char) :: longname_dummy(*)
      end subroutine lib_vlistInqVarLongname
    end interface
    longname_temp(len(longname_dummy) + 1) = c_null_char
    do longname_i = len(longname_dummy), 1, -1
      if(longname_dummy(longname_i:longname_i) /= ' ') exit
      longname_temp(longname_i) = c_null_char
    end do
    do longname_i = longname_i, 1, -1
        longname_temp(longname_i) = longname_dummy(longname_i:longname_i)
    end do
    call lib_vlistInqVarLongname(vlistID_dummy, varID_dummy, longname_temp)
    do longname_i = 1, len(longname_dummy)
      if(longname_temp(longname_i) == c_null_char) exit
      longname_dummy(longname_i:longname_i) = longname_temp(longname_i)
    end do
    do longname_i = longname_i, len(longname_dummy)
      longname_dummy(longname_i:longname_i) = ' '
    end do
  end subroutine vlistInqVarLongname

  subroutine vlistDefVarUnits(vlistID_dummy, varID_dummy, units_dummy)
    integer(c_int), value :: vlistID_dummy
    integer(c_int), value :: varID_dummy
    character(kind = c_char, len = *), intent(in) :: units_dummy
    character(kind = c_char) :: units_temp(len(units_dummy) + 1)
    integer :: units_i
    interface
      subroutine lib_vlistDefVarUnits(vlistID_dummy, varID_dummy, units_dummy)&
      & bind(c, name = 'vlistDefVarUnits')
        import c_char, c_int
        integer(c_int), value :: vlistID_dummy
        integer(c_int), value :: varID_dummy
        character(kind = c_char) :: units_dummy(*)
      end subroutine lib_vlistDefVarUnits
    end interface
    do units_i = 1, len(units_dummy)
      units_temp(units_i) = units_dummy(units_i:units_i)
    end do
    units_temp(len(units_dummy) + 1) = c_null_char
    call lib_vlistDefVarUnits(vlistID_dummy, varID_dummy, units_temp)
  end subroutine vlistDefVarUnits

  subroutine vlistInqVarUnits(vlistID_dummy, varID_dummy, units_dummy)
    integer(c_int), value :: vlistID_dummy
    integer(c_int), value :: varID_dummy
    character(kind = c_char, len = *), intent(inout) :: units_dummy
    character(kind = c_char) :: units_temp(len(units_dummy) + 1)
    integer :: units_i
    interface
      subroutine lib_vlistInqVarUnits(vlistID_dummy, varID_dummy, units_dummy)&
      & bind(c, name = 'vlistInqVarUnits')
        import c_char, c_int
        integer(c_int), value :: vlistID_dummy
        integer(c_int), value :: varID_dummy
        character(kind = c_char) :: units_dummy(*)
      end subroutine lib_vlistInqVarUnits
    end interface
    units_temp(len(units_dummy) + 1) = c_null_char
    do units_i = len(units_dummy), 1, -1
      if(units_dummy(units_i:units_i) /= ' ') exit
      units_temp(units_i) = c_null_char
    end do
    do units_i = units_i, 1, -1
        units_temp(units_i) = units_dummy(units_i:units_i)
    end do
    call lib_vlistInqVarUnits(vlistID_dummy, varID_dummy, units_temp)
    do units_i = 1, len(units_dummy)
      if(units_temp(units_i) == c_null_char) exit
      units_dummy(units_i:units_i) = units_temp(units_i)
    end do
    do units_i = units_i, len(units_dummy)
      units_dummy(units_i:units_i) = ' '
    end do
  end subroutine vlistInqVarUnits

  subroutine vlistDefVarExtra(vlistID_dummy, varID_dummy, extra_dummy)
    integer(c_int), value :: vlistID_dummy
    integer(c_int), value :: varID_dummy
    character(kind = c_char, len = *), intent(in) :: extra_dummy
    character(kind = c_char) :: extra_temp(len(extra_dummy) + 1)
    integer :: extra_i
    interface
      subroutine lib_vlistDefVarExtra(vlistID_dummy, varID_dummy, extra_dummy)&
      & bind(c, name = 'vlistDefVarExtra')
        import c_char, c_int
        integer(c_int), value :: vlistID_dummy
        integer(c_int), value :: varID_dummy
        character(kind = c_char) :: extra_dummy(*)
      end subroutine lib_vlistDefVarExtra
    end interface
    do extra_i = 1, len(extra_dummy)
      extra_temp(extra_i) = extra_dummy(extra_i:extra_i)
    end do
    extra_temp(len(extra_dummy) + 1) = c_null_char
    call lib_vlistDefVarExtra(vlistID_dummy, varID_dummy, extra_temp)
  end subroutine vlistDefVarExtra

  subroutine vlistInqVarExtra(vlistID_dummy, varID_dummy, extra_dummy)
    integer(c_int), value :: vlistID_dummy
    integer(c_int), value :: varID_dummy
    character(kind = c_char, len = *), intent(inout) :: extra_dummy
    character(kind = c_char) :: extra_temp(len(extra_dummy) + 1)
    integer :: extra_i
    interface
      subroutine lib_vlistInqVarExtra(vlistID_dummy, varID_dummy, extra_dummy)&
      & bind(c, name = 'vlistInqVarExtra')
        import c_char, c_int
        integer(c_int), value :: vlistID_dummy
        integer(c_int), value :: varID_dummy
        character(kind = c_char) :: extra_dummy(*)
      end subroutine lib_vlistInqVarExtra
    end interface
    extra_temp(len(extra_dummy) + 1) = c_null_char
    do extra_i = len(extra_dummy), 1, -1
      if(extra_dummy(extra_i:extra_i) /= ' ') exit
      extra_temp(extra_i) = c_null_char
    end do
    do extra_i = extra_i, 1, -1
        extra_temp(extra_i) = extra_dummy(extra_i:extra_i)
    end do
    call lib_vlistInqVarExtra(vlistID_dummy, varID_dummy, extra_temp)
    do extra_i = 1, len(extra_dummy)
      if(extra_temp(extra_i) == c_null_char) exit
      extra_dummy(extra_i:extra_i) = extra_temp(extra_i)
    end do
    do extra_i = extra_i, len(extra_dummy)
      extra_dummy(extra_i:extra_i) = ' '
    end do
  end subroutine vlistInqVarExtra

  subroutine cdiDefAdditionalKey(string_dummy)
    character(kind = c_char, len = *), intent(in) :: string_dummy
    character(kind = c_char) :: string_temp(len(string_dummy) + 1)
    integer :: string_i
    interface
      subroutine lib_cdiDefAdditionalKey(string_dummy) bind(c, name =&
      & 'cdiDefAdditionalKey')
        import c_char
        character(kind = c_char) :: string_dummy(*)
      end subroutine lib_cdiDefAdditionalKey
    end interface
    do string_i = 1, len(string_dummy)
      string_temp(string_i) = string_dummy(string_i:string_i)
    end do
    string_temp(len(string_dummy) + 1) = c_null_char
    call lib_cdiDefAdditionalKey(string_temp)
  end subroutine cdiDefAdditionalKey

  subroutine vlistDefVarIntKey(vlistID_dummy, varID_dummy, name_dummy,&
  & value_dummy)
    integer(c_int), value :: vlistID_dummy
    integer(c_int), value :: varID_dummy
    character(kind = c_char, len = *), intent(in) :: name_dummy
    integer(c_int), value :: value_dummy
    character(kind = c_char) :: name_temp(len(name_dummy) + 1)
    integer :: name_i
    interface
      subroutine lib_vlistDefVarIntKey(vlistID_dummy, varID_dummy, name_dummy,&
      & value_dummy) bind(c, name = 'vlistDefVarIntKey')
        import c_char, c_int
        integer(c_int), value :: vlistID_dummy
        integer(c_int), value :: varID_dummy
        character(kind = c_char) :: name_dummy(*)
        integer(c_int), value :: value_dummy
      end subroutine lib_vlistDefVarIntKey
    end interface
    do name_i = 1, len(name_dummy)
      name_temp(name_i) = name_dummy(name_i:name_i)
    end do
    name_temp(len(name_dummy) + 1) = c_null_char
    call lib_vlistDefVarIntKey(vlistID_dummy, varID_dummy, name_temp,&
    & value_dummy)
  end subroutine vlistDefVarIntKey

  subroutine vlistDefVarDblKey(vlistID_dummy, varID_dummy, name_dummy,&
  & value_dummy)
    integer(c_int), value :: vlistID_dummy
    integer(c_int), value :: varID_dummy
    character(kind = c_char, len = *), intent(in) :: name_dummy
    real(c_double), value :: value_dummy
    character(kind = c_char) :: name_temp(len(name_dummy) + 1)
    integer :: name_i
    interface
      subroutine lib_vlistDefVarDblKey(vlistID_dummy, varID_dummy, name_dummy,&
      & value_dummy) bind(c, name = 'vlistDefVarDblKey')
        import c_char, c_double, c_int
        integer(c_int), value :: vlistID_dummy
        integer(c_int), value :: varID_dummy
        character(kind = c_char) :: name_dummy(*)
        real(c_double), value :: value_dummy
      end subroutine lib_vlistDefVarDblKey
    end interface
    do name_i = 1, len(name_dummy)
      name_temp(name_i) = name_dummy(name_i:name_i)
    end do
    name_temp(len(name_dummy) + 1) = c_null_char
    call lib_vlistDefVarDblKey(vlistID_dummy, varID_dummy, name_temp,&
    & value_dummy)
  end subroutine vlistDefVarDblKey

  function vlistHasVarKey(vlistID_dummy, varID_dummy, name_dummy)&
  & result(f_result)
    integer(c_int) :: f_result
    integer(c_int), value :: vlistID_dummy
    integer(c_int), value :: varID_dummy
    character(kind = c_char, len = *), intent(in) :: name_dummy
    character(kind = c_char) :: name_temp(len(name_dummy) + 1)
    integer :: name_i
    interface
      function lib_vlistHasVarKey(vlistID_dummy, varID_dummy, name_dummy)&
      & bind(c, name = 'vlistHasVarKey') result(c_result)
        import c_char, c_int
        integer(c_int) :: c_result
        integer(c_int), value :: vlistID_dummy
        integer(c_int), value :: varID_dummy
        character(kind = c_char) :: name_dummy(*)
      end function lib_vlistHasVarKey
    end interface
    do name_i = 1, len(name_dummy)
      name_temp(name_i) = name_dummy(name_i:name_i)
    end do
    name_temp(len(name_dummy) + 1) = c_null_char
    f_result = lib_vlistHasVarKey(vlistID_dummy, varID_dummy, name_temp)
  end function vlistHasVarKey

  function vlistInqVarDblKey(vlistID_dummy, varID_dummy, name_dummy)&
  & result(f_result)
    real(c_double) :: f_result
    integer(c_int), value :: vlistID_dummy
    integer(c_int), value :: varID_dummy
    character(kind = c_char, len = *), intent(in) :: name_dummy
    character(kind = c_char) :: name_temp(len(name_dummy) + 1)
    integer :: name_i
    interface
      function lib_vlistInqVarDblKey(vlistID_dummy, varID_dummy, name_dummy)&
      & bind(c, name = 'vlistInqVarDblKey') result(c_result)
        import c_char, c_double, c_int
        real(c_double) :: c_result
        integer(c_int), value :: vlistID_dummy
        integer(c_int), value :: varID_dummy
        character(kind = c_char) :: name_dummy(*)
      end function lib_vlistInqVarDblKey
    end interface
    do name_i = 1, len(name_dummy)
      name_temp(name_i) = name_dummy(name_i:name_i)
    end do
    name_temp(len(name_dummy) + 1) = c_null_char
    f_result = lib_vlistInqVarDblKey(vlistID_dummy, varID_dummy, name_temp)
  end function vlistInqVarDblKey

  function vlistInqVarIntKey(vlistID_dummy, varID_dummy, name_dummy)&
  & result(f_result)
    integer(c_int) :: f_result
    integer(c_int), value :: vlistID_dummy
    integer(c_int), value :: varID_dummy
    character(kind = c_char, len = *), intent(in) :: name_dummy
    character(kind = c_char) :: name_temp(len(name_dummy) + 1)
    integer :: name_i
    interface
      function lib_vlistInqVarIntKey(vlistID_dummy, varID_dummy, name_dummy)&
      & bind(c, name = 'vlistInqVarIntKey') result(c_result)
        import c_char, c_int
        integer(c_int) :: c_result
        integer(c_int), value :: vlistID_dummy
        integer(c_int), value :: varID_dummy
        character(kind = c_char) :: name_dummy(*)
      end function lib_vlistInqVarIntKey
    end interface
    do name_i = 1, len(name_dummy)
      name_temp(name_i) = name_dummy(name_i:name_i)
    end do
    name_temp(len(name_dummy) + 1) = c_null_char
    f_result = lib_vlistInqVarIntKey(vlistID_dummy, varID_dummy, name_temp)
  end function vlistInqVarIntKey

  function cdiInqAtt(cdiID_dummy, varID_dummy, attrnum_dummy, name_dummy,&
  & typep_dummy, lenp_dummy) result(f_result)
    integer(c_int) :: f_result
    integer(c_int), value :: cdiID_dummy
    integer(c_int), value :: varID_dummy
    integer(c_int), value :: attrnum_dummy
    character(kind = c_char, len = *), intent(inout) :: name_dummy
    integer(c_int), intent(inout) :: typep_dummy
    integer(c_int), intent(inout) :: lenp_dummy
    character(kind = c_char) :: name_temp(len(name_dummy) + 1)
    integer :: name_i
    interface
      function lib_cdiInqAtt(cdiID_dummy, varID_dummy, attrnum_dummy,&
      & name_dummy, typep_dummy, lenp_dummy) bind(c, name = 'cdiInqAtt')&
      & result(c_result)
        import c_char, c_int
        integer(c_int) :: c_result
        integer(c_int), value :: cdiID_dummy
        integer(c_int), value :: varID_dummy
        integer(c_int), value :: attrnum_dummy
        character(kind = c_char) :: name_dummy(*)
        integer(c_int), intent(inout) :: typep_dummy
        integer(c_int), intent(inout) :: lenp_dummy
      end function lib_cdiInqAtt
    end interface
    name_temp(len(name_dummy) + 1) = c_null_char
    do name_i = len(name_dummy), 1, -1
      if(name_dummy(name_i:name_i) /= ' ') exit
      name_temp(name_i) = c_null_char
    end do
    do name_i = name_i, 1, -1
        name_temp(name_i) = name_dummy(name_i:name_i)
    end do
    f_result = lib_cdiInqAtt(cdiID_dummy, varID_dummy, attrnum_dummy,&
    & name_temp, typep_dummy, lenp_dummy)
    do name_i = 1, len(name_dummy)
      if(name_temp(name_i) == c_null_char) exit
      name_dummy(name_i:name_i) = name_temp(name_i)
    end do
    do name_i = name_i, len(name_dummy)
      name_dummy(name_i:name_i) = ' '
    end do
  end function cdiInqAtt

  function cdiDelAtt(cdiID_dummy, varID_dummy, name_dummy) result(f_result)
    integer(c_int) :: f_result
    integer(c_int), value :: cdiID_dummy
    integer(c_int), value :: varID_dummy
    character(kind = c_char, len = *), intent(in) :: name_dummy
    character(kind = c_char) :: name_temp(len(name_dummy) + 1)
    integer :: name_i
    interface
      function lib_cdiDelAtt(cdiID_dummy, varID_dummy, name_dummy) bind(c, name&
      & = 'cdiDelAtt') result(c_result)
        import c_char, c_int
        integer(c_int) :: c_result
        integer(c_int), value :: cdiID_dummy
        integer(c_int), value :: varID_dummy
        character(kind = c_char) :: name_dummy(*)
      end function lib_cdiDelAtt
    end interface
    do name_i = 1, len(name_dummy)
      name_temp(name_i) = name_dummy(name_i:name_i)
    end do
    name_temp(len(name_dummy) + 1) = c_null_char
    f_result = lib_cdiDelAtt(cdiID_dummy, varID_dummy, name_temp)
  end function cdiDelAtt

  function cdiDefAttInt(cdiID_dummy, varID_dummy, name_dummy, type_dummy,&
  & len_dummy, ip_dummy) result(f_result)
    integer(c_int) :: f_result
    integer(c_int), value :: cdiID_dummy
    integer(c_int), value :: varID_dummy
    character(kind = c_char, len = *), intent(in) :: name_dummy
    integer(c_int), value :: type_dummy
    integer(c_int), value :: len_dummy
    integer(c_int), intent(in) :: ip_dummy(*)
    character(kind = c_char) :: name_temp(len(name_dummy) + 1)
    integer :: name_i
    interface
      function lib_cdiDefAttInt(cdiID_dummy, varID_dummy, name_dummy,&
      & type_dummy, len_dummy, ip_dummy) bind(c, name = 'cdiDefAttInt')&
      & result(c_result)
        import c_char, c_int
        integer(c_int) :: c_result
        integer(c_int), value :: cdiID_dummy
        integer(c_int), value :: varID_dummy
        character(kind = c_char) :: name_dummy(*)
        integer(c_int), value :: type_dummy
        integer(c_int), value :: len_dummy
        integer(c_int), intent(in) :: ip_dummy(*)
      end function lib_cdiDefAttInt
    end interface
    do name_i = 1, len(name_dummy)
      name_temp(name_i) = name_dummy(name_i:name_i)
    end do
    name_temp(len(name_dummy) + 1) = c_null_char
    f_result = lib_cdiDefAttInt(cdiID_dummy, varID_dummy, name_temp,&
    & type_dummy, len_dummy, ip_dummy)
  end function cdiDefAttInt

  function cdiDefAttFlt(cdiID_dummy, varID_dummy, name_dummy, type_dummy,&
  & len_dummy, dp_dummy) result(f_result)
    integer(c_int) :: f_result
    integer(c_int), value :: cdiID_dummy
    integer(c_int), value :: varID_dummy
    character(kind = c_char, len = *), intent(in) :: name_dummy
    integer(c_int), value :: type_dummy
    integer(c_int), value :: len_dummy
    real(c_double), intent(in) :: dp_dummy(*)
    character(kind = c_char) :: name_temp(len(name_dummy) + 1)
    integer :: name_i
    interface
      function lib_cdiDefAttFlt(cdiID_dummy, varID_dummy, name_dummy,&
      & type_dummy, len_dummy, dp_dummy) bind(c, name = 'cdiDefAttFlt')&
      & result(c_result)
        import c_char, c_double, c_int
        integer(c_int) :: c_result
        integer(c_int), value :: cdiID_dummy
        integer(c_int), value :: varID_dummy
        character(kind = c_char) :: name_dummy(*)
        integer(c_int), value :: type_dummy
        integer(c_int), value :: len_dummy
        real(c_double), intent(in) :: dp_dummy(*)
      end function lib_cdiDefAttFlt
    end interface
    do name_i = 1, len(name_dummy)
      name_temp(name_i) = name_dummy(name_i:name_i)
    end do
    name_temp(len(name_dummy) + 1) = c_null_char
    f_result = lib_cdiDefAttFlt(cdiID_dummy, varID_dummy, name_temp,&
    & type_dummy, len_dummy, dp_dummy)
  end function cdiDefAttFlt

  function cdiDefAttTxt(cdiID_dummy, varID_dummy, name_dummy, len_dummy,&
  & tp_cbuf_dummy) result(f_result)
    integer(c_int) :: f_result
    integer(c_int), value :: cdiID_dummy
    integer(c_int), value :: varID_dummy
    character(kind = c_char, len = *), intent(in) :: name_dummy
    integer(c_int), value :: len_dummy
    character(kind = c_char, len = *), intent(in) :: tp_cbuf_dummy
    character(kind = c_char) :: name_temp(len(name_dummy) + 1)
    integer :: name_i
    character(kind = c_char) :: tp_cbuf_temp(len(tp_cbuf_dummy) + 1)
    integer :: tp_cbuf_i
    interface
      function lib_cdiDefAttTxt(cdiID_dummy, varID_dummy, name_dummy,&
      & len_dummy, tp_cbuf_dummy) bind(c, name = 'cdiDefAttTxt')&
      & result(c_result)
        import c_char, c_int
        integer(c_int) :: c_result
        integer(c_int), value :: cdiID_dummy
        integer(c_int), value :: varID_dummy
        character(kind = c_char) :: name_dummy(*)
        integer(c_int), value :: len_dummy
        character(kind = c_char) :: tp_cbuf_dummy(*)
      end function lib_cdiDefAttTxt
    end interface
    do name_i = 1, len(name_dummy)
      name_temp(name_i) = name_dummy(name_i:name_i)
    end do
    name_temp(len(name_dummy) + 1) = c_null_char
    do tp_cbuf_i = 1, len(tp_cbuf_dummy)
      tp_cbuf_temp(tp_cbuf_i) = tp_cbuf_dummy(tp_cbuf_i:tp_cbuf_i)
    end do
    tp_cbuf_temp(len(tp_cbuf_dummy) + 1) = c_null_char
    f_result = lib_cdiDefAttTxt(cdiID_dummy, varID_dummy, name_temp, len_dummy,&
    & tp_cbuf_temp)
  end function cdiDefAttTxt

  function cdiInqAttInt(cdiID_dummy, varID_dummy, name_dummy, mlen_dummy,&
  & ip_dummy) result(f_result)
    integer(c_int) :: f_result
    integer(c_int), value :: cdiID_dummy
    integer(c_int), value :: varID_dummy
    character(kind = c_char, len = *), intent(in) :: name_dummy
    integer(c_int), value :: mlen_dummy
    integer(c_int), intent(inout) :: ip_dummy(*)
    character(kind = c_char) :: name_temp(len(name_dummy) + 1)
    integer :: name_i
    interface
      function lib_cdiInqAttInt(cdiID_dummy, varID_dummy, name_dummy,&
      & mlen_dummy, ip_dummy) bind(c, name = 'cdiInqAttInt') result(c_result)
        import c_char, c_int
        integer(c_int) :: c_result
        integer(c_int), value :: cdiID_dummy
        integer(c_int), value :: varID_dummy
        character(kind = c_char) :: name_dummy(*)
        integer(c_int), value :: mlen_dummy
        integer(c_int), intent(inout) :: ip_dummy(*)
      end function lib_cdiInqAttInt
    end interface
    do name_i = 1, len(name_dummy)
      name_temp(name_i) = name_dummy(name_i:name_i)
    end do
    name_temp(len(name_dummy) + 1) = c_null_char
    f_result = lib_cdiInqAttInt(cdiID_dummy, varID_dummy, name_temp,&
    & mlen_dummy, ip_dummy)
  end function cdiInqAttInt

  function cdiInqAttFlt(cdiID_dummy, varID_dummy, name_dummy, mlen_dummy,&
  & dp_dummy) result(f_result)
    integer(c_int) :: f_result
    integer(c_int), value :: cdiID_dummy
    integer(c_int), value :: varID_dummy
    character(kind = c_char, len = *), intent(in) :: name_dummy
    integer(c_int), value :: mlen_dummy
    real(c_double), intent(inout) :: dp_dummy(*)
    character(kind = c_char) :: name_temp(len(name_dummy) + 1)
    integer :: name_i
    interface
      function lib_cdiInqAttFlt(cdiID_dummy, varID_dummy, name_dummy,&
      & mlen_dummy, dp_dummy) bind(c, name = 'cdiInqAttFlt') result(c_result)
        import c_char, c_double, c_int
        integer(c_int) :: c_result
        integer(c_int), value :: cdiID_dummy
        integer(c_int), value :: varID_dummy
        character(kind = c_char) :: name_dummy(*)
        integer(c_int), value :: mlen_dummy
        real(c_double), intent(inout) :: dp_dummy(*)
      end function lib_cdiInqAttFlt
    end interface
    do name_i = 1, len(name_dummy)
      name_temp(name_i) = name_dummy(name_i:name_i)
    end do
    name_temp(len(name_dummy) + 1) = c_null_char
    f_result = lib_cdiInqAttFlt(cdiID_dummy, varID_dummy, name_temp,&
    & mlen_dummy, dp_dummy)
  end function cdiInqAttFlt

  function cdiInqAttTxt(cdiID_dummy, varID_dummy, name_dummy, mlen_dummy,&
  & tp_cbuf_dummy) result(f_result)
    integer(c_int) :: f_result
    integer(c_int), value :: cdiID_dummy
    integer(c_int), value :: varID_dummy
    character(kind = c_char, len = *), intent(in) :: name_dummy
    integer(c_int), value :: mlen_dummy
    character(kind = c_char, len = *), intent(inout) :: tp_cbuf_dummy
    character(kind = c_char) :: name_temp(len(name_dummy) + 1)
    integer :: name_i
    character(kind = c_char) :: tp_cbuf_temp(len(tp_cbuf_dummy) + 1)
    integer :: tp_cbuf_i
    interface
      function lib_cdiInqAttTxt(cdiID_dummy, varID_dummy, name_dummy,&
      & mlen_dummy, tp_cbuf_dummy) bind(c, name = 'cdiInqAttTxt')&
      & result(c_result)
        import c_char, c_int
        integer(c_int) :: c_result
        integer(c_int), value :: cdiID_dummy
        integer(c_int), value :: varID_dummy
        character(kind = c_char) :: name_dummy(*)
        integer(c_int), value :: mlen_dummy
        character(kind = c_char) :: tp_cbuf_dummy(*)
      end function lib_cdiInqAttTxt
    end interface
    do name_i = 1, len(name_dummy)
      name_temp(name_i) = name_dummy(name_i:name_i)
    end do
    name_temp(len(name_dummy) + 1) = c_null_char
    tp_cbuf_temp(len(tp_cbuf_dummy) + 1) = c_null_char
    do tp_cbuf_i = len(tp_cbuf_dummy), 1, -1
      if(tp_cbuf_dummy(tp_cbuf_i:tp_cbuf_i) /= ' ') exit
      tp_cbuf_temp(tp_cbuf_i) = c_null_char
    end do
    do tp_cbuf_i = tp_cbuf_i, 1, -1
        tp_cbuf_temp(tp_cbuf_i) = tp_cbuf_dummy(tp_cbuf_i:tp_cbuf_i)
    end do
    f_result = lib_cdiInqAttTxt(cdiID_dummy, varID_dummy, name_temp,&
    & mlen_dummy, tp_cbuf_temp)
    do tp_cbuf_i = 1, len(tp_cbuf_dummy)
      if(tp_cbuf_temp(tp_cbuf_i) == c_null_char) exit
      tp_cbuf_dummy(tp_cbuf_i:tp_cbuf_i) = tp_cbuf_temp(tp_cbuf_i)
    end do
    do tp_cbuf_i = tp_cbuf_i, len(tp_cbuf_dummy)
      tp_cbuf_dummy(tp_cbuf_i:tp_cbuf_i) = ' '
    end do
  end function cdiInqAttTxt

  subroutine gridName(gridtype_dummy, gridname_dummy)
    integer(c_int), value :: gridtype_dummy
    character(kind = c_char, len = *), intent(inout) :: gridname_dummy
    character(kind = c_char) :: gridname_temp(len(gridname_dummy) + 1)
    integer :: gridname_i
    interface
      subroutine lib_gridName(gridtype_dummy, gridname_dummy) bind(c, name =&
      & 'gridName')
        import c_char, c_int
        integer(c_int), value :: gridtype_dummy
        character(kind = c_char) :: gridname_dummy(*)
      end subroutine lib_gridName
    end interface
    gridname_temp(len(gridname_dummy) + 1) = c_null_char
    do gridname_i = len(gridname_dummy), 1, -1
      if(gridname_dummy(gridname_i:gridname_i) /= ' ') exit
      gridname_temp(gridname_i) = c_null_char
    end do
    do gridname_i = gridname_i, 1, -1
        gridname_temp(gridname_i) = gridname_dummy(gridname_i:gridname_i)
    end do
    call lib_gridName(gridtype_dummy, gridname_temp)
    do gridname_i = 1, len(gridname_dummy)
      if(gridname_temp(gridname_i) == c_null_char) exit
      gridname_dummy(gridname_i:gridname_i) = gridname_temp(gridname_i)
    end do
    do gridname_i = gridname_i, len(gridname_dummy)
      gridname_dummy(gridname_i:gridname_i) = ' '
    end do
  end subroutine gridName

  function gridNamePtr(gridtype_dummy) result(f_result)
    character(kind = c_char), dimension(:), pointer :: f_result
    integer(c_int), value :: gridtype_dummy
    type(c_ptr) :: ptr
    integer :: rv_shape(1)
    interface
      function lib_gridNamePtr(gridtype_dummy) bind(c, name = 'gridNamePtr')&
      & result(c_result)
        import c_int, c_ptr
        type(c_ptr) :: c_result
        integer(c_int), value :: gridtype_dummy
      end function lib_gridNamePtr
    end interface
    f_result => null()
    ptr = lib_gridNamePtr(gridtype_dummy)
    if(c_associated(ptr)) then
      rv_shape(1) = int(lib_strlen(ptr))
      call c_f_pointer(ptr, f_result, rv_shape)
    end if
  end function gridNamePtr

  function cdiDefKeyString(cdiID_dummy, varID_dummy, key_dummy, string_dummy)&
  & result(f_result)
    integer(c_int) :: f_result
    integer(c_int), value :: cdiID_dummy
    integer(c_int), value :: varID_dummy
    integer(c_int), value :: key_dummy
    character(kind = c_char, len = *), intent(in) :: string_dummy
    character(kind = c_char) :: string_temp(len(string_dummy) + 1)
    integer :: string_i
    interface
      function lib_cdiDefKeyString(cdiID_dummy, varID_dummy, key_dummy,&
      & string_dummy) bind(c, name = 'cdiDefKeyString') result(c_result)
        import c_char, c_int
        integer(c_int) :: c_result
        integer(c_int), value :: cdiID_dummy
        integer(c_int), value :: varID_dummy
        integer(c_int), value :: key_dummy
        character(kind = c_char) :: string_dummy(*)
      end function lib_cdiDefKeyString
    end interface
    do string_i = 1, len(string_dummy)
      string_temp(string_i) = string_dummy(string_i:string_i)
    end do
    string_temp(len(string_dummy) + 1) = c_null_char
    f_result = lib_cdiDefKeyString(cdiID_dummy, varID_dummy, key_dummy,&
    & string_temp)
  end function cdiDefKeyString

  function cdiInqKeyString(cdiID_dummy, varID_dummy, key_dummy, string_dummy,&
  & length_dummy) result(f_result)
    integer(c_int) :: f_result
    integer(c_int), value :: cdiID_dummy
    integer(c_int), value :: varID_dummy
    integer(c_int), value :: key_dummy
    character(kind = c_char, len = *), intent(inout) :: string_dummy
    integer(c_int), intent(inout) :: length_dummy
    character(kind = c_char) :: string_temp(len(string_dummy) + 1)
    integer :: string_i
    interface
      function lib_cdiInqKeyString(cdiID_dummy, varID_dummy, key_dummy,&
      & string_dummy, length_dummy) bind(c, name = 'cdiInqKeyString')&
      & result(c_result)
        import c_char, c_int
        integer(c_int) :: c_result
        integer(c_int), value :: cdiID_dummy
        integer(c_int), value :: varID_dummy
        integer(c_int), value :: key_dummy
        character(kind = c_char) :: string_dummy(*)
        integer(c_int), intent(inout) :: length_dummy
      end function lib_cdiInqKeyString
    end interface
    string_temp(len(string_dummy) + 1) = c_null_char
    do string_i = len(string_dummy), 1, -1
      if(string_dummy(string_i:string_i) /= ' ') exit
      string_temp(string_i) = c_null_char
    end do
    do string_i = string_i, 1, -1
        string_temp(string_i) = string_dummy(string_i:string_i)
    end do
    f_result = lib_cdiInqKeyString(cdiID_dummy, varID_dummy, key_dummy,&
    & string_temp, length_dummy)
    do string_i = 1, len(string_dummy)
      if(string_temp(string_i) == c_null_char) exit
      string_dummy(string_i:string_i) = string_temp(string_i)
    end do
    do string_i = string_i, len(string_dummy)
      string_dummy(string_i:string_i) = ' '
    end do
  end function cdiInqKeyString

  function cdiGridDefKeyStr(gridID_dummy, key_dummy, size_dummy, mesg_dummy)&
  & result(f_result)
    integer(c_int) :: f_result
    integer(c_int), value :: gridID_dummy
    integer(c_int), value :: key_dummy
    integer(c_int), value :: size_dummy
    character(kind = c_char, len = *), intent(in) :: mesg_dummy
    character(kind = c_char) :: mesg_temp(len(mesg_dummy) + 1)
    integer :: mesg_i
    interface
      function lib_cdiGridDefKeyStr(gridID_dummy, key_dummy, size_dummy,&
      & mesg_dummy) bind(c, name = 'cdiGridDefKeyStr') result(c_result)
        import c_char, c_int
        integer(c_int) :: c_result
        integer(c_int), value :: gridID_dummy
        integer(c_int), value :: key_dummy
        integer(c_int), value :: size_dummy
        character(kind = c_char) :: mesg_dummy(*)
      end function lib_cdiGridDefKeyStr
    end interface
    do mesg_i = 1, len(mesg_dummy)
      mesg_temp(mesg_i) = mesg_dummy(mesg_i:mesg_i)
    end do
    mesg_temp(len(mesg_dummy) + 1) = c_null_char
    f_result = lib_cdiGridDefKeyStr(gridID_dummy, key_dummy, size_dummy,&
    & mesg_temp)
  end function cdiGridDefKeyStr

  function cdiGridInqKeyStr(gridID_dummy, key_dummy, size_dummy, mesg_dummy)&
  & result(f_result)
    integer(c_int) :: f_result
    integer(c_int), value :: gridID_dummy
    integer(c_int), value :: key_dummy
    integer(c_int), value :: size_dummy
    character(kind = c_char, len = *), intent(inout) :: mesg_dummy
    character(kind = c_char) :: mesg_temp(len(mesg_dummy) + 1)
    integer :: mesg_i
    interface
      function lib_cdiGridInqKeyStr(gridID_dummy, key_dummy, size_dummy,&
      & mesg_dummy) bind(c, name = 'cdiGridInqKeyStr') result(c_result)
        import c_char, c_int
        integer(c_int) :: c_result
        integer(c_int), value :: gridID_dummy
        integer(c_int), value :: key_dummy
        integer(c_int), value :: size_dummy
        character(kind = c_char) :: mesg_dummy(*)
      end function lib_cdiGridInqKeyStr
    end interface
    mesg_temp(len(mesg_dummy) + 1) = c_null_char
    do mesg_i = len(mesg_dummy), 1, -1
      if(mesg_dummy(mesg_i:mesg_i) /= ' ') exit
      mesg_temp(mesg_i) = c_null_char
    end do
    do mesg_i = mesg_i, 1, -1
        mesg_temp(mesg_i) = mesg_dummy(mesg_i:mesg_i)
    end do
    f_result = lib_cdiGridInqKeyStr(gridID_dummy, key_dummy, size_dummy,&
    & mesg_temp)
    do mesg_i = 1, len(mesg_dummy)
      if(mesg_temp(mesg_i) == c_null_char) exit
      mesg_dummy(mesg_i:mesg_i) = mesg_temp(mesg_i)
    end do
    do mesg_i = mesg_i, len(mesg_dummy)
      mesg_dummy(mesg_i:mesg_i) = ' '
    end do
  end function cdiGridInqKeyStr

  function cdiZaxisDefKeyStr(zaxisID_dummy, key_dummy, size_dummy, mesg_dummy)&
  & result(f_result)
    integer(c_int) :: f_result
    integer(c_int), value :: zaxisID_dummy
    integer(c_int), value :: key_dummy
    integer(c_int), value :: size_dummy
    character(kind = c_char, len = *), intent(in) :: mesg_dummy
    character(kind = c_char) :: mesg_temp(len(mesg_dummy) + 1)
    integer :: mesg_i
    interface
      function lib_cdiZaxisDefKeyStr(zaxisID_dummy, key_dummy, size_dummy,&
      & mesg_dummy) bind(c, name = 'cdiZaxisDefKeyStr') result(c_result)
        import c_char, c_int
        integer(c_int) :: c_result
        integer(c_int), value :: zaxisID_dummy
        integer(c_int), value :: key_dummy
        integer(c_int), value :: size_dummy
        character(kind = c_char) :: mesg_dummy(*)
      end function lib_cdiZaxisDefKeyStr
    end interface
    do mesg_i = 1, len(mesg_dummy)
      mesg_temp(mesg_i) = mesg_dummy(mesg_i:mesg_i)
    end do
    mesg_temp(len(mesg_dummy) + 1) = c_null_char
    f_result = lib_cdiZaxisDefKeyStr(zaxisID_dummy, key_dummy, size_dummy,&
    & mesg_temp)
  end function cdiZaxisDefKeyStr

  function cdiZaxisInqKeyStr(zaxisID_dummy, key_dummy, size_dummy, mesg_dummy)&
  & result(f_result)
    integer(c_int) :: f_result
    integer(c_int), value :: zaxisID_dummy
    integer(c_int), value :: key_dummy
    integer(c_int), value :: size_dummy
    character(kind = c_char, len = *), intent(inout) :: mesg_dummy
    character(kind = c_char) :: mesg_temp(len(mesg_dummy) + 1)
    integer :: mesg_i
    interface
      function lib_cdiZaxisInqKeyStr(zaxisID_dummy, key_dummy, size_dummy,&
      & mesg_dummy) bind(c, name = 'cdiZaxisInqKeyStr') result(c_result)
        import c_char, c_int
        integer(c_int) :: c_result
        integer(c_int), value :: zaxisID_dummy
        integer(c_int), value :: key_dummy
        integer(c_int), value :: size_dummy
        character(kind = c_char) :: mesg_dummy(*)
      end function lib_cdiZaxisInqKeyStr
    end interface
    mesg_temp(len(mesg_dummy) + 1) = c_null_char
    do mesg_i = len(mesg_dummy), 1, -1
      if(mesg_dummy(mesg_i:mesg_i) /= ' ') exit
      mesg_temp(mesg_i) = c_null_char
    end do
    do mesg_i = mesg_i, 1, -1
        mesg_temp(mesg_i) = mesg_dummy(mesg_i:mesg_i)
    end do
    f_result = lib_cdiZaxisInqKeyStr(zaxisID_dummy, key_dummy, size_dummy,&
    & mesg_temp)
    do mesg_i = 1, len(mesg_dummy)
      if(mesg_temp(mesg_i) == c_null_char) exit
      mesg_dummy(mesg_i:mesg_i) = mesg_temp(mesg_i)
    end do
    do mesg_i = mesg_i, len(mesg_dummy)
      mesg_dummy(mesg_i:mesg_i) = ' '
    end do
  end function cdiZaxisInqKeyStr

  subroutine gridDefXname(gridID_dummy, xname_dummy)
    integer(c_int), value :: gridID_dummy
    character(kind = c_char, len = *), intent(in) :: xname_dummy
    character(kind = c_char) :: xname_temp(len(xname_dummy) + 1)
    integer :: xname_i
    interface
      subroutine lib_gridDefXname(gridID_dummy, xname_dummy) bind(c, name =&
      & 'gridDefXname')
        import c_char, c_int
        integer(c_int), value :: gridID_dummy
        character(kind = c_char) :: xname_dummy(*)
      end subroutine lib_gridDefXname
    end interface
    do xname_i = 1, len(xname_dummy)
      xname_temp(xname_i) = xname_dummy(xname_i:xname_i)
    end do
    xname_temp(len(xname_dummy) + 1) = c_null_char
    call lib_gridDefXname(gridID_dummy, xname_temp)
  end subroutine gridDefXname

  subroutine gridInqXname(gridID_dummy, xname_dummy)
    integer(c_int), value :: gridID_dummy
    character(kind = c_char, len = *), intent(inout) :: xname_dummy
    character(kind = c_char) :: xname_temp(len(xname_dummy) + 1)
    integer :: xname_i
    interface
      subroutine lib_gridInqXname(gridID_dummy, xname_dummy) bind(c, name =&
      & 'gridInqXname')
        import c_char, c_int
        integer(c_int), value :: gridID_dummy
        character(kind = c_char) :: xname_dummy(*)
      end subroutine lib_gridInqXname
    end interface
    xname_temp(len(xname_dummy) + 1) = c_null_char
    do xname_i = len(xname_dummy), 1, -1
      if(xname_dummy(xname_i:xname_i) /= ' ') exit
      xname_temp(xname_i) = c_null_char
    end do
    do xname_i = xname_i, 1, -1
        xname_temp(xname_i) = xname_dummy(xname_i:xname_i)
    end do
    call lib_gridInqXname(gridID_dummy, xname_temp)
    do xname_i = 1, len(xname_dummy)
      if(xname_temp(xname_i) == c_null_char) exit
      xname_dummy(xname_i:xname_i) = xname_temp(xname_i)
    end do
    do xname_i = xname_i, len(xname_dummy)
      xname_dummy(xname_i:xname_i) = ' '
    end do
  end subroutine gridInqXname

  subroutine gridDefXlongname(gridID_dummy, xlongname_dummy)
    integer(c_int), value :: gridID_dummy
    character(kind = c_char, len = *), intent(in) :: xlongname_dummy
    character(kind = c_char) :: xlongname_temp(len(xlongname_dummy) + 1)
    integer :: xlongname_i
    interface
      subroutine lib_gridDefXlongname(gridID_dummy, xlongname_dummy) bind(c,&
      & name = 'gridDefXlongname')
        import c_char, c_int
        integer(c_int), value :: gridID_dummy
        character(kind = c_char) :: xlongname_dummy(*)
      end subroutine lib_gridDefXlongname
    end interface
    do xlongname_i = 1, len(xlongname_dummy)
      xlongname_temp(xlongname_i) = xlongname_dummy(xlongname_i:xlongname_i)
    end do
    xlongname_temp(len(xlongname_dummy) + 1) = c_null_char
    call lib_gridDefXlongname(gridID_dummy, xlongname_temp)
  end subroutine gridDefXlongname

  subroutine gridInqXlongname(gridID_dummy, xlongname_dummy)
    integer(c_int), value :: gridID_dummy
    character(kind = c_char, len = *), intent(inout) :: xlongname_dummy
    character(kind = c_char) :: xlongname_temp(len(xlongname_dummy) + 1)
    integer :: xlongname_i
    interface
      subroutine lib_gridInqXlongname(gridID_dummy, xlongname_dummy) bind(c,&
      & name = 'gridInqXlongname')
        import c_char, c_int
        integer(c_int), value :: gridID_dummy
        character(kind = c_char) :: xlongname_dummy(*)
      end subroutine lib_gridInqXlongname
    end interface
    xlongname_temp(len(xlongname_dummy) + 1) = c_null_char
    do xlongname_i = len(xlongname_dummy), 1, -1
      if(xlongname_dummy(xlongname_i:xlongname_i) /= ' ') exit
      xlongname_temp(xlongname_i) = c_null_char
    end do
    do xlongname_i = xlongname_i, 1, -1
        xlongname_temp(xlongname_i) = xlongname_dummy(xlongname_i:xlongname_i)
    end do
    call lib_gridInqXlongname(gridID_dummy, xlongname_temp)
    do xlongname_i = 1, len(xlongname_dummy)
      if(xlongname_temp(xlongname_i) == c_null_char) exit
      xlongname_dummy(xlongname_i:xlongname_i) = xlongname_temp(xlongname_i)
    end do
    do xlongname_i = xlongname_i, len(xlongname_dummy)
      xlongname_dummy(xlongname_i:xlongname_i) = ' '
    end do
  end subroutine gridInqXlongname

  subroutine gridDefXunits(gridID_dummy, xunits_dummy)
    integer(c_int), value :: gridID_dummy
    character(kind = c_char, len = *), intent(in) :: xunits_dummy
    character(kind = c_char) :: xunits_temp(len(xunits_dummy) + 1)
    integer :: xunits_i
    interface
      subroutine lib_gridDefXunits(gridID_dummy, xunits_dummy) bind(c, name =&
      & 'gridDefXunits')
        import c_char, c_int
        integer(c_int), value :: gridID_dummy
        character(kind = c_char) :: xunits_dummy(*)
      end subroutine lib_gridDefXunits
    end interface
    do xunits_i = 1, len(xunits_dummy)
      xunits_temp(xunits_i) = xunits_dummy(xunits_i:xunits_i)
    end do
    xunits_temp(len(xunits_dummy) + 1) = c_null_char
    call lib_gridDefXunits(gridID_dummy, xunits_temp)
  end subroutine gridDefXunits

  subroutine gridInqXunits(gridID_dummy, xunits_dummy)
    integer(c_int), value :: gridID_dummy
    character(kind = c_char, len = *), intent(inout) :: xunits_dummy
    character(kind = c_char) :: xunits_temp(len(xunits_dummy) + 1)
    integer :: xunits_i
    interface
      subroutine lib_gridInqXunits(gridID_dummy, xunits_dummy) bind(c, name =&
      & 'gridInqXunits')
        import c_char, c_int
        integer(c_int), value :: gridID_dummy
        character(kind = c_char) :: xunits_dummy(*)
      end subroutine lib_gridInqXunits
    end interface
    xunits_temp(len(xunits_dummy) + 1) = c_null_char
    do xunits_i = len(xunits_dummy), 1, -1
      if(xunits_dummy(xunits_i:xunits_i) /= ' ') exit
      xunits_temp(xunits_i) = c_null_char
    end do
    do xunits_i = xunits_i, 1, -1
        xunits_temp(xunits_i) = xunits_dummy(xunits_i:xunits_i)
    end do
    call lib_gridInqXunits(gridID_dummy, xunits_temp)
    do xunits_i = 1, len(xunits_dummy)
      if(xunits_temp(xunits_i) == c_null_char) exit
      xunits_dummy(xunits_i:xunits_i) = xunits_temp(xunits_i)
    end do
    do xunits_i = xunits_i, len(xunits_dummy)
      xunits_dummy(xunits_i:xunits_i) = ' '
    end do
  end subroutine gridInqXunits

  subroutine gridDefYname(gridID_dummy, yname_dummy)
    integer(c_int), value :: gridID_dummy
    character(kind = c_char, len = *), intent(in) :: yname_dummy
    character(kind = c_char) :: yname_temp(len(yname_dummy) + 1)
    integer :: yname_i
    interface
      subroutine lib_gridDefYname(gridID_dummy, yname_dummy) bind(c, name =&
      & 'gridDefYname')
        import c_char, c_int
        integer(c_int), value :: gridID_dummy
        character(kind = c_char) :: yname_dummy(*)
      end subroutine lib_gridDefYname
    end interface
    do yname_i = 1, len(yname_dummy)
      yname_temp(yname_i) = yname_dummy(yname_i:yname_i)
    end do
    yname_temp(len(yname_dummy) + 1) = c_null_char
    call lib_gridDefYname(gridID_dummy, yname_temp)
  end subroutine gridDefYname

  subroutine gridInqYname(gridID_dummy, yname_dummy)
    integer(c_int), value :: gridID_dummy
    character(kind = c_char, len = *), intent(inout) :: yname_dummy
    character(kind = c_char) :: yname_temp(len(yname_dummy) + 1)
    integer :: yname_i
    interface
      subroutine lib_gridInqYname(gridID_dummy, yname_dummy) bind(c, name =&
      & 'gridInqYname')
        import c_char, c_int
        integer(c_int), value :: gridID_dummy
        character(kind = c_char) :: yname_dummy(*)
      end subroutine lib_gridInqYname
    end interface
    yname_temp(len(yname_dummy) + 1) = c_null_char
    do yname_i = len(yname_dummy), 1, -1
      if(yname_dummy(yname_i:yname_i) /= ' ') exit
      yname_temp(yname_i) = c_null_char
    end do
    do yname_i = yname_i, 1, -1
        yname_temp(yname_i) = yname_dummy(yname_i:yname_i)
    end do
    call lib_gridInqYname(gridID_dummy, yname_temp)
    do yname_i = 1, len(yname_dummy)
      if(yname_temp(yname_i) == c_null_char) exit
      yname_dummy(yname_i:yname_i) = yname_temp(yname_i)
    end do
    do yname_i = yname_i, len(yname_dummy)
      yname_dummy(yname_i:yname_i) = ' '
    end do
  end subroutine gridInqYname

  subroutine gridDefYlongname(gridID_dummy, ylongname_dummy)
    integer(c_int), value :: gridID_dummy
    character(kind = c_char, len = *), intent(in) :: ylongname_dummy
    character(kind = c_char) :: ylongname_temp(len(ylongname_dummy) + 1)
    integer :: ylongname_i
    interface
      subroutine lib_gridDefYlongname(gridID_dummy, ylongname_dummy) bind(c,&
      & name = 'gridDefYlongname')
        import c_char, c_int
        integer(c_int), value :: gridID_dummy
        character(kind = c_char) :: ylongname_dummy(*)
      end subroutine lib_gridDefYlongname
    end interface
    do ylongname_i = 1, len(ylongname_dummy)
      ylongname_temp(ylongname_i) = ylongname_dummy(ylongname_i:ylongname_i)
    end do
    ylongname_temp(len(ylongname_dummy) + 1) = c_null_char
    call lib_gridDefYlongname(gridID_dummy, ylongname_temp)
  end subroutine gridDefYlongname

  subroutine gridInqYlongname(gridID_dummy, ylongname_dummy)
    integer(c_int), value :: gridID_dummy
    character(kind = c_char, len = *), intent(inout) :: ylongname_dummy
    character(kind = c_char) :: ylongname_temp(len(ylongname_dummy) + 1)
    integer :: ylongname_i
    interface
      subroutine lib_gridInqYlongname(gridID_dummy, ylongname_dummy) bind(c,&
      & name = 'gridInqYlongname')
        import c_char, c_int
        integer(c_int), value :: gridID_dummy
        character(kind = c_char) :: ylongname_dummy(*)
      end subroutine lib_gridInqYlongname
    end interface
    ylongname_temp(len(ylongname_dummy) + 1) = c_null_char
    do ylongname_i = len(ylongname_dummy), 1, -1
      if(ylongname_dummy(ylongname_i:ylongname_i) /= ' ') exit
      ylongname_temp(ylongname_i) = c_null_char
    end do
    do ylongname_i = ylongname_i, 1, -1
        ylongname_temp(ylongname_i) = ylongname_dummy(ylongname_i:ylongname_i)
    end do
    call lib_gridInqYlongname(gridID_dummy, ylongname_temp)
    do ylongname_i = 1, len(ylongname_dummy)
      if(ylongname_temp(ylongname_i) == c_null_char) exit
      ylongname_dummy(ylongname_i:ylongname_i) = ylongname_temp(ylongname_i)
    end do
    do ylongname_i = ylongname_i, len(ylongname_dummy)
      ylongname_dummy(ylongname_i:ylongname_i) = ' '
    end do
  end subroutine gridInqYlongname

  subroutine gridDefYunits(gridID_dummy, yunits_dummy)
    integer(c_int), value :: gridID_dummy
    character(kind = c_char, len = *), intent(in) :: yunits_dummy
    character(kind = c_char) :: yunits_temp(len(yunits_dummy) + 1)
    integer :: yunits_i
    interface
      subroutine lib_gridDefYunits(gridID_dummy, yunits_dummy) bind(c, name =&
      & 'gridDefYunits')
        import c_char, c_int
        integer(c_int), value :: gridID_dummy
        character(kind = c_char) :: yunits_dummy(*)
      end subroutine lib_gridDefYunits
    end interface
    do yunits_i = 1, len(yunits_dummy)
      yunits_temp(yunits_i) = yunits_dummy(yunits_i:yunits_i)
    end do
    yunits_temp(len(yunits_dummy) + 1) = c_null_char
    call lib_gridDefYunits(gridID_dummy, yunits_temp)
  end subroutine gridDefYunits

  subroutine gridInqYunits(gridID_dummy, yunits_dummy)
    integer(c_int), value :: gridID_dummy
    character(kind = c_char, len = *), intent(inout) :: yunits_dummy
    character(kind = c_char) :: yunits_temp(len(yunits_dummy) + 1)
    integer :: yunits_i
    interface
      subroutine lib_gridInqYunits(gridID_dummy, yunits_dummy) bind(c, name =&
      & 'gridInqYunits')
        import c_char, c_int
        integer(c_int), value :: gridID_dummy
        character(kind = c_char) :: yunits_dummy(*)
      end subroutine lib_gridInqYunits
    end interface
    yunits_temp(len(yunits_dummy) + 1) = c_null_char
    do yunits_i = len(yunits_dummy), 1, -1
      if(yunits_dummy(yunits_i:yunits_i) /= ' ') exit
      yunits_temp(yunits_i) = c_null_char
    end do
    do yunits_i = yunits_i, 1, -1
        yunits_temp(yunits_i) = yunits_dummy(yunits_i:yunits_i)
    end do
    call lib_gridInqYunits(gridID_dummy, yunits_temp)
    do yunits_i = 1, len(yunits_dummy)
      if(yunits_temp(yunits_i) == c_null_char) exit
      yunits_dummy(yunits_i:yunits_i) = yunits_temp(yunits_i)
    end do
    do yunits_i = yunits_i, len(yunits_dummy)
      yunits_dummy(yunits_i:yunits_i) = ' '
    end do
  end subroutine gridInqYunits

  subroutine gridInqXstdname(gridID_dummy, xstdname_dummy)
    integer(c_int), value :: gridID_dummy
    character(kind = c_char, len = *), intent(inout) :: xstdname_dummy
    character(kind = c_char) :: xstdname_temp(len(xstdname_dummy) + 1)
    integer :: xstdname_i
    interface
      subroutine lib_gridInqXstdname(gridID_dummy, xstdname_dummy) bind(c, name&
      & = 'gridInqXstdname')
        import c_char, c_int
        integer(c_int), value :: gridID_dummy
        character(kind = c_char) :: xstdname_dummy(*)
      end subroutine lib_gridInqXstdname
    end interface
    xstdname_temp(len(xstdname_dummy) + 1) = c_null_char
    do xstdname_i = len(xstdname_dummy), 1, -1
      if(xstdname_dummy(xstdname_i:xstdname_i) /= ' ') exit
      xstdname_temp(xstdname_i) = c_null_char
    end do
    do xstdname_i = xstdname_i, 1, -1
        xstdname_temp(xstdname_i) = xstdname_dummy(xstdname_i:xstdname_i)
    end do
    call lib_gridInqXstdname(gridID_dummy, xstdname_temp)
    do xstdname_i = 1, len(xstdname_dummy)
      if(xstdname_temp(xstdname_i) == c_null_char) exit
      xstdname_dummy(xstdname_i:xstdname_i) = xstdname_temp(xstdname_i)
    end do
    do xstdname_i = xstdname_i, len(xstdname_dummy)
      xstdname_dummy(xstdname_i:xstdname_i) = ' '
    end do
  end subroutine gridInqXstdname

  subroutine gridInqYstdname(gridID_dummy, ystdname_dummy)
    integer(c_int), value :: gridID_dummy
    character(kind = c_char, len = *), intent(inout) :: ystdname_dummy
    character(kind = c_char) :: ystdname_temp(len(ystdname_dummy) + 1)
    integer :: ystdname_i
    interface
      subroutine lib_gridInqYstdname(gridID_dummy, ystdname_dummy) bind(c, name&
      & = 'gridInqYstdname')
        import c_char, c_int
        integer(c_int), value :: gridID_dummy
        character(kind = c_char) :: ystdname_dummy(*)
      end subroutine lib_gridInqYstdname
    end interface
    ystdname_temp(len(ystdname_dummy) + 1) = c_null_char
    do ystdname_i = len(ystdname_dummy), 1, -1
      if(ystdname_dummy(ystdname_i:ystdname_i) /= ' ') exit
      ystdname_temp(ystdname_i) = c_null_char
    end do
    do ystdname_i = ystdname_i, 1, -1
        ystdname_temp(ystdname_i) = ystdname_dummy(ystdname_i:ystdname_i)
    end do
    call lib_gridInqYstdname(gridID_dummy, ystdname_temp)
    do ystdname_i = 1, len(ystdname_dummy)
      if(ystdname_temp(ystdname_i) == c_null_char) exit
      ystdname_dummy(ystdname_i:ystdname_i) = ystdname_temp(ystdname_i)
    end do
    do ystdname_i = ystdname_i, len(ystdname_dummy)
      ystdname_dummy(ystdname_i:ystdname_i) = ' '
    end do
  end subroutine gridInqYstdname

  subroutine gridDefReference(gridID_dummy, reference_dummy)
    integer(c_int), value :: gridID_dummy
    character(kind = c_char, len = *), intent(in) :: reference_dummy
    character(kind = c_char) :: reference_temp(len(reference_dummy) + 1)
    integer :: reference_i
    interface
      subroutine lib_gridDefReference(gridID_dummy, reference_dummy) bind(c,&
      & name = 'gridDefReference')
        import c_char, c_int
        integer(c_int), value :: gridID_dummy
        character(kind = c_char) :: reference_dummy(*)
      end subroutine lib_gridDefReference
    end interface
    do reference_i = 1, len(reference_dummy)
      reference_temp(reference_i) = reference_dummy(reference_i:reference_i)
    end do
    reference_temp(len(reference_dummy) + 1) = c_null_char
    call lib_gridDefReference(gridID_dummy, reference_temp)
  end subroutine gridDefReference

  function gridInqReference(gridID_dummy, reference_dummy) result(f_result)
    integer(c_int) :: f_result
    integer(c_int), value :: gridID_dummy
    character(kind = c_char, len = *), intent(inout) :: reference_dummy
    character(kind = c_char) :: reference_temp(len(reference_dummy) + 1)
    integer :: reference_i
    interface
      function lib_gridInqReference(gridID_dummy, reference_dummy) bind(c, name&
      & = 'gridInqReference') result(c_result)
        import c_char, c_int
        integer(c_int) :: c_result
        integer(c_int), value :: gridID_dummy
        character(kind = c_char) :: reference_dummy(*)
      end function lib_gridInqReference
    end interface
    reference_temp(len(reference_dummy) + 1) = c_null_char
    do reference_i = len(reference_dummy), 1, -1
      if(reference_dummy(reference_i:reference_i) /= ' ') exit
      reference_temp(reference_i) = c_null_char
    end do
    do reference_i = reference_i, 1, -1
        reference_temp(reference_i) = reference_dummy(reference_i:reference_i)
    end do
    f_result = lib_gridInqReference(gridID_dummy, reference_temp)
    do reference_i = 1, len(reference_dummy)
      if(reference_temp(reference_i) == c_null_char) exit
      reference_dummy(reference_i:reference_i) = reference_temp(reference_i)
    end do
    do reference_i = reference_i, len(reference_dummy)
      reference_dummy(reference_i:reference_i) = ' '
    end do
  end function gridInqReference

  subroutine zaxisName(zaxistype_dummy, zaxisname_dummy)
    integer(c_int), value :: zaxistype_dummy
    character(kind = c_char, len = *), intent(inout) :: zaxisname_dummy
    character(kind = c_char) :: zaxisname_temp(len(zaxisname_dummy) + 1)
    integer :: zaxisname_i
    interface
      subroutine lib_zaxisName(zaxistype_dummy, zaxisname_dummy) bind(c, name =&
      & 'zaxisName')
        import c_char, c_int
        integer(c_int), value :: zaxistype_dummy
        character(kind = c_char) :: zaxisname_dummy(*)
      end subroutine lib_zaxisName
    end interface
    zaxisname_temp(len(zaxisname_dummy) + 1) = c_null_char
    do zaxisname_i = len(zaxisname_dummy), 1, -1
      if(zaxisname_dummy(zaxisname_i:zaxisname_i) /= ' ') exit
      zaxisname_temp(zaxisname_i) = c_null_char
    end do
    do zaxisname_i = zaxisname_i, 1, -1
        zaxisname_temp(zaxisname_i) = zaxisname_dummy(zaxisname_i:zaxisname_i)
    end do
    call lib_zaxisName(zaxistype_dummy, zaxisname_temp)
    do zaxisname_i = 1, len(zaxisname_dummy)
      if(zaxisname_temp(zaxisname_i) == c_null_char) exit
      zaxisname_dummy(zaxisname_i:zaxisname_i) = zaxisname_temp(zaxisname_i)
    end do
    do zaxisname_i = zaxisname_i, len(zaxisname_dummy)
      zaxisname_dummy(zaxisname_i:zaxisname_i) = ' '
    end do
  end subroutine zaxisName

  function zaxisNamePtr(leveltype_dummy) result(f_result)
    character(kind = c_char), dimension(:), pointer :: f_result
    integer(c_int), value :: leveltype_dummy
    type(c_ptr) :: ptr
    integer :: rv_shape(1)
    interface
      function lib_zaxisNamePtr(leveltype_dummy) bind(c, name = 'zaxisNamePtr')&
      & result(c_result)
        import c_int, c_ptr
        type(c_ptr) :: c_result
        integer(c_int), value :: leveltype_dummy
      end function lib_zaxisNamePtr
    end interface
    f_result => null()
    ptr = lib_zaxisNamePtr(leveltype_dummy)
    if(c_associated(ptr)) then
      rv_shape(1) = int(lib_strlen(ptr))
      call c_f_pointer(ptr, f_result, rv_shape)
    end if
  end function zaxisNamePtr

  subroutine zaxisDefName(zaxisID_dummy, name)
    integer(c_int), value :: zaxisID_dummy
    character(kind = c_char, len = *), optional, intent(in) :: name
    character(kind = c_char), allocatable, target :: name_temp(:)
    integer :: name_i
    type(c_ptr) :: name_cptr
    interface
      subroutine lib_zaxisDefName(zaxisID_dummy, name) bind(c, name =&
      & 'zaxisDefName')
        import c_int, c_ptr
        integer(c_int), value :: zaxisID_dummy
        type(c_ptr), value :: name
      end subroutine lib_zaxisDefName
    end interface
    if (present(name)) then
      allocate(name_temp(len(name) + 1))
      name_temp(len(name) + 1) = c_null_char
      do name_i = len(name), 1, -1
        if(name(name_i:name_i) /= ' ') exit
        name_temp(name_i) = c_null_char
      end do
      do name_i = name_i, 1, -1
          name_temp(name_i) = name(name_i:name_i)
      end do
      name_cptr = c_loc(name_temp)
    else
      name_cptr = c_null_ptr
    end if
    call lib_zaxisDefName(zaxisID_dummy, name_cptr)
  end subroutine zaxisDefName

  subroutine zaxisInqName(zaxisID_dummy, name_dummy)
    integer(c_int), value :: zaxisID_dummy
    character(kind = c_char, len = *), intent(inout) :: name_dummy
    character(kind = c_char) :: name_temp(len(name_dummy) + 1)
    integer :: name_i
    interface
      subroutine lib_zaxisInqName(zaxisID_dummy, name_dummy) bind(c, name =&
      & 'zaxisInqName')
        import c_char, c_int
        integer(c_int), value :: zaxisID_dummy
        character(kind = c_char) :: name_dummy(*)
      end subroutine lib_zaxisInqName
    end interface
    name_temp(len(name_dummy) + 1) = c_null_char
    do name_i = len(name_dummy), 1, -1
      if(name_dummy(name_i:name_i) /= ' ') exit
      name_temp(name_i) = c_null_char
    end do
    do name_i = name_i, 1, -1
        name_temp(name_i) = name_dummy(name_i:name_i)
    end do
    call lib_zaxisInqName(zaxisID_dummy, name_temp)
    do name_i = 1, len(name_dummy)
      if(name_temp(name_i) == c_null_char) exit
      name_dummy(name_i:name_i) = name_temp(name_i)
    end do
    do name_i = name_i, len(name_dummy)
      name_dummy(name_i:name_i) = ' '
    end do
  end subroutine zaxisInqName

  subroutine zaxisDefLongname(zaxisID_dummy, longname)
    integer(c_int), value :: zaxisID_dummy
    character(kind = c_char, len = *), optional, intent(in) :: longname
    character(kind = c_char), allocatable, target :: longname_temp(:)
    integer :: longname_i
    type(c_ptr) :: longname_cptr
    interface
      subroutine lib_zaxisDefLongname(zaxisID_dummy, longname) bind(c, name =&
      & 'zaxisDefLongname')
        import c_int, c_ptr
        integer(c_int), value :: zaxisID_dummy
        type(c_ptr), value :: longname
      end subroutine lib_zaxisDefLongname
    end interface
    if (present(longname)) then
      allocate(longname_temp(len(longname) + 1))
      longname_temp(len(longname) + 1) = c_null_char
      do longname_i = len(longname), 1, -1
        if(longname(longname_i:longname_i) /= ' ') exit
        longname_temp(longname_i) = c_null_char
      end do
      do longname_i = longname_i, 1, -1
          longname_temp(longname_i) = longname(longname_i:longname_i)
      end do
      longname_cptr = c_loc(longname_temp)
    else
      longname_cptr = c_null_ptr
    end if
    call lib_zaxisDefLongname(zaxisID_dummy, longname_cptr)
  end subroutine zaxisDefLongname

  subroutine zaxisInqLongname(zaxisID_dummy, longname_dummy)
    integer(c_int), value :: zaxisID_dummy
    character(kind = c_char, len = *), intent(inout) :: longname_dummy
    character(kind = c_char) :: longname_temp(len(longname_dummy) + 1)
    integer :: longname_i
    interface
      subroutine lib_zaxisInqLongname(zaxisID_dummy, longname_dummy) bind(c,&
      & name = 'zaxisInqLongname')
        import c_char, c_int
        integer(c_int), value :: zaxisID_dummy
        character(kind = c_char) :: longname_dummy(*)
      end subroutine lib_zaxisInqLongname
    end interface
    longname_temp(len(longname_dummy) + 1) = c_null_char
    do longname_i = len(longname_dummy), 1, -1
      if(longname_dummy(longname_i:longname_i) /= ' ') exit
      longname_temp(longname_i) = c_null_char
    end do
    do longname_i = longname_i, 1, -1
        longname_temp(longname_i) = longname_dummy(longname_i:longname_i)
    end do
    call lib_zaxisInqLongname(zaxisID_dummy, longname_temp)
    do longname_i = 1, len(longname_dummy)
      if(longname_temp(longname_i) == c_null_char) exit
      longname_dummy(longname_i:longname_i) = longname_temp(longname_i)
    end do
    do longname_i = longname_i, len(longname_dummy)
      longname_dummy(longname_i:longname_i) = ' '
    end do
  end subroutine zaxisInqLongname

  subroutine zaxisDefUnits(zaxisID_dummy, units)
    integer(c_int), value :: zaxisID_dummy
    character(kind = c_char, len = *), optional, intent(in) :: units
    character(kind = c_char), allocatable, target :: units_temp(:)
    integer :: units_i
    type(c_ptr) :: units_cptr
    interface
      subroutine lib_zaxisDefUnits(zaxisID_dummy, units) bind(c, name =&
      & 'zaxisDefUnits')
        import c_int, c_ptr
        integer(c_int), value :: zaxisID_dummy
        type(c_ptr), value :: units
      end subroutine lib_zaxisDefUnits
    end interface
    if (present(units)) then
      allocate(units_temp(len(units) + 1))
      units_temp(len(units) + 1) = c_null_char
      do units_i = len(units), 1, -1
        if(units(units_i:units_i) /= ' ') exit
        units_temp(units_i) = c_null_char
      end do
      do units_i = units_i, 1, -1
          units_temp(units_i) = units(units_i:units_i)
      end do
      units_cptr = c_loc(units_temp)
    else
      units_cptr = c_null_ptr
    end if
    call lib_zaxisDefUnits(zaxisID_dummy, units_cptr)
  end subroutine zaxisDefUnits

  subroutine zaxisInqUnits(zaxisID_dummy, units_dummy)
    integer(c_int), value :: zaxisID_dummy
    character(kind = c_char, len = *), intent(inout) :: units_dummy
    character(kind = c_char) :: units_temp(len(units_dummy) + 1)
    integer :: units_i
    interface
      subroutine lib_zaxisInqUnits(zaxisID_dummy, units_dummy) bind(c, name =&
      & 'zaxisInqUnits')
        import c_char, c_int
        integer(c_int), value :: zaxisID_dummy
        character(kind = c_char) :: units_dummy(*)
      end subroutine lib_zaxisInqUnits
    end interface
    units_temp(len(units_dummy) + 1) = c_null_char
    do units_i = len(units_dummy), 1, -1
      if(units_dummy(units_i:units_i) /= ' ') exit
      units_temp(units_i) = c_null_char
    end do
    do units_i = units_i, 1, -1
        units_temp(units_i) = units_dummy(units_i:units_i)
    end do
    call lib_zaxisInqUnits(zaxisID_dummy, units_temp)
    do units_i = 1, len(units_dummy)
      if(units_temp(units_i) == c_null_char) exit
      units_dummy(units_i:units_i) = units_temp(units_i)
    end do
    do units_i = units_i, len(units_dummy)
      units_dummy(units_i:units_i) = ' '
    end do
  end subroutine zaxisInqUnits

  subroutine zaxisInqStdname(zaxisID_dummy, stdname_dummy)
    integer(c_int), value :: zaxisID_dummy
    character(kind = c_char, len = *), intent(inout) :: stdname_dummy
    character(kind = c_char) :: stdname_temp(len(stdname_dummy) + 1)
    integer :: stdname_i
    interface
      subroutine lib_zaxisInqStdname(zaxisID_dummy, stdname_dummy) bind(c, name&
      & = 'zaxisInqStdname')
        import c_char, c_int
        integer(c_int), value :: zaxisID_dummy
        character(kind = c_char) :: stdname_dummy(*)
      end subroutine lib_zaxisInqStdname
    end interface
    stdname_temp(len(stdname_dummy) + 1) = c_null_char
    do stdname_i = len(stdname_dummy), 1, -1
      if(stdname_dummy(stdname_i:stdname_i) /= ' ') exit
      stdname_temp(stdname_i) = c_null_char
    end do
    do stdname_i = stdname_i, 1, -1
        stdname_temp(stdname_i) = stdname_dummy(stdname_i:stdname_i)
    end do
    call lib_zaxisInqStdname(zaxisID_dummy, stdname_temp)
    do stdname_i = 1, len(stdname_dummy)
      if(stdname_temp(stdname_i) == c_null_char) exit
      stdname_dummy(stdname_i:stdname_i) = stdname_temp(stdname_i)
    end do
    do stdname_i = stdname_i, len(stdname_dummy)
      stdname_dummy(stdname_i:stdname_i) = ' '
    end do
  end subroutine zaxisInqStdname

  function zaxisInqLbounds(zaxisID_dummy, lbounds) result(f_result)
    integer(c_int) :: f_result
    integer(c_int), value :: zaxisID_dummy
    real(c_double), target, optional, intent(inout) :: lbounds(*)
    type(c_ptr) :: lbounds_cptr
    interface
      function lib_zaxisInqLbounds(zaxisID_dummy, lbounds) bind(c, name =&
      & 'zaxisInqLbounds') result(c_result)
        import c_int, c_ptr
        integer(c_int) :: c_result
        integer(c_int), value :: zaxisID_dummy
        type(c_ptr), value :: lbounds
      end function lib_zaxisInqLbounds
    end interface
    lbounds_cptr = c_null_ptr
    if(present(lbounds)) lbounds_cptr = c_loc(lbounds)
    f_result = lib_zaxisInqLbounds(zaxisID_dummy, lbounds_cptr)
  end function zaxisInqLbounds

  function zaxisInqUbounds(zaxisID_dummy, ubounds) result(f_result)
    integer(c_int) :: f_result
    integer(c_int), value :: zaxisID_dummy
    real(c_double), target, optional, intent(inout) :: ubounds(*)
    type(c_ptr) :: ubounds_cptr
    interface
      function lib_zaxisInqUbounds(zaxisID_dummy, ubounds) bind(c, name =&
      & 'zaxisInqUbounds') result(c_result)
        import c_int, c_ptr
        integer(c_int) :: c_result
        integer(c_int), value :: zaxisID_dummy
        type(c_ptr), value :: ubounds
      end function lib_zaxisInqUbounds
    end interface
    ubounds_cptr = c_null_ptr
    if(present(ubounds)) ubounds_cptr = c_loc(ubounds)
    f_result = lib_zaxisInqUbounds(zaxisID_dummy, ubounds_cptr)
  end function zaxisInqUbounds

  function zaxisInqWeights(zaxisID_dummy, weights) result(f_result)
    integer(c_int) :: f_result
    integer(c_int), value :: zaxisID_dummy
    real(c_double), target, optional, intent(inout) :: weights(*)
    type(c_ptr) :: weights_cptr
    interface
      function lib_zaxisInqWeights(zaxisID_dummy, weights) bind(c, name =&
      & 'zaxisInqWeights') result(c_result)
        import c_int, c_ptr
        integer(c_int) :: c_result
        integer(c_int), value :: zaxisID_dummy
        type(c_ptr), value :: weights
      end function lib_zaxisInqWeights
    end interface
    weights_cptr = c_null_ptr
    if(present(weights)) weights_cptr = c_loc(weights)
    f_result = lib_zaxisInqWeights(zaxisID_dummy, weights_cptr)
  end function zaxisInqWeights

  function tunitNamePtr(tunitID_dummy) result(f_result)
    character(kind = c_char), dimension(:), pointer :: f_result
    integer(c_int), value :: tunitID_dummy
    type(c_ptr) :: ptr
    integer :: rv_shape(1)
    interface
      function lib_tunitNamePtr(tunitID_dummy) bind(c, name = 'tunitNamePtr')&
      & result(c_result)
        import c_int, c_ptr
        type(c_ptr) :: c_result
        integer(c_int), value :: tunitID_dummy
      end function lib_tunitNamePtr
    end interface
    f_result => null()
    ptr = lib_tunitNamePtr(tunitID_dummy)
    if(c_associated(ptr)) then
      rv_shape(1) = int(lib_strlen(ptr))
      call c_f_pointer(ptr, f_result, rv_shape)
    end if
  end function tunitNamePtr

  function institutDef(center_dummy, subcenter_dummy, name_dummy,&
  & longname_dummy) result(f_result)
    integer(c_int) :: f_result
    integer(c_int), value :: center_dummy
    integer(c_int), value :: subcenter_dummy
    character(kind = c_char, len = *), intent(in) :: name_dummy
    character(kind = c_char, len = *), intent(in) :: longname_dummy
    character(kind = c_char) :: name_temp(len(name_dummy) + 1)
    integer :: name_i
    character(kind = c_char) :: longname_temp(len(longname_dummy) + 1)
    integer :: longname_i
    interface
      function lib_institutDef(center_dummy, subcenter_dummy, name_dummy,&
      & longname_dummy) bind(c, name = 'institutDef') result(c_result)
        import c_char, c_int
        integer(c_int) :: c_result
        integer(c_int), value :: center_dummy
        integer(c_int), value :: subcenter_dummy
        character(kind = c_char) :: name_dummy(*)
        character(kind = c_char) :: longname_dummy(*)
      end function lib_institutDef
    end interface
    do name_i = 1, len(name_dummy)
      name_temp(name_i) = name_dummy(name_i:name_i)
    end do
    name_temp(len(name_dummy) + 1) = c_null_char
    do longname_i = 1, len(longname_dummy)
      longname_temp(longname_i) = longname_dummy(longname_i:longname_i)
    end do
    longname_temp(len(longname_dummy) + 1) = c_null_char
    f_result = lib_institutDef(center_dummy, subcenter_dummy, name_temp,&
    & longname_temp)
  end function institutDef

  function institutInq(center_dummy, subcenter_dummy, name_dummy,&
  & longname_dummy) result(f_result)
    integer(c_int) :: f_result
    integer(c_int), value :: center_dummy
    integer(c_int), value :: subcenter_dummy
    character(kind = c_char, len = *), intent(in) :: name_dummy
    character(kind = c_char, len = *), intent(in) :: longname_dummy
    character(kind = c_char) :: name_temp(len(name_dummy) + 1)
    integer :: name_i
    character(kind = c_char) :: longname_temp(len(longname_dummy) + 1)
    integer :: longname_i
    interface
      function lib_institutInq(center_dummy, subcenter_dummy, name_dummy,&
      & longname_dummy) bind(c, name = 'institutInq') result(c_result)
        import c_char, c_int
        integer(c_int) :: c_result
        integer(c_int), value :: center_dummy
        integer(c_int), value :: subcenter_dummy
        character(kind = c_char) :: name_dummy(*)
        character(kind = c_char) :: longname_dummy(*)
      end function lib_institutInq
    end interface
    do name_i = 1, len(name_dummy)
      name_temp(name_i) = name_dummy(name_i:name_i)
    end do
    name_temp(len(name_dummy) + 1) = c_null_char
    do longname_i = 1, len(longname_dummy)
      longname_temp(longname_i) = longname_dummy(longname_i:longname_i)
    end do
    longname_temp(len(longname_dummy) + 1) = c_null_char
    f_result = lib_institutInq(center_dummy, subcenter_dummy, name_temp,&
    & longname_temp)
  end function institutInq

  function institutInqNamePtr(instID_dummy) result(f_result)
    character(kind = c_char), dimension(:), pointer :: f_result
    integer(c_int), value :: instID_dummy
    type(c_ptr) :: ptr
    integer :: rv_shape(1)
    interface
      function lib_institutInqNamePtr(instID_dummy) bind(c, name =&
      & 'institutInqNamePtr') result(c_result)
        import c_int, c_ptr
        type(c_ptr) :: c_result
        integer(c_int), value :: instID_dummy
      end function lib_institutInqNamePtr
    end interface
    f_result => null()
    ptr = lib_institutInqNamePtr(instID_dummy)
    if(c_associated(ptr)) then
      rv_shape(1) = int(lib_strlen(ptr))
      call c_f_pointer(ptr, f_result, rv_shape)
    end if
  end function institutInqNamePtr

  function institutInqLongnamePtr(instID_dummy) result(f_result)
    character(kind = c_char), dimension(:), pointer :: f_result
    integer(c_int), value :: instID_dummy
    type(c_ptr) :: ptr
    integer :: rv_shape(1)
    interface
      function lib_institutInqLongnamePtr(instID_dummy) bind(c, name =&
      & 'institutInqLongnamePtr') result(c_result)
        import c_int, c_ptr
        type(c_ptr) :: c_result
        integer(c_int), value :: instID_dummy
      end function lib_institutInqLongnamePtr
    end interface
    f_result => null()
    ptr = lib_institutInqLongnamePtr(instID_dummy)
    if(c_associated(ptr)) then
      rv_shape(1) = int(lib_strlen(ptr))
      call c_f_pointer(ptr, f_result, rv_shape)
    end if
  end function institutInqLongnamePtr

  function modelDef(instID_dummy, modelgribID_dummy, name_dummy)&
  & result(f_result)
    integer(c_int) :: f_result
    integer(c_int), value :: instID_dummy
    integer(c_int), value :: modelgribID_dummy
    character(kind = c_char, len = *), intent(in) :: name_dummy
    character(kind = c_char) :: name_temp(len(name_dummy) + 1)
    integer :: name_i
    interface
      function lib_modelDef(instID_dummy, modelgribID_dummy, name_dummy)&
      & bind(c, name = 'modelDef') result(c_result)
        import c_char, c_int
        integer(c_int) :: c_result
        integer(c_int), value :: instID_dummy
        integer(c_int), value :: modelgribID_dummy
        character(kind = c_char) :: name_dummy(*)
      end function lib_modelDef
    end interface
    do name_i = 1, len(name_dummy)
      name_temp(name_i) = name_dummy(name_i:name_i)
    end do
    name_temp(len(name_dummy) + 1) = c_null_char
    f_result = lib_modelDef(instID_dummy, modelgribID_dummy, name_temp)
  end function modelDef

  function modelInq(instID_dummy, modelgribID_dummy, name_dummy)&
  & result(f_result)
    integer(c_int) :: f_result
    integer(c_int), value :: instID_dummy
    integer(c_int), value :: modelgribID_dummy
    character(kind = c_char, len = *), intent(in) :: name_dummy
    character(kind = c_char) :: name_temp(len(name_dummy) + 1)
    integer :: name_i
    interface
      function lib_modelInq(instID_dummy, modelgribID_dummy, name_dummy)&
      & bind(c, name = 'modelInq') result(c_result)
        import c_char, c_int
        integer(c_int) :: c_result
        integer(c_int), value :: instID_dummy
        integer(c_int), value :: modelgribID_dummy
        character(kind = c_char) :: name_dummy(*)
      end function lib_modelInq
    end interface
    do name_i = 1, len(name_dummy)
      name_temp(name_i) = name_dummy(name_i:name_i)
    end do
    name_temp(len(name_dummy) + 1) = c_null_char
    f_result = lib_modelInq(instID_dummy, modelgribID_dummy, name_temp)
  end function modelInq

  function modelInqNamePtr(modelID_dummy) result(f_result)
    character(kind = c_char), dimension(:), pointer :: f_result
    integer(c_int), value :: modelID_dummy
    type(c_ptr) :: ptr
    integer :: rv_shape(1)
    interface
      function lib_modelInqNamePtr(modelID_dummy) bind(c, name =&
      & 'modelInqNamePtr') result(c_result)
        import c_int, c_ptr
        type(c_ptr) :: c_result
        integer(c_int), value :: modelID_dummy
      end function lib_modelInqNamePtr
    end interface
    f_result => null()
    ptr = lib_modelInqNamePtr(modelID_dummy)
    if(c_associated(ptr)) then
      rv_shape(1) = int(lib_strlen(ptr))
      call c_f_pointer(ptr, f_result, rv_shape)
    end if
  end function modelInqNamePtr

  subroutine tableWrite(filename_dummy, tableID_dummy)
    character(kind = c_char, len = *), intent(in) :: filename_dummy
    integer(c_int), value :: tableID_dummy
    character(kind = c_char) :: filename_temp(len(filename_dummy) + 1)
    integer :: filename_i
    interface
      subroutine lib_tableWrite(filename_dummy, tableID_dummy) bind(c, name =&
      & 'tableWrite')
        import c_char, c_int
        character(kind = c_char) :: filename_dummy(*)
        integer(c_int), value :: tableID_dummy
      end subroutine lib_tableWrite
    end interface
    do filename_i = 1, len(filename_dummy)
      filename_temp(filename_i) = filename_dummy(filename_i:filename_i)
    end do
    filename_temp(len(filename_dummy) + 1) = c_null_char
    call lib_tableWrite(filename_temp, tableID_dummy)
  end subroutine tableWrite

  function tableRead(tablefile_dummy) result(f_result)
    integer(c_int) :: f_result
    character(kind = c_char, len = *), intent(in) :: tablefile_dummy
    character(kind = c_char) :: tablefile_temp(len(tablefile_dummy) + 1)
    integer :: tablefile_i
    interface
      function lib_tableRead(tablefile_dummy) bind(c, name = 'tableRead')&
      & result(c_result)
        import c_char, c_int
        integer(c_int) :: c_result
        character(kind = c_char) :: tablefile_dummy(*)
      end function lib_tableRead
    end interface
    do tablefile_i = 1, len(tablefile_dummy)
      tablefile_temp(tablefile_i) = tablefile_dummy(tablefile_i:tablefile_i)
    end do
    tablefile_temp(len(tablefile_dummy) + 1) = c_null_char
    f_result = lib_tableRead(tablefile_temp)
  end function tableRead

  function tableDef(modelID_dummy, tablenum_dummy, tablename_dummy)&
  & result(f_result)
    integer(c_int) :: f_result
    integer(c_int), value :: modelID_dummy
    integer(c_int), value :: tablenum_dummy
    character(kind = c_char, len = *), intent(in) :: tablename_dummy
    character(kind = c_char) :: tablename_temp(len(tablename_dummy) + 1)
    integer :: tablename_i
    interface
      function lib_tableDef(modelID_dummy, tablenum_dummy, tablename_dummy)&
      & bind(c, name = 'tableDef') result(c_result)
        import c_char, c_int
        integer(c_int) :: c_result
        integer(c_int), value :: modelID_dummy
        integer(c_int), value :: tablenum_dummy
        character(kind = c_char) :: tablename_dummy(*)
      end function lib_tableDef
    end interface
    do tablename_i = 1, len(tablename_dummy)
      tablename_temp(tablename_i) = tablename_dummy(tablename_i:tablename_i)
    end do
    tablename_temp(len(tablename_dummy) + 1) = c_null_char
    f_result = lib_tableDef(modelID_dummy, tablenum_dummy, tablename_temp)
  end function tableDef

  function tableInqNamePtr(tableID_dummy) result(f_result)
    character(kind = c_char), dimension(:), pointer :: f_result
    integer(c_int), value :: tableID_dummy
    type(c_ptr) :: ptr
    integer :: rv_shape(1)
    interface
      function lib_tableInqNamePtr(tableID_dummy) bind(c, name =&
      & 'tableInqNamePtr') result(c_result)
        import c_int, c_ptr
        type(c_ptr) :: c_result
        integer(c_int), value :: tableID_dummy
      end function lib_tableInqNamePtr
    end interface
    f_result => null()
    ptr = lib_tableInqNamePtr(tableID_dummy)
    if(c_associated(ptr)) then
      rv_shape(1) = int(lib_strlen(ptr))
      call c_f_pointer(ptr, f_result, rv_shape)
    end if
  end function tableInqNamePtr

  function tableInq(modelID_dummy, tablenum_dummy, tablename_dummy)&
  & result(f_result)
    integer(c_int) :: f_result
    integer(c_int), value :: modelID_dummy
    integer(c_int), value :: tablenum_dummy
    character(kind = c_char, len = *), intent(in) :: tablename_dummy
    character(kind = c_char) :: tablename_temp(len(tablename_dummy) + 1)
    integer :: tablename_i
    interface
      function lib_tableInq(modelID_dummy, tablenum_dummy, tablename_dummy)&
      & bind(c, name = 'tableInq') result(c_result)
        import c_char, c_int
        integer(c_int) :: c_result
        integer(c_int), value :: modelID_dummy
        integer(c_int), value :: tablenum_dummy
        character(kind = c_char) :: tablename_dummy(*)
      end function lib_tableInq
    end interface
    do tablename_i = 1, len(tablename_dummy)
      tablename_temp(tablename_i) = tablename_dummy(tablename_i:tablename_i)
    end do
    tablename_temp(len(tablename_dummy) + 1) = c_null_char
    f_result = lib_tableInq(modelID_dummy, tablenum_dummy, tablename_temp)
  end function tableInq

  subroutine tableInqEntry(tableID_dummy, id_dummy, ltype_dummy, name_dummy,&
  & longname_dummy, units_dummy)
    integer(c_int), value :: tableID_dummy
    integer(c_int), value :: id_dummy
    integer(c_int), value :: ltype_dummy
    character(kind = c_char, len = *), intent(inout) :: name_dummy
    character(kind = c_char, len = *), intent(inout) :: longname_dummy
    character(kind = c_char, len = *), intent(inout) :: units_dummy
    character(kind = c_char) :: name_temp(len(name_dummy) + 1)
    integer :: name_i
    character(kind = c_char) :: longname_temp(len(longname_dummy) + 1)
    integer :: longname_i
    character(kind = c_char) :: units_temp(len(units_dummy) + 1)
    integer :: units_i
    interface
      subroutine lib_tableInqEntry(tableID_dummy, id_dummy, ltype_dummy,&
      & name_dummy, longname_dummy, units_dummy) bind(c, name =&
      & 'tableInqEntry')
        import c_char, c_int
        integer(c_int), value :: tableID_dummy
        integer(c_int), value :: id_dummy
        integer(c_int), value :: ltype_dummy
        character(kind = c_char) :: name_dummy(*)
        character(kind = c_char) :: longname_dummy(*)
        character(kind = c_char) :: units_dummy(*)
      end subroutine lib_tableInqEntry
    end interface
    name_temp(len(name_dummy) + 1) = c_null_char
    do name_i = len(name_dummy), 1, -1
      if(name_dummy(name_i:name_i) /= ' ') exit
      name_temp(name_i) = c_null_char
    end do
    do name_i = name_i, 1, -1
        name_temp(name_i) = name_dummy(name_i:name_i)
    end do
    longname_temp(len(longname_dummy) + 1) = c_null_char
    do longname_i = len(longname_dummy), 1, -1
      if(longname_dummy(longname_i:longname_i) /= ' ') exit
      longname_temp(longname_i) = c_null_char
    end do
    do longname_i = longname_i, 1, -1
        longname_temp(longname_i) = longname_dummy(longname_i:longname_i)
    end do
    units_temp(len(units_dummy) + 1) = c_null_char
    do units_i = len(units_dummy), 1, -1
      if(units_dummy(units_i:units_i) /= ' ') exit
      units_temp(units_i) = c_null_char
    end do
    do units_i = units_i, 1, -1
        units_temp(units_i) = units_dummy(units_i:units_i)
    end do
    call lib_tableInqEntry(tableID_dummy, id_dummy, ltype_dummy, name_temp,&
    & longname_temp, units_temp)
    do name_i = 1, len(name_dummy)
      if(name_temp(name_i) == c_null_char) exit
      name_dummy(name_i:name_i) = name_temp(name_i)
    end do
    do name_i = name_i, len(name_dummy)
      name_dummy(name_i:name_i) = ' '
    end do
    do longname_i = 1, len(longname_dummy)
      if(longname_temp(longname_i) == c_null_char) exit
      longname_dummy(longname_i:longname_i) = longname_temp(longname_i)
    end do
    do longname_i = longname_i, len(longname_dummy)
      longname_dummy(longname_i:longname_i) = ' '
    end do
    do units_i = 1, len(units_dummy)
      if(units_temp(units_i) == c_null_char) exit
      units_dummy(units_i:units_i) = units_temp(units_i)
    end do
    do units_i = units_i, len(units_dummy)
      units_dummy(units_i:units_i) = ' '
    end do
  end subroutine tableInqEntry

  subroutine streamDefHistory(streamID_dummy, size_dummy, history_dummy)
    integer(c_int), value :: streamID_dummy
    integer(c_int), value :: size_dummy
    character(kind = c_char, len = *), intent(in) :: history_dummy
    character(kind = c_char) :: history_temp(len(history_dummy) + 1)
    integer :: history_i
    interface
      subroutine lib_streamDefHistory(streamID_dummy, size_dummy,&
      & history_dummy) bind(c, name = 'streamDefHistory')
        import c_char, c_int
        integer(c_int), value :: streamID_dummy
        integer(c_int), value :: size_dummy
        character(kind = c_char) :: history_dummy(*)
      end subroutine lib_streamDefHistory
    end interface
    do history_i = 1, len(history_dummy)
      history_temp(history_i) = history_dummy(history_i:history_i)
    end do
    history_temp(len(history_dummy) + 1) = c_null_char
    call lib_streamDefHistory(streamID_dummy, size_dummy, history_temp)
  end subroutine streamDefHistory

  subroutine streamInqHistoryString(streamID_dummy, history_dummy)
    integer(c_int), value :: streamID_dummy
    character(kind = c_char, len = *), intent(inout) :: history_dummy
    character(kind = c_char) :: history_temp(len(history_dummy) + 1)
    integer :: history_i
    interface
      subroutine lib_streamInqHistoryString(streamID_dummy, history_dummy)&
      & bind(c, name = 'streamInqHistoryString')
        import c_char, c_int
        integer(c_int), value :: streamID_dummy
        character(kind = c_char) :: history_dummy(*)
      end subroutine lib_streamInqHistoryString
    end interface
    history_temp(len(history_dummy) + 1) = c_null_char
    do history_i = len(history_dummy), 1, -1
      if(history_dummy(history_i:history_i) /= ' ') exit
      history_temp(history_i) = c_null_char
    end do
    do history_i = history_i, 1, -1
        history_temp(history_i) = history_dummy(history_i:history_i)
    end do
    call lib_streamInqHistoryString(streamID_dummy, history_temp)
    do history_i = 1, len(history_dummy)
      if(history_temp(history_i) == c_null_char) exit
      history_dummy(history_i:history_i) = history_temp(history_i)
    end do
    do history_i = history_i, len(history_dummy)
      history_dummy(history_i:history_i) = ' '
    end do
  end subroutine streamInqHistoryString

  function subtypeInqAttribute(subtypeID_dummy, index_dummy, key_dummy,&
  & outValue_dummy) result(f_result)
    integer(c_int) :: f_result
    integer(c_int), value :: subtypeID_dummy
    integer(c_int), value :: index_dummy
    character(kind = c_char, len = *), intent(in) :: key_dummy
    integer(c_int), intent(inout) :: outValue_dummy
    character(kind = c_char) :: key_temp(len(key_dummy) + 1)
    integer :: key_i
    interface
      function lib_subtypeInqAttribute(subtypeID_dummy, index_dummy, key_dummy,&
      & outValue_dummy) bind(c, name = 'subtypeInqAttribute') result(c_result)
        import c_char, c_int
        integer(c_int) :: c_result
        integer(c_int), value :: subtypeID_dummy
        integer(c_int), value :: index_dummy
        character(kind = c_char) :: key_dummy(*)
        integer(c_int), intent(inout) :: outValue_dummy
      end function lib_subtypeInqAttribute
    end interface
    do key_i = 1, len(key_dummy)
      key_temp(key_i) = key_dummy(key_i:key_i)
    end do
    key_temp(len(key_dummy) + 1) = c_null_char
    f_result = lib_subtypeInqAttribute(subtypeID_dummy, index_dummy, key_temp,&
    & outValue_dummy)
  end function subtypeInqAttribute

end module mo_cdi
