source: branches/nemo_v3_3_beta/NEMOGCM/EXTERNAL/IOIPSL/src/nc4interface.F90 @ 2368

Last change on this file since 2368 was 2368, checked in by acc, 11 years ago

nemo_v3_3_beta. Changes to code relating to key_netcdf4 option to provide more robust compilation. See #755 and #754

File size: 5.0 KB
Line 
1MODULE nc4interface
2!-
3!-
4! This software is governed by the CeCILL license
5! See IOIPSL/IOIPSL_License_CeCILL.txt
6!---------------------------------------------------------------------
7#if ! defined key_netcdf4
8      !!--------------------------------------------------------------------
9      !! NOT 'key_netcdf4' Defines dummy routines for netcdf4
10      !!                   calls when compiling without netcdf4 libraries
11      !!--------------------------------------------------------------------
12  !- netcdf4 chunking control structure
13  !- (optional on histbeg and histend calls)
14  TYPE, PUBLIC :: snc4_ctl
15     SEQUENCE
16     INTEGER :: ni
17     INTEGER :: nj
18     INTEGER :: nk
19     LOGICAL :: luse
20  END TYPE snc4_ctl
21
22CONTAINS
23!===
24   SUBROUTINE GET_NF90_SYMBOL(sym_name, ivalue)
25      CHARACTER(len=*),      INTENT(in)  :: sym_name
26      INTEGER,               INTENT(out) :: ivalue
27      ivalue = -999
28   END SUBROUTINE GET_NF90_SYMBOL
29   INTEGER FUNCTION SET_NF90_DEF_VAR_CHUNKING(idum1, idum2, idum3, iarr1)
30      !!--------------------------------------------------------------------
31      !!                   ***  SUBROUTINE NF90_DEF_VAR_CHUNKING  ***
32      !!
33      !! ** Purpose :   Dummy NetCDF4 routine to enable compiling with NetCDF3 libraries
34      !!--------------------------------------------------------------------
35      INTEGER,               INTENT(in) :: idum1, idum2, idum3
36      INTEGER, DIMENSION(4), INTENT(in) :: iarr1
37      WRITE(*,*) 'Warning: Attempt to chunk output variable without NetCDF4 support'
38      SET_NF90_DEF_VAR_CHUNKING = -1
39   END FUNCTION SET_NF90_DEF_VAR_CHUNKING
40
41   INTEGER FUNCTION SET_NF90_DEF_VAR_DEFLATE(idum1, idum2, idum3, idum4, idum5)
42      !!--------------------------------------------------------------------
43      !!                   ***  SUBROUTINE NF90_DEF_VAR_DEFLATE  ***
44      !!
45      !! ** Purpose :   Dummy NetCDF4 routine to enable compiling with NetCDF3 libraries
46      !!--------------------------------------------------------------------
47      INTEGER,               INTENT(in) :: idum1, idum2, idum3, idum4, idum5
48      WRITE(*,*) 'Warning: Attempt to compress output variable without NetCDF4 support'
49      SET_NF90_DEF_VAR_DEFLATE = -1
50   END FUNCTION SET_NF90_DEF_VAR_DEFLATE
51#else
52      !!--------------------------------------------------------------------
53      !! 'key_netcdf4' Dummy module (usually defines dummy routines for netcdf4
54      !!               calls when compiling without netcdf4 libraries
55      !!--------------------------------------------------------------------
56
57   USE netcdf
58
59   !- netcdf4 chunking control structure
60   !- (optional on histbeg and histend calls)
61!$AGRIF_DO_NOT_TREAT
62   TYPE, PUBLIC :: snc4_ctl
63      SEQUENCE
64      INTEGER :: ni
65      INTEGER :: nj
66      INTEGER :: nk
67      LOGICAL :: luse
68   END TYPE snc4_ctl
69!$AGRIF_END_DO_NOT_TREAT
70
71CONTAINS
72   INTEGER FUNCTION SET_NF90_DEF_VAR_CHUNKING(nfid, nvid, ichunkalg, ichunksz)
73      !!--------------------------------------------------------------------
74      !!                   ***  SUBROUTINE NF90_DEF_VAR_CHUNKING  ***
75      !!
76      !! ** Purpose :   Interface NetCDF4 routine to enable compiling with NetCDF4 libraries
77      !!                but no key_netcdf4
78      !!--------------------------------------------------------------------
79      INTEGER,               INTENT(in) :: nfid
80      INTEGER,               INTENT(in) :: nvid
81      INTEGER,               INTENT(in) :: ichunkalg
82      INTEGER, DIMENSION(:), INTENT(in) :: ichunksz
83      !!
84      INTEGER                           :: iret
85      !!
86      iret = NF90_DEF_VAR_CHUNKING(nfid, nvid, ichunkalg, ichunksz)
87      SET_NF90_DEF_VAR_CHUNKING = iret
88   END FUNCTION SET_NF90_DEF_VAR_CHUNKING
89
90   INTEGER FUNCTION SET_NF90_DEF_VAR_DEFLATE(nfid, nvid, ishuffle, ideflate, ideflate_level)
91      !!--------------------------------------------------------------------
92      !!                   ***  SUBROUTINE NF90_DEF_VAR_DEFLATE  ***
93      !!
94      !! ** Purpose :   Interface NetCDF4 routine to enable compiling with NetCDF4 libraries
95      !!                but no key_netcdf4
96      !!--------------------------------------------------------------------
97      INTEGER,               INTENT(in) :: nfid
98      INTEGER,               INTENT(in) :: nvid
99      INTEGER,               INTENT(in) :: ishuffle
100      INTEGER,               INTENT(in) :: ideflate
101      INTEGER,               INTENT(in) :: ideflate_level
102      !!
103      INTEGER                           :: iret
104      !!
105      iret = NF90_DEF_VAR_DEFLATE(nfid, nvid, ishuffle, ideflate, ideflate_level)
106      SET_NF90_DEF_VAR_DEFLATE = iret
107   END FUNCTION SET_NF90_DEF_VAR_DEFLATE
108
109   SUBROUTINE GET_NF90_SYMBOL(sym_name, ivalue)
110      CHARACTER(len=*),      INTENT(in)  :: sym_name
111      INTEGER,               INTENT(out) :: ivalue
112      SELECT CASE (sym_name)
113         CASE ("NF90_HDF5")
114            ivalue = NF90_HDF5
115         CASE DEFAULT
116            WRITE(*,*) "Warning: unknown case in GET_NF90_SYMBOL"
117      END SELECT
118   END SUBROUTINE GET_NF90_SYMBOL
119#endif
120
121!------------------
122END MODULE nc4interface
Note: See TracBrowser for help on using the repository browser.