! >>> 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 :: 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 vlistDefNtsteps
	public vlistNtsteps
	public vlistGridsizeMax
	public vlistGrid
	public vlistGridIndex
	public vlistChangeGridIndex
	public vlistChangeGrid
	public vlistZaxis
	public vlistZaxisIndex
	public vlistChangeZaxisIndex
	public vlistChangeZaxis
	public vlistNrecs
	public vlistDefTaxis
	public vlistInqTaxis
	public vlistDefTable
	public vlistInqTable
	public vlistDefInstitut
	public vlistInqInstitut
	public vlistDefModel
	public vlistInqModel
	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 zaxisDefPrec
	public zaxisInqPrec
	public zaxisDefPositive
	public zaxisInqPositive
	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 gribapiLibraryVersion

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

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

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

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

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

	subroutine cdiPrintVersion()
		interface
			subroutine lib_cdiPrintVersion() bind(c, name = 'cdiPrintVersion')
			end subroutine lib_cdiPrintVersion
		end interface
		call lib_cdiPrintVersion()
	end subroutine cdiPrintVersion

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

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

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

	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

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

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

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

	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))
		integer :: paramstr_i
		logical :: paramstr_padding = .true.
		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
		do paramstr_i = len(paramstr_dummy), 1, -1
			if(paramstr_dummy(paramstr_i:paramstr_i) /= ' ') paramstr_padding = .false.
			if(paramstr_padding) then
				paramstr_temp(paramstr_i) = c_null_char
			else
				paramstr_temp(paramstr_i) = paramstr_dummy(paramstr_i:paramstr_i)
			end if
		end do
		call lib_cdiParamToString(param_dummy, paramstr_temp, maxlen_dummy)
		paramstr_padding = .false.
		do paramstr_i = 1, len(paramstr_dummy)
			if(paramstr_temp(paramstr_i) == c_null_char) paramstr_padding = .true.
			if(paramstr_padding) then
				paramstr_dummy(paramstr_i:paramstr_i) = ' '
			else
				paramstr_dummy(paramstr_i:paramstr_i) = paramstr_temp(paramstr_i)
			end if
		end do
	end subroutine cdiParamToString

	subroutine cdiDecodeParam(param_dummy, pnum, pcat, pdis)
		integer(c_int), value :: param_dummy
		integer(c_int), optional, intent(inout) :: pnum
		integer(c_int), optional, intent(inout) :: pcat
		integer(c_int), optional, intent(inout) :: pdis
		integer(c_int), target :: pnum_temp
		type(c_ptr) :: pnum_ptr
		integer(c_int), target :: pcat_temp
		type(c_ptr) :: pcat_ptr
		integer(c_int), target :: pdis_temp
		type(c_ptr) :: pdis_ptr
		interface
			subroutine lib_cdiDecodeParam(param_dummy, pnum, pcat, pdis) bind(c, name = 'cdiDecodeParam')
				import c_int, c_ptr
				integer(c_int), value :: param_dummy
				type(c_ptr), value :: pnum
				type(c_ptr), value :: pcat
				type(c_ptr), value :: pdis
			end subroutine lib_cdiDecodeParam
		end interface
		pnum_ptr = c_null_ptr
		if(present(pnum)) pnum_ptr = c_loc(pnum_temp)
		pcat_ptr = c_null_ptr
		if(present(pcat)) pcat_ptr = c_loc(pcat_temp)
		pdis_ptr = c_null_ptr
		if(present(pdis)) pdis_ptr = c_loc(pdis_temp)
		call lib_cdiDecodeParam(param_dummy, pnum_ptr, pcat_ptr, pdis_ptr)
		if(present(pnum)) pnum = pnum_temp
		if(present(pcat)) pcat = pcat_temp
		if(present(pdis)) pdis = pdis_temp
	end subroutine cdiDecodeParam

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

	subroutine cdiDecodeDate(date_dummy, year, month, day)
		integer(c_int), value :: date_dummy
		integer(c_int), optional, intent(inout) :: year
		integer(c_int), optional, intent(inout) :: month
		integer(c_int), optional, intent(inout) :: day
		integer(c_int), target :: year_temp
		type(c_ptr) :: year_ptr
		integer(c_int), target :: month_temp
		type(c_ptr) :: month_ptr
		integer(c_int), target :: day_temp
		type(c_ptr) :: day_ptr
		interface
			subroutine lib_cdiDecodeDate(date_dummy, year, month, day) bind(c, name = 'cdiDecodeDate')
				import c_int, c_ptr
				integer(c_int), value :: date_dummy
				type(c_ptr), value :: year
				type(c_ptr), value :: month
				type(c_ptr), value :: day
			end subroutine lib_cdiDecodeDate
		end interface
		year_ptr = c_null_ptr
		if(present(year)) year_ptr = c_loc(year_temp)
		month_ptr = c_null_ptr
		if(present(month)) month_ptr = c_loc(month_temp)
		day_ptr = c_null_ptr
		if(present(day)) day_ptr = c_loc(day_temp)
		call lib_cdiDecodeDate(date_dummy, year_ptr, month_ptr, day_ptr)
		if(present(year)) year = year_temp
		if(present(month)) month = month_temp
		if(present(day)) day = day_temp
	end subroutine cdiDecodeDate

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

	subroutine cdiDecodeTime(time_dummy, hour, minute, second)
		integer(c_int), value :: time_dummy
		integer(c_int), optional, intent(inout) :: hour
		integer(c_int), optional, intent(inout) :: minute
		integer(c_int), optional, intent(inout) :: second
		integer(c_int), target :: hour_temp
		type(c_ptr) :: hour_ptr
		integer(c_int), target :: minute_temp
		type(c_ptr) :: minute_ptr
		integer(c_int), target :: second_temp
		type(c_ptr) :: second_ptr
		interface
			subroutine lib_cdiDecodeTime(time_dummy, hour, minute, second) bind(c, name = 'cdiDecodeTime')
				import c_int, c_ptr
				integer(c_int), value :: time_dummy
				type(c_ptr), value :: hour
				type(c_ptr), value :: minute
				type(c_ptr), value :: second
			end subroutine lib_cdiDecodeTime
		end interface
		hour_ptr = c_null_ptr
		if(present(hour)) hour_ptr = c_loc(hour_temp)
		minute_ptr = c_null_ptr
		if(present(minute)) minute_ptr = c_loc(minute_temp)
		second_ptr = c_null_ptr
		if(present(second)) second_ptr = c_loc(second_temp)
		call lib_cdiDecodeTime(time_dummy, hour_ptr, minute_ptr, second_ptr)
		if(present(hour)) hour = hour_temp
		if(present(minute)) minute = minute_temp
		if(present(second)) second = second_temp
	end subroutine cdiDecodeTime

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

	function cdiGetFiletype(path_dummy, byteorder) result(result)
		integer(c_int) :: result
		character(kind = c_char, len = *), intent(in) :: path_dummy
		integer(c_int), optional, intent(inout) :: byteorder
		character(kind = c_char) :: path_temp(len(path_dummy) + 1)
		integer :: path_i
		integer(c_int), target :: byteorder_temp
		type(c_ptr) :: byteorder_ptr
		interface
			integer(c_int) function lib_cdiGetFiletype(path_dummy, byteorder) bind(c, name = 'cdiGetFiletype')
				import c_char, c_int, c_ptr
				character(kind = c_char) :: path_dummy(*)
				type(c_ptr), value :: byteorder
			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
		byteorder_ptr = c_null_ptr
		if(present(byteorder)) byteorder_ptr = c_loc(byteorder_temp)
		result = lib_cdiGetFiletype(path_temp, byteorder_ptr)
		if(present(byteorder)) byteorder = byteorder_temp
	end function cdiGetFiletype

	function streamOpenRead(path_dummy) result(result)
		integer(c_int) :: result
		character(kind = c_char, len = *), intent(in) :: path_dummy
		character(kind = c_char) :: path_temp(len(path_dummy) + 1)
		integer :: path_i
		interface
			integer(c_int) function lib_streamOpenRead(path_dummy) bind(c, name = 'streamOpenRead')
				import c_char, c_int
				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
		result = lib_streamOpenRead(path_temp)
	end function streamOpenRead

	function streamOpenWrite(path_dummy, filetype_dummy) result(result)
		integer(c_int) :: 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
			integer(c_int) function lib_streamOpenWrite(path_dummy, filetype_dummy) bind(c, name = 'streamOpenWrite')
				import c_char, c_int
				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
		result = lib_streamOpenWrite(path_temp, filetype_dummy)
	end function streamOpenWrite

	function streamOpenAppend(path_dummy) result(result)
		integer(c_int) :: result
		character(kind = c_char, len = *), intent(in) :: path_dummy
		character(kind = c_char) :: path_temp(len(path_dummy) + 1)
		integer :: path_i
		interface
			integer(c_int) function lib_streamOpenAppend(path_dummy) bind(c, name = 'streamOpenAppend')
				import c_char, c_int
				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
		result = lib_streamOpenAppend(path_temp)
	end function streamOpenAppend

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

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

	subroutine streamDefVlist(streamID_dummy, vlistID_dummy)
		integer(c_int), value :: streamID_dummy
		integer(c_int), value :: vlistID_dummy
		interface
			subroutine lib_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 lib_streamDefVlist
		end interface
		call lib_streamDefVlist(streamID_dummy, vlistID_dummy)
	end subroutine streamDefVlist

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

	function streamInqVlistIDorig(streamID_dummy) result(result)
		integer(c_int) :: result
		integer(c_int), value :: streamID_dummy
		interface
			integer(c_int) function lib_streamInqVlistIDorig(streamID_dummy) bind(c, name = 'streamInqVlistIDorig')
				import c_int
				integer(c_int), value :: streamID_dummy
			end function lib_streamInqVlistIDorig
		end interface
		result = lib_streamInqVlistIDorig(streamID_dummy)
	end function streamInqVlistIDorig

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

	subroutine streamDefByteorder(streamID_dummy, byteorder_dummy)
		integer(c_int), value :: streamID_dummy
		integer(c_int), value :: byteorder_dummy
		interface
			subroutine lib_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 lib_streamDefByteorder
		end interface
		call lib_streamDefByteorder(streamID_dummy, byteorder_dummy)
	end subroutine streamDefByteorder

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

	subroutine streamDefCompType(streamID_dummy, comptype_dummy)
		integer(c_int), value :: streamID_dummy
		integer(c_int), value :: comptype_dummy
		interface
			subroutine lib_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 lib_streamDefCompType
		end interface
		call lib_streamDefCompType(streamID_dummy, comptype_dummy)
	end subroutine streamDefCompType

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

	subroutine streamDefCompLevel(streamID_dummy, complevel_dummy)
		integer(c_int), value :: streamID_dummy
		integer(c_int), value :: complevel_dummy
		interface
			subroutine lib_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 lib_streamDefCompLevel
		end interface
		call lib_streamDefCompLevel(streamID_dummy, complevel_dummy)
	end subroutine streamDefCompLevel

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

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

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

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

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

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

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

	subroutine streamWriteVar(streamID_dummy, varID_dummy, data_vec_dummy, nmiss_dummy)
		integer(c_int), value :: streamID_dummy
		integer(c_int), value :: varID_dummy
		real(c_double), intent(in) :: data_vec_dummy(*)
		integer(c_int), value :: nmiss_dummy
		interface
			subroutine lib_streamWriteVar(streamID_dummy, varID_dummy, data_vec_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_vec_dummy(*)
				integer(c_int), value :: nmiss_dummy
			end subroutine lib_streamWriteVar
		end interface
		call lib_streamWriteVar(streamID_dummy, varID_dummy, data_vec_dummy, nmiss_dummy)
	end subroutine streamWriteVar

	subroutine streamWriteVarF(streamID_dummy, varID_dummy, data_vec_dummy, nmiss_dummy)
		integer(c_int), value :: streamID_dummy
		integer(c_int), value :: varID_dummy
		real(c_float), intent(in) :: data_vec_dummy(*)
		integer(c_int), value :: nmiss_dummy
		interface
			subroutine lib_streamWriteVarF(streamID_dummy, varID_dummy, data_vec_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_vec_dummy(*)
				integer(c_int), value :: nmiss_dummy
			end subroutine lib_streamWriteVarF
		end interface
		call lib_streamWriteVarF(streamID_dummy, varID_dummy, data_vec_dummy, nmiss_dummy)
	end subroutine streamWriteVarF

	subroutine streamReadVar(streamID_dummy, varID_dummy, data_vec_dummy, nmiss)
		integer(c_int), value :: streamID_dummy
		integer(c_int), value :: varID_dummy
		real(c_double), intent(inout) :: data_vec_dummy(*)
		integer(c_int), optional, intent(inout) :: nmiss
		integer(c_int), target :: nmiss_temp
		type(c_ptr) :: nmiss_ptr
		interface
			subroutine lib_streamReadVar(streamID_dummy, varID_dummy, data_vec_dummy, nmiss) bind(c, name = 'streamReadVar')
				import c_double, c_int, c_ptr
				integer(c_int), value :: streamID_dummy
				integer(c_int), value :: varID_dummy
				real(c_double), intent(inout) :: data_vec_dummy(*)
				type(c_ptr), value :: nmiss
			end subroutine lib_streamReadVar
		end interface
		nmiss_ptr = c_null_ptr
		if(present(nmiss)) nmiss_ptr = c_loc(nmiss_temp)
		call lib_streamReadVar(streamID_dummy, varID_dummy, data_vec_dummy, nmiss_ptr)
		if(present(nmiss)) nmiss = nmiss_temp
	end subroutine streamReadVar

	subroutine streamReadVarF(streamID_dummy, varID_dummy, data_vec_dummy, nmiss)
		integer(c_int), value :: streamID_dummy
		integer(c_int), value :: varID_dummy
		real(c_float), intent(inout) :: data_vec_dummy(*)
		integer(c_int), optional, intent(inout) :: nmiss
		integer(c_int), target :: nmiss_temp
		type(c_ptr) :: nmiss_ptr
		interface
			subroutine lib_streamReadVarF(streamID_dummy, varID_dummy, data_vec_dummy, nmiss) bind(c, name = 'streamReadVarF')
				import c_float, c_int, c_ptr
				integer(c_int), value :: streamID_dummy
				integer(c_int), value :: varID_dummy
				real(c_float), intent(inout) :: data_vec_dummy(*)
				type(c_ptr), value :: nmiss
			end subroutine lib_streamReadVarF
		end interface
		nmiss_ptr = c_null_ptr
		if(present(nmiss)) nmiss_ptr = c_loc(nmiss_temp)
		call lib_streamReadVarF(streamID_dummy, varID_dummy, data_vec_dummy, nmiss_ptr)
		if(present(nmiss)) nmiss = nmiss_temp
	end subroutine streamReadVarF

	subroutine streamWriteVarSlice(streamID_dummy, varID_dummy, levelID_dummy, data_vec_dummy, nmiss_dummy)
		integer(c_int), value :: streamID_dummy
		integer(c_int), value :: varID_dummy
		integer(c_int), value :: levelID_dummy
		real(c_double), intent(in) :: data_vec_dummy(*)
		integer(c_int), value :: nmiss_dummy
		interface
			subroutine lib_streamWriteVarSlice(streamID_dummy, varID_dummy, levelID_dummy, data_vec_dummy, nmiss_dummy) bind(c, name = 'stre&
			&amWriteVarSlice')
				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_vec_dummy(*)
				integer(c_int), value :: nmiss_dummy
			end subroutine lib_streamWriteVarSlice
		end interface
		call lib_streamWriteVarSlice(streamID_dummy, varID_dummy, levelID_dummy, data_vec_dummy, nmiss_dummy)
	end subroutine streamWriteVarSlice

	subroutine streamWriteVarSliceF(streamID_dummy, varID_dummy, levelID_dummy, data_vec_dummy, nmiss_dummy)
		integer(c_int), value :: streamID_dummy
		integer(c_int), value :: varID_dummy
		integer(c_int), value :: levelID_dummy
		real(c_float), intent(in) :: data_vec_dummy(*)
		integer(c_int), value :: nmiss_dummy
		interface
			subroutine lib_streamWriteVarSliceF(streamID_dummy, varID_dummy, levelID_dummy, data_vec_dummy, nmiss_dummy) bind(c, name = 'str&
			&eamWriteVarSliceF')
				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_vec_dummy(*)
				integer(c_int), value :: nmiss_dummy
			end subroutine lib_streamWriteVarSliceF
		end interface
		call lib_streamWriteVarSliceF(streamID_dummy, varID_dummy, levelID_dummy, data_vec_dummy, nmiss_dummy)
	end subroutine streamWriteVarSliceF

	subroutine streamReadVarSlice(streamID_dummy, varID_dummy, levelID_dummy, data_vec_dummy, nmiss)
		integer(c_int), value :: streamID_dummy
		integer(c_int), value :: varID_dummy
		integer(c_int), value :: levelID_dummy
		real(c_double), intent(inout) :: data_vec_dummy(*)
		integer(c_int), optional, intent(inout) :: nmiss
		integer(c_int), target :: nmiss_temp
		type(c_ptr) :: nmiss_ptr
		interface
			subroutine lib_streamReadVarSlice(streamID_dummy, varID_dummy, levelID_dummy, data_vec_dummy, nmiss) bind(c, name = 'streamReadV&
			&arSlice')
				import c_double, c_int, c_ptr
				integer(c_int), value :: streamID_dummy
				integer(c_int), value :: varID_dummy
				integer(c_int), value :: levelID_dummy
				real(c_double), intent(inout) :: data_vec_dummy(*)
				type(c_ptr), value :: nmiss
			end subroutine lib_streamReadVarSlice
		end interface
		nmiss_ptr = c_null_ptr
		if(present(nmiss)) nmiss_ptr = c_loc(nmiss_temp)
		call lib_streamReadVarSlice(streamID_dummy, varID_dummy, levelID_dummy, data_vec_dummy, nmiss_ptr)
		if(present(nmiss)) nmiss = nmiss_temp
	end subroutine streamReadVarSlice

	subroutine streamReadVarSliceF(streamID_dummy, varID_dummy, levelID_dummy, data_vec_dummy, nmiss)
		integer(c_int), value :: streamID_dummy
		integer(c_int), value :: varID_dummy
		integer(c_int), value :: levelID_dummy
		real(c_float), intent(inout) :: data_vec_dummy(*)
		integer(c_int), optional, intent(inout) :: nmiss
		integer(c_int), target :: nmiss_temp
		type(c_ptr) :: nmiss_ptr
		interface
			subroutine lib_streamReadVarSliceF(streamID_dummy, varID_dummy, levelID_dummy, data_vec_dummy, nmiss) bind(c, name = 'streamRead&
			&VarSliceF')
				import c_float, c_int, c_ptr
				integer(c_int), value :: streamID_dummy
				integer(c_int), value :: varID_dummy
				integer(c_int), value :: levelID_dummy
				real(c_float), intent(inout) :: data_vec_dummy(*)
				type(c_ptr), value :: nmiss
			end subroutine lib_streamReadVarSliceF
		end interface
		nmiss_ptr = c_null_ptr
		if(present(nmiss)) nmiss_ptr = c_loc(nmiss_temp)
		call lib_streamReadVarSliceF(streamID_dummy, varID_dummy, levelID_dummy, data_vec_dummy, nmiss_ptr)
		if(present(nmiss)) nmiss = nmiss_temp
	end subroutine streamReadVarSliceF

	subroutine streamWriteVarChunk(streamID_dummy, varID_dummy, rect_dummy, data_vec_dummy, nmiss_dummy)
		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_vec_dummy(*)
		integer(c_int), value :: nmiss_dummy
		interface
			subroutine lib_streamWriteVarChunk(streamID_dummy, varID_dummy, rect_dummy, data_vec_dummy, nmiss_dummy) bind(c, name = 'streamW&
			&riteVarChunk')
				import c_double, c_int
				integer(c_int), value :: streamID_dummy
				integer(c_int), value :: varID_dummy
				integer(c_int), intent(in) :: rect_dummy(*)
				real(c_double), intent(in) :: data_vec_dummy(*)
				integer(c_int), value :: nmiss_dummy
			end subroutine lib_streamWriteVarChunk
		end interface
		call lib_streamWriteVarChunk(streamID_dummy, varID_dummy, rect_dummy, data_vec_dummy, nmiss_dummy)
	end subroutine streamWriteVarChunk

	subroutine streamDefRecord(streamID_dummy, varID_dummy, levelID_dummy)
		integer(c_int), value :: streamID_dummy
		integer(c_int), value :: varID_dummy
		integer(c_int), value :: levelID_dummy
		interface
			subroutine lib_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 lib_streamDefRecord
		end interface
		call lib_streamDefRecord(streamID_dummy, varID_dummy, levelID_dummy)
	end subroutine streamDefRecord

	subroutine streamInqRecord(streamID_dummy, varID, levelID)
		integer(c_int), value :: streamID_dummy
		integer(c_int), optional, intent(inout) :: varID
		integer(c_int), optional, intent(inout) :: levelID
		integer(c_int), target :: varID_temp
		type(c_ptr) :: varID_ptr
		integer(c_int), target :: levelID_temp
		type(c_ptr) :: levelID_ptr
		interface
			subroutine lib_streamInqRecord(streamID_dummy, varID, levelID) bind(c, name = 'streamInqRecord')
				import c_int, c_ptr
				integer(c_int), value :: streamID_dummy
				type(c_ptr), value :: varID
				type(c_ptr), value :: levelID
			end subroutine lib_streamInqRecord
		end interface
		varID_ptr = c_null_ptr
		if(present(varID)) varID_ptr = c_loc(varID_temp)
		levelID_ptr = c_null_ptr
		if(present(levelID)) levelID_ptr = c_loc(levelID_temp)
		call lib_streamInqRecord(streamID_dummy, varID_ptr, levelID_ptr)
		if(present(varID)) varID = varID_temp
		if(present(levelID)) levelID = levelID_temp
	end subroutine streamInqRecord

	subroutine streamWriteRecord(streamID_dummy, data_vec_dummy, nmiss_dummy)
		integer(c_int), value :: streamID_dummy
		real(c_double), intent(in) :: data_vec_dummy(*)
		integer(c_int), value :: nmiss_dummy
		interface
			subroutine lib_streamWriteRecord(streamID_dummy, data_vec_dummy, nmiss_dummy) bind(c, name = 'streamWriteRecord')
				import c_double, c_int
				integer(c_int), value :: streamID_dummy
				real(c_double), intent(in) :: data_vec_dummy(*)
				integer(c_int), value :: nmiss_dummy
			end subroutine lib_streamWriteRecord
		end interface
		call lib_streamWriteRecord(streamID_dummy, data_vec_dummy, nmiss_dummy)
	end subroutine streamWriteRecord

	subroutine streamWriteRecordF(streamID_dummy, data_vec_dummy, nmiss_dummy)
		integer(c_int), value :: streamID_dummy
		real(c_float), intent(in) :: data_vec_dummy(*)
		integer(c_int), value :: nmiss_dummy
		interface
			subroutine lib_streamWriteRecordF(streamID_dummy, data_vec_dummy, nmiss_dummy) bind(c, name = 'streamWriteRecordF')
				import c_float, c_int
				integer(c_int), value :: streamID_dummy
				real(c_float), intent(in) :: data_vec_dummy(*)
				integer(c_int), value :: nmiss_dummy
			end subroutine lib_streamWriteRecordF
		end interface
		call lib_streamWriteRecordF(streamID_dummy, data_vec_dummy, nmiss_dummy)
	end subroutine streamWriteRecordF

	subroutine streamReadRecord(streamID_dummy, data_vec_dummy, nmiss)
		integer(c_int), value :: streamID_dummy
		real(c_double), intent(inout) :: data_vec_dummy(*)
		integer(c_int), optional, intent(inout) :: nmiss
		integer(c_int), target :: nmiss_temp
		type(c_ptr) :: nmiss_ptr
		interface
			subroutine lib_streamReadRecord(streamID_dummy, data_vec_dummy, nmiss) bind(c, name = 'streamReadRecord')
				import c_double, c_int, c_ptr
				integer(c_int), value :: streamID_dummy
				real(c_double), intent(inout) :: data_vec_dummy(*)
				type(c_ptr), value :: nmiss
			end subroutine lib_streamReadRecord
		end interface
		nmiss_ptr = c_null_ptr
		if(present(nmiss)) nmiss_ptr = c_loc(nmiss_temp)
		call lib_streamReadRecord(streamID_dummy, data_vec_dummy, nmiss_ptr)
		if(present(nmiss)) nmiss = nmiss_temp
	end subroutine streamReadRecord

	subroutine streamCopyRecord(streamIDdest_dummy, streamIDsrc_dummy)
		integer(c_int), value :: streamIDdest_dummy
		integer(c_int), value :: streamIDsrc_dummy
		interface
			subroutine lib_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 lib_streamCopyRecord
		end interface
		call lib_streamCopyRecord(streamIDdest_dummy, streamIDsrc_dummy)
	end subroutine streamCopyRecord

	function cdiIterator_new(path_dummy) result(result)
		type(t_CdiIterator) :: result
		character(kind = c_char, len = *), intent(in) :: path_dummy
		character(kind = c_char) :: path_temp(len(path_dummy) + 1)
		integer :: path_i
		interface
			type(c_ptr) function lib_cdiIterator_new(path_dummy) bind(c, name = 'cdiIterator_new')
				import c_char, c_ptr
				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
		result%ptr = lib_cdiIterator_new(path_temp)
	end function cdiIterator_new

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

	function cdiIterator_serialize(me_dummy) result(result)
		character(kind = c_char), dimension(:), pointer :: result
		type(t_CdiIterator), intent(in) :: me_dummy
		type(c_ptr) :: cString
		integer :: shape(1)
		character(kind = c_char), dimension(:), pointer :: temp
		interface
			type(c_ptr) function lib_cdiIterator_serialize(me_dummy) bind(c, name = 'cdiIterator_serialize')
				import c_ptr
				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
			shape(1) = int(lib_strlen(cString))
			call c_f_pointer(cString, temp, shape)
			allocate(result(shape(1)))
			result = temp
			call lib_free(cString)
		else
			result => null()
		end if
	end function cdiIterator_serialize

	function cdiIterator_deserialize(description_dummy) result(result)
		type(t_CdiIterator) :: result
		character(kind = c_char, len = *), intent(in) :: description_dummy
		character(kind = c_char) :: description_temp(len(description_dummy) + 1)
		integer :: description_i
		interface
			type(c_ptr) function lib_cdiIterator_deserialize(description_dummy) bind(c, name = 'cdiIterator_deserialize')
				import c_char, c_ptr
				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
		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(result)
		integer(c_int) :: result
		type(t_CdiIterator), intent(in) :: me_dummy
		interface
			integer(c_int) function lib_cdiIterator_nextField(me_dummy) bind(c, name = 'cdiIterator_nextField')
				import c_int, c_ptr
				type(c_ptr), value :: me_dummy
			end function lib_cdiIterator_nextField
		end interface
		result = lib_cdiIterator_nextField(me_dummy%ptr)
	end function cdiIterator_nextField

	function cdiIterator_inqStartTime(me_dummy) result(result)
		character(kind = c_char), dimension(:), pointer :: result
		type(t_CdiIterator), intent(in) :: me_dummy
		type(c_ptr) :: cString
		integer :: shape(1)
		character(kind = c_char), dimension(:), pointer :: temp
		interface
			type(c_ptr) function lib_cdiIterator_inqStartTime(me_dummy) bind(c, name = 'cdiIterator_inqStartTime')
				import c_ptr
				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
			shape(1) = int(lib_strlen(cString))
			call c_f_pointer(cString, temp, shape)
			allocate(result(shape(1)))
			result = temp
			call lib_free(cString)
		else
			result => null()
		end if
	end function cdiIterator_inqStartTime

	function cdiIterator_inqEndTime(me_dummy) result(result)
		character(kind = c_char), dimension(:), pointer :: result
		type(t_CdiIterator), intent(in) :: me_dummy
		type(c_ptr) :: cString
		integer :: shape(1)
		character(kind = c_char), dimension(:), pointer :: temp
		interface
			type(c_ptr) function lib_cdiIterator_inqEndTime(me_dummy) bind(c, name = 'cdiIterator_inqEndTime')
				import c_ptr
				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
			shape(1) = int(lib_strlen(cString))
			call c_f_pointer(cString, temp, shape)
			allocate(result(shape(1)))
			result = temp
			call lib_free(cString)
		else
			result => null()
		end if
	end function cdiIterator_inqEndTime

	function cdiIterator_inqVTime(me_dummy) result(result)
		character(kind = c_char), dimension(:), pointer :: result
		type(t_CdiIterator), intent(in) :: me_dummy
		type(c_ptr) :: cString
		integer :: shape(1)
		character(kind = c_char), dimension(:), pointer :: temp
		interface
			type(c_ptr) function lib_cdiIterator_inqVTime(me_dummy) bind(c, name = 'cdiIterator_inqVTime')
				import c_ptr
				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
			shape(1) = int(lib_strlen(cString))
			call c_f_pointer(cString, temp, shape)
			allocate(result(shape(1)))
			result = temp
			call lib_free(cString)
		else
			result => null()
		end if
	end function cdiIterator_inqVTime

	function cdiIterator_inqLevelType(me_dummy, levelSelector_dummy, outName, outLongName, outStdName, outUnit) result(result)
		integer(c_int) :: 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_ptr
		type(c_ptr) :: outName_handle
		integer :: outName_shape(1)
		character(kind = c_char), pointer :: outName_fptr(:)
		type(c_ptr), target :: outLongName_ptr
		type(c_ptr) :: outLongName_handle
		integer :: outLongName_shape(1)
		character(kind = c_char), pointer :: outLongName_fptr(:)
		type(c_ptr), target :: outStdName_ptr
		type(c_ptr) :: outStdName_handle
		integer :: outStdName_shape(1)
		character(kind = c_char), pointer :: outStdName_fptr(:)
		type(c_ptr), target :: outUnit_ptr
		type(c_ptr) :: outUnit_handle
		integer :: outUnit_shape(1)
		character(kind = c_char), pointer :: outUnit_fptr(:)
		interface
			integer(c_int) function lib_cdiIterator_inqLevelType(me_dummy, levelSelector_dummy, outName, outLongName, outStdName, outUnit) b&
			&ind(c, name = 'cdiIterator_inqLevelType')
				import c_int, c_ptr
				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_ptr)
		outLongName_handle = c_null_ptr
		if(present(outLongName)) outLongName_handle = c_loc(outLongName_ptr)
		outStdName_handle = c_null_ptr
		if(present(outStdName)) outStdName_handle = c_loc(outStdName_ptr)
		outUnit_handle = c_null_ptr
		if(present(outUnit)) outUnit_handle = c_loc(outUnit_ptr)
		result = lib_cdiIterator_inqLevelType(me_dummy%ptr, levelSelector_dummy, outName_handle, outLongName_handle, outStdName_handle, o&
		&utUnit_handle)
		if(present(outName)) then
			if(c_associated(outName_ptr)) then
				outName_shape(1) = int(lib_strlen(outName_ptr))
				call c_f_pointer(outName_ptr, outName_fptr, outName_shape)
				allocate(outName(outName_shape(1)))
				outName = outName_fptr
				call lib_free(outName_ptr)
			else
				outName => null()
			end if
		end if
		if(present(outLongName)) then
			if(c_associated(outLongName_ptr)) then
				outLongName_shape(1) = int(lib_strlen(outLongName_ptr))
				call c_f_pointer(outLongName_ptr, outLongName_fptr, outLongName_shape)
				allocate(outLongName(outLongName_shape(1)))
				outLongName = outLongName_fptr
				call lib_free(outLongName_ptr)
			else
				outLongName => null()
			end if
		end if
		if(present(outStdName)) then
			if(c_associated(outStdName_ptr)) then
				outStdName_shape(1) = int(lib_strlen(outStdName_ptr))
				call c_f_pointer(outStdName_ptr, outStdName_fptr, outStdName_shape)
				allocate(outStdName(outStdName_shape(1)))
				outStdName = outStdName_fptr
				call lib_free(outStdName_ptr)
			else
				outStdName => null()
			end if
		end if
		if(present(outUnit)) then
			if(c_associated(outUnit_ptr)) then
				outUnit_shape(1) = int(lib_strlen(outUnit_ptr))
				call c_f_pointer(outUnit_ptr, outUnit_fptr, outUnit_shape)
				allocate(outUnit(outUnit_shape(1)))
				outUnit = outUnit_fptr
				call lib_free(outUnit_ptr)
			else
				outUnit => null()
			end if
		end if
	end function cdiIterator_inqLevelType

	function cdiIterator_inqLevel(me_dummy, levelSelector_dummy, outValue1, outValue2) result(result)
		integer(c_int) :: result
		type(t_CdiIterator), intent(in) :: me_dummy
		integer(c_int), value :: levelSelector_dummy
		real(c_double), optional, intent(inout) :: outValue1
		real(c_double), optional, intent(inout) :: outValue2
		real(c_double), target :: outValue1_temp
		type(c_ptr) :: outValue1_ptr
		real(c_double), target :: outValue2_temp
		type(c_ptr) :: outValue2_ptr
		interface
			integer(c_int) function lib_cdiIterator_inqLevel(me_dummy, levelSelector_dummy, outValue1, outValue2) bind(c, name = 'cdiIterato&
			&r_inqLevel')
				import c_int, c_ptr
				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_ptr = c_null_ptr
		if(present(outValue1)) outValue1_ptr = c_loc(outValue1_temp)
		outValue2_ptr = c_null_ptr
		if(present(outValue2)) outValue2_ptr = c_loc(outValue2_temp)
		result = lib_cdiIterator_inqLevel(me_dummy%ptr, levelSelector_dummy, outValue1_ptr, outValue2_ptr)
		if(present(outValue1)) outValue1 = outValue1_temp
		if(present(outValue2)) outValue2 = outValue2_temp
	end function cdiIterator_inqLevel

	function cdiIterator_inqLevelUuid(me_dummy, outVgridNumber, outLevelCount, outUuid) result(result)
		integer(c_int) :: result
		type(t_CdiIterator), intent(in) :: me_dummy
		integer(c_int), optional, intent(inout) :: outVgridNumber
		integer(c_int), optional, intent(inout) :: outLevelCount
		character(kind = c_char), optional, intent(inout) :: outUuid(CDI_UUID_SIZE)
		integer(c_int), target :: outVgridNumber_temp
		type(c_ptr) :: outVgridNumber_ptr
		integer(c_int), target :: outLevelCount_temp
		type(c_ptr) :: outLevelCount_ptr
		character(kind = c_char), target :: outUuid_temp(CDI_UUID_SIZE)
		type(c_ptr) :: outUuid_ptr
		interface
			integer(c_int) function lib_cdiIterator_inqLevelUuid(me_dummy, outVgridNumber, outLevelCount, outUuid) bind(c, name = 'cdiIterat&
			&or_inqLevelUuid')
				import c_int, c_ptr
				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_ptr = c_null_ptr
		if(present(outVgridNumber)) outVgridNumber_ptr = c_loc(outVgridNumber_temp)
		outLevelCount_ptr = c_null_ptr
		if(present(outLevelCount)) outLevelCount_ptr = c_loc(outLevelCount_temp)
		outUuid_ptr = c_null_ptr
		if(present(outUuid)) outUuid_ptr = c_loc(outUuid_temp)
		result = lib_cdiIterator_inqLevelUuid(me_dummy%ptr, outVgridNumber_ptr, outLevelCount_ptr, outUuid_ptr)
		if(present(outVgridNumber)) outVgridNumber = outVgridNumber_temp
		if(present(outLevelCount)) outLevelCount = outLevelCount_temp
		if(present(outUuid)) outUuid = outUuid_temp
	end function cdiIterator_inqLevelUuid

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

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

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

	function cdiIterator_inqVariableName(me_dummy) result(result)
		character(kind = c_char), dimension(:), pointer :: result
		type(t_CdiIterator), intent(in) :: me_dummy
		type(c_ptr) :: cString
		integer :: shape(1)
		character(kind = c_char), dimension(:), pointer :: temp
		interface
			type(c_ptr) function lib_cdiIterator_inqVariableName(me_dummy) bind(c, name = 'cdiIterator_inqVariableName')
				import c_ptr
				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
			shape(1) = int(lib_strlen(cString))
			call c_f_pointer(cString, temp, shape)
			allocate(result(shape(1)))
			result = temp
			call lib_free(cString)
		else
			result => null()
		end if
	end function cdiIterator_inqVariableName

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

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

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

	function cdiGribIterator_clone(me_dummy) result(result)
		type(t_CdiGribIterator) :: result
		type(t_CdiIterator), intent(in) :: me_dummy
		interface
			type(c_ptr) function lib_cdiGribIterator_clone(me_dummy) bind(c, name = 'cdiGribIterator_clone')
				import c_ptr
				type(c_ptr), value :: me_dummy
			end function lib_cdiGribIterator_clone
		end interface
		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) result(result)
		integer(c_int) :: result
		type(t_CdiGribIterator), intent(in) :: me_dummy
		character(kind = c_char, len = *), intent(in) :: key_dummy
		integer(c_long), optional, intent(inout) :: value
		character(kind = c_char) :: key_temp(len(key_dummy) + 1)
		integer :: key_i
		integer(c_long), target :: value_temp
		type(c_ptr) :: value_ptr
		interface
			integer(c_int) function lib_cdiGribIterator_getLong(me_dummy, key_dummy, value) bind(c, name = 'cdiGribIterator_getLong')
				import c_char, c_int, c_ptr
				type(c_ptr), value :: me_dummy
				character(kind = c_char) :: key_dummy(*)
				type(c_ptr), value :: value
			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
		value_ptr = c_null_ptr
		if(present(value)) value_ptr = c_loc(value_temp)
		result = lib_cdiGribIterator_getLong(me_dummy%ptr, key_temp, value_ptr)
		if(present(value)) value = value_temp
	end function cdiGribIterator_getLong

	function cdiGribIterator_getDouble(me_dummy, key_dummy, value) result(result)
		integer(c_int) :: result
		type(t_CdiGribIterator), intent(in) :: me_dummy
		character(kind = c_char, len = *), intent(in) :: key_dummy
		real(c_double), optional, intent(inout) :: value
		character(kind = c_char) :: key_temp(len(key_dummy) + 1)
		integer :: key_i
		real(c_double), target :: value_temp
		type(c_ptr) :: value_ptr
		interface
			integer(c_int) function lib_cdiGribIterator_getDouble(me_dummy, key_dummy, value) bind(c, name = 'cdiGribIterator_getDouble')
				import c_char, c_int, c_ptr
				type(c_ptr), value :: me_dummy
				character(kind = c_char) :: key_dummy(*)
				type(c_ptr), value :: value
			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
		value_ptr = c_null_ptr
		if(present(value)) value_ptr = c_loc(value_temp)
		result = lib_cdiGribIterator_getDouble(me_dummy%ptr, key_temp, value_ptr)
		if(present(value)) value = value_temp
	end function cdiGribIterator_getDouble

	function cdiGribIterator_getLength(me_dummy, key_dummy, value) result(result)
		integer(c_int) :: result
		type(t_CdiGribIterator), intent(in) :: me_dummy
		character(kind = c_char, len = *), intent(in) :: key_dummy
		integer(c_size_t), optional, intent(inout) :: value
		character(kind = c_char) :: key_temp(len(key_dummy) + 1)
		integer :: key_i
		integer(c_size_t), target :: value_temp
		type(c_ptr) :: value_ptr
		interface
			integer(c_int) function lib_cdiGribIterator_getLength(me_dummy, key_dummy, value) bind(c, name = 'cdiGribIterator_getLength')
				import c_char, c_int, c_ptr
				type(c_ptr), value :: me_dummy
				character(kind = c_char) :: key_dummy(*)
				type(c_ptr), value :: value
			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
		value_ptr = c_null_ptr
		if(present(value)) value_ptr = c_loc(value_temp)
		result = lib_cdiGribIterator_getLength(me_dummy%ptr, key_temp, value_ptr)
		if(present(value)) value = value_temp
	end function cdiGribIterator_getLength

	function cdiGribIterator_getString(me_dummy, key_dummy, value_dummy, length) result(result)
		integer(c_int) :: 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), optional, intent(inout) :: length
		character(kind = c_char) :: key_temp(len(key_dummy) + 1)
		integer :: key_i
		character(kind = c_char) :: value_temp(len(value_dummy))
		integer :: value_i
		logical :: value_padding = .true.
		integer(c_size_t), target :: length_temp
		type(c_ptr) :: length_ptr
		interface
			integer(c_int) function lib_cdiGribIterator_getString(me_dummy, key_dummy, value_dummy, length) bind(c, name = 'cdiGribIterator_&
			&getString')
				import c_char, c_int, c_ptr
				type(c_ptr), value :: me_dummy
				character(kind = c_char) :: key_dummy(*)
				character(kind = c_char) :: value_dummy(*)
				type(c_ptr), value :: length
			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
		do value_i = len(value_dummy), 1, -1
			if(value_dummy(value_i:value_i) /= ' ') value_padding = .false.
			if(value_padding) then
				value_temp(value_i) = c_null_char
			else
				value_temp(value_i) = value_dummy(value_i:value_i)
			end if
		end do
		length_ptr = c_null_ptr
		if(present(length)) length_ptr = c_loc(length_temp)
		result = lib_cdiGribIterator_getString(me_dummy%ptr, key_temp, value_temp, length_ptr)
		value_padding = .false.
		do value_i = 1, len(value_dummy)
			if(value_temp(value_i) == c_null_char) value_padding = .true.
			if(value_padding) then
				value_dummy(value_i:value_i) = ' '
			else
				value_dummy(value_i:value_i) = value_temp(value_i)
			end if
		end do
		if(present(length)) length = length_temp
	end function cdiGribIterator_getString

	function cdiGribIterator_getSize(me_dummy, key_dummy, value) result(result)
		integer(c_int) :: result
		type(t_CdiGribIterator), intent(in) :: me_dummy
		character(kind = c_char, len = *), intent(in) :: key_dummy
		integer(c_size_t), optional, intent(inout) :: value
		character(kind = c_char) :: key_temp(len(key_dummy) + 1)
		integer :: key_i
		integer(c_size_t), target :: value_temp
		type(c_ptr) :: value_ptr
		interface
			integer(c_int) function lib_cdiGribIterator_getSize(me_dummy, key_dummy, value) bind(c, name = 'cdiGribIterator_getSize')
				import c_char, c_int, c_ptr
				type(c_ptr), value :: me_dummy
				character(kind = c_char) :: key_dummy(*)
				type(c_ptr), value :: value
			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
		value_ptr = c_null_ptr
		if(present(value)) value_ptr = c_loc(value_temp)
		result = lib_cdiGribIterator_getSize(me_dummy%ptr, key_temp, value_ptr)
		if(present(value)) value = value_temp
	end function cdiGribIterator_getSize

	function cdiGribIterator_getLongArray(me_dummy, key_dummy, value, array_size) result(result)
		integer(c_int) :: result
		type(t_CdiGribIterator), intent(in) :: me_dummy
		character(kind = c_char, len = *), intent(in) :: key_dummy
		integer(c_long), optional, intent(inout) :: value
		integer(c_size_t), optional, intent(inout) :: array_size
		character(kind = c_char) :: key_temp(len(key_dummy) + 1)
		integer :: key_i
		integer(c_long), target :: value_temp
		type(c_ptr) :: value_ptr
		integer(c_size_t), target :: array_size_temp
		type(c_ptr) :: array_size_ptr
		interface
			integer(c_int) function lib_cdiGribIterator_getLongArray(me_dummy, key_dummy, value, array_size) bind(c, name = 'cdiGribIterator&
			&_getLongArray')
				import c_char, c_int, c_ptr
				type(c_ptr), value :: me_dummy
				character(kind = c_char) :: key_dummy(*)
				type(c_ptr), value :: value
				type(c_ptr), value :: array_size
			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
		value_ptr = c_null_ptr
		if(present(value)) value_ptr = c_loc(value_temp)
		array_size_ptr = c_null_ptr
		if(present(array_size)) array_size_ptr = c_loc(array_size_temp)
		result = lib_cdiGribIterator_getLongArray(me_dummy%ptr, key_temp, value_ptr, array_size_ptr)
		if(present(value)) value = value_temp
		if(present(array_size)) array_size = array_size_temp
	end function cdiGribIterator_getLongArray

	function cdiGribIterator_getDoubleArray(me_dummy, key_dummy, value, array_size) result(result)
		integer(c_int) :: result
		type(t_CdiGribIterator), intent(in) :: me_dummy
		character(kind = c_char, len = *), intent(in) :: key_dummy
		real(c_double), optional, intent(inout) :: value
		integer(c_size_t), optional, intent(inout) :: array_size
		character(kind = c_char) :: key_temp(len(key_dummy) + 1)
		integer :: key_i
		real(c_double), target :: value_temp
		type(c_ptr) :: value_ptr
		integer(c_size_t), target :: array_size_temp
		type(c_ptr) :: array_size_ptr
		interface
			integer(c_int) function lib_cdiGribIterator_getDoubleArray(me_dummy, key_dummy, value, array_size) bind(c, name = 'cdiGribIterat&
			&or_getDoubleArray')
				import c_char, c_int, c_ptr
				type(c_ptr), value :: me_dummy
				character(kind = c_char) :: key_dummy(*)
				type(c_ptr), value :: value
				type(c_ptr), value :: array_size
			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
		value_ptr = c_null_ptr
		if(present(value)) value_ptr = c_loc(value_temp)
		array_size_ptr = c_null_ptr
		if(present(array_size)) array_size_ptr = c_loc(array_size_temp)
		result = lib_cdiGribIterator_getDoubleArray(me_dummy%ptr, key_temp, value_ptr, array_size_ptr)
		if(present(value)) value = value_temp
		if(present(array_size)) array_size = array_size_temp
	end function cdiGribIterator_getDoubleArray

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

	function cdiGribIterator_inqLongValue(me_dummy, key_dummy) result(result)
		integer(c_long) :: 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
			integer(c_long) function lib_cdiGribIterator_inqLongValue(me_dummy, key_dummy) bind(c, name = 'cdiGribIterator_inqLongValue')
				import c_char, c_long, c_ptr
				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
		result = lib_cdiGribIterator_inqLongValue(me_dummy%ptr, key_temp)
	end function cdiGribIterator_inqLongValue

	function cdiGribIterator_inqLongDefaultValue(me_dummy, key_dummy, defaultValue_dummy) result(result)
		integer(c_long) :: 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
			integer(c_long) function lib_cdiGribIterator_inqLongDefaultValue(me_dummy, key_dummy, defaultValue_dummy) bind(c, name = 'cdiGri&
			&bIterator_inqLongDefaultValue')
				import c_char, c_long, c_ptr
				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
		result = lib_cdiGribIterator_inqLongDefaultValue(me_dummy%ptr, key_temp, defaultValue_dummy)
	end function cdiGribIterator_inqLongDefaultValue

	function cdiGribIterator_inqDoubleValue(me_dummy, key_dummy) result(result)
		real(c_double) :: 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
			real(c_double) function lib_cdiGribIterator_inqDoubleValue(me_dummy, key_dummy) bind(c, name = 'cdiGribIterator_inqDoubleValue')
				import c_char, c_double, c_ptr
				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
		result = lib_cdiGribIterator_inqDoubleValue(me_dummy%ptr, key_temp)
	end function cdiGribIterator_inqDoubleValue

	function cdiGribIterator_inqDoubleDefaultValue(me_dummy, key_dummy, defaultValue_dummy) result(result)
		real(c_double) :: 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
			real(c_double) function lib_cdiGribIterator_inqDoubleDefaultValue(me_dummy, key_dummy, defaultValue_dummy) bind(c, name = 'cdiGr&
			&ibIterator_inqDoubleDefaultValue')
				import c_char, c_double, c_ptr
				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
		result = lib_cdiGribIterator_inqDoubleDefaultValue(me_dummy%ptr, key_temp, defaultValue_dummy)
	end function cdiGribIterator_inqDoubleDefaultValue

	function cdiGribIterator_inqStringValue(me_dummy, key_dummy) result(result)
		character(kind = c_char), dimension(:), pointer :: 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 :: shape(1)
		character(kind = c_char), dimension(:), pointer :: temp
		interface
			type(c_ptr) function lib_cdiGribIterator_inqStringValue(me_dummy, key_dummy) bind(c, name = 'cdiGribIterator_inqStringValue')
				import c_char, c_ptr
				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
			shape(1) = int(lib_strlen(cString))
			call c_f_pointer(cString, temp, shape)
			allocate(result(shape(1)))
			result = temp
			call lib_free(cString)
		else
			result => null()
		end if
	end function cdiGribIterator_inqStringValue

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

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

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

	subroutine vlistCopy(vlistID2_dummy, vlistID1_dummy)
		integer(c_int), value :: vlistID2_dummy
		integer(c_int), value :: vlistID1_dummy
		interface
			subroutine lib_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 lib_vlistCopy
		end interface
		call lib_vlistCopy(vlistID2_dummy, vlistID1_dummy)
	end subroutine vlistCopy

	subroutine vlistCopyFlag(vlistID2_dummy, vlistID1_dummy)
		integer(c_int), value :: vlistID2_dummy
		integer(c_int), value :: vlistID1_dummy
		interface
			subroutine lib_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 lib_vlistCopyFlag
		end interface
		call lib_vlistCopyFlag(vlistID2_dummy, vlistID1_dummy)
	end subroutine vlistCopyFlag

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

	subroutine vlistCat(vlistID2_dummy, vlistID1_dummy)
		integer(c_int), value :: vlistID2_dummy
		integer(c_int), value :: vlistID1_dummy
		interface
			subroutine lib_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 lib_vlistCat
		end interface
		call lib_vlistCat(vlistID2_dummy, vlistID1_dummy)
	end subroutine vlistCat

	subroutine vlistMerge(vlistID2_dummy, vlistID1_dummy)
		integer(c_int), value :: vlistID2_dummy
		integer(c_int), value :: vlistID1_dummy
		interface
			subroutine lib_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 lib_vlistMerge
		end interface
		call lib_vlistMerge(vlistID2_dummy, vlistID1_dummy)
	end subroutine vlistMerge

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

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

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

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

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

	subroutine vlistDefNtsteps(vlistID_dummy, nts_dummy)
		integer(c_int), value :: vlistID_dummy
		integer(c_int), value :: nts_dummy
		interface
			subroutine lib_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 lib_vlistDefNtsteps
		end interface
		call lib_vlistDefNtsteps(vlistID_dummy, nts_dummy)
	end subroutine vlistDefNtsteps

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

	function vlistGridsizeMax(vlistID_dummy) result(result)
		integer(c_int) :: result
		integer(c_int), value :: vlistID_dummy
		interface
			integer(c_int) function lib_vlistGridsizeMax(vlistID_dummy) bind(c, name = 'vlistGridsizeMax')
				import c_int
				integer(c_int), value :: vlistID_dummy
			end function lib_vlistGridsizeMax
		end interface
		result = lib_vlistGridsizeMax(vlistID_dummy)
	end function vlistGridsizeMax

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

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

	subroutine vlistChangeGridIndex(vlistID_dummy, index_dummy, gridID_dummy)
		integer(c_int), value :: vlistID_dummy
		integer(c_int), value :: index_dummy
		integer(c_int), value :: gridID_dummy
		interface
			subroutine lib_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 lib_vlistChangeGridIndex
		end interface
		call lib_vlistChangeGridIndex(vlistID_dummy, index_dummy, gridID_dummy)
	end subroutine vlistChangeGridIndex

	subroutine vlistChangeGrid(vlistID_dummy, gridID1_dummy, gridID2_dummy)
		integer(c_int), value :: vlistID_dummy
		integer(c_int), value :: gridID1_dummy
		integer(c_int), value :: gridID2_dummy
		interface
			subroutine lib_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 lib_vlistChangeGrid
		end interface
		call lib_vlistChangeGrid(vlistID_dummy, gridID1_dummy, gridID2_dummy)
	end subroutine vlistChangeGrid

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

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

	subroutine vlistChangeZaxisIndex(vlistID_dummy, index_dummy, zaxisID_dummy)
		integer(c_int), value :: vlistID_dummy
		integer(c_int), value :: index_dummy
		integer(c_int), value :: zaxisID_dummy
		interface
			subroutine lib_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 lib_vlistChangeZaxisIndex
		end interface
		call lib_vlistChangeZaxisIndex(vlistID_dummy, index_dummy, zaxisID_dummy)
	end subroutine vlistChangeZaxisIndex

	subroutine vlistChangeZaxis(vlistID_dummy, zaxisID1_dummy, zaxisID2_dummy)
		integer(c_int), value :: vlistID_dummy
		integer(c_int), value :: zaxisID1_dummy
		integer(c_int), value :: zaxisID2_dummy
		interface
			subroutine lib_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 lib_vlistChangeZaxis
		end interface
		call lib_vlistChangeZaxis(vlistID_dummy, zaxisID1_dummy, zaxisID2_dummy)
	end subroutine vlistChangeZaxis

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

	subroutine vlistDefTaxis(vlistID_dummy, taxisID_dummy)
		integer(c_int), value :: vlistID_dummy
		integer(c_int), value :: taxisID_dummy
		interface
			subroutine lib_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 lib_vlistDefTaxis
		end interface
		call lib_vlistDefTaxis(vlistID_dummy, taxisID_dummy)
	end subroutine vlistDefTaxis

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

	subroutine vlistDefTable(vlistID_dummy, tableID_dummy)
		integer(c_int), value :: vlistID_dummy
		integer(c_int), value :: tableID_dummy
		interface
			subroutine lib_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 lib_vlistDefTable
		end interface
		call lib_vlistDefTable(vlistID_dummy, tableID_dummy)
	end subroutine vlistDefTable

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

	subroutine vlistDefInstitut(vlistID_dummy, instID_dummy)
		integer(c_int), value :: vlistID_dummy
		integer(c_int), value :: instID_dummy
		interface
			subroutine lib_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 lib_vlistDefInstitut
		end interface
		call lib_vlistDefInstitut(vlistID_dummy, instID_dummy)
	end subroutine vlistDefInstitut

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

	subroutine vlistDefModel(vlistID_dummy, modelID_dummy)
		integer(c_int), value :: vlistID_dummy
		integer(c_int), value :: modelID_dummy
		interface
			subroutine lib_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 lib_vlistDefModel
		end interface
		call lib_vlistDefModel(vlistID_dummy, modelID_dummy)
	end subroutine vlistDefModel

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

	function vlistDefVar(vlistID_dummy, gridID_dummy, zaxisID_dummy, tsteptype_dummy) result(result)
		integer(c_int) :: result
		integer(c_int), value :: vlistID_dummy
		integer(c_int), value :: gridID_dummy
		integer(c_int), value :: zaxisID_dummy
		integer(c_int), value :: tsteptype_dummy
		interface
			integer(c_int) function lib_vlistDefVar(vlistID_dummy, gridID_dummy, zaxisID_dummy, tsteptype_dummy) bind(c, name = 'vlistDefVar&
			&')
				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
			end function lib_vlistDefVar
		end interface
		result = lib_vlistDefVar(vlistID_dummy, gridID_dummy, zaxisID_dummy, tsteptype_dummy)
	end function vlistDefVar

	subroutine vlistChangeVarGrid(vlistID_dummy, varID_dummy, gridID_dummy)
		integer(c_int), value :: vlistID_dummy
		integer(c_int), value :: varID_dummy
		integer(c_int), value :: gridID_dummy
		interface
			subroutine lib_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 lib_vlistChangeVarGrid
		end interface
		call lib_vlistChangeVarGrid(vlistID_dummy, varID_dummy, gridID_dummy)
	end subroutine vlistChangeVarGrid

	subroutine vlistChangeVarZaxis(vlistID_dummy, varID_dummy, zaxisID_dummy)
		integer(c_int), value :: vlistID_dummy
		integer(c_int), value :: varID_dummy
		integer(c_int), value :: zaxisID_dummy
		interface
			subroutine lib_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 lib_vlistChangeVarZaxis
		end interface
		call lib_vlistChangeVarZaxis(vlistID_dummy, varID_dummy, zaxisID_dummy)
	end subroutine vlistChangeVarZaxis

	subroutine vlistInqVar(vlistID_dummy, varID_dummy, gridID, zaxisID, tsteptype)
		integer(c_int), value :: vlistID_dummy
		integer(c_int), value :: varID_dummy
		integer(c_int), optional, intent(inout) :: gridID
		integer(c_int), optional, intent(inout) :: zaxisID
		integer(c_int), optional, intent(inout) :: tsteptype
		integer(c_int), target :: gridID_temp
		type(c_ptr) :: gridID_ptr
		integer(c_int), target :: zaxisID_temp
		type(c_ptr) :: zaxisID_ptr
		integer(c_int), target :: tsteptype_temp
		type(c_ptr) :: tsteptype_ptr
		interface
			subroutine lib_vlistInqVar(vlistID_dummy, varID_dummy, gridID, zaxisID, tsteptype) bind(c, name = 'vlistInqVar')
				import c_int, c_ptr
				integer(c_int), value :: vlistID_dummy
				integer(c_int), value :: varID_dummy
				type(c_ptr), value :: gridID
				type(c_ptr), value :: zaxisID
				type(c_ptr), value :: tsteptype
			end subroutine lib_vlistInqVar
		end interface
		gridID_ptr = c_null_ptr
		if(present(gridID)) gridID_ptr = c_loc(gridID_temp)
		zaxisID_ptr = c_null_ptr
		if(present(zaxisID)) zaxisID_ptr = c_loc(zaxisID_temp)
		tsteptype_ptr = c_null_ptr
		if(present(tsteptype)) tsteptype_ptr = c_loc(tsteptype_temp)
		call lib_vlistInqVar(vlistID_dummy, varID_dummy, gridID_ptr, zaxisID_ptr, tsteptype_ptr)
		if(present(gridID)) gridID = gridID_temp
		if(present(zaxisID)) zaxisID = zaxisID_temp
		if(present(tsteptype)) tsteptype = tsteptype_temp
	end subroutine vlistInqVar

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

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

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

	subroutine vlistDefVarTsteptype(vlistID_dummy, varID_dummy, tsteptype_dummy)
		integer(c_int), value :: vlistID_dummy
		integer(c_int), value :: varID_dummy
		integer(c_int), value :: tsteptype_dummy
		interface
			subroutine lib_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 lib_vlistDefVarTsteptype
		end interface
		call lib_vlistDefVarTsteptype(vlistID_dummy, varID_dummy, tsteptype_dummy)
	end subroutine vlistDefVarTsteptype

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

	subroutine vlistDefVarCompType(vlistID_dummy, varID_dummy, comptype_dummy)
		integer(c_int), value :: vlistID_dummy
		integer(c_int), value :: varID_dummy
		integer(c_int), value :: comptype_dummy
		interface
			subroutine lib_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 lib_vlistDefVarCompType
		end interface
		call lib_vlistDefVarCompType(vlistID_dummy, varID_dummy, comptype_dummy)
	end subroutine vlistDefVarCompType

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

	subroutine vlistDefVarCompLevel(vlistID_dummy, varID_dummy, complevel_dummy)
		integer(c_int), value :: vlistID_dummy
		integer(c_int), value :: varID_dummy
		integer(c_int), value :: complevel_dummy
		interface
			subroutine lib_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 lib_vlistDefVarCompLevel
		end interface
		call lib_vlistDefVarCompLevel(vlistID_dummy, varID_dummy, complevel_dummy)
	end subroutine vlistDefVarCompLevel

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

	subroutine vlistDefVarParam(vlistID_dummy, varID_dummy, param_dummy)
		integer(c_int), value :: vlistID_dummy
		integer(c_int), value :: varID_dummy
		integer(c_int), value :: param_dummy
		interface
			subroutine lib_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 lib_vlistDefVarParam
		end interface
		call lib_vlistDefVarParam(vlistID_dummy, varID_dummy, param_dummy)
	end subroutine vlistDefVarParam

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

	subroutine vlistDefVarCode(vlistID_dummy, varID_dummy, code_dummy)
		integer(c_int), value :: vlistID_dummy
		integer(c_int), value :: varID_dummy
		integer(c_int), value :: code_dummy
		interface
			subroutine lib_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 lib_vlistDefVarCode
		end interface
		call lib_vlistDefVarCode(vlistID_dummy, varID_dummy, code_dummy)
	end subroutine vlistDefVarCode

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

	subroutine vlistDefVarDatatype(vlistID_dummy, varID_dummy, datatype_dummy)
		integer(c_int), value :: vlistID_dummy
		integer(c_int), value :: varID_dummy
		integer(c_int), value :: datatype_dummy
		interface
			subroutine lib_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 lib_vlistDefVarDatatype
		end interface
		call lib_vlistDefVarDatatype(vlistID_dummy, varID_dummy, datatype_dummy)
	end subroutine vlistDefVarDatatype

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

	subroutine vlistDefVarChunkType(vlistID_dummy, varID_dummy, chunktype_dummy)
		integer(c_int), value :: vlistID_dummy
		integer(c_int), value :: varID_dummy
		integer(c_int), value :: chunktype_dummy
		interface
			subroutine lib_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 lib_vlistDefVarChunkType
		end interface
		call lib_vlistDefVarChunkType(vlistID_dummy, varID_dummy, chunktype_dummy)
	end subroutine vlistDefVarChunkType

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

	subroutine vlistDefVarXYZ(vlistID_dummy, varID_dummy, xyz_dummy)
		integer(c_int), value :: vlistID_dummy
		integer(c_int), value :: varID_dummy
		integer(c_int), value :: xyz_dummy
		interface
			subroutine lib_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 lib_vlistDefVarXYZ
		end interface
		call lib_vlistDefVarXYZ(vlistID_dummy, varID_dummy, xyz_dummy)
	end subroutine vlistDefVarXYZ

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

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

	subroutine vlistDefVarInstitut(vlistID_dummy, varID_dummy, instID_dummy)
		integer(c_int), value :: vlistID_dummy
		integer(c_int), value :: varID_dummy
		integer(c_int), value :: instID_dummy
		interface
			subroutine lib_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 lib_vlistDefVarInstitut
		end interface
		call lib_vlistDefVarInstitut(vlistID_dummy, varID_dummy, instID_dummy)
	end subroutine vlistDefVarInstitut

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

	subroutine vlistDefVarModel(vlistID_dummy, varID_dummy, modelID_dummy)
		integer(c_int), value :: vlistID_dummy
		integer(c_int), value :: varID_dummy
		integer(c_int), value :: modelID_dummy
		interface
			subroutine lib_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 lib_vlistDefVarModel
		end interface
		call lib_vlistDefVarModel(vlistID_dummy, varID_dummy, modelID_dummy)
	end subroutine vlistDefVarModel

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

	subroutine vlistDefVarTable(vlistID_dummy, varID_dummy, tableID_dummy)
		integer(c_int), value :: vlistID_dummy
		integer(c_int), value :: varID_dummy
		integer(c_int), value :: tableID_dummy
		interface
			subroutine lib_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 lib_vlistDefVarTable
		end interface
		call lib_vlistDefVarTable(vlistID_dummy, varID_dummy, tableID_dummy)
	end subroutine vlistDefVarTable

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

	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))
		integer :: name_i
		logical :: name_padding = .true.
		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
		do name_i = len(name_dummy), 1, -1
			if(name_dummy(name_i:name_i) /= ' ') name_padding = .false.
			if(name_padding) then
				name_temp(name_i) = c_null_char
			else
				name_temp(name_i) = name_dummy(name_i:name_i)
			end if
		end do
		call lib_vlistInqVarName(vlistID_dummy, varID_dummy, name_temp)
		name_padding = .false.
		do name_i = 1, len(name_dummy)
			if(name_temp(name_i) == c_null_char) name_padding = .true.
			if(name_padding) then
				name_dummy(name_i:name_i) = ' '
			else
				name_dummy(name_i:name_i) = name_temp(name_i)
			end if
		end do
	end subroutine vlistInqVarName

	function vlistCopyVarName(vlistId_dummy, varId_dummy) result(result)
		character(kind = c_char), dimension(:), pointer :: result
		integer(c_int), value :: vlistId_dummy
		integer(c_int), value :: varId_dummy
		type(c_ptr) :: cString
		integer :: shape(1)
		character(kind = c_char), dimension(:), pointer :: temp
		interface
			type(c_ptr) function lib_vlistCopyVarName(vlistId_dummy, varId_dummy) bind(c, name = 'vlistCopyVarName')
				import c_int, c_ptr
				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
			shape(1) = int(lib_strlen(cString))
			call c_f_pointer(cString, temp, shape)
			allocate(result(shape(1)))
			result = temp
			call lib_free(cString)
		else
			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))
		integer :: stdname_i
		logical :: stdname_padding = .true.
		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
		do stdname_i = len(stdname_dummy), 1, -1
			if(stdname_dummy(stdname_i:stdname_i) /= ' ') stdname_padding = .false.
			if(stdname_padding) then
				stdname_temp(stdname_i) = c_null_char
			else
				stdname_temp(stdname_i) = stdname_dummy(stdname_i:stdname_i)
			end if
		end do
		call lib_vlistInqVarStdname(vlistID_dummy, varID_dummy, stdname_temp)
		stdname_padding = .false.
		do stdname_i = 1, len(stdname_dummy)
			if(stdname_temp(stdname_i) == c_null_char) stdname_padding = .true.
			if(stdname_padding) then
				stdname_dummy(stdname_i:stdname_i) = ' '
			else
				stdname_dummy(stdname_i:stdname_i) = stdname_temp(stdname_i)
			end if
		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))
		integer :: longname_i
		logical :: longname_padding = .true.
		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
		do longname_i = len(longname_dummy), 1, -1
			if(longname_dummy(longname_i:longname_i) /= ' ') longname_padding = .false.
			if(longname_padding) then
				longname_temp(longname_i) = c_null_char
			else
				longname_temp(longname_i) = longname_dummy(longname_i:longname_i)
			end if
		end do
		call lib_vlistInqVarLongname(vlistID_dummy, varID_dummy, longname_temp)
		longname_padding = .false.
		do longname_i = 1, len(longname_dummy)
			if(longname_temp(longname_i) == c_null_char) longname_padding = .true.
			if(longname_padding) then
				longname_dummy(longname_i:longname_i) = ' '
			else
				longname_dummy(longname_i:longname_i) = longname_temp(longname_i)
			end if
		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))
		integer :: units_i
		logical :: units_padding = .true.
		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
		do units_i = len(units_dummy), 1, -1
			if(units_dummy(units_i:units_i) /= ' ') units_padding = .false.
			if(units_padding) then
				units_temp(units_i) = c_null_char
			else
				units_temp(units_i) = units_dummy(units_i:units_i)
			end if
		end do
		call lib_vlistInqVarUnits(vlistID_dummy, varID_dummy, units_temp)
		units_padding = .false.
		do units_i = 1, len(units_dummy)
			if(units_temp(units_i) == c_null_char) units_padding = .true.
			if(units_padding) then
				units_dummy(units_i:units_i) = ' '
			else
				units_dummy(units_i:units_i) = units_temp(units_i)
			end if
		end do
	end subroutine vlistInqVarUnits

	subroutine vlistDefVarMissval(vlistID_dummy, varID_dummy, missval_dummy)
		integer(c_int), value :: vlistID_dummy
		integer(c_int), value :: varID_dummy
		real(c_double), value :: missval_dummy
		interface
			subroutine lib_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 lib_vlistDefVarMissval
		end interface
		call lib_vlistDefVarMissval(vlistID_dummy, varID_dummy, missval_dummy)
	end subroutine vlistDefVarMissval

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

	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))
		integer :: extra_i
		logical :: extra_padding = .true.
		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
		do extra_i = len(extra_dummy), 1, -1
			if(extra_dummy(extra_i:extra_i) /= ' ') extra_padding = .false.
			if(extra_padding) then
				extra_temp(extra_i) = c_null_char
			else
				extra_temp(extra_i) = extra_dummy(extra_i:extra_i)
			end if
		end do
		call lib_vlistInqVarExtra(vlistID_dummy, varID_dummy, extra_temp)
		extra_padding = .false.
		do extra_i = 1, len(extra_dummy)
			if(extra_temp(extra_i) == c_null_char) extra_padding = .true.
			if(extra_padding) then
				extra_dummy(extra_i:extra_i) = ' '
			else
				extra_dummy(extra_i:extra_i) = extra_temp(extra_i)
			end if
		end do
	end subroutine vlistInqVarExtra

	subroutine vlistDefVarScalefactor(vlistID_dummy, varID_dummy, scalefactor_dummy)
		integer(c_int), value :: vlistID_dummy
		integer(c_int), value :: varID_dummy
		real(c_double), value :: scalefactor_dummy
		interface
			subroutine lib_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 lib_vlistDefVarScalefactor
		end interface
		call lib_vlistDefVarScalefactor(vlistID_dummy, varID_dummy, scalefactor_dummy)
	end subroutine vlistDefVarScalefactor

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

	subroutine vlistDefVarAddoffset(vlistID_dummy, varID_dummy, addoffset_dummy)
		integer(c_int), value :: vlistID_dummy
		integer(c_int), value :: varID_dummy
		real(c_double), value :: addoffset_dummy
		interface
			subroutine lib_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 lib_vlistDefVarAddoffset
		end interface
		call lib_vlistDefVarAddoffset(vlistID_dummy, varID_dummy, addoffset_dummy)
	end subroutine vlistDefVarAddoffset

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

	subroutine vlistDefVarTimave(vlistID_dummy, varID_dummy, timave_dummy)
		integer(c_int), value :: vlistID_dummy
		integer(c_int), value :: varID_dummy
		integer(c_int), value :: timave_dummy
		interface
			subroutine lib_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 lib_vlistDefVarTimave
		end interface
		call lib_vlistDefVarTimave(vlistID_dummy, varID_dummy, timave_dummy)
	end subroutine vlistDefVarTimave

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

	subroutine vlistDefVarTimaccu(vlistID_dummy, varID_dummy, timaccu_dummy)
		integer(c_int), value :: vlistID_dummy
		integer(c_int), value :: varID_dummy
		integer(c_int), value :: timaccu_dummy
		interface
			subroutine lib_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 lib_vlistDefVarTimaccu
		end interface
		call lib_vlistDefVarTimaccu(vlistID_dummy, varID_dummy, timaccu_dummy)
	end subroutine vlistDefVarTimaccu

	function vlistInqVarTimaccu(vlistID_dummy, varID_dummy) result(result)
		integer(c_int) :: result
		integer(c_int), value :: vlistID_dummy
		integer(c_int), value :: varID_dummy
		interface
			integer(c_int) function lib_vlistInqVarTimaccu(vlistID_dummy, varID_dummy) bind(c, name = 'vlistInqVarTimaccu')
				import c_int
				integer(c_int), value :: vlistID_dummy
				integer(c_int), value :: varID_dummy
			end function lib_vlistInqVarTimaccu
		end interface
		result = lib_vlistInqVarTimaccu(vlistID_dummy, varID_dummy)
	end function vlistInqVarTimaccu

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

	function vlistInqVarTypeOfGeneratingProcess(vlistID_dummy, varID_dummy) result(result)
		integer(c_int) :: result
		integer(c_int), value :: vlistID_dummy
		integer(c_int), value :: varID_dummy
		interface
			integer(c_int) function lib_vlistInqVarTypeOfGeneratingProcess(vlistID_dummy, varID_dummy) bind(c, name = 'vlistInqVarTypeOfGene&
			&ratingProcess')
				import c_int
				integer(c_int), value :: vlistID_dummy
				integer(c_int), value :: varID_dummy
			end function lib_vlistInqVarTypeOfGeneratingProcess
		end interface
		result = lib_vlistInqVarTypeOfGeneratingProcess(vlistID_dummy, varID_dummy)
	end function vlistInqVarTypeOfGeneratingProcess

	subroutine vlistDefVarProductDefinitionTemplate(vlistID_dummy, varID_dummy, productDefinitionTemplate_dummy)
		integer(c_int), value :: vlistID_dummy
		integer(c_int), value :: varID_dummy
		integer(c_int), value :: productDefinitionTemplate_dummy
		interface
			subroutine lib_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 lib_vlistDefVarProductDefinitionTemplate
		end interface
		call lib_vlistDefVarProductDefinitionTemplate(vlistID_dummy, varID_dummy, productDefinitionTemplate_dummy)
	end subroutine vlistDefVarProductDefinitionTemplate

	function vlistInqVarProductDefinitionTemplate(vlistID_dummy, varID_dummy) result(result)
		integer(c_int) :: result
		integer(c_int), value :: vlistID_dummy
		integer(c_int), value :: varID_dummy
		interface
			integer(c_int) function lib_vlistInqVarProductDefinitionTemplate(vlistID_dummy, varID_dummy) bind(c, name = 'vlistInqVarProductD&
			&efinitionTemplate')
				import c_int
				integer(c_int), value :: vlistID_dummy
				integer(c_int), value :: varID_dummy
			end function lib_vlistInqVarProductDefinitionTemplate
		end interface
		result = lib_vlistInqVarProductDefinitionTemplate(vlistID_dummy, varID_dummy)
	end function vlistInqVarProductDefinitionTemplate

	function vlistInqVarSize(vlistID_dummy, varID_dummy) result(result)
		integer(c_int) :: result
		integer(c_int), value :: vlistID_dummy
		integer(c_int), value :: varID_dummy
		interface
			integer(c_int) function lib_vlistInqVarSize(vlistID_dummy, varID_dummy) bind(c, name = 'vlistInqVarSize')
				import c_int
				integer(c_int), value :: vlistID_dummy
				integer(c_int), value :: varID_dummy
			end function lib_vlistInqVarSize
		end interface
		result = lib_vlistInqVarSize(vlistID_dummy, varID_dummy)
	end function vlistInqVarSize

	subroutine vlistDefIndex(vlistID_dummy, varID_dummy, levID_dummy, index_dummy)
		integer(c_int), value :: vlistID_dummy
		integer(c_int), value :: varID_dummy
		integer(c_int), value :: levID_dummy
		integer(c_int), value :: index_dummy
		interface
			subroutine lib_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 lib_vlistDefIndex
		end interface
		call lib_vlistDefIndex(vlistID_dummy, varID_dummy, levID_dummy, index_dummy)
	end subroutine vlistDefIndex

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

	subroutine vlistDefFlag(vlistID_dummy, varID_dummy, levID_dummy, flag_dummy)
		integer(c_int), value :: vlistID_dummy
		integer(c_int), value :: varID_dummy
		integer(c_int), value :: levID_dummy
		integer(c_int), value :: flag_dummy
		interface
			subroutine lib_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 lib_vlistDefFlag
		end interface
		call lib_vlistDefFlag(vlistID_dummy, varID_dummy, levID_dummy, flag_dummy)
	end subroutine vlistDefFlag

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

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

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

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

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

	subroutine vlistDefVarEnsemble(vlistID_dummy, varID_dummy, ensID_dummy, ensCount_dummy, forecast_type_dummy)
		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
		interface
			subroutine lib_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 lib_vlistDefVarEnsemble
		end interface
		call lib_vlistDefVarEnsemble(vlistID_dummy, varID_dummy, ensID_dummy, ensCount_dummy, forecast_type_dummy)
	end subroutine vlistDefVarEnsemble

	function vlistInqVarEnsemble(vlistID_dummy, varID_dummy, ensID, ensCount, forecast_type) result(result)
		integer(c_int) :: result
		integer(c_int), value :: vlistID_dummy
		integer(c_int), value :: varID_dummy
		integer(c_int), optional, intent(inout) :: ensID
		integer(c_int), optional, intent(inout) :: ensCount
		integer(c_int), optional, intent(inout) :: forecast_type
		integer(c_int), target :: ensID_temp
		type(c_ptr) :: ensID_ptr
		integer(c_int), target :: ensCount_temp
		type(c_ptr) :: ensCount_ptr
		integer(c_int), target :: forecast_type_temp
		type(c_ptr) :: forecast_type_ptr
		interface
			integer(c_int) function lib_vlistInqVarEnsemble(vlistID_dummy, varID_dummy, ensID, ensCount, forecast_type) bind(c, name = 'vlis&
			&tInqVarEnsemble')
				import c_int, c_ptr
				integer(c_int), value :: vlistID_dummy
				integer(c_int), value :: varID_dummy
				type(c_ptr), value :: ensID
				type(c_ptr), value :: ensCount
				type(c_ptr), value :: forecast_type
			end function lib_vlistInqVarEnsemble
		end interface
		ensID_ptr = c_null_ptr
		if(present(ensID)) ensID_ptr = c_loc(ensID_temp)
		ensCount_ptr = c_null_ptr
		if(present(ensCount)) ensCount_ptr = c_loc(ensCount_temp)
		forecast_type_ptr = c_null_ptr
		if(present(forecast_type)) forecast_type_ptr = c_loc(forecast_type_temp)
		result = lib_vlistInqVarEnsemble(vlistID_dummy, varID_dummy, ensID_ptr, ensCount_ptr, forecast_type_ptr)
		if(present(ensID)) ensID = ensID_temp
		if(present(ensCount)) ensCount = ensCount_temp
		if(present(forecast_type)) forecast_type = forecast_type_temp
	end function vlistInqVarEnsemble

	subroutine cdiClearAdditionalKeys()
		interface
			subroutine lib_cdiClearAdditionalKeys() bind(c, name = 'cdiClearAdditionalKeys')
			end subroutine lib_cdiClearAdditionalKeys
		end interface
		call lib_cdiClearAdditionalKeys()
	end subroutine cdiClearAdditionalKeys

	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(result)
		integer(c_int) :: 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
			integer(c_int) function lib_vlistHasVarKey(vlistID_dummy, varID_dummy, name_dummy) bind(c, name = 'vlistHasVarKey')
				import c_char, c_int
				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
		result = lib_vlistHasVarKey(vlistID_dummy, varID_dummy, name_temp)
	end function vlistHasVarKey

	function vlistInqVarDblKey(vlistID_dummy, varID_dummy, name_dummy) result(result)
		real(c_double) :: 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
			real(c_double) function lib_vlistInqVarDblKey(vlistID_dummy, varID_dummy, name_dummy) bind(c, name = 'vlistInqVarDblKey')
				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(*)
			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
		result = lib_vlistInqVarDblKey(vlistID_dummy, varID_dummy, name_temp)
	end function vlistInqVarDblKey

	function vlistInqVarIntKey(vlistID_dummy, varID_dummy, name_dummy) result(result)
		integer(c_int) :: 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
			integer(c_int) function lib_vlistInqVarIntKey(vlistID_dummy, varID_dummy, name_dummy) bind(c, name = 'vlistInqVarIntKey')
				import c_char, c_int
				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
		result = lib_vlistInqVarIntKey(vlistID_dummy, varID_dummy, name_temp)
	end function vlistInqVarIntKey

	function vlistInqNatts(vlistID_dummy, varID_dummy, nattsp) result(result)
		integer(c_int) :: result
		integer(c_int), value :: vlistID_dummy
		integer(c_int), value :: varID_dummy
		integer(c_int), optional, intent(inout) :: nattsp
		integer(c_int), target :: nattsp_temp
		type(c_ptr) :: nattsp_ptr
		interface
			integer(c_int) function lib_vlistInqNatts(vlistID_dummy, varID_dummy, nattsp) bind(c, name = 'vlistInqNatts')
				import c_int, c_ptr
				integer(c_int), value :: vlistID_dummy
				integer(c_int), value :: varID_dummy
				type(c_ptr), value :: nattsp
			end function lib_vlistInqNatts
		end interface
		nattsp_ptr = c_null_ptr
		if(present(nattsp)) nattsp_ptr = c_loc(nattsp_temp)
		result = lib_vlistInqNatts(vlistID_dummy, varID_dummy, nattsp_ptr)
		if(present(nattsp)) nattsp = nattsp_temp
	end function vlistInqNatts

	function vlistInqAtt(vlistID_dummy, varID_dummy, attrnum_dummy, name_dummy, typep, lenp) result(result)
		integer(c_int) :: 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), optional, intent(inout) :: typep
		integer(c_int), optional, intent(inout) :: lenp
		character(kind = c_char) :: name_temp(len(name_dummy))
		integer :: name_i
		logical :: name_padding = .true.
		integer(c_int), target :: typep_temp
		type(c_ptr) :: typep_ptr
		integer(c_int), target :: lenp_temp
		type(c_ptr) :: lenp_ptr
		interface
			integer(c_int) function lib_vlistInqAtt(vlistID_dummy, varID_dummy, attrnum_dummy, name_dummy, typep, lenp) bind(c, name = 'vlis&
			&tInqAtt')
				import c_char, c_int, c_ptr
				integer(c_int), value :: vlistID_dummy
				integer(c_int), value :: varID_dummy
				integer(c_int), value :: attrnum_dummy
				character(kind = c_char) :: name_dummy(*)
				type(c_ptr), value :: typep
				type(c_ptr), value :: lenp
			end function lib_vlistInqAtt
		end interface
		do name_i = len(name_dummy), 1, -1
			if(name_dummy(name_i:name_i) /= ' ') name_padding = .false.
			if(name_padding) then
				name_temp(name_i) = c_null_char
			else
				name_temp(name_i) = name_dummy(name_i:name_i)
			end if
		end do
		typep_ptr = c_null_ptr
		if(present(typep)) typep_ptr = c_loc(typep_temp)
		lenp_ptr = c_null_ptr
		if(present(lenp)) lenp_ptr = c_loc(lenp_temp)
		result = lib_vlistInqAtt(vlistID_dummy, varID_dummy, attrnum_dummy, name_temp, typep_ptr, lenp_ptr)
		name_padding = .false.
		do name_i = 1, len(name_dummy)
			if(name_temp(name_i) == c_null_char) name_padding = .true.
			if(name_padding) then
				name_dummy(name_i:name_i) = ' '
			else
				name_dummy(name_i:name_i) = name_temp(name_i)
			end if
		end do
		if(present(typep)) typep = typep_temp
		if(present(lenp)) lenp = lenp_temp
	end function vlistInqAtt

	function vlistDelAtt(vlistID_dummy, varID_dummy, name_dummy) result(result)
		integer(c_int) :: 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
			integer(c_int) function lib_vlistDelAtt(vlistID_dummy, varID_dummy, name_dummy) bind(c, name = 'vlistDelAtt')
				import c_char, c_int
				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
		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_vec_dummy) result(result)
		integer(c_int) :: 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_vec_dummy(*)
		character(kind = c_char) :: name_temp(len(name_dummy) + 1)
		integer :: name_i
		interface
			integer(c_int) function lib_vlistDefAttInt(vlistID_dummy, varID_dummy, name_dummy, type_dummy, len_dummy, ip_vec_dummy) bind(c, &
			&name = 'vlistDefAttInt')
				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 :: type_dummy
				integer(c_int), value :: len_dummy
				integer(c_int), intent(in) :: ip_vec_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
		result = lib_vlistDefAttInt(vlistID_dummy, varID_dummy, name_temp, type_dummy, len_dummy, ip_vec_dummy)
	end function vlistDefAttInt

	function vlistDefAttFlt(vlistID_dummy, varID_dummy, name_dummy, type_dummy, len_dummy, dp_vec_dummy) result(result)
		integer(c_int) :: 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_vec_dummy(*)
		character(kind = c_char) :: name_temp(len(name_dummy) + 1)
		integer :: name_i
		interface
			integer(c_int) function lib_vlistDefAttFlt(vlistID_dummy, varID_dummy, name_dummy, type_dummy, len_dummy, dp_vec_dummy) bind(c, &
			&name = 'vlistDefAttFlt')
				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(*)
				integer(c_int), value :: type_dummy
				integer(c_int), value :: len_dummy
				real(c_double), intent(in) :: dp_vec_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
		result = lib_vlistDefAttFlt(vlistID_dummy, varID_dummy, name_temp, type_dummy, len_dummy, dp_vec_dummy)
	end function vlistDefAttFlt

	function vlistDefAttTxt(vlistID_dummy, varID_dummy, name_dummy, len_dummy, tp_cbuf_dummy) result(result)
		integer(c_int) :: 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
			integer(c_int) function lib_vlistDefAttTxt(vlistID_dummy, varID_dummy, name_dummy, len_dummy, tp_cbuf_dummy) bind(c, name = 'vli&
			&stDefAttTxt')
				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 :: 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
		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_vec_dummy) result(result)
		integer(c_int) :: 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_vec_dummy(*)
		character(kind = c_char) :: name_temp(len(name_dummy) + 1)
		integer :: name_i
		interface
			integer(c_int) function lib_vlistInqAttInt(vlistID_dummy, varID_dummy, name_dummy, mlen_dummy, ip_vec_dummy) bind(c, name = 'vli&
			&stInqAttInt')
				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 :: mlen_dummy
				integer(c_int), intent(inout) :: ip_vec_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
		result = lib_vlistInqAttInt(vlistID_dummy, varID_dummy, name_temp, mlen_dummy, ip_vec_dummy)
	end function vlistInqAttInt

	function vlistInqAttFlt(vlistID_dummy, varID_dummy, name_dummy, mlen_dummy, dp_vec_dummy) result(result)
		integer(c_int) :: 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_vec_dummy(*)
		character(kind = c_char) :: name_temp(len(name_dummy) + 1)
		integer :: name_i
		interface
			integer(c_int) function lib_vlistInqAttFlt(vlistID_dummy, varID_dummy, name_dummy, mlen_dummy, dp_vec_dummy) bind(c, name = 'vli&
			&stInqAttFlt')
				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(*)
				integer(c_int), value :: mlen_dummy
				real(c_double), intent(inout) :: dp_vec_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
		result = lib_vlistInqAttFlt(vlistID_dummy, varID_dummy, name_temp, mlen_dummy, dp_vec_dummy)
	end function vlistInqAttFlt

	function vlistInqAttTxt(vlistID_dummy, varID_dummy, name_dummy, mlen_dummy, tp_cbuf_dummy) result(result)
		integer(c_int) :: 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))
		integer :: tp_cbuf_i
		logical :: tp_cbuf_padding = .true.
		interface
			integer(c_int) function lib_vlistInqAttTxt(vlistID_dummy, varID_dummy, name_dummy, mlen_dummy, tp_cbuf_dummy) bind(c, name = 'vl&
			&istInqAttTxt')
				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 :: 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
		do tp_cbuf_i = len(tp_cbuf_dummy), 1, -1
			if(tp_cbuf_dummy(tp_cbuf_i:tp_cbuf_i) /= ' ') tp_cbuf_padding = .false.
			if(tp_cbuf_padding) then
				tp_cbuf_temp(tp_cbuf_i) = c_null_char
			else
				tp_cbuf_temp(tp_cbuf_i) = tp_cbuf_dummy(tp_cbuf_i:tp_cbuf_i)
			end if
		end do
		result = lib_vlistInqAttTxt(vlistID_dummy, varID_dummy, name_temp, mlen_dummy, tp_cbuf_temp)
		tp_cbuf_padding = .false.
		do tp_cbuf_i = 1, len(tp_cbuf_dummy)
			if(tp_cbuf_temp(tp_cbuf_i) == c_null_char) tp_cbuf_padding = .true.
			if(tp_cbuf_padding) then
				tp_cbuf_dummy(tp_cbuf_i:tp_cbuf_i) = ' '
			else
				tp_cbuf_dummy(tp_cbuf_i:tp_cbuf_i) = tp_cbuf_temp(tp_cbuf_i)
			end if
		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))
		integer :: gridname_i
		logical :: gridname_padding = .true.
		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
		do gridname_i = len(gridname_dummy), 1, -1
			if(gridname_dummy(gridname_i:gridname_i) /= ' ') gridname_padding = .false.
			if(gridname_padding) then
				gridname_temp(gridname_i) = c_null_char
			else
				gridname_temp(gridname_i) = gridname_dummy(gridname_i:gridname_i)
			end if
		end do
		call lib_gridName(gridtype_dummy, gridname_temp)
		gridname_padding = .false.
		do gridname_i = 1, len(gridname_dummy)
			if(gridname_temp(gridname_i) == c_null_char) gridname_padding = .true.
			if(gridname_padding) then
				gridname_dummy(gridname_i:gridname_i) = ' '
			else
				gridname_dummy(gridname_i:gridname_i) = gridname_temp(gridname_i)
			end if
		end do
	end subroutine gridName

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

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

	subroutine gridDefMaskGME(gridID_dummy, mask_vec_dummy)
		integer(c_int), value :: gridID_dummy
		integer(c_int), intent(in) :: mask_vec_dummy(*)
		interface
			subroutine lib_gridDefMaskGME(gridID_dummy, mask_vec_dummy) bind(c, name = 'gridDefMaskGME')
				import c_int
				integer(c_int), value :: gridID_dummy
				integer(c_int), intent(in) :: mask_vec_dummy(*)
			end subroutine lib_gridDefMaskGME
		end interface
		call lib_gridDefMaskGME(gridID_dummy, mask_vec_dummy)
	end subroutine gridDefMaskGME

	function gridInqMaskGME(gridID_dummy, mask_vec_dummy) result(result)
		integer(c_int) :: result
		integer(c_int), value :: gridID_dummy
		integer(c_int), intent(inout) :: mask_vec_dummy(*)
		interface
			integer(c_int) function lib_gridInqMaskGME(gridID_dummy, mask_vec_dummy) bind(c, name = 'gridInqMaskGME')
				import c_int
				integer(c_int), value :: gridID_dummy
				integer(c_int), intent(inout) :: mask_vec_dummy(*)
			end function lib_gridInqMaskGME
		end interface
		result = lib_gridInqMaskGME(gridID_dummy, mask_vec_dummy)
	end function gridInqMaskGME

	subroutine gridDefMask(gridID_dummy, mask_vec_dummy)
		integer(c_int), value :: gridID_dummy
		integer(c_int), intent(in) :: mask_vec_dummy(*)
		interface
			subroutine lib_gridDefMask(gridID_dummy, mask_vec_dummy) bind(c, name = 'gridDefMask')
				import c_int
				integer(c_int), value :: gridID_dummy
				integer(c_int), intent(in) :: mask_vec_dummy(*)
			end subroutine lib_gridDefMask
		end interface
		call lib_gridDefMask(gridID_dummy, mask_vec_dummy)
	end subroutine gridDefMask

	function gridInqMask(gridID_dummy, mask_vec_dummy) result(result)
		integer(c_int) :: result
		integer(c_int), value :: gridID_dummy
		integer(c_int), intent(inout) :: mask_vec_dummy(*)
		interface
			integer(c_int) function lib_gridInqMask(gridID_dummy, mask_vec_dummy) bind(c, name = 'gridInqMask')
				import c_int
				integer(c_int), value :: gridID_dummy
				integer(c_int), intent(inout) :: mask_vec_dummy(*)
			end function lib_gridInqMask
		end interface
		result = lib_gridInqMask(gridID_dummy, mask_vec_dummy)
	end function gridInqMask

	subroutine gridPrint(gridID_dummy, index_dummy, opt_dummy)
		integer(c_int), value :: gridID_dummy
		integer(c_int), value :: index_dummy
		integer(c_int), value :: opt_dummy
		interface
			subroutine lib_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 lib_gridPrint
		end interface
		call lib_gridPrint(gridID_dummy, index_dummy, opt_dummy)
	end subroutine gridPrint

	function gridCreate(gridtype_dummy, size_dummy) result(result)
		integer(c_int) :: result
		integer(c_int), value :: gridtype_dummy
		integer(c_int), value :: size_dummy
		interface
			integer(c_int) function lib_gridCreate(gridtype_dummy, size_dummy) bind(c, name = 'gridCreate')
				import c_int
				integer(c_int), value :: gridtype_dummy
				integer(c_int), value :: size_dummy
			end function lib_gridCreate
		end interface
		result = lib_gridCreate(gridtype_dummy, size_dummy)
	end function gridCreate

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

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

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

	function gridInqSize(gridID_dummy) result(result)
		integer(c_int) :: result
		integer(c_int), value :: gridID_dummy
		interface
			integer(c_int) function lib_gridInqSize(gridID_dummy) bind(c, name = 'gridInqSize')
				import c_int
				integer(c_int), value :: gridID_dummy
			end function lib_gridInqSize
		end interface
		result = lib_gridInqSize(gridID_dummy)
	end function gridInqSize

	subroutine gridDefXsize(gridID_dummy, xsize_dummy)
		integer(c_int), value :: gridID_dummy
		integer(c_int), value :: xsize_dummy
		interface
			subroutine lib_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 lib_gridDefXsize
		end interface
		call lib_gridDefXsize(gridID_dummy, xsize_dummy)
	end subroutine gridDefXsize

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

	subroutine gridDefYsize(gridID_dummy, ysize_dummy)
		integer(c_int), value :: gridID_dummy
		integer(c_int), value :: ysize_dummy
		interface
			subroutine lib_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 lib_gridDefYsize
		end interface
		call lib_gridDefYsize(gridID_dummy, ysize_dummy)
	end subroutine gridDefYsize

	function gridInqYsize(gridID_dummy) result(result)
		integer(c_int) :: result
		integer(c_int), value :: gridID_dummy
		interface
			integer(c_int) function lib_gridInqYsize(gridID_dummy) bind(c, name = 'gridInqYsize')
				import c_int
				integer(c_int), value :: gridID_dummy
			end function lib_gridInqYsize
		end interface
		result = lib_gridInqYsize(gridID_dummy)
	end function gridInqYsize

	subroutine gridDefNP(gridID_dummy, np_dummy)
		integer(c_int), value :: gridID_dummy
		integer(c_int), value :: np_dummy
		interface
			subroutine lib_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 lib_gridDefNP
		end interface
		call lib_gridDefNP(gridID_dummy, np_dummy)
	end subroutine gridDefNP

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

	subroutine gridDefXvals(gridID_dummy, xvals_vec_dummy)
		integer(c_int), value :: gridID_dummy
		real(c_double), intent(in) :: xvals_vec_dummy(*)
		interface
			subroutine lib_gridDefXvals(gridID_dummy, xvals_vec_dummy) bind(c, name = 'gridDefXvals')
				import c_double, c_int
				integer(c_int), value :: gridID_dummy
				real(c_double), intent(in) :: xvals_vec_dummy(*)
			end subroutine lib_gridDefXvals
		end interface
		call lib_gridDefXvals(gridID_dummy, xvals_vec_dummy)
	end subroutine gridDefXvals

	function gridInqXvals(gridID_dummy, xvals_vec_dummy) result(result)
		integer(c_int) :: result
		integer(c_int), value :: gridID_dummy
		real(c_double), intent(inout) :: xvals_vec_dummy(*)
		interface
			integer(c_int) function lib_gridInqXvals(gridID_dummy, xvals_vec_dummy) bind(c, name = 'gridInqXvals')
				import c_double, c_int
				integer(c_int), value :: gridID_dummy
				real(c_double), intent(inout) :: xvals_vec_dummy(*)
			end function lib_gridInqXvals
		end interface
		result = lib_gridInqXvals(gridID_dummy, xvals_vec_dummy)
	end function gridInqXvals

	subroutine gridDefYvals(gridID_dummy, yvals_vec_dummy)
		integer(c_int), value :: gridID_dummy
		real(c_double), intent(in) :: yvals_vec_dummy(*)
		interface
			subroutine lib_gridDefYvals(gridID_dummy, yvals_vec_dummy) bind(c, name = 'gridDefYvals')
				import c_double, c_int
				integer(c_int), value :: gridID_dummy
				real(c_double), intent(in) :: yvals_vec_dummy(*)
			end subroutine lib_gridDefYvals
		end interface
		call lib_gridDefYvals(gridID_dummy, yvals_vec_dummy)
	end subroutine gridDefYvals

	function gridInqYvals(gridID_dummy, yvals_vec_dummy) result(result)
		integer(c_int) :: result
		integer(c_int), value :: gridID_dummy
		real(c_double), intent(inout) :: yvals_vec_dummy(*)
		interface
			integer(c_int) function lib_gridInqYvals(gridID_dummy, yvals_vec_dummy) bind(c, name = 'gridInqYvals')
				import c_double, c_int
				integer(c_int), value :: gridID_dummy
				real(c_double), intent(inout) :: yvals_vec_dummy(*)
			end function lib_gridInqYvals
		end interface
		result = lib_gridInqYvals(gridID_dummy, yvals_vec_dummy)
	end function gridInqYvals

	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))
		integer :: xname_i
		logical :: xname_padding = .true.
		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
		do xname_i = len(xname_dummy), 1, -1
			if(xname_dummy(xname_i:xname_i) /= ' ') xname_padding = .false.
			if(xname_padding) then
				xname_temp(xname_i) = c_null_char
			else
				xname_temp(xname_i) = xname_dummy(xname_i:xname_i)
			end if
		end do
		call lib_gridInqXname(gridID_dummy, xname_temp)
		xname_padding = .false.
		do xname_i = 1, len(xname_dummy)
			if(xname_temp(xname_i) == c_null_char) xname_padding = .true.
			if(xname_padding) then
				xname_dummy(xname_i:xname_i) = ' '
			else
				xname_dummy(xname_i:xname_i) = xname_temp(xname_i)
			end if
		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))
		integer :: xlongname_i
		logical :: xlongname_padding = .true.
		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
		do xlongname_i = len(xlongname_dummy), 1, -1
			if(xlongname_dummy(xlongname_i:xlongname_i) /= ' ') xlongname_padding = .false.
			if(xlongname_padding) then
				xlongname_temp(xlongname_i) = c_null_char
			else
				xlongname_temp(xlongname_i) = xlongname_dummy(xlongname_i:xlongname_i)
			end if
		end do
		call lib_gridInqXlongname(gridID_dummy, xlongname_temp)
		xlongname_padding = .false.
		do xlongname_i = 1, len(xlongname_dummy)
			if(xlongname_temp(xlongname_i) == c_null_char) xlongname_padding = .true.
			if(xlongname_padding) then
				xlongname_dummy(xlongname_i:xlongname_i) = ' '
			else
				xlongname_dummy(xlongname_i:xlongname_i) = xlongname_temp(xlongname_i)
			end if
		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))
		integer :: xunits_i
		logical :: xunits_padding = .true.
		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
		do xunits_i = len(xunits_dummy), 1, -1
			if(xunits_dummy(xunits_i:xunits_i) /= ' ') xunits_padding = .false.
			if(xunits_padding) then
				xunits_temp(xunits_i) = c_null_char
			else
				xunits_temp(xunits_i) = xunits_dummy(xunits_i:xunits_i)
			end if
		end do
		call lib_gridInqXunits(gridID_dummy, xunits_temp)
		xunits_padding = .false.
		do xunits_i = 1, len(xunits_dummy)
			if(xunits_temp(xunits_i) == c_null_char) xunits_padding = .true.
			if(xunits_padding) then
				xunits_dummy(xunits_i:xunits_i) = ' '
			else
				xunits_dummy(xunits_i:xunits_i) = xunits_temp(xunits_i)
			end if
		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))
		integer :: yname_i
		logical :: yname_padding = .true.
		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
		do yname_i = len(yname_dummy), 1, -1
			if(yname_dummy(yname_i:yname_i) /= ' ') yname_padding = .false.
			if(yname_padding) then
				yname_temp(yname_i) = c_null_char
			else
				yname_temp(yname_i) = yname_dummy(yname_i:yname_i)
			end if
		end do
		call lib_gridInqYname(gridID_dummy, yname_temp)
		yname_padding = .false.
		do yname_i = 1, len(yname_dummy)
			if(yname_temp(yname_i) == c_null_char) yname_padding = .true.
			if(yname_padding) then
				yname_dummy(yname_i:yname_i) = ' '
			else
				yname_dummy(yname_i:yname_i) = yname_temp(yname_i)
			end if
		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))
		integer :: ylongname_i
		logical :: ylongname_padding = .true.
		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
		do ylongname_i = len(ylongname_dummy), 1, -1
			if(ylongname_dummy(ylongname_i:ylongname_i) /= ' ') ylongname_padding = .false.
			if(ylongname_padding) then
				ylongname_temp(ylongname_i) = c_null_char
			else
				ylongname_temp(ylongname_i) = ylongname_dummy(ylongname_i:ylongname_i)
			end if
		end do
		call lib_gridInqYlongname(gridID_dummy, ylongname_temp)
		ylongname_padding = .false.
		do ylongname_i = 1, len(ylongname_dummy)
			if(ylongname_temp(ylongname_i) == c_null_char) ylongname_padding = .true.
			if(ylongname_padding) then
				ylongname_dummy(ylongname_i:ylongname_i) = ' '
			else
				ylongname_dummy(ylongname_i:ylongname_i) = ylongname_temp(ylongname_i)
			end if
		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))
		integer :: yunits_i
		logical :: yunits_padding = .true.
		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
		do yunits_i = len(yunits_dummy), 1, -1
			if(yunits_dummy(yunits_i:yunits_i) /= ' ') yunits_padding = .false.
			if(yunits_padding) then
				yunits_temp(yunits_i) = c_null_char
			else
				yunits_temp(yunits_i) = yunits_dummy(yunits_i:yunits_i)
			end if
		end do
		call lib_gridInqYunits(gridID_dummy, yunits_temp)
		yunits_padding = .false.
		do yunits_i = 1, len(yunits_dummy)
			if(yunits_temp(yunits_i) == c_null_char) yunits_padding = .true.
			if(yunits_padding) then
				yunits_dummy(yunits_i:yunits_i) = ' '
			else
				yunits_dummy(yunits_i:yunits_i) = yunits_temp(yunits_i)
			end if
		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))
		integer :: xstdname_i
		logical :: xstdname_padding = .true.
		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
		do xstdname_i = len(xstdname_dummy), 1, -1
			if(xstdname_dummy(xstdname_i:xstdname_i) /= ' ') xstdname_padding = .false.
			if(xstdname_padding) then
				xstdname_temp(xstdname_i) = c_null_char
			else
				xstdname_temp(xstdname_i) = xstdname_dummy(xstdname_i:xstdname_i)
			end if
		end do
		call lib_gridInqXstdname(gridID_dummy, xstdname_temp)
		xstdname_padding = .false.
		do xstdname_i = 1, len(xstdname_dummy)
			if(xstdname_temp(xstdname_i) == c_null_char) xstdname_padding = .true.
			if(xstdname_padding) then
				xstdname_dummy(xstdname_i:xstdname_i) = ' '
			else
				xstdname_dummy(xstdname_i:xstdname_i) = xstdname_temp(xstdname_i)
			end if
		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))
		integer :: ystdname_i
		logical :: ystdname_padding = .true.
		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
		do ystdname_i = len(ystdname_dummy), 1, -1
			if(ystdname_dummy(ystdname_i:ystdname_i) /= ' ') ystdname_padding = .false.
			if(ystdname_padding) then
				ystdname_temp(ystdname_i) = c_null_char
			else
				ystdname_temp(ystdname_i) = ystdname_dummy(ystdname_i:ystdname_i)
			end if
		end do
		call lib_gridInqYstdname(gridID_dummy, ystdname_temp)
		ystdname_padding = .false.
		do ystdname_i = 1, len(ystdname_dummy)
			if(ystdname_temp(ystdname_i) == c_null_char) ystdname_padding = .true.
			if(ystdname_padding) then
				ystdname_dummy(ystdname_i:ystdname_i) = ' '
			else
				ystdname_dummy(ystdname_i:ystdname_i) = ystdname_temp(ystdname_i)
			end if
		end do
	end subroutine gridInqYstdname

	subroutine gridDefPrec(gridID_dummy, prec_dummy)
		integer(c_int), value :: gridID_dummy
		integer(c_int), value :: prec_dummy
		interface
			subroutine lib_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 lib_gridDefPrec
		end interface
		call lib_gridDefPrec(gridID_dummy, prec_dummy)
	end subroutine gridDefPrec

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

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

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

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

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

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

	function gridIsRotated(gridID_dummy) result(result)
		integer(c_int) :: result
		integer(c_int), value :: gridID_dummy
		interface
			integer(c_int) function lib_gridIsRotated(gridID_dummy) bind(c, name = 'gridIsRotated')
				import c_int
				integer(c_int), value :: gridID_dummy
			end function lib_gridIsRotated
		end interface
		result = lib_gridIsRotated(gridID_dummy)
	end function gridIsRotated

	subroutine gridDefXpole(gridID_dummy, xpole_dummy)
		integer(c_int), value :: gridID_dummy
		real(c_double), value :: xpole_dummy
		interface
			subroutine lib_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 lib_gridDefXpole
		end interface
		call lib_gridDefXpole(gridID_dummy, xpole_dummy)
	end subroutine gridDefXpole

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

	subroutine gridDefYpole(gridID_dummy, ypole_dummy)
		integer(c_int), value :: gridID_dummy
		real(c_double), value :: ypole_dummy
		interface
			subroutine lib_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 lib_gridDefYpole
		end interface
		call lib_gridDefYpole(gridID_dummy, ypole_dummy)
	end subroutine gridDefYpole

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

	subroutine gridDefAngle(gridID_dummy, angle_dummy)
		integer(c_int), value :: gridID_dummy
		real(c_double), value :: angle_dummy
		interface
			subroutine lib_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 lib_gridDefAngle
		end interface
		call lib_gridDefAngle(gridID_dummy, angle_dummy)
	end subroutine gridDefAngle

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

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

	subroutine gridDefTrunc(gridID_dummy, trunc_dummy)
		integer(c_int), value :: gridID_dummy
		integer(c_int), value :: trunc_dummy
		interface
			subroutine lib_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 lib_gridDefTrunc
		end interface
		call lib_gridDefTrunc(gridID_dummy, trunc_dummy)
	end subroutine gridDefTrunc

	subroutine gridDefGMEnd(gridID_dummy, nd_dummy)
		integer(c_int), value :: gridID_dummy
		integer(c_int), value :: nd_dummy
		interface
			subroutine lib_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 lib_gridDefGMEnd
		end interface
		call lib_gridDefGMEnd(gridID_dummy, nd_dummy)
	end subroutine gridDefGMEnd

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

	subroutine gridDefGMEni(gridID_dummy, ni_dummy)
		integer(c_int), value :: gridID_dummy
		integer(c_int), value :: ni_dummy
		interface
			subroutine lib_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 lib_gridDefGMEni
		end interface
		call lib_gridDefGMEni(gridID_dummy, ni_dummy)
	end subroutine gridDefGMEni

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

	subroutine gridDefGMEni2(gridID_dummy, ni2_dummy)
		integer(c_int), value :: gridID_dummy
		integer(c_int), value :: ni2_dummy
		interface
			subroutine lib_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 lib_gridDefGMEni2
		end interface
		call lib_gridDefGMEni2(gridID_dummy, ni2_dummy)
	end subroutine gridDefGMEni2

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

	subroutine gridDefGMEni3(gridID_dummy, ni3_dummy)
		integer(c_int), value :: gridID_dummy
		integer(c_int), value :: ni3_dummy
		interface
			subroutine lib_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 lib_gridDefGMEni3
		end interface
		call lib_gridDefGMEni3(gridID_dummy, ni3_dummy)
	end subroutine gridDefGMEni3

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

	subroutine gridDefNumber(gridID_dummy, number_dummy)
		integer(c_int), value :: gridID_dummy
		integer(c_int), value :: number_dummy
		interface
			subroutine lib_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 lib_gridDefNumber
		end interface
		call lib_gridDefNumber(gridID_dummy, number_dummy)
	end subroutine gridDefNumber

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

	subroutine gridDefPosition(gridID_dummy, position_dummy)
		integer(c_int), value :: gridID_dummy
		integer(c_int), value :: position_dummy
		interface
			subroutine lib_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 lib_gridDefPosition
		end interface
		call lib_gridDefPosition(gridID_dummy, position_dummy)
	end subroutine gridDefPosition

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

	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(result)
		integer(c_int) :: 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))
		integer :: reference_i
		logical :: reference_padding = .true.
		interface
			integer(c_int) function lib_gridInqReference(gridID_dummy, reference_dummy) bind(c, name = 'gridInqReference')
				import c_char, c_int
				integer(c_int), value :: gridID_dummy
				character(kind = c_char) :: reference_dummy(*)
			end function lib_gridInqReference
		end interface
		do reference_i = len(reference_dummy), 1, -1
			if(reference_dummy(reference_i:reference_i) /= ' ') reference_padding = .false.
			if(reference_padding) then
				reference_temp(reference_i) = c_null_char
			else
				reference_temp(reference_i) = reference_dummy(reference_i:reference_i)
			end if
		end do
		result = lib_gridInqReference(gridID_dummy, reference_temp)
		reference_padding = .false.
		do reference_i = 1, len(reference_dummy)
			if(reference_temp(reference_i) == c_null_char) reference_padding = .true.
			if(reference_padding) then
				reference_dummy(reference_i:reference_i) = ' '
			else
				reference_dummy(reference_i:reference_i) = reference_temp(reference_i)
			end if
		end do
	end function gridInqReference

	subroutine gridDefUUID(gridID_dummy, uuid_dummy)
		integer(c_int), value :: gridID_dummy
		character(kind = c_char), intent(in) :: uuid_dummy(CDI_UUID_SIZE)
		interface
			subroutine lib_gridDefUUID(gridID_dummy, uuid_dummy) bind(c, name = 'gridDefUUID')
				import c_char, c_int
				integer(c_int), value :: gridID_dummy
				character(kind = c_char), intent(in) :: uuid_dummy(*)
			end subroutine lib_gridDefUUID
		end interface
		call lib_gridDefUUID(gridID_dummy, uuid_dummy)
	end subroutine gridDefUUID

	subroutine gridInqUUID(gridID_dummy, uuid_dummy)
		integer(c_int), value :: gridID_dummy
		character(kind = c_char), intent(inout) :: uuid_dummy(CDI_UUID_SIZE)
		interface
			subroutine lib_gridInqUUID(gridID_dummy, uuid_dummy) bind(c, name = 'gridInqUUID')
				import c_char, c_int
				integer(c_int), value :: gridID_dummy
				character(kind = c_char), intent(inout) :: uuid_dummy(*)
			end subroutine lib_gridInqUUID
		end interface
		call lib_gridInqUUID(gridID_dummy, uuid_dummy)
	end subroutine gridInqUUID

	subroutine gridDefLCC(gridID_dummy, originLon_dummy, originLat_dummy, lonParY_dummy, lat1_dummy, lat2_dummy, xinc_dummy, yinc_dumm&
	&y, projflag_dummy, scanflag_dummy)
		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
		interface
			subroutine lib_gridDefLCC(gridID_dummy, originLon_dummy, originLat_dummy, lonParY_dummy, lat1_dummy, lat2_dummy, xinc_dummy, yin&
			&c_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 lib_gridDefLCC
		end interface
		call lib_gridDefLCC(gridID_dummy, originLon_dummy, originLat_dummy, lonParY_dummy, lat1_dummy, lat2_dummy, xinc_dummy, yinc_dummy&
		&, projflag_dummy, scanflag_dummy)
	end subroutine gridDefLCC

	subroutine gridInqLCC(gridID_dummy, originLon, originLat, lonParY, lat1, lat2, xinc, yinc, projflag, scanflag)
		integer(c_int), value :: gridID_dummy
		real(c_double), optional, intent(inout) :: originLon
		real(c_double), optional, intent(inout) :: originLat
		real(c_double), optional, intent(inout) :: lonParY
		real(c_double), optional, intent(inout) :: lat1
		real(c_double), optional, intent(inout) :: lat2
		real(c_double), optional, intent(inout) :: xinc
		real(c_double), optional, intent(inout) :: yinc
		integer(c_int), optional, intent(inout) :: projflag
		integer(c_int), optional, intent(inout) :: scanflag
		real(c_double), target :: originLon_temp
		type(c_ptr) :: originLon_ptr
		real(c_double), target :: originLat_temp
		type(c_ptr) :: originLat_ptr
		real(c_double), target :: lonParY_temp
		type(c_ptr) :: lonParY_ptr
		real(c_double), target :: lat1_temp
		type(c_ptr) :: lat1_ptr
		real(c_double), target :: lat2_temp
		type(c_ptr) :: lat2_ptr
		real(c_double), target :: xinc_temp
		type(c_ptr) :: xinc_ptr
		real(c_double), target :: yinc_temp
		type(c_ptr) :: yinc_ptr
		integer(c_int), target :: projflag_temp
		type(c_ptr) :: projflag_ptr
		integer(c_int), target :: scanflag_temp
		type(c_ptr) :: scanflag_ptr
		interface
			subroutine lib_gridInqLCC(gridID_dummy, originLon, originLat, lonParY, lat1, lat2, xinc, yinc, projflag, scanflag) bind(c, name &
			&= 'gridInqLCC')
				import c_int, c_ptr
				integer(c_int), value :: gridID_dummy
				type(c_ptr), value :: originLon
				type(c_ptr), value :: originLat
				type(c_ptr), value :: lonParY
				type(c_ptr), value :: lat1
				type(c_ptr), value :: lat2
				type(c_ptr), value :: xinc
				type(c_ptr), value :: yinc
				type(c_ptr), value :: projflag
				type(c_ptr), value :: scanflag
			end subroutine lib_gridInqLCC
		end interface
		originLon_ptr = c_null_ptr
		if(present(originLon)) originLon_ptr = c_loc(originLon_temp)
		originLat_ptr = c_null_ptr
		if(present(originLat)) originLat_ptr = c_loc(originLat_temp)
		lonParY_ptr = c_null_ptr
		if(present(lonParY)) lonParY_ptr = c_loc(lonParY_temp)
		lat1_ptr = c_null_ptr
		if(present(lat1)) lat1_ptr = c_loc(lat1_temp)
		lat2_ptr = c_null_ptr
		if(present(lat2)) lat2_ptr = c_loc(lat2_temp)
		xinc_ptr = c_null_ptr
		if(present(xinc)) xinc_ptr = c_loc(xinc_temp)
		yinc_ptr = c_null_ptr
		if(present(yinc)) yinc_ptr = c_loc(yinc_temp)
		projflag_ptr = c_null_ptr
		if(present(projflag)) projflag_ptr = c_loc(projflag_temp)
		scanflag_ptr = c_null_ptr
		if(present(scanflag)) scanflag_ptr = c_loc(scanflag_temp)
		call lib_gridInqLCC(gridID_dummy, originLon_ptr, originLat_ptr, lonParY_ptr, lat1_ptr, lat2_ptr, xinc_ptr, yinc_ptr, projflag_ptr&
		&, scanflag_ptr)
		if(present(originLon)) originLon = originLon_temp
		if(present(originLat)) originLat = originLat_temp
		if(present(lonParY)) lonParY = lonParY_temp
		if(present(lat1)) lat1 = lat1_temp
		if(present(lat2)) lat2 = lat2_temp
		if(present(xinc)) xinc = xinc_temp
		if(present(yinc)) yinc = yinc_temp
		if(present(projflag)) projflag = projflag_temp
		if(present(scanflag)) scanflag = scanflag_temp
	end subroutine gridInqLCC

	subroutine gridDefLcc2(gridID_dummy, earth_radius_dummy, lon_0_dummy, lat_0_dummy, lat_1_dummy, lat_2_dummy)
		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
		interface
			subroutine lib_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 lib_gridDefLcc2
		end interface
		call lib_gridDefLcc2(gridID_dummy, earth_radius_dummy, lon_0_dummy, lat_0_dummy, lat_1_dummy, lat_2_dummy)
	end subroutine gridDefLcc2

	subroutine gridInqLcc2(gridID_dummy, earth_radius, lon_0, lat_0, lat_1, lat_2)
		integer(c_int), value :: gridID_dummy
		real(c_double), optional, intent(inout) :: earth_radius
		real(c_double), optional, intent(inout) :: lon_0
		real(c_double), optional, intent(inout) :: lat_0
		real(c_double), optional, intent(inout) :: lat_1
		real(c_double), optional, intent(inout) :: lat_2
		real(c_double), target :: earth_radius_temp
		type(c_ptr) :: earth_radius_ptr
		real(c_double), target :: lon_0_temp
		type(c_ptr) :: lon_0_ptr
		real(c_double), target :: lat_0_temp
		type(c_ptr) :: lat_0_ptr
		real(c_double), target :: lat_1_temp
		type(c_ptr) :: lat_1_ptr
		real(c_double), target :: lat_2_temp
		type(c_ptr) :: lat_2_ptr
		interface
			subroutine lib_gridInqLcc2(gridID_dummy, earth_radius, lon_0, lat_0, lat_1, lat_2) bind(c, name = 'gridInqLcc2')
				import c_int, c_ptr
				integer(c_int), value :: gridID_dummy
				type(c_ptr), value :: earth_radius
				type(c_ptr), value :: lon_0
				type(c_ptr), value :: lat_0
				type(c_ptr), value :: lat_1
				type(c_ptr), value :: lat_2
			end subroutine lib_gridInqLcc2
		end interface
		earth_radius_ptr = c_null_ptr
		if(present(earth_radius)) earth_radius_ptr = c_loc(earth_radius_temp)
		lon_0_ptr = c_null_ptr
		if(present(lon_0)) lon_0_ptr = c_loc(lon_0_temp)
		lat_0_ptr = c_null_ptr
		if(present(lat_0)) lat_0_ptr = c_loc(lat_0_temp)
		lat_1_ptr = c_null_ptr
		if(present(lat_1)) lat_1_ptr = c_loc(lat_1_temp)
		lat_2_ptr = c_null_ptr
		if(present(lat_2)) lat_2_ptr = c_loc(lat_2_temp)
		call lib_gridInqLcc2(gridID_dummy, earth_radius_ptr, lon_0_ptr, lat_0_ptr, lat_1_ptr, lat_2_ptr)
		if(present(earth_radius)) earth_radius = earth_radius_temp
		if(present(lon_0)) lon_0 = lon_0_temp
		if(present(lat_0)) lat_0 = lat_0_temp
		if(present(lat_1)) lat_1 = lat_1_temp
		if(present(lat_2)) lat_2 = lat_2_temp
	end subroutine gridInqLcc2

	subroutine gridDefLaea(gridID_dummy, earth_radius_dummy, lon_0_dummy, lat_0_dummy)
		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
		interface
			subroutine lib_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 lib_gridDefLaea
		end interface
		call lib_gridDefLaea(gridID_dummy, earth_radius_dummy, lon_0_dummy, lat_0_dummy)
	end subroutine gridDefLaea

	subroutine gridInqLaea(gridID_dummy, earth_radius, lon_0, lat_0)
		integer(c_int), value :: gridID_dummy
		real(c_double), optional, intent(inout) :: earth_radius
		real(c_double), optional, intent(inout) :: lon_0
		real(c_double), optional, intent(inout) :: lat_0
		real(c_double), target :: earth_radius_temp
		type(c_ptr) :: earth_radius_ptr
		real(c_double), target :: lon_0_temp
		type(c_ptr) :: lon_0_ptr
		real(c_double), target :: lat_0_temp
		type(c_ptr) :: lat_0_ptr
		interface
			subroutine lib_gridInqLaea(gridID_dummy, earth_radius, lon_0, lat_0) bind(c, name = 'gridInqLaea')
				import c_int, c_ptr
				integer(c_int), value :: gridID_dummy
				type(c_ptr), value :: earth_radius
				type(c_ptr), value :: lon_0
				type(c_ptr), value :: lat_0
			end subroutine lib_gridInqLaea
		end interface
		earth_radius_ptr = c_null_ptr
		if(present(earth_radius)) earth_radius_ptr = c_loc(earth_radius_temp)
		lon_0_ptr = c_null_ptr
		if(present(lon_0)) lon_0_ptr = c_loc(lon_0_temp)
		lat_0_ptr = c_null_ptr
		if(present(lat_0)) lat_0_ptr = c_loc(lat_0_temp)
		call lib_gridInqLaea(gridID_dummy, earth_radius_ptr, lon_0_ptr, lat_0_ptr)
		if(present(earth_radius)) earth_radius = earth_radius_temp
		if(present(lon_0)) lon_0 = lon_0_temp
		if(present(lat_0)) lat_0 = lat_0_temp
	end subroutine gridInqLaea

	subroutine gridDefArea(gridID_dummy, area_vec_dummy)
		integer(c_int), value :: gridID_dummy
		real(c_double), intent(in) :: area_vec_dummy(*)
		interface
			subroutine lib_gridDefArea(gridID_dummy, area_vec_dummy) bind(c, name = 'gridDefArea')
				import c_double, c_int
				integer(c_int), value :: gridID_dummy
				real(c_double), intent(in) :: area_vec_dummy(*)
			end subroutine lib_gridDefArea
		end interface
		call lib_gridDefArea(gridID_dummy, area_vec_dummy)
	end subroutine gridDefArea

	subroutine gridInqArea(gridID_dummy, area_vec_dummy)
		integer(c_int), value :: gridID_dummy
		real(c_double), intent(inout) :: area_vec_dummy(*)
		interface
			subroutine lib_gridInqArea(gridID_dummy, area_vec_dummy) bind(c, name = 'gridInqArea')
				import c_double, c_int
				integer(c_int), value :: gridID_dummy
				real(c_double), intent(inout) :: area_vec_dummy(*)
			end subroutine lib_gridInqArea
		end interface
		call lib_gridInqArea(gridID_dummy, area_vec_dummy)
	end subroutine gridInqArea

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

	subroutine gridDefNvertex(gridID_dummy, nvertex_dummy)
		integer(c_int), value :: gridID_dummy
		integer(c_int), value :: nvertex_dummy
		interface
			subroutine lib_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 lib_gridDefNvertex
		end interface
		call lib_gridDefNvertex(gridID_dummy, nvertex_dummy)
	end subroutine gridDefNvertex

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

	subroutine gridDefXbounds(gridID_dummy, xbounds_vec_dummy)
		integer(c_int), value :: gridID_dummy
		real(c_double), intent(in) :: xbounds_vec_dummy(*)
		interface
			subroutine lib_gridDefXbounds(gridID_dummy, xbounds_vec_dummy) bind(c, name = 'gridDefXbounds')
				import c_double, c_int
				integer(c_int), value :: gridID_dummy
				real(c_double), intent(in) :: xbounds_vec_dummy(*)
			end subroutine lib_gridDefXbounds
		end interface
		call lib_gridDefXbounds(gridID_dummy, xbounds_vec_dummy)
	end subroutine gridDefXbounds

	function gridInqXbounds(gridID_dummy, xbounds_vec_dummy) result(result)
		integer(c_int) :: result
		integer(c_int), value :: gridID_dummy
		real(c_double), intent(inout) :: xbounds_vec_dummy(*)
		interface
			integer(c_int) function lib_gridInqXbounds(gridID_dummy, xbounds_vec_dummy) bind(c, name = 'gridInqXbounds')
				import c_double, c_int
				integer(c_int), value :: gridID_dummy
				real(c_double), intent(inout) :: xbounds_vec_dummy(*)
			end function lib_gridInqXbounds
		end interface
		result = lib_gridInqXbounds(gridID_dummy, xbounds_vec_dummy)
	end function gridInqXbounds

	subroutine gridDefYbounds(gridID_dummy, ybounds_vec_dummy)
		integer(c_int), value :: gridID_dummy
		real(c_double), intent(in) :: ybounds_vec_dummy(*)
		interface
			subroutine lib_gridDefYbounds(gridID_dummy, ybounds_vec_dummy) bind(c, name = 'gridDefYbounds')
				import c_double, c_int
				integer(c_int), value :: gridID_dummy
				real(c_double), intent(in) :: ybounds_vec_dummy(*)
			end subroutine lib_gridDefYbounds
		end interface
		call lib_gridDefYbounds(gridID_dummy, ybounds_vec_dummy)
	end subroutine gridDefYbounds

	function gridInqYbounds(gridID_dummy, ybounds_vec_dummy) result(result)
		integer(c_int) :: result
		integer(c_int), value :: gridID_dummy
		real(c_double), intent(inout) :: ybounds_vec_dummy(*)
		interface
			integer(c_int) function lib_gridInqYbounds(gridID_dummy, ybounds_vec_dummy) bind(c, name = 'gridInqYbounds')
				import c_double, c_int
				integer(c_int), value :: gridID_dummy
				real(c_double), intent(inout) :: ybounds_vec_dummy(*)
			end function lib_gridInqYbounds
		end interface
		result = lib_gridInqYbounds(gridID_dummy, ybounds_vec_dummy)
	end function gridInqYbounds

	subroutine gridDefRowlon(gridID_dummy, nrowlon_dummy, rowlon_vec_dummy)
		integer(c_int), value :: gridID_dummy
		integer(c_int), value :: nrowlon_dummy
		integer(c_int), intent(in) :: rowlon_vec_dummy(*)
		interface
			subroutine lib_gridDefRowlon(gridID_dummy, nrowlon_dummy, rowlon_vec_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_vec_dummy(*)
			end subroutine lib_gridDefRowlon
		end interface
		call lib_gridDefRowlon(gridID_dummy, nrowlon_dummy, rowlon_vec_dummy)
	end subroutine gridDefRowlon

	subroutine gridInqRowlon(gridID_dummy, rowlon_vec_dummy)
		integer(c_int), value :: gridID_dummy
		integer(c_int), intent(inout) :: rowlon_vec_dummy(*)
		interface
			subroutine lib_gridInqRowlon(gridID_dummy, rowlon_vec_dummy) bind(c, name = 'gridInqRowlon')
				import c_int
				integer(c_int), value :: gridID_dummy
				integer(c_int), intent(inout) :: rowlon_vec_dummy(*)
			end subroutine lib_gridInqRowlon
		end interface
		call lib_gridInqRowlon(gridID_dummy, rowlon_vec_dummy)
	end subroutine gridInqRowlon

	subroutine gridChangeType(gridID_dummy, gridtype_dummy)
		integer(c_int), value :: gridID_dummy
		integer(c_int), value :: gridtype_dummy
		interface
			subroutine lib_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 lib_gridChangeType
		end interface
		call lib_gridChangeType(gridID_dummy, gridtype_dummy)
	end subroutine gridChangeType

	subroutine gridDefComplexPacking(gridID_dummy, lpack_dummy)
		integer(c_int), value :: gridID_dummy
		integer(c_int), value :: lpack_dummy
		interface
			subroutine lib_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 lib_gridDefComplexPacking
		end interface
		call lib_gridDefComplexPacking(gridID_dummy, lpack_dummy)
	end subroutine gridDefComplexPacking

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

	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))
		integer :: zaxisname_i
		logical :: zaxisname_padding = .true.
		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
		do zaxisname_i = len(zaxisname_dummy), 1, -1
			if(zaxisname_dummy(zaxisname_i:zaxisname_i) /= ' ') zaxisname_padding = .false.
			if(zaxisname_padding) then
				zaxisname_temp(zaxisname_i) = c_null_char
			else
				zaxisname_temp(zaxisname_i) = zaxisname_dummy(zaxisname_i:zaxisname_i)
			end if
		end do
		call lib_zaxisName(zaxistype_dummy, zaxisname_temp)
		zaxisname_padding = .false.
		do zaxisname_i = 1, len(zaxisname_dummy)
			if(zaxisname_temp(zaxisname_i) == c_null_char) zaxisname_padding = .true.
			if(zaxisname_padding) then
				zaxisname_dummy(zaxisname_i:zaxisname_i) = ' '
			else
				zaxisname_dummy(zaxisname_i:zaxisname_i) = zaxisname_temp(zaxisname_i)
			end if
		end do
	end subroutine zaxisName

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

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

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

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

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

	subroutine zaxisResize(zaxisID_dummy, size_dummy)
		integer(c_int), value :: zaxisID_dummy
		integer(c_int), value :: size_dummy
		interface
			subroutine lib_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 lib_zaxisResize
		end interface
		call lib_zaxisResize(zaxisID_dummy, size_dummy)
	end subroutine zaxisResize

	subroutine zaxisPrint(zaxisID_dummy, index_dummy)
		integer(c_int), value :: zaxisID_dummy
		integer(c_int), value :: index_dummy
		interface
			subroutine lib_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 lib_zaxisPrint
		end interface
		call lib_zaxisPrint(zaxisID_dummy, index_dummy)
	end subroutine zaxisPrint

	subroutine zaxisDefLevels(zaxisID_dummy, levels_vec_dummy)
		integer(c_int), value :: zaxisID_dummy
		real(c_double), intent(in) :: levels_vec_dummy(*)
		interface
			subroutine lib_zaxisDefLevels(zaxisID_dummy, levels_vec_dummy) bind(c, name = 'zaxisDefLevels')
				import c_double, c_int
				integer(c_int), value :: zaxisID_dummy
				real(c_double), intent(in) :: levels_vec_dummy(*)
			end subroutine lib_zaxisDefLevels
		end interface
		call lib_zaxisDefLevels(zaxisID_dummy, levels_vec_dummy)
	end subroutine zaxisDefLevels

	subroutine zaxisInqLevels(zaxisID_dummy, levels_vec_dummy)
		integer(c_int), value :: zaxisID_dummy
		real(c_double), intent(inout) :: levels_vec_dummy(*)
		interface
			subroutine lib_zaxisInqLevels(zaxisID_dummy, levels_vec_dummy) bind(c, name = 'zaxisInqLevels')
				import c_double, c_int
				integer(c_int), value :: zaxisID_dummy
				real(c_double), intent(inout) :: levels_vec_dummy(*)
			end subroutine lib_zaxisInqLevels
		end interface
		call lib_zaxisInqLevels(zaxisID_dummy, levels_vec_dummy)
	end subroutine zaxisInqLevels

	subroutine zaxisDefLevel(zaxisID_dummy, levelID_dummy, levels_dummy)
		integer(c_int), value :: zaxisID_dummy
		integer(c_int), value :: levelID_dummy
		real(c_double), value :: levels_dummy
		interface
			subroutine lib_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 lib_zaxisDefLevel
		end interface
		call lib_zaxisDefLevel(zaxisID_dummy, levelID_dummy, levels_dummy)
	end subroutine zaxisDefLevel

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

	subroutine zaxisDefNlevRef(gridID_dummy, nhlev_dummy)
		integer(c_int), value :: gridID_dummy
		integer(c_int), value :: nhlev_dummy
		interface
			subroutine lib_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 lib_zaxisDefNlevRef
		end interface
		call lib_zaxisDefNlevRef(gridID_dummy, nhlev_dummy)
	end subroutine zaxisDefNlevRef

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

	subroutine zaxisDefNumber(gridID_dummy, number_dummy)
		integer(c_int), value :: gridID_dummy
		integer(c_int), value :: number_dummy
		interface
			subroutine lib_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 lib_zaxisDefNumber
		end interface
		call lib_zaxisDefNumber(gridID_dummy, number_dummy)
	end subroutine zaxisDefNumber

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

	subroutine zaxisDefUUID(zaxisID_dummy, uuid_dummy)
		integer(c_int), value :: zaxisID_dummy
		character(kind = c_char), intent(in) :: uuid_dummy(CDI_UUID_SIZE)
		interface
			subroutine lib_zaxisDefUUID(zaxisID_dummy, uuid_dummy) bind(c, name = 'zaxisDefUUID')
				import c_char, c_int
				integer(c_int), value :: zaxisID_dummy
				character(kind = c_char), intent(in) :: uuid_dummy(*)
			end subroutine lib_zaxisDefUUID
		end interface
		call lib_zaxisDefUUID(zaxisID_dummy, uuid_dummy)
	end subroutine zaxisDefUUID

	subroutine zaxisInqUUID(zaxisID_dummy, uuid_dummy)
		integer(c_int), value :: zaxisID_dummy
		character(kind = c_char), intent(inout) :: uuid_dummy(CDI_UUID_SIZE)
		interface
			subroutine lib_zaxisInqUUID(zaxisID_dummy, uuid_dummy) bind(c, name = 'zaxisInqUUID')
				import c_char, c_int
				integer(c_int), value :: zaxisID_dummy
				character(kind = c_char), intent(inout) :: uuid_dummy(*)
			end subroutine lib_zaxisInqUUID
		end interface
		call lib_zaxisInqUUID(zaxisID_dummy, uuid_dummy)
	end subroutine zaxisInqUUID

	subroutine zaxisDefName(zaxisID_dummy, name_dummy)
		integer(c_int), value :: zaxisID_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_zaxisDefName(zaxisID_dummy, name_dummy) bind(c, name = 'zaxisDefName')
				import c_char, c_int
				integer(c_int), value :: zaxisID_dummy
				character(kind = c_char) :: name_dummy(*)
			end subroutine lib_zaxisDefName
		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_zaxisDefName(zaxisID_dummy, name_temp)
	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))
		integer :: name_i
		logical :: name_padding = .true.
		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
		do name_i = len(name_dummy), 1, -1
			if(name_dummy(name_i:name_i) /= ' ') name_padding = .false.
			if(name_padding) then
				name_temp(name_i) = c_null_char
			else
				name_temp(name_i) = name_dummy(name_i:name_i)
			end if
		end do
		call lib_zaxisInqName(zaxisID_dummy, name_temp)
		name_padding = .false.
		do name_i = 1, len(name_dummy)
			if(name_temp(name_i) == c_null_char) name_padding = .true.
			if(name_padding) then
				name_dummy(name_i:name_i) = ' '
			else
				name_dummy(name_i:name_i) = name_temp(name_i)
			end if
		end do
	end subroutine zaxisInqName

	subroutine zaxisDefLongname(zaxisID_dummy, longname_dummy)
		integer(c_int), value :: zaxisID_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_zaxisDefLongname(zaxisID_dummy, longname_dummy) bind(c, name = 'zaxisDefLongname')
				import c_char, c_int
				integer(c_int), value :: zaxisID_dummy
				character(kind = c_char) :: longname_dummy(*)
			end subroutine lib_zaxisDefLongname
		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_zaxisDefLongname(zaxisID_dummy, longname_temp)
	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))
		integer :: longname_i
		logical :: longname_padding = .true.
		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
		do longname_i = len(longname_dummy), 1, -1
			if(longname_dummy(longname_i:longname_i) /= ' ') longname_padding = .false.
			if(longname_padding) then
				longname_temp(longname_i) = c_null_char
			else
				longname_temp(longname_i) = longname_dummy(longname_i:longname_i)
			end if
		end do
		call lib_zaxisInqLongname(zaxisID_dummy, longname_temp)
		longname_padding = .false.
		do longname_i = 1, len(longname_dummy)
			if(longname_temp(longname_i) == c_null_char) longname_padding = .true.
			if(longname_padding) then
				longname_dummy(longname_i:longname_i) = ' '
			else
				longname_dummy(longname_i:longname_i) = longname_temp(longname_i)
			end if
		end do
	end subroutine zaxisInqLongname

	subroutine zaxisDefUnits(zaxisID_dummy, units_dummy)
		integer(c_int), value :: zaxisID_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_zaxisDefUnits(zaxisID_dummy, units_dummy) bind(c, name = 'zaxisDefUnits')
				import c_char, c_int
				integer(c_int), value :: zaxisID_dummy
				character(kind = c_char) :: units_dummy(*)
			end subroutine lib_zaxisDefUnits
		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_zaxisDefUnits(zaxisID_dummy, units_temp)
	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))
		integer :: units_i
		logical :: units_padding = .true.
		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
		do units_i = len(units_dummy), 1, -1
			if(units_dummy(units_i:units_i) /= ' ') units_padding = .false.
			if(units_padding) then
				units_temp(units_i) = c_null_char
			else
				units_temp(units_i) = units_dummy(units_i:units_i)
			end if
		end do
		call lib_zaxisInqUnits(zaxisID_dummy, units_temp)
		units_padding = .false.
		do units_i = 1, len(units_dummy)
			if(units_temp(units_i) == c_null_char) units_padding = .true.
			if(units_padding) then
				units_dummy(units_i:units_i) = ' '
			else
				units_dummy(units_i:units_i) = units_temp(units_i)
			end if
		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))
		integer :: stdname_i
		logical :: stdname_padding = .true.
		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
		do stdname_i = len(stdname_dummy), 1, -1
			if(stdname_dummy(stdname_i:stdname_i) /= ' ') stdname_padding = .false.
			if(stdname_padding) then
				stdname_temp(stdname_i) = c_null_char
			else
				stdname_temp(stdname_i) = stdname_dummy(stdname_i:stdname_i)
			end if
		end do
		call lib_zaxisInqStdname(zaxisID_dummy, stdname_temp)
		stdname_padding = .false.
		do stdname_i = 1, len(stdname_dummy)
			if(stdname_temp(stdname_i) == c_null_char) stdname_padding = .true.
			if(stdname_padding) then
				stdname_dummy(stdname_i:stdname_i) = ' '
			else
				stdname_dummy(stdname_i:stdname_i) = stdname_temp(stdname_i)
			end if
		end do
	end subroutine zaxisInqStdname

	subroutine zaxisDefPrec(zaxisID_dummy, prec_dummy)
		integer(c_int), value :: zaxisID_dummy
		integer(c_int), value :: prec_dummy
		interface
			subroutine lib_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 lib_zaxisDefPrec
		end interface
		call lib_zaxisDefPrec(zaxisID_dummy, prec_dummy)
	end subroutine zaxisDefPrec

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

	subroutine zaxisDefPositive(zaxisID_dummy, positive_dummy)
		integer(c_int), value :: zaxisID_dummy
		integer(c_int), value :: positive_dummy
		interface
			subroutine lib_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 lib_zaxisDefPositive
		end interface
		call lib_zaxisDefPositive(zaxisID_dummy, positive_dummy)
	end subroutine zaxisDefPositive

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

	subroutine zaxisDefLtype(zaxisID_dummy, ltype_dummy)
		integer(c_int), value :: zaxisID_dummy
		integer(c_int), value :: ltype_dummy
		interface
			subroutine lib_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 lib_zaxisDefLtype
		end interface
		call lib_zaxisDefLtype(zaxisID_dummy, ltype_dummy)
	end subroutine zaxisDefLtype

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

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

	subroutine zaxisDefVct(zaxisID_dummy, size_dummy, vct_vec_dummy)
		integer(c_int), value :: zaxisID_dummy
		integer(c_int), value :: size_dummy
		real(c_double), intent(in) :: vct_vec_dummy(*)
		interface
			subroutine lib_zaxisDefVct(zaxisID_dummy, size_dummy, vct_vec_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_vec_dummy(*)
			end subroutine lib_zaxisDefVct
		end interface
		call lib_zaxisDefVct(zaxisID_dummy, size_dummy, vct_vec_dummy)
	end subroutine zaxisDefVct

	subroutine zaxisInqVct(zaxisID_dummy, vct_vec_dummy)
		integer(c_int), value :: zaxisID_dummy
		real(c_double), intent(inout) :: vct_vec_dummy(*)
		interface
			subroutine lib_zaxisInqVct(zaxisID_dummy, vct_vec_dummy) bind(c, name = 'zaxisInqVct')
				import c_double, c_int
				integer(c_int), value :: zaxisID_dummy
				real(c_double), intent(inout) :: vct_vec_dummy(*)
			end subroutine lib_zaxisInqVct
		end interface
		call lib_zaxisInqVct(zaxisID_dummy, vct_vec_dummy)
	end subroutine zaxisInqVct

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

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

	subroutine zaxisDefLbounds(zaxisID_dummy, lbounds_vec_dummy)
		integer(c_int), value :: zaxisID_dummy
		real(c_double), intent(in) :: lbounds_vec_dummy(*)
		interface
			subroutine lib_zaxisDefLbounds(zaxisID_dummy, lbounds_vec_dummy) bind(c, name = 'zaxisDefLbounds')
				import c_double, c_int
				integer(c_int), value :: zaxisID_dummy
				real(c_double), intent(in) :: lbounds_vec_dummy(*)
			end subroutine lib_zaxisDefLbounds
		end interface
		call lib_zaxisDefLbounds(zaxisID_dummy, lbounds_vec_dummy)
	end subroutine zaxisDefLbounds

	function zaxisInqLbounds(zaxisID_dummy, lbounds_vec_dummy) result(result)
		integer(c_int) :: result
		integer(c_int), value :: zaxisID_dummy
		real(c_double), intent(inout) :: lbounds_vec_dummy(*)
		interface
			integer(c_int) function lib_zaxisInqLbounds(zaxisID_dummy, lbounds_vec_dummy) bind(c, name = 'zaxisInqLbounds')
				import c_double, c_int
				integer(c_int), value :: zaxisID_dummy
				real(c_double), intent(inout) :: lbounds_vec_dummy(*)
			end function lib_zaxisInqLbounds
		end interface
		result = lib_zaxisInqLbounds(zaxisID_dummy, lbounds_vec_dummy)
	end function zaxisInqLbounds

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

	subroutine zaxisDefUbounds(zaxisID_dummy, ubounds_vec_dummy)
		integer(c_int), value :: zaxisID_dummy
		real(c_double), intent(in) :: ubounds_vec_dummy(*)
		interface
			subroutine lib_zaxisDefUbounds(zaxisID_dummy, ubounds_vec_dummy) bind(c, name = 'zaxisDefUbounds')
				import c_double, c_int
				integer(c_int), value :: zaxisID_dummy
				real(c_double), intent(in) :: ubounds_vec_dummy(*)
			end subroutine lib_zaxisDefUbounds
		end interface
		call lib_zaxisDefUbounds(zaxisID_dummy, ubounds_vec_dummy)
	end subroutine zaxisDefUbounds

	function zaxisInqUbounds(zaxisID_dummy, ubounds_vec_dummy) result(result)
		integer(c_int) :: result
		integer(c_int), value :: zaxisID_dummy
		real(c_double), intent(inout) :: ubounds_vec_dummy(*)
		interface
			integer(c_int) function lib_zaxisInqUbounds(zaxisID_dummy, ubounds_vec_dummy) bind(c, name = 'zaxisInqUbounds')
				import c_double, c_int
				integer(c_int), value :: zaxisID_dummy
				real(c_double), intent(inout) :: ubounds_vec_dummy(*)
			end function lib_zaxisInqUbounds
		end interface
		result = lib_zaxisInqUbounds(zaxisID_dummy, ubounds_vec_dummy)
	end function zaxisInqUbounds

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

	subroutine zaxisDefWeights(zaxisID_dummy, weights_vec_dummy)
		integer(c_int), value :: zaxisID_dummy
		real(c_double), intent(in) :: weights_vec_dummy(*)
		interface
			subroutine lib_zaxisDefWeights(zaxisID_dummy, weights_vec_dummy) bind(c, name = 'zaxisDefWeights')
				import c_double, c_int
				integer(c_int), value :: zaxisID_dummy
				real(c_double), intent(in) :: weights_vec_dummy(*)
			end subroutine lib_zaxisDefWeights
		end interface
		call lib_zaxisDefWeights(zaxisID_dummy, weights_vec_dummy)
	end subroutine zaxisDefWeights

	function zaxisInqWeights(zaxisID_dummy, weights_vec_dummy) result(result)
		integer(c_int) :: result
		integer(c_int), value :: zaxisID_dummy
		real(c_double), intent(inout) :: weights_vec_dummy(*)
		interface
			integer(c_int) function lib_zaxisInqWeights(zaxisID_dummy, weights_vec_dummy) bind(c, name = 'zaxisInqWeights')
				import c_double, c_int
				integer(c_int), value :: zaxisID_dummy
				real(c_double), intent(inout) :: weights_vec_dummy(*)
			end function lib_zaxisInqWeights
		end interface
		result = lib_zaxisInqWeights(zaxisID_dummy, weights_vec_dummy)
	end function zaxisInqWeights

	subroutine zaxisChangeType(zaxisID_dummy, zaxistype_dummy)
		integer(c_int), value :: zaxisID_dummy
		integer(c_int), value :: zaxistype_dummy
		interface
			subroutine lib_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 lib_zaxisChangeType
		end interface
		call lib_zaxisChangeType(zaxisID_dummy, zaxistype_dummy)
	end subroutine zaxisChangeType

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

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

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

	subroutine taxisCopyTimestep(taxisIDdes_dummy, taxisIDsrc_dummy)
		integer(c_int), value :: taxisIDdes_dummy
		integer(c_int), value :: taxisIDsrc_dummy
		interface
			subroutine lib_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 lib_taxisCopyTimestep
		end interface
		call lib_taxisCopyTimestep(taxisIDdes_dummy, taxisIDsrc_dummy)
	end subroutine taxisCopyTimestep

	subroutine taxisDefType(taxisID_dummy, type_dummy)
		integer(c_int), value :: taxisID_dummy
		integer(c_int), value :: type_dummy
		interface
			subroutine lib_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 lib_taxisDefType
		end interface
		call lib_taxisDefType(taxisID_dummy, type_dummy)
	end subroutine taxisDefType

	subroutine taxisDefVdate(taxisID_dummy, date_dummy)
		integer(c_int), value :: taxisID_dummy
		integer(c_int), value :: date_dummy
		interface
			subroutine lib_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 lib_taxisDefVdate
		end interface
		call lib_taxisDefVdate(taxisID_dummy, date_dummy)
	end subroutine taxisDefVdate

	subroutine taxisDefVtime(taxisID_dummy, time_dummy)
		integer(c_int), value :: taxisID_dummy
		integer(c_int), value :: time_dummy
		interface
			subroutine lib_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 lib_taxisDefVtime
		end interface
		call lib_taxisDefVtime(taxisID_dummy, time_dummy)
	end subroutine taxisDefVtime

	function taxisInqVdate(taxisID_dummy) result(result)
		integer(c_int) :: result
		integer(c_int), value :: taxisID_dummy
		interface
			integer(c_int) function lib_taxisInqVdate(taxisID_dummy) bind(c, name = 'taxisInqVdate')
				import c_int
				integer(c_int), value :: taxisID_dummy
			end function lib_taxisInqVdate
		end interface
		result = lib_taxisInqVdate(taxisID_dummy)
	end function taxisInqVdate

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

	subroutine taxisDefRdate(taxisID_dummy, date_dummy)
		integer(c_int), value :: taxisID_dummy
		integer(c_int), value :: date_dummy
		interface
			subroutine lib_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 lib_taxisDefRdate
		end interface
		call lib_taxisDefRdate(taxisID_dummy, date_dummy)
	end subroutine taxisDefRdate

	subroutine taxisDefRtime(taxisID_dummy, time_dummy)
		integer(c_int), value :: taxisID_dummy
		integer(c_int), value :: time_dummy
		interface
			subroutine lib_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 lib_taxisDefRtime
		end interface
		call lib_taxisDefRtime(taxisID_dummy, time_dummy)
	end subroutine taxisDefRtime

	function taxisInqRdate(taxisID_dummy) result(result)
		integer(c_int) :: result
		integer(c_int), value :: taxisID_dummy
		interface
			integer(c_int) function lib_taxisInqRdate(taxisID_dummy) bind(c, name = 'taxisInqRdate')
				import c_int
				integer(c_int), value :: taxisID_dummy
			end function lib_taxisInqRdate
		end interface
		result = lib_taxisInqRdate(taxisID_dummy)
	end function taxisInqRdate

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

	subroutine taxisDefFdate(taxisID_dummy, date_dummy)
		integer(c_int), value :: taxisID_dummy
		integer(c_int), value :: date_dummy
		interface
			subroutine lib_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 lib_taxisDefFdate
		end interface
		call lib_taxisDefFdate(taxisID_dummy, date_dummy)
	end subroutine taxisDefFdate

	subroutine taxisDefFtime(taxisID_dummy, time_dummy)
		integer(c_int), value :: taxisID_dummy
		integer(c_int), value :: time_dummy
		interface
			subroutine lib_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 lib_taxisDefFtime
		end interface
		call lib_taxisDefFtime(taxisID_dummy, time_dummy)
	end subroutine taxisDefFtime

	function taxisInqFdate(taxisID_dummy) result(result)
		integer(c_int) :: result
		integer(c_int), value :: taxisID_dummy
		interface
			integer(c_int) function lib_taxisInqFdate(taxisID_dummy) bind(c, name = 'taxisInqFdate')
				import c_int
				integer(c_int), value :: taxisID_dummy
			end function lib_taxisInqFdate
		end interface
		result = lib_taxisInqFdate(taxisID_dummy)
	end function taxisInqFdate

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

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

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

	subroutine taxisDefVdateBounds(taxisID_dummy, vdate_lb_dummy, vdate_ub_dummy)
		integer(c_int), value :: taxisID_dummy
		integer(c_int), value :: vdate_lb_dummy
		integer(c_int), value :: vdate_ub_dummy
		interface
			subroutine lib_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 lib_taxisDefVdateBounds
		end interface
		call lib_taxisDefVdateBounds(taxisID_dummy, vdate_lb_dummy, vdate_ub_dummy)
	end subroutine taxisDefVdateBounds

	subroutine taxisDefVtimeBounds(taxisID_dummy, vtime_lb_dummy, vtime_ub_dummy)
		integer(c_int), value :: taxisID_dummy
		integer(c_int), value :: vtime_lb_dummy
		integer(c_int), value :: vtime_ub_dummy
		interface
			subroutine lib_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 lib_taxisDefVtimeBounds
		end interface
		call lib_taxisDefVtimeBounds(taxisID_dummy, vtime_lb_dummy, vtime_ub_dummy)
	end subroutine taxisDefVtimeBounds

	subroutine taxisInqVdateBounds(taxisID_dummy, vdate_lb, vdate_ub)
		integer(c_int), value :: taxisID_dummy
		integer(c_int), optional, intent(inout) :: vdate_lb
		integer(c_int), optional, intent(inout) :: vdate_ub
		integer(c_int), target :: vdate_lb_temp
		type(c_ptr) :: vdate_lb_ptr
		integer(c_int), target :: vdate_ub_temp
		type(c_ptr) :: vdate_ub_ptr
		interface
			subroutine lib_taxisInqVdateBounds(taxisID_dummy, vdate_lb, vdate_ub) bind(c, name = 'taxisInqVdateBounds')
				import c_int, c_ptr
				integer(c_int), value :: taxisID_dummy
				type(c_ptr), value :: vdate_lb
				type(c_ptr), value :: vdate_ub
			end subroutine lib_taxisInqVdateBounds
		end interface
		vdate_lb_ptr = c_null_ptr
		if(present(vdate_lb)) vdate_lb_ptr = c_loc(vdate_lb_temp)
		vdate_ub_ptr = c_null_ptr
		if(present(vdate_ub)) vdate_ub_ptr = c_loc(vdate_ub_temp)
		call lib_taxisInqVdateBounds(taxisID_dummy, vdate_lb_ptr, vdate_ub_ptr)
		if(present(vdate_lb)) vdate_lb = vdate_lb_temp
		if(present(vdate_ub)) vdate_ub = vdate_ub_temp
	end subroutine taxisInqVdateBounds

	subroutine taxisInqVtimeBounds(taxisID_dummy, vtime_lb, vtime_ub)
		integer(c_int), value :: taxisID_dummy
		integer(c_int), optional, intent(inout) :: vtime_lb
		integer(c_int), optional, intent(inout) :: vtime_ub
		integer(c_int), target :: vtime_lb_temp
		type(c_ptr) :: vtime_lb_ptr
		integer(c_int), target :: vtime_ub_temp
		type(c_ptr) :: vtime_ub_ptr
		interface
			subroutine lib_taxisInqVtimeBounds(taxisID_dummy, vtime_lb, vtime_ub) bind(c, name = 'taxisInqVtimeBounds')
				import c_int, c_ptr
				integer(c_int), value :: taxisID_dummy
				type(c_ptr), value :: vtime_lb
				type(c_ptr), value :: vtime_ub
			end subroutine lib_taxisInqVtimeBounds
		end interface
		vtime_lb_ptr = c_null_ptr
		if(present(vtime_lb)) vtime_lb_ptr = c_loc(vtime_lb_temp)
		vtime_ub_ptr = c_null_ptr
		if(present(vtime_ub)) vtime_ub_ptr = c_loc(vtime_ub_temp)
		call lib_taxisInqVtimeBounds(taxisID_dummy, vtime_lb_ptr, vtime_ub_ptr)
		if(present(vtime_lb)) vtime_lb = vtime_lb_temp
		if(present(vtime_ub)) vtime_ub = vtime_ub_temp
	end subroutine taxisInqVtimeBounds

	subroutine taxisDefCalendar(taxisID_dummy, calendar_dummy)
		integer(c_int), value :: taxisID_dummy
		integer(c_int), value :: calendar_dummy
		interface
			subroutine lib_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 lib_taxisDefCalendar
		end interface
		call lib_taxisDefCalendar(taxisID_dummy, calendar_dummy)
	end subroutine taxisDefCalendar

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

	subroutine taxisDefTunit(taxisID_dummy, tunit_dummy)
		integer(c_int), value :: taxisID_dummy
		integer(c_int), value :: tunit_dummy
		interface
			subroutine lib_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 lib_taxisDefTunit
		end interface
		call lib_taxisDefTunit(taxisID_dummy, tunit_dummy)
	end subroutine taxisDefTunit

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

	subroutine taxisDefForecastTunit(taxisID_dummy, tunit_dummy)
		integer(c_int), value :: taxisID_dummy
		integer(c_int), value :: tunit_dummy
		interface
			subroutine lib_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 lib_taxisDefForecastTunit
		end interface
		call lib_taxisDefForecastTunit(taxisID_dummy, tunit_dummy)
	end subroutine taxisDefForecastTunit

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

	subroutine taxisDefForecastPeriod(taxisID_dummy, fc_period_dummy)
		integer(c_int), value :: taxisID_dummy
		real(c_double), value :: fc_period_dummy
		interface
			subroutine lib_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 lib_taxisDefForecastPeriod
		end interface
		call lib_taxisDefForecastPeriod(taxisID_dummy, fc_period_dummy)
	end subroutine taxisDefForecastPeriod

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

	subroutine taxisDefNumavg(taxisID_dummy, numavg_dummy)
		integer(c_int), value :: taxisID_dummy
		integer(c_int), value :: numavg_dummy
		interface
			subroutine lib_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 lib_taxisDefNumavg
		end interface
		call lib_taxisDefNumavg(taxisID_dummy, numavg_dummy)
	end subroutine taxisDefNumavg

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

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

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

	function institutDef(center_dummy, subcenter_dummy, name_dummy, longname_dummy) result(result)
		integer(c_int) :: 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
			integer(c_int) function lib_institutDef(center_dummy, subcenter_dummy, name_dummy, longname_dummy) bind(c, name = 'institutDef')
				import c_char, c_int
				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
		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(result)
		integer(c_int) :: 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
			integer(c_int) function lib_institutInq(center_dummy, subcenter_dummy, name_dummy, longname_dummy) bind(c, name = 'institutInq')
				import c_char, c_int
				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
		result = lib_institutInq(center_dummy, subcenter_dummy, name_temp, longname_temp)
	end function institutInq

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

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

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

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

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

	function modelDef(instID_dummy, modelgribID_dummy, name_dummy) result(result)
		integer(c_int) :: 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
			integer(c_int) function lib_modelDef(instID_dummy, modelgribID_dummy, name_dummy) bind(c, name = 'modelDef')
				import c_char, c_int
				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
		result = lib_modelDef(instID_dummy, modelgribID_dummy, name_temp)
	end function modelDef

	function modelInq(instID_dummy, modelgribID_dummy, name_dummy) result(result)
		integer(c_int) :: 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))
		integer :: name_i
		logical :: name_padding = .true.
		interface
			integer(c_int) function lib_modelInq(instID_dummy, modelgribID_dummy, name_dummy) bind(c, name = 'modelInq')
				import c_char, c_int
				integer(c_int), value :: instID_dummy
				integer(c_int), value :: modelgribID_dummy
				character(kind = c_char) :: name_dummy(*)
			end function lib_modelInq
		end interface
		do name_i = len(name_dummy), 1, -1
			if(name_dummy(name_i:name_i) /= ' ') name_padding = .false.
			if(name_padding) then
				name_temp(name_i) = c_null_char
			else
				name_temp(name_i) = name_dummy(name_i:name_i)
			end if
		end do
		result = lib_modelInq(instID_dummy, modelgribID_dummy, name_temp)
		name_padding = .false.
		do name_i = 1, len(name_dummy)
			if(name_temp(name_i) == c_null_char) name_padding = .true.
			if(name_padding) then
				name_dummy(name_i:name_i) = ' '
			else
				name_dummy(name_i:name_i) = name_temp(name_i)
			end if
		end do
	end function modelInq

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

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

	function modelInqNamePtr(modelID_dummy) result(result)
		character(kind = c_char), dimension(:), pointer :: result
		integer(c_int), value :: modelID_dummy
		type(c_ptr) :: ptr
		integer :: shape(1)
		interface
			type(c_ptr) function lib_modelInqNamePtr(modelID_dummy) bind(c, name = 'modelInqNamePtr')
				import c_int, c_ptr
				integer(c_int), value :: modelID_dummy
			end function lib_modelInqNamePtr
		end interface
		result => null()
		ptr = lib_modelInqNamePtr(modelID_dummy)
		if(c_associated(ptr)) then
			shape(1) = int(lib_strlen(ptr))
			call c_f_pointer(ptr, result, 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(result)
		integer(c_int) :: result
		character(kind = c_char, len = *), intent(in) :: tablefile_dummy
		character(kind = c_char) :: tablefile_temp(len(tablefile_dummy) + 1)
		integer :: tablefile_i
		interface
			integer(c_int) function lib_tableRead(tablefile_dummy) bind(c, name = 'tableRead')
				import c_char, c_int
				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
		result = lib_tableRead(tablefile_temp)
	end function tableRead

	function tableDef(modelID_dummy, tablenum_dummy, tablename_dummy) result(result)
		integer(c_int) :: 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
			integer(c_int) function lib_tableDef(modelID_dummy, tablenum_dummy, tablename_dummy) bind(c, name = 'tableDef')
				import c_char, c_int
				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
		result = lib_tableDef(modelID_dummy, tablenum_dummy, tablename_temp)
	end function tableDef

	function tableInqNamePtr(tableID_dummy) result(result)
		character(kind = c_char), dimension(:), pointer :: result
		integer(c_int), value :: tableID_dummy
		type(c_ptr) :: ptr
		integer :: shape(1)
		interface
			type(c_ptr) function lib_tableInqNamePtr(tableID_dummy) bind(c, name = 'tableInqNamePtr')
				import c_int, c_ptr
				integer(c_int), value :: tableID_dummy
			end function lib_tableInqNamePtr
		end interface
		result => null()
		ptr = lib_tableInqNamePtr(tableID_dummy)
		if(c_associated(ptr)) then
			shape(1) = int(lib_strlen(ptr))
			call c_f_pointer(ptr, result, 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(result)
		integer(c_int) :: 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
			integer(c_int) function lib_tableInq(modelID_dummy, tablenum_dummy, tablename_dummy) bind(c, name = 'tableInq')
				import c_char, c_int
				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
		result = lib_tableInq(modelID_dummy, tablenum_dummy, tablename_temp)
	end function tableInq

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

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

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

	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))
		integer :: name_i
		logical :: name_padding = .true.
		character(kind = c_char) :: longname_temp(len(longname_dummy))
		integer :: longname_i
		logical :: longname_padding = .true.
		character(kind = c_char) :: units_temp(len(units_dummy))
		integer :: units_i
		logical :: units_padding = .true.
		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
		do name_i = len(name_dummy), 1, -1
			if(name_dummy(name_i:name_i) /= ' ') name_padding = .false.
			if(name_padding) then
				name_temp(name_i) = c_null_char
			else
				name_temp(name_i) = name_dummy(name_i:name_i)
			end if
		end do
		do longname_i = len(longname_dummy), 1, -1
			if(longname_dummy(longname_i:longname_i) /= ' ') longname_padding = .false.
			if(longname_padding) then
				longname_temp(longname_i) = c_null_char
			else
				longname_temp(longname_i) = longname_dummy(longname_i:longname_i)
			end if
		end do
		do units_i = len(units_dummy), 1, -1
			if(units_dummy(units_i:units_i) /= ' ') units_padding = .false.
			if(units_padding) then
				units_temp(units_i) = c_null_char
			else
				units_temp(units_i) = units_dummy(units_i:units_i)
			end if
		end do
		call lib_tableInqPar(tableID_dummy, code_dummy, name_temp, longname_temp, units_temp)
		name_padding = .false.
		do name_i = 1, len(name_dummy)
			if(name_temp(name_i) == c_null_char) name_padding = .true.
			if(name_padding) then
				name_dummy(name_i:name_i) = ' '
			else
				name_dummy(name_i:name_i) = name_temp(name_i)
			end if
		end do
		longname_padding = .false.
		do longname_i = 1, len(longname_dummy)
			if(longname_temp(longname_i) == c_null_char) longname_padding = .true.
			if(longname_padding) then
				longname_dummy(longname_i:longname_i) = ' '
			else
				longname_dummy(longname_i:longname_i) = longname_temp(longname_i)
			end if
		end do
		units_padding = .false.
		do units_i = 1, len(units_dummy)
			if(units_temp(units_i) == c_null_char) units_padding = .true.
			if(units_padding) then
				units_dummy(units_i:units_i) = ' '
			else
				units_dummy(units_i:units_i) = units_temp(units_i)
			end if
		end do
	end subroutine tableInqPar

	function tableInqParCode(tableID_dummy, name_dummy, code) result(result)
		integer(c_int) :: result
		integer(c_int), value :: tableID_dummy
		character(kind = c_char, len = *), intent(inout) :: name_dummy
		integer(c_int), optional, intent(inout) :: code
		character(kind = c_char) :: name_temp(len(name_dummy))
		integer :: name_i
		logical :: name_padding = .true.
		integer(c_int), target :: code_temp
		type(c_ptr) :: code_ptr
		interface
			integer(c_int) function lib_tableInqParCode(tableID_dummy, name_dummy, code) bind(c, name = 'tableInqParCode')
				import c_char, c_int, c_ptr
				integer(c_int), value :: tableID_dummy
				character(kind = c_char) :: name_dummy(*)
				type(c_ptr), value :: code
			end function lib_tableInqParCode
		end interface
		do name_i = len(name_dummy), 1, -1
			if(name_dummy(name_i:name_i) /= ' ') name_padding = .false.
			if(name_padding) then
				name_temp(name_i) = c_null_char
			else
				name_temp(name_i) = name_dummy(name_i:name_i)
			end if
		end do
		code_ptr = c_null_ptr
		if(present(code)) code_ptr = c_loc(code_temp)
		result = lib_tableInqParCode(tableID_dummy, name_temp, code_ptr)
		name_padding = .false.
		do name_i = 1, len(name_dummy)
			if(name_temp(name_i) == c_null_char) name_padding = .true.
			if(name_padding) then
				name_dummy(name_i:name_i) = ' '
			else
				name_dummy(name_i:name_i) = name_temp(name_i)
			end if
		end do
		if(present(code)) code = code_temp
	end function tableInqParCode

	function tableInqParName(tableID_dummy, code_dummy, name_dummy) result(result)
		integer(c_int) :: 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))
		integer :: name_i
		logical :: name_padding = .true.
		interface
			integer(c_int) function lib_tableInqParName(tableID_dummy, code_dummy, name_dummy) bind(c, name = 'tableInqParName')
				import c_char, c_int
				integer(c_int), value :: tableID_dummy
				integer(c_int), value :: code_dummy
				character(kind = c_char) :: name_dummy(*)
			end function lib_tableInqParName
		end interface
		do name_i = len(name_dummy), 1, -1
			if(name_dummy(name_i:name_i) /= ' ') name_padding = .false.
			if(name_padding) then
				name_temp(name_i) = c_null_char
			else
				name_temp(name_i) = name_dummy(name_i:name_i)
			end if
		end do
		result = lib_tableInqParName(tableID_dummy, code_dummy, name_temp)
		name_padding = .false.
		do name_i = 1, len(name_dummy)
			if(name_temp(name_i) == c_null_char) name_padding = .true.
			if(name_padding) then
				name_dummy(name_i:name_i) = ' '
			else
				name_dummy(name_i:name_i) = name_temp(name_i)
			end if
		end do
	end function tableInqParName

	function tableInqParLongname(tableID_dummy, code_dummy, longname_dummy) result(result)
		integer(c_int) :: 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))
		integer :: longname_i
		logical :: longname_padding = .true.
		interface
			integer(c_int) function lib_tableInqParLongname(tableID_dummy, code_dummy, longname_dummy) bind(c, name = 'tableInqParLongname')
				import c_char, c_int
				integer(c_int), value :: tableID_dummy
				integer(c_int), value :: code_dummy
				character(kind = c_char) :: longname_dummy(*)
			end function lib_tableInqParLongname
		end interface
		do longname_i = len(longname_dummy), 1, -1
			if(longname_dummy(longname_i:longname_i) /= ' ') longname_padding = .false.
			if(longname_padding) then
				longname_temp(longname_i) = c_null_char
			else
				longname_temp(longname_i) = longname_dummy(longname_i:longname_i)
			end if
		end do
		result = lib_tableInqParLongname(tableID_dummy, code_dummy, longname_temp)
		longname_padding = .false.
		do longname_i = 1, len(longname_dummy)
			if(longname_temp(longname_i) == c_null_char) longname_padding = .true.
			if(longname_padding) then
				longname_dummy(longname_i:longname_i) = ' '
			else
				longname_dummy(longname_i:longname_i) = longname_temp(longname_i)
			end if
		end do
	end function tableInqParLongname

	function tableInqParUnits(tableID_dummy, code_dummy, units_dummy) result(result)
		integer(c_int) :: 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))
		integer :: units_i
		logical :: units_padding = .true.
		interface
			integer(c_int) function lib_tableInqParUnits(tableID_dummy, code_dummy, units_dummy) bind(c, name = 'tableInqParUnits')
				import c_char, c_int
				integer(c_int), value :: tableID_dummy
				integer(c_int), value :: code_dummy
				character(kind = c_char) :: units_dummy(*)
			end function lib_tableInqParUnits
		end interface
		do units_i = len(units_dummy), 1, -1
			if(units_dummy(units_i:units_i) /= ' ') units_padding = .false.
			if(units_padding) then
				units_temp(units_i) = c_null_char
			else
				units_temp(units_i) = units_dummy(units_i:units_i)
			end if
		end do
		result = lib_tableInqParUnits(tableID_dummy, code_dummy, units_temp)
		units_padding = .false.
		do units_i = 1, len(units_dummy)
			if(units_temp(units_i) == c_null_char) units_padding = .true.
			if(units_padding) then
				units_dummy(units_i:units_i) = ' '
			else
				units_dummy(units_i:units_i) = units_temp(units_i)
			end if
		end do
	end function tableInqParUnits

	function tableInqParNamePtr(tableID_dummy, parID_dummy) result(result)
		character(kind = c_char), dimension(:), pointer :: result
		integer(c_int), value :: tableID_dummy
		integer(c_int), value :: parID_dummy
		type(c_ptr) :: ptr
		integer :: shape(1)
		interface
			type(c_ptr) function lib_tableInqParNamePtr(tableID_dummy, parID_dummy) bind(c, name = 'tableInqParNamePtr')
				import c_int, c_ptr
				integer(c_int), value :: tableID_dummy
				integer(c_int), value :: parID_dummy
			end function lib_tableInqParNamePtr
		end interface
		result => null()
		ptr = lib_tableInqParNamePtr(tableID_dummy, parID_dummy)
		if(c_associated(ptr)) then
			shape(1) = int(lib_strlen(ptr))
			call c_f_pointer(ptr, result, shape)
		end if
	end function tableInqParNamePtr

	function tableInqParLongnamePtr(tableID_dummy, parID_dummy) result(result)
		character(kind = c_char), dimension(:), pointer :: result
		integer(c_int), value :: tableID_dummy
		integer(c_int), value :: parID_dummy
		type(c_ptr) :: ptr
		integer :: shape(1)
		interface
			type(c_ptr) function lib_tableInqParLongnamePtr(tableID_dummy, parID_dummy) bind(c, name = 'tableInqParLongnamePtr')
				import c_int, c_ptr
				integer(c_int), value :: tableID_dummy
				integer(c_int), value :: parID_dummy
			end function lib_tableInqParLongnamePtr
		end interface
		result => null()
		ptr = lib_tableInqParLongnamePtr(tableID_dummy, parID_dummy)
		if(c_associated(ptr)) then
			shape(1) = int(lib_strlen(ptr))
			call c_f_pointer(ptr, result, shape)
		end if
	end function tableInqParLongnamePtr

	function tableInqParUnitsPtr(tableID_dummy, parID_dummy) result(result)
		character(kind = c_char), dimension(:), pointer :: result
		integer(c_int), value :: tableID_dummy
		integer(c_int), value :: parID_dummy
		type(c_ptr) :: ptr
		integer :: shape(1)
		interface
			type(c_ptr) function lib_tableInqParUnitsPtr(tableID_dummy, parID_dummy) bind(c, name = 'tableInqParUnitsPtr')
				import c_int, c_ptr
				integer(c_int), value :: tableID_dummy
				integer(c_int), value :: parID_dummy
			end function lib_tableInqParUnitsPtr
		end interface
		result => null()
		ptr = lib_tableInqParUnitsPtr(tableID_dummy, parID_dummy)
		if(c_associated(ptr)) then
			shape(1) = int(lib_strlen(ptr))
			call c_f_pointer(ptr, result, 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

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

	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))
		integer :: history_i
		logical :: history_padding = .true.
		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
		do history_i = len(history_dummy), 1, -1
			if(history_dummy(history_i:history_i) /= ' ') history_padding = .false.
			if(history_padding) then
				history_temp(history_i) = c_null_char
			else
				history_temp(history_i) = history_dummy(history_i:history_i)
			end if
		end do
		call lib_streamInqHistoryString(streamID_dummy, history_temp)
		history_padding = .false.
		do history_i = 1, len(history_dummy)
			if(history_temp(history_i) == c_null_char) history_padding = .true.
			if(history_padding) then
				history_dummy(history_i:history_i) = ' '
			else
				history_dummy(history_i:history_i) = history_temp(history_i)
			end if
		end do
	end subroutine streamInqHistoryString

	subroutine gribapiLibraryVersion(major_version, minor_version, revision_version)
		integer(c_int), optional, intent(inout) :: major_version
		integer(c_int), optional, intent(inout) :: minor_version
		integer(c_int), optional, intent(inout) :: revision_version
		integer(c_int), target :: major_version_temp
		type(c_ptr) :: major_version_ptr
		integer(c_int), target :: minor_version_temp
		type(c_ptr) :: minor_version_ptr
		integer(c_int), target :: revision_version_temp
		type(c_ptr) :: revision_version_ptr
		interface
			subroutine lib_gribapiLibraryVersion(major_version, minor_version, revision_version) bind(c, name = 'gribapiLibraryVersion')
				import c_ptr
				type(c_ptr), value :: major_version
				type(c_ptr), value :: minor_version
				type(c_ptr), value :: revision_version
			end subroutine lib_gribapiLibraryVersion
		end interface
		major_version_ptr = c_null_ptr
		if(present(major_version)) major_version_ptr = c_loc(major_version_temp)
		minor_version_ptr = c_null_ptr
		if(present(minor_version)) minor_version_ptr = c_loc(minor_version_temp)
		revision_version_ptr = c_null_ptr
		if(present(revision_version)) revision_version_ptr = c_loc(revision_version_temp)
		call lib_gribapiLibraryVersion(major_version_ptr, minor_version_ptr, revision_version_ptr)
		if(present(major_version)) major_version = major_version_temp
		if(present(minor_version)) minor_version = minor_version_temp
		if(present(revision_version)) revision_version = revision_version_temp
	end subroutine gribapiLibraryVersion

end module mo_cdi
