1 | ! --------------------------------------------- |
---|
2 | ! This module serves as a wrapper around netcdf. |
---|
3 | ! It serves two primary functions: |
---|
4 | ! 1) Turn netcdf into a "real" fortran module, without the INCLUDE call |
---|
5 | ! 2) Handle the NC_DOUBLE CPP key |
---|
6 | ! --------------------------------------------- |
---|
7 | |
---|
8 | MODULE lmdz_netcdf |
---|
9 | USE, INTRINSIC :: ISO_FORTRAN_ENV, ONLY : REAL64, REAL32 |
---|
10 | USE netcdf |
---|
11 | IMPLICIT NONE |
---|
12 | ! Note: as we want to expose netcdf through this module, we don't make all PRIVATE by default as usual |
---|
13 | ! Instead, explicitely make PRIVATE the relevant items. |
---|
14 | |
---|
15 | INCLUDE 'netcdf.inc' |
---|
16 | |
---|
17 | #ifdef NC_DOUBLE |
---|
18 | INTEGER, PARAMETER :: NF90_FORMAT = NF90_DOUBLE |
---|
19 | INTEGER, PARAMETER :: REAL_FORMAT = REAL64 |
---|
20 | #else |
---|
21 | INTEGER, PARAMETER :: NF90_FORMAT = NF90_FLOAT |
---|
22 | INTEGER, PARAMETER :: REAL_FORMAT = REAL32 |
---|
23 | #endif |
---|
24 | CONTAINS |
---|
25 | |
---|
26 | ! We'd like to use "nf_put_var", but it already exists as a legacy nc4 function |
---|
27 | INTEGER FUNCTION nf_put_var_rd(ncid, varid, vals) |
---|
28 | INTEGER, INTENT(IN) :: ncid, varid |
---|
29 | REAl(REAL_FORMAT), INTENT(IN) :: vals(*) ! (*) as declared in netcdf lib |
---|
30 | #ifdef NC_DOUBLE |
---|
31 | nf_put_var_rd = nf_put_var_double(ncid, varid, vals) |
---|
32 | #else |
---|
33 | nf_put_var_rd = nf_put_var_real(ncid, varid, vals) |
---|
34 | #endif |
---|
35 | END FUNCTION nf_put_var_rd |
---|
36 | |
---|
37 | INTEGER FUNCTION nf_put_vara_rd(ncid, varid, start, counts, vals) |
---|
38 | INTEGER, INTENT(IN) :: ncid, varid |
---|
39 | INTEGER, INTENT(IN) :: start(*), counts(*) |
---|
40 | REAl(REAL_FORMAT), INTENT(IN) :: vals(*) ! (*) as declared in netcdf lib |
---|
41 | #ifdef NC_DOUBLE |
---|
42 | nf_put_vara_rd = nf_put_vara_double(ncid, varid, vals) |
---|
43 | #else |
---|
44 | nf_put_vara_rd = nf_put_vara_real(ncid, varid, vals) |
---|
45 | #endif |
---|
46 | END FUNCTION nf_put_vara_rd |
---|
47 | |
---|
48 | END MODULE lmdz_netcdf |
---|
49 | |
---|
50 | ! TODO check that none of the wrapped functions remain elsewhere |
---|
51 | ! TODO check all uses of `use netcdf` |
---|