! >>> Warning: This is a generated file. If you modify it, you get what you deserve. <<<
!
! Generated by "interfaces/f2003/bindGen.rb" from input file "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_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_ESYSTEM = -10
  integer(c_int), public, parameter :: CDI_EINVAL = -20
  integer(c_int), public, parameter :: CDI_EUFTYPE = -21
  integer(c_int), public, parameter :: CDI_ELIBNAVAIL = -22
  integer(c_int), public, parameter :: CDI_EUFSTRUCT = -23
  integer(c_int), public, parameter :: CDI_EUNC4 = -24
  integer(c_int), public, parameter :: CDI_ELIMIT = -99
  integer(c_int), public, parameter :: FILETYPE_UNDEF = -1
  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 :: COMPRESS_NONE = 0
  integer(c_int), public, parameter :: COMPRESS_SZIP = 1
  integer(c_int), public, parameter :: COMPRESS_GZIP = 2
  integer(c_int), public, parameter :: COMPRESS_BZIP2 = 3
  integer(c_int), public, parameter :: COMPRESS_ZIP = 4
  integer(c_int), public, parameter :: COMPRESS_JPEG = 5
  integer(c_int), public, parameter :: DATATYPE_PACK = 0
  integer(c_int), public, parameter :: DATATYPE_PACK1 = 1
  integer(c_int), public, parameter :: DATATYPE_PACK2 = 2
  integer(c_int), public, parameter :: DATATYPE_PACK3 = 3
  integer(c_int), public, parameter :: DATATYPE_PACK4 = 4
  integer(c_int), public, parameter :: DATATYPE_PACK5 = 5
  integer(c_int), public, parameter :: DATATYPE_PACK6 = 6
  integer(c_int), public, parameter :: DATATYPE_PACK7 = 7
  integer(c_int), public, parameter :: DATATYPE_PACK8 = 8
  integer(c_int), public, parameter :: DATATYPE_PACK9 = 9
  integer(c_int), public, parameter :: DATATYPE_PACK10 = 10
  integer(c_int), public, parameter :: DATATYPE_PACK11 = 11
  integer(c_int), public, parameter :: DATATYPE_PACK12 = 12
  integer(c_int), public, parameter :: DATATYPE_PACK13 = 13
  integer(c_int), public, parameter :: DATATYPE_PACK14 = 14
  integer(c_int), public, parameter :: DATATYPE_PACK15 = 15
  integer(c_int), public, parameter :: DATATYPE_PACK16 = 16
  integer(c_int), public, parameter :: DATATYPE_PACK17 = 17
  integer(c_int), public, parameter :: DATATYPE_PACK18 = 18
  integer(c_int), public, parameter :: DATATYPE_PACK19 = 19
  integer(c_int), public, parameter :: DATATYPE_PACK20 = 20
  integer(c_int), public, parameter :: DATATYPE_PACK21 = 21
  integer(c_int), public, parameter :: DATATYPE_PACK22 = 22
  integer(c_int), public, parameter :: DATATYPE_PACK23 = 23
  integer(c_int), public, parameter :: DATATYPE_PACK24 = 24
  integer(c_int), public, parameter :: DATATYPE_PACK25 = 25
  integer(c_int), public, parameter :: DATATYPE_PACK26 = 26
  integer(c_int), public, parameter :: DATATYPE_PACK27 = 27
  integer(c_int), public, parameter :: DATATYPE_PACK28 = 28
  integer(c_int), public, parameter :: DATATYPE_PACK29 = 29
  integer(c_int), public, parameter :: DATATYPE_PACK30 = 30
  integer(c_int), public, parameter :: DATATYPE_PACK31 = 31
  integer(c_int), public, parameter :: DATATYPE_PACK32 = 32
  integer(c_int), public, parameter :: DATATYPE_CPX32 = 64
  integer(c_int), public, parameter :: DATATYPE_CPX64 = 128
  integer(c_int), public, parameter :: DATATYPE_FLT32 = 132
  integer(c_int), public, parameter :: DATATYPE_FLT64 = 164
  integer(c_int), public, parameter :: DATATYPE_INT8 = 208
  integer(c_int), public, parameter :: DATATYPE_INT16 = 216
  integer(c_int), public, parameter :: DATATYPE_INT32 = 232
  integer(c_int), public, parameter :: DATATYPE_UINT8 = 308
  integer(c_int), public, parameter :: DATATYPE_UINT16 = 316
  integer(c_int), public, parameter :: DATATYPE_UINT32 = 332
  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 :: CHUNK_AUTO = 1
  integer(c_int), public, parameter :: CHUNK_GRID = 2
  integer(c_int), public, parameter :: 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_LCC2 = 12
  integer(c_int), public, parameter :: GRID_LAEA = 13
  integer(c_int), public, parameter :: GRID_SINUSOIDAL = 14
  integer(c_int), public, parameter :: GRID_PROJECTION = 15
  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 :: MAX_KV_PAIRS_MATCH = 10
  integer(c_int), public, parameter :: TIME_CONSTANT = 0
  integer(c_int), public, parameter :: TIME_VARIABLE = 1
  integer(c_int), public, parameter :: TSTEP_CONSTANT = 0
  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_PROLEPTIC = 1
  integer(c_int), public, parameter :: CALENDAR_360DAYS = 2
  integer(c_int), public, parameter :: CALENDAR_365DAYS = 3
  integer(c_int), public, parameter :: CALENDAR_366DAYS = 4
  integer(c_int), public, parameter :: CALENDAR_NONE = 5
  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 :: 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 :: streamInqVlistIDorig
  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 :: 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 :: 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_inqVTime
  public :: cdiIterator_inqLevelType
  public :: cdiIterator_inqLevel
  public :: cdiIterator_inqLevelUuid
  public :: cdiIterator_inqParam
  public :: cdiIterator_inqDatatype
  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 :: 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 :: vlistDefVarTimaccu
  public :: vlistInqVarTimaccu
  public :: vlistDefVarTypeOfGeneratingProcess
  public :: vlistInqVarTypeOfGeneratingProcess
  public :: vlistDefVarProductDefinitionTemplate
  public :: vlistInqVarProductDefinitionTemplate
  public :: vlistInqVarSize
  public :: vlistDefIndex
  public :: vlistInqIndex
  public :: vlistDefFlag
  public :: vlistInqFlag
  public :: vlistFindVar
  public :: vlistFindLevel
  public :: vlistMergedVar
  public :: vlistMergedLevel
  public :: vlistDefVarEnsemble
  public :: vlistInqVarEnsemble
  public :: cdiClearAdditionalKeys
  public :: cdiDefAdditionalKey
  public :: vlistDefVarIntKey
  public :: vlistDefVarDblKey
  public :: vlistHasVarKey
  public :: vlistInqVarDblKey
  public :: vlistInqVarIntKey
  public :: vlistInqNatts
  public :: vlistInqAtt
  public :: vlistDelAtt
  public :: vlistDefAttInt
  public :: vlistDefAttFlt
  public :: vlistDefAttTxt
  public :: vlistInqAttInt
  public :: vlistInqAttFlt
  public :: vlistInqAttTxt
  public :: gridName
  public :: gridNamePtr
  public :: gridCompress
  public :: gridDefMaskGME
  public :: gridInqMaskGME
  public :: gridDefMask
  public :: gridInqMask
  public :: gridPrint
  public :: gridCreate
  public :: gridDestroy
  public :: gridDuplicate
  public :: gridInqType
  public :: gridInqSize
  public :: gridDefXsize
  public :: gridInqXsize
  public :: gridDefYsize
  public :: gridInqYsize
  public :: gridDefNP
  public :: gridInqNP
  public :: gridDefXvals
  public :: gridInqXvals
  public :: gridDefYvals
  public :: gridInqYvals
  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 :: gridDefPrec
  public :: gridInqPrec
  public :: gridInqXval
  public :: gridInqYval
  public :: gridInqXinc
  public :: gridInqYinc
  public :: gridIsCircular
  public :: gridIsRotated
  public :: gridDefXpole
  public :: gridInqXpole
  public :: gridDefYpole
  public :: gridInqYpole
  public :: gridDefAngle
  public :: gridInqAngle
  public :: gridInqTrunc
  public :: gridDefTrunc
  public :: gridDefGMEnd
  public :: gridInqGMEnd
  public :: gridDefGMEni
  public :: gridInqGMEni
  public :: gridDefGMEni2
  public :: gridInqGMEni2
  public :: gridDefGMEni3
  public :: gridInqGMEni3
  public :: gridDefNumber
  public :: gridInqNumber
  public :: gridDefPosition
  public :: gridInqPosition
  public :: gridDefReference
  public :: gridInqReference
  public :: gridDefUUID
  public :: gridInqUUID
  public :: gridDefLCC
  public :: gridInqLCC
  public :: gridDefLcc2
  public :: gridInqLcc2
  public :: gridDefLaea
  public :: gridInqLaea
  public :: gridDefArea
  public :: gridInqArea
  public :: gridHasArea
  public :: gridDefNvertex
  public :: gridInqNvertex
  public :: gridDefXbounds
  public :: gridInqXbounds
  public :: gridDefYbounds
  public :: gridInqYbounds
  public :: gridDefRowlon
  public :: gridInqRowlon
  public :: gridChangeType
  public :: gridDefComplexPacking
  public :: gridInqComplexPacking
  public :: zaxisName
  public :: zaxisCreate
  public :: zaxisDestroy
  public :: zaxisInqType
  public :: zaxisInqSize
  public :: zaxisDuplicate
  public :: zaxisResize
  public :: zaxisPrint
  public :: zaxisDefLevels
  public :: zaxisInqLevels
  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 :: zaxisDefPsName
  public :: zaxisInqPsName
  public :: zaxisDefPrec
  public :: zaxisInqPrec
  public :: zaxisDefPositive
  public :: zaxisInqPositive
  public :: zaxisDefScalar
  public :: zaxisInqScalar
  public :: zaxisDefLtype
  public :: zaxisInqLtype
  public :: zaxisInqLevelsPtr
  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 :: 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 :: tableWriteC
  public :: tableWrite
  public :: tableRead
  public :: tableDef
  public :: tableInqNamePtr
  public :: tableDefEntry
  public :: tableInq
  public :: tableInqNumber
  public :: tableInqNum
  public :: tableInqModel
  public :: tableInqPar
  public :: tableInqParCode
  public :: tableInqParName
  public :: tableInqParLongname
  public :: tableInqParUnits
  public :: tableInqParNamePtr
  public :: tableInqParLongnamePtr
  public :: tableInqParUnitsPtr
  public :: streamDefHistory
  public :: streamInqHistorySize
  public :: streamInqHistoryString
  public :: subtypeCreate
  public :: subtypePrint
  public :: subtypeCompare
  public :: subtypeInqSize
  public :: subtypeInqActiveIndex
  public :: subtypeDefActiveIndex
  public :: subtypeInqTile
  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

    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
      integer(c_int), 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
      integer(c_int), value :: year_dummy
      integer(c_int), value :: month_dummy
      integer(c_int), value :: day_dummy
      integer(c_int) :: 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 streamInqVlistIDorig(streamID_dummy) bind(c, name =&
    & 'streamInqVlistIDorig') result(f_result)
      import c_int
      integer(c_int), value :: streamID_dummy
      integer(c_int) :: f_result
    end function streamInqVlistIDorig

    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 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
      integer(c_int), value :: streamID_dummy
      integer(c_int), value :: varID_dummy
      real(c_double), intent(in) :: data_dummy(*)
      integer(c_int), 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
      integer(c_int), value :: streamID_dummy
      integer(c_int), value :: varID_dummy
      real(c_float), intent(in) :: data_dummy(*)
      integer(c_int), 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
      integer(c_int), value :: streamID_dummy
      integer(c_int), value :: varID_dummy
      real(c_double), intent(inout) :: data_dummy(*)
      integer(c_int), 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
      integer(c_int), value :: streamID_dummy
      integer(c_int), value :: varID_dummy
      real(c_float), intent(inout) :: data_dummy(*)
      integer(c_int), 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
      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_int), 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
      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_int), 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
      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_int), 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
      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_int), 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
      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_int), 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
      integer(c_int), value :: streamID_dummy
      real(c_double), intent(in) :: data_dummy(*)
      integer(c_int), value :: nmiss_dummy
    end subroutine streamWriteRecord

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

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

    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
      integer(c_int), value :: vlistID_dummy
      integer(c_int) :: 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,&
    & tsteptype_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 :: tsteptype_dummy
      integer(c_int), value :: tilesetID_dummy
      integer(c_int) :: f_result
    end function vlistDefVarTiles

    function vlistDefVar(vlistID_dummy, gridID_dummy, zaxisID_dummy,&
    & tsteptype_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 :: tsteptype_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, tsteptype_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) :: tsteptype_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 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

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

    function vlistInqVarTimaccu(vlistID_dummy, varID_dummy) bind(c, name =&
    & 'vlistInqVarTimaccu') 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 vlistInqVarTimaccu

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

    function vlistInqVarTypeOfGeneratingProcess(vlistID_dummy, varID_dummy)&
    & bind(c, name = 'vlistInqVarTypeOfGeneratingProcess') 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 vlistInqVarTypeOfGeneratingProcess

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

    function vlistInqVarProductDefinitionTemplate(vlistID_dummy, varID_dummy)&
    & bind(c, name = 'vlistInqVarProductDefinitionTemplate') 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 vlistInqVarProductDefinitionTemplate

    function vlistInqVarSize(vlistID_dummy, varID_dummy) bind(c, name =&
    & 'vlistInqVarSize') 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 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 vlistDefVarEnsemble(vlistID_dummy, varID_dummy, ensID_dummy,&
    & ensCount_dummy, forecast_type_dummy) bind(c, name =&
    & 'vlistDefVarEnsemble')
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: varID_dummy
      integer(c_int), value :: ensID_dummy
      integer(c_int), value :: ensCount_dummy
      integer(c_int), value :: forecast_type_dummy
    end subroutine vlistDefVarEnsemble

    function vlistInqVarEnsemble(vlistID_dummy, varID_dummy, ensID_dummy,&
    & ensCount_dummy, forecast_type_dummy) bind(c, name =&
    & 'vlistInqVarEnsemble') result(f_result)
      import c_int
      integer(c_int), value :: vlistID_dummy
      integer(c_int), value :: varID_dummy
      integer(c_int), intent(inout) :: ensID_dummy
      integer(c_int), intent(inout) :: ensCount_dummy
      integer(c_int), intent(inout) :: forecast_type_dummy
      integer(c_int) :: f_result
    end function vlistInqVarEnsemble

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

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

    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, index_dummy, opt_dummy) bind(c, name =&
    & 'gridPrint')
      import c_int
      integer(c_int), value :: gridID_dummy
      integer(c_int), value :: index_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
      integer(c_int), value :: gridtype_dummy
      integer(c_int), 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

    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
      integer(c_int), value :: gridID_dummy
      integer(c_int) :: f_result
    end function gridInqSize

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

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

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

    function gridInqYsize(gridID_dummy) bind(c, name = 'gridInqYsize')&
    & result(f_result)
      import c_int
      integer(c_int), value :: gridID_dummy
      integer(c_int) :: 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
      integer(c_int), value :: gridID_dummy
      real(c_double), intent(inout) :: xvals_dummy(*)
      integer(c_int) :: f_result
    end function gridInqXvals

    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
      integer(c_int), value :: gridID_dummy
      real(c_double), intent(inout) :: yvals_dummy(*)
      integer(c_int) :: f_result
    end function gridInqYvals

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

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

    function gridInqXval(gridID_dummy, index_dummy) bind(c, name =&
    & 'gridInqXval') result(f_result)
      import c_double, c_int
      integer(c_int), value :: gridID_dummy
      integer(c_int), 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
      integer(c_int), value :: gridID_dummy
      integer(c_int), 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 gridIsRotated(gridID_dummy) bind(c, name = 'gridIsRotated')&
    & result(f_result)
      import c_int
      integer(c_int), value :: gridID_dummy
      integer(c_int) :: f_result
    end function gridIsRotated

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

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

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

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

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

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

    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 gridDefGMEnd(gridID_dummy, nd_dummy) bind(c, name =&
    & 'gridDefGMEnd')
      import c_int
      integer(c_int), value :: gridID_dummy
      integer(c_int), value :: nd_dummy
    end subroutine gridDefGMEnd

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

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

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

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

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

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

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

    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 gridDefLCC(gridID_dummy, originLon_dummy, originLat_dummy,&
    & lonParY_dummy, lat1_dummy, lat2_dummy, xinc_dummy, yinc_dummy,&
    & projflag_dummy, scanflag_dummy) bind(c, name = 'gridDefLCC')
      import c_double, c_int
      integer(c_int), value :: gridID_dummy
      real(c_double), value :: originLon_dummy
      real(c_double), value :: originLat_dummy
      real(c_double), value :: lonParY_dummy
      real(c_double), value :: lat1_dummy
      real(c_double), value :: lat2_dummy
      real(c_double), value :: xinc_dummy
      real(c_double), value :: yinc_dummy
      integer(c_int), value :: projflag_dummy
      integer(c_int), value :: scanflag_dummy
    end subroutine gridDefLCC

    subroutine gridInqLCC(gridID_dummy, originLon_dummy, originLat_dummy,&
    & lonParY_dummy, lat1_dummy, lat2_dummy, xinc_dummy, yinc_dummy,&
    & projflag_dummy, scanflag_dummy) bind(c, name = 'gridInqLCC')
      import c_double, c_int
      integer(c_int), value :: gridID_dummy
      real(c_double), intent(inout) :: originLon_dummy
      real(c_double), intent(inout) :: originLat_dummy
      real(c_double), intent(inout) :: lonParY_dummy
      real(c_double), intent(inout) :: lat1_dummy
      real(c_double), intent(inout) :: lat2_dummy
      real(c_double), intent(inout) :: xinc_dummy
      real(c_double), intent(inout) :: yinc_dummy
      integer(c_int), intent(inout) :: projflag_dummy
      integer(c_int), intent(inout) :: scanflag_dummy
    end subroutine gridInqLCC

    subroutine gridDefLcc2(gridID_dummy, earth_radius_dummy, lon_0_dummy,&
    & lat_0_dummy, lat_1_dummy, lat_2_dummy) bind(c, name = 'gridDefLcc2')
      import c_double, c_int
      integer(c_int), value :: gridID_dummy
      real(c_double), value :: earth_radius_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
    end subroutine gridDefLcc2

    subroutine gridInqLcc2(gridID_dummy, earth_radius_dummy, lon_0_dummy,&
    & lat_0_dummy, lat_1_dummy, lat_2_dummy) bind(c, name = 'gridInqLcc2')
      import c_double, c_int
      integer(c_int), value :: gridID_dummy
      real(c_double), intent(inout) :: earth_radius_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
    end subroutine gridInqLcc2

    subroutine gridDefLaea(gridID_dummy, earth_radius_dummy, lon_0_dummy,&
    & lat_0_dummy) bind(c, name = 'gridDefLaea')
      import c_double, c_int
      integer(c_int), value :: gridID_dummy
      real(c_double), value :: earth_radius_dummy
      real(c_double), value :: lon_0_dummy
      real(c_double), value :: lat_0_dummy
    end subroutine gridDefLaea

    subroutine gridInqLaea(gridID_dummy, earth_radius_dummy, lon_0_dummy,&
    & lat_0_dummy) bind(c, name = 'gridInqLaea')
      import c_double, c_int
      integer(c_int), value :: gridID_dummy
      real(c_double), intent(inout) :: earth_radius_dummy
      real(c_double), intent(inout) :: lon_0_dummy
      real(c_double), intent(inout) :: lat_0_dummy
    end subroutine gridInqLaea

    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
      integer(c_int), value :: gridID_dummy
      real(c_double), intent(inout) :: xbounds_dummy(*)
      integer(c_int) :: f_result
    end function gridInqXbounds

    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
      integer(c_int), value :: gridID_dummy
      real(c_double), intent(inout) :: ybounds_dummy(*)
      integer(c_int) :: f_result
    end function gridInqYbounds

    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

    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 zaxisResize(zaxisID_dummy, size_dummy) bind(c, name =&
    & 'zaxisResize')
      import c_int
      integer(c_int), value :: zaxisID_dummy
      integer(c_int), value :: size_dummy
    end subroutine zaxisResize

    subroutine zaxisPrint(zaxisID_dummy, index_dummy) bind(c, name =&
    & 'zaxisPrint')
      import c_int
      integer(c_int), value :: zaxisID_dummy
      integer(c_int), value :: index_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

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

    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 zaxisDefPrec(zaxisID_dummy, prec_dummy) bind(c, name =&
    & 'zaxisDefPrec')
      import c_int
      integer(c_int), value :: zaxisID_dummy
      integer(c_int), value :: prec_dummy
    end subroutine zaxisDefPrec

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

    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

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

    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
      integer(c_int), value :: taxisID_dummy
      integer(c_int), 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
      integer(c_int), value :: taxisID_dummy
      integer(c_int) :: 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
      integer(c_int), value :: taxisID_dummy
      integer(c_int), 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
      integer(c_int), value :: taxisID_dummy
      integer(c_int) :: 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
      integer(c_int), value :: taxisID_dummy
      integer(c_int), 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
      integer(c_int), value :: taxisID_dummy
      integer(c_int) :: 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 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
      integer(c_int), value :: taxisID_dummy
      integer(c_int), value :: vdate_lb_dummy
      integer(c_int), 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
      integer(c_int), value :: taxisID_dummy
      integer(c_int), intent(inout) :: vdate_lb_dummy
      integer(c_int), 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_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_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

  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_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 vlistInqAtt(vlistID_dummy, varID_dummy, attrnum_dummy, name_dummy,&
  & typep_dummy, lenp_dummy) result(f_result)
    integer(c_int) :: f_result
    integer(c_int), value :: vlistID_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_vlistInqAtt(vlistID_dummy, varID_dummy, attrnum_dummy,&
      & name_dummy, typep_dummy, lenp_dummy) bind(c, name = 'vlistInqAtt')&
      & 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
        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_vlistInqAtt
    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_vlistInqAtt(vlistID_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 vlistInqAtt

  function vlistDelAtt(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_vlistDelAtt(vlistID_dummy, varID_dummy, name_dummy) bind(c,&
      & name = 'vlistDelAtt') 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_vlistDelAtt
    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_vlistDelAtt(vlistID_dummy, varID_dummy, name_temp)
  end function vlistDelAtt

  function vlistDefAttInt(vlistID_dummy, varID_dummy, name_dummy, type_dummy,&
  & len_dummy, ip_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
    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_vlistDefAttInt(vlistID_dummy, varID_dummy, name_dummy,&
      & type_dummy, len_dummy, ip_dummy) bind(c, name = 'vlistDefAttInt')&
      & 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(*)
        integer(c_int), value :: type_dummy
        integer(c_int), value :: len_dummy
        integer(c_int), intent(in) :: ip_dummy(*)
      end function lib_vlistDefAttInt
    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_vlistDefAttInt(vlistID_dummy, varID_dummy, name_temp,&
    & type_dummy, len_dummy, ip_dummy)
  end function vlistDefAttInt

  function vlistDefAttFlt(vlistID_dummy, varID_dummy, name_dummy, type_dummy,&
  & len_dummy, dp_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
    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_vlistDefAttFlt(vlistID_dummy, varID_dummy, name_dummy,&
      & type_dummy, len_dummy, dp_dummy) bind(c, name = 'vlistDefAttFlt')&
      & result(c_result)
        import c_char, c_double, 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(*)
        integer(c_int), value :: type_dummy
        integer(c_int), value :: len_dummy
        real(c_double), intent(in) :: dp_dummy(*)
      end function lib_vlistDefAttFlt
    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_vlistDefAttFlt(vlistID_dummy, varID_dummy, name_temp,&
    & type_dummy, len_dummy, dp_dummy)
  end function vlistDefAttFlt

  function vlistDefAttTxt(vlistID_dummy, varID_dummy, name_dummy, len_dummy,&
  & tp_cbuf_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
    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_vlistDefAttTxt(vlistID_dummy, varID_dummy, name_dummy,&
      & len_dummy, tp_cbuf_dummy) bind(c, name = 'vlistDefAttTxt')&
      & 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(*)
        integer(c_int), value :: len_dummy
        character(kind = c_char) :: tp_cbuf_dummy(*)
      end function lib_vlistDefAttTxt
    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_vlistDefAttTxt(vlistID_dummy, varID_dummy, name_temp,&
    & len_dummy, tp_cbuf_temp)
  end function vlistDefAttTxt

  function vlistInqAttInt(vlistID_dummy, varID_dummy, name_dummy, mlen_dummy,&
  & ip_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
    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_vlistInqAttInt(vlistID_dummy, varID_dummy, name_dummy,&
      & mlen_dummy, ip_dummy) bind(c, name = 'vlistInqAttInt') 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(*)
        integer(c_int), value :: mlen_dummy
        integer(c_int), intent(inout) :: ip_dummy(*)
      end function lib_vlistInqAttInt
    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_vlistInqAttInt(vlistID_dummy, varID_dummy, name_temp,&
    & mlen_dummy, ip_dummy)
  end function vlistInqAttInt

  function vlistInqAttFlt(vlistID_dummy, varID_dummy, name_dummy, mlen_dummy,&
  & dp_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
    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_vlistInqAttFlt(vlistID_dummy, varID_dummy, name_dummy,&
      & mlen_dummy, dp_dummy) bind(c, name = 'vlistInqAttFlt') result(c_result)
        import c_char, c_double, 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(*)
        integer(c_int), value :: mlen_dummy
        real(c_double), intent(inout) :: dp_dummy(*)
      end function lib_vlistInqAttFlt
    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_vlistInqAttFlt(vlistID_dummy, varID_dummy, name_temp,&
    & mlen_dummy, dp_dummy)
  end function vlistInqAttFlt

  function vlistInqAttTxt(vlistID_dummy, varID_dummy, name_dummy, mlen_dummy,&
  & tp_cbuf_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
    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_vlistInqAttTxt(vlistID_dummy, varID_dummy, name_dummy,&
      & mlen_dummy, tp_cbuf_dummy) bind(c, name = 'vlistInqAttTxt')&
      & 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(*)
        integer(c_int), value :: mlen_dummy
        character(kind = c_char) :: tp_cbuf_dummy(*)
      end function lib_vlistInqAttTxt
    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_vlistInqAttTxt(vlistID_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 vlistInqAttTxt

  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

  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

  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

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

  subroutine zaxisInqPsName(zaxisID_dummy, psname_dummy)
    integer(c_int), value :: zaxisID_dummy
    character(kind = c_char, len = *), intent(inout) :: psname_dummy
    character(kind = c_char) :: psname_temp(len(psname_dummy) + 1)
    integer :: psname_i
    interface
      subroutine lib_zaxisInqPsName(zaxisID_dummy, psname_dummy) bind(c, name =&
      & 'zaxisInqPsName')
        import c_char, c_int
        integer(c_int), value :: zaxisID_dummy
        character(kind = c_char) :: psname_dummy(*)
      end subroutine lib_zaxisInqPsName
    end interface
    psname_temp(len(psname_dummy) + 1) = c_null_char
    do psname_i = len(psname_dummy), 1, -1
      if(psname_dummy(psname_i:psname_i) /= ' ') exit
      psname_temp(psname_i) = c_null_char
    end do
    do psname_i = psname_i, 1, -1
        psname_temp(psname_i) = psname_dummy(psname_i:psname_i)
    end do
    call lib_zaxisInqPsName(zaxisID_dummy, psname_temp)
    do psname_i = 1, len(psname_dummy)
      if(psname_temp(psname_i) == c_null_char) exit
      psname_dummy(psname_i:psname_i) = psname_temp(psname_i)
    end do
    do psname_i = psname_i, len(psname_dummy)
      psname_dummy(psname_i:psname_i) = ' '
    end do
  end subroutine zaxisInqPsName

  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(inout) :: 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
    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_modelInq(instID_dummy, modelgribID_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 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 tableWriteC(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_tableWriteC(filename_dummy, tableID_dummy) bind(c, name =&
      & 'tableWriteC')
        import c_char, c_int
        character(kind = c_char) :: filename_dummy(*)
        integer(c_int), value :: tableID_dummy
      end subroutine lib_tableWriteC
    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_tableWriteC(filename_temp, tableID_dummy)
  end subroutine tableWriteC

  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

  subroutine tableDefEntry(tableID_dummy, code_dummy, name_dummy,&
  & longname_dummy, units_dummy)
    integer(c_int), value :: tableID_dummy
    integer(c_int), value :: code_dummy
    character(kind = c_char, len = *), intent(in) :: name_dummy
    character(kind = c_char, len = *), intent(in) :: longname_dummy
    character(kind = c_char, len = *), intent(in) :: 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_tableDefEntry(tableID_dummy, code_dummy, name_dummy,&
      & longname_dummy, units_dummy) bind(c, name = 'tableDefEntry')
        import c_char, c_int
        integer(c_int), value :: tableID_dummy
        integer(c_int), value :: code_dummy
        character(kind = c_char) :: name_dummy(*)
        character(kind = c_char) :: longname_dummy(*)
        character(kind = c_char) :: units_dummy(*)
      end subroutine lib_tableDefEntry
    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
    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_tableDefEntry(tableID_dummy, code_dummy, name_temp, longname_temp,&
    & units_temp)
  end subroutine tableDefEntry

  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 tableInqPar(tableID_dummy, code_dummy, name_dummy, longname_dummy,&
  & units_dummy)
    integer(c_int), value :: tableID_dummy
    integer(c_int), value :: code_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_tableInqPar(tableID_dummy, code_dummy, name_dummy,&
      & longname_dummy, units_dummy) bind(c, name = 'tableInqPar')
        import c_char, c_int
        integer(c_int), value :: tableID_dummy
        integer(c_int), value :: code_dummy
        character(kind = c_char) :: name_dummy(*)
        character(kind = c_char) :: longname_dummy(*)
        character(kind = c_char) :: units_dummy(*)
      end subroutine lib_tableInqPar
    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_tableInqPar(tableID_dummy, code_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 tableInqPar

  function tableInqParCode(tableID_dummy, name_dummy, code_dummy)&
  & result(f_result)
    integer(c_int) :: f_result
    integer(c_int), value :: tableID_dummy
    character(kind = c_char, len = *), intent(inout) :: name_dummy
    integer(c_int), intent(inout) :: code_dummy
    character(kind = c_char) :: name_temp(len(name_dummy) + 1)
    integer :: name_i
    interface
      function lib_tableInqParCode(tableID_dummy, name_dummy, code_dummy)&
      & bind(c, name = 'tableInqParCode') result(c_result)
        import c_char, c_int
        integer(c_int) :: c_result
        integer(c_int), value :: tableID_dummy
        character(kind = c_char) :: name_dummy(*)
        integer(c_int), intent(inout) :: code_dummy
      end function lib_tableInqParCode
    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_tableInqParCode(tableID_dummy, name_temp, code_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 tableInqParCode

  function tableInqParName(tableID_dummy, code_dummy, name_dummy)&
  & result(f_result)
    integer(c_int) :: f_result
    integer(c_int), value :: tableID_dummy
    integer(c_int), value :: code_dummy
    character(kind = c_char, len = *), intent(inout) :: name_dummy
    character(kind = c_char) :: name_temp(len(name_dummy) + 1)
    integer :: name_i
    interface
      function lib_tableInqParName(tableID_dummy, code_dummy, name_dummy)&
      & bind(c, name = 'tableInqParName') result(c_result)
        import c_char, c_int
        integer(c_int) :: c_result
        integer(c_int), value :: tableID_dummy
        integer(c_int), value :: code_dummy
        character(kind = c_char) :: name_dummy(*)
      end function lib_tableInqParName
    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_tableInqParName(tableID_dummy, code_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 function tableInqParName

  function tableInqParLongname(tableID_dummy, code_dummy, longname_dummy)&
  & result(f_result)
    integer(c_int) :: f_result
    integer(c_int), value :: tableID_dummy
    integer(c_int), value :: code_dummy
    character(kind = c_char, len = *), intent(inout) :: longname_dummy
    character(kind = c_char) :: longname_temp(len(longname_dummy) + 1)
    integer :: longname_i
    interface
      function lib_tableInqParLongname(tableID_dummy, code_dummy,&
      & longname_dummy) bind(c, name = 'tableInqParLongname') result(c_result)
        import c_char, c_int
        integer(c_int) :: c_result
        integer(c_int), value :: tableID_dummy
        integer(c_int), value :: code_dummy
        character(kind = c_char) :: longname_dummy(*)
      end function lib_tableInqParLongname
    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
    f_result = lib_tableInqParLongname(tableID_dummy, code_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 function tableInqParLongname

  function tableInqParUnits(tableID_dummy, code_dummy, units_dummy)&
  & result(f_result)
    integer(c_int) :: f_result
    integer(c_int), value :: tableID_dummy
    integer(c_int), value :: code_dummy
    character(kind = c_char, len = *), intent(inout) :: units_dummy
    character(kind = c_char) :: units_temp(len(units_dummy) + 1)
    integer :: units_i
    interface
      function lib_tableInqParUnits(tableID_dummy, code_dummy, units_dummy)&
      & bind(c, name = 'tableInqParUnits') result(c_result)
        import c_char, c_int
        integer(c_int) :: c_result
        integer(c_int), value :: tableID_dummy
        integer(c_int), value :: code_dummy
        character(kind = c_char) :: units_dummy(*)
      end function lib_tableInqParUnits
    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
    f_result = lib_tableInqParUnits(tableID_dummy, code_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 function tableInqParUnits

  function tableInqParNamePtr(tableID_dummy, parID_dummy) result(f_result)
    character(kind = c_char), dimension(:), pointer :: f_result
    integer(c_int), value :: tableID_dummy
    integer(c_int), value :: parID_dummy
    type(c_ptr) :: ptr
    integer :: rv_shape(1)
    interface
      function lib_tableInqParNamePtr(tableID_dummy, parID_dummy) bind(c, name&
      & = 'tableInqParNamePtr') result(c_result)
        import c_int, c_ptr
        type(c_ptr) :: c_result
        integer(c_int), value :: tableID_dummy
        integer(c_int), value :: parID_dummy
      end function lib_tableInqParNamePtr
    end interface
    f_result => null()
    ptr = lib_tableInqParNamePtr(tableID_dummy, parID_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 tableInqParNamePtr

  function tableInqParLongnamePtr(tableID_dummy, parID_dummy) result(f_result)
    character(kind = c_char), dimension(:), pointer :: f_result
    integer(c_int), value :: tableID_dummy
    integer(c_int), value :: parID_dummy
    type(c_ptr) :: ptr
    integer :: rv_shape(1)
    interface
      function lib_tableInqParLongnamePtr(tableID_dummy, parID_dummy) bind(c,&
      & name = 'tableInqParLongnamePtr') result(c_result)
        import c_int, c_ptr
        type(c_ptr) :: c_result
        integer(c_int), value :: tableID_dummy
        integer(c_int), value :: parID_dummy
      end function lib_tableInqParLongnamePtr
    end interface
    f_result => null()
    ptr = lib_tableInqParLongnamePtr(tableID_dummy, parID_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 tableInqParLongnamePtr

  function tableInqParUnitsPtr(tableID_dummy, parID_dummy) result(f_result)
    character(kind = c_char), dimension(:), pointer :: f_result
    integer(c_int), value :: tableID_dummy
    integer(c_int), value :: parID_dummy
    type(c_ptr) :: ptr
    integer :: rv_shape(1)
    interface
      function lib_tableInqParUnitsPtr(tableID_dummy, parID_dummy) bind(c, name&
      & = 'tableInqParUnitsPtr') result(c_result)
        import c_int, c_ptr
        type(c_ptr) :: c_result
        integer(c_int), value :: tableID_dummy
        integer(c_int), value :: parID_dummy
      end function lib_tableInqParUnitsPtr
    end interface
    f_result => null()
    ptr = lib_tableInqParUnitsPtr(tableID_dummy, parID_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 tableInqParUnitsPtr

  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

end module mo_cdi
