2025-09-05 09:42:21 +02:00

125 lines
5.0 KiB
Fortran
Executable File

MODULE nc4interface
!-
!-
! This software is governed by the CeCILL license
! See IOIPSL/IOIPSL_License_CeCILL.txt
!---------------------------------------------------------------------
#if ! defined key_netcdf4
!!--------------------------------------------------------------------
!! NOT 'key_netcdf4' Defines dummy routines for netcdf4
!! calls when compiling without netcdf4 libraries
!!--------------------------------------------------------------------
!- netcdf4 chunking control structure
!- (optional on histbeg and histend calls)
!$AGRIF_DO_NOT_TREAT
TYPE, PUBLIC :: snc4_ctl
SEQUENCE
INTEGER :: ni
INTEGER :: nj
INTEGER :: nk
LOGICAL :: luse
END TYPE snc4_ctl
!$AGRIF_END_DO_NOT_TREAT
CONTAINS
!===
SUBROUTINE GET_NF90_SYMBOL(sym_name, ivalue)
CHARACTER(len=*), INTENT(in) :: sym_name
INTEGER, INTENT(out) :: ivalue
ivalue = -999
END SUBROUTINE GET_NF90_SYMBOL
INTEGER FUNCTION SET_NF90_DEF_VAR_CHUNKING(idum1, idum2, idum3, iarr1)
!!--------------------------------------------------------------------
!! *** SUBROUTINE NF90_DEF_VAR_CHUNKING ***
!!
!! ** Purpose : Dummy NetCDF4 routine to enable compiling with NetCDF3 libraries
!!--------------------------------------------------------------------
INTEGER, INTENT(in) :: idum1, idum2, idum3
INTEGER, DIMENSION(4), INTENT(in) :: iarr1
WRITE(*,*) 'Warning: Attempt to chunk output variable without NetCDF4 support'
SET_NF90_DEF_VAR_CHUNKING = -1
END FUNCTION SET_NF90_DEF_VAR_CHUNKING
INTEGER FUNCTION SET_NF90_DEF_VAR_DEFLATE(idum1, idum2, idum3, idum4, idum5)
!!--------------------------------------------------------------------
!! *** SUBROUTINE NF90_DEF_VAR_DEFLATE ***
!!
!! ** Purpose : Dummy NetCDF4 routine to enable compiling with NetCDF3 libraries
!!--------------------------------------------------------------------
INTEGER, INTENT(in) :: idum1, idum2, idum3, idum4, idum5
WRITE(*,*) 'Warning: Attempt to compress output variable without NetCDF4 support'
SET_NF90_DEF_VAR_DEFLATE = -1
END FUNCTION SET_NF90_DEF_VAR_DEFLATE
#else
!!--------------------------------------------------------------------
!! 'key_netcdf4' Dummy module (usually defines dummy routines for netcdf4
!! calls when compiling without netcdf4 libraries
!!--------------------------------------------------------------------
USE netcdf
!- netcdf4 chunking control structure
!- (optional on histbeg and histend calls)
!$AGRIF_DO_NOT_TREAT
TYPE, PUBLIC :: snc4_ctl
SEQUENCE
INTEGER :: ni
INTEGER :: nj
INTEGER :: nk
LOGICAL :: luse
END TYPE snc4_ctl
!$AGRIF_END_DO_NOT_TREAT
CONTAINS
INTEGER FUNCTION SET_NF90_DEF_VAR_CHUNKING(nfid, nvid, ichunkalg, ichunksz)
!!--------------------------------------------------------------------
!! *** SUBROUTINE NF90_DEF_VAR_CHUNKING ***
!!
!! ** Purpose : Interface NetCDF4 routine to enable compiling with NetCDF4 libraries
!! but no key_netcdf4
!!--------------------------------------------------------------------
INTEGER, INTENT(in) :: nfid
INTEGER, INTENT(in) :: nvid
INTEGER, INTENT(in) :: ichunkalg
INTEGER, DIMENSION(:), INTENT(in) :: ichunksz
!!
INTEGER :: iret
!!
iret = NF90_DEF_VAR_CHUNKING(nfid, nvid, ichunkalg, ichunksz)
SET_NF90_DEF_VAR_CHUNKING = iret
END FUNCTION SET_NF90_DEF_VAR_CHUNKING
INTEGER FUNCTION SET_NF90_DEF_VAR_DEFLATE(nfid, nvid, ishuffle, ideflate, ideflate_level)
!!--------------------------------------------------------------------
!! *** SUBROUTINE NF90_DEF_VAR_DEFLATE ***
!!
!! ** Purpose : Interface NetCDF4 routine to enable compiling with NetCDF4 libraries
!! but no key_netcdf4
!!--------------------------------------------------------------------
INTEGER, INTENT(in) :: nfid
INTEGER, INTENT(in) :: nvid
INTEGER, INTENT(in) :: ishuffle
INTEGER, INTENT(in) :: ideflate
INTEGER, INTENT(in) :: ideflate_level
!!
INTEGER :: iret
!!
iret = NF90_DEF_VAR_DEFLATE(nfid, nvid, ishuffle, ideflate, ideflate_level)
SET_NF90_DEF_VAR_DEFLATE = iret
END FUNCTION SET_NF90_DEF_VAR_DEFLATE
SUBROUTINE GET_NF90_SYMBOL(sym_name, ivalue)
CHARACTER(len=*), INTENT(in) :: sym_name
INTEGER, INTENT(out) :: ivalue
SELECT CASE (sym_name)
CASE ("NF90_HDF5")
ivalue = NF90_HDF5
CASE DEFAULT
WRITE(*,*) "Warning: unknown case in GET_NF90_SYMBOL"
END SELECT
END SUBROUTINE GET_NF90_SYMBOL
#endif
!------------------
END MODULE nc4interface