Changeset 5069 for LMDZ6/trunk/libf/misc/lmdz_netcdf.F90
- Timestamp:
- Jul 18, 2024, 2:27:04 PM (4 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/libf/misc/lmdz_netcdf.F90
r5068 r5069 3 3 ! It serves two primary functions: 4 4 ! 1) Turn netcdf into a "real" fortran module, without the INCLUDE call 5 ! 2) Handle the NC_DOUBLE CPP key 5 ! 2) Handle the NC_DOUBLE CPP key. Ideally, this key should ONLY appear here (WIP). TODO 6 ! Ideally, the "real" netcdf module/headers should ONLY be called here. (WIP) TODO 6 7 ! --------------------------------------------- 8 ! TODO check that none of the wrapped functions remain elsewhere 9 ! TODO check all uses of `use netcdf` + netcdf.inc 7 10 8 11 MODULE lmdz_netcdf … … 12 15 ! Note: as we want to expose netcdf through this module, we don't make all PRIVATE by default as usual 13 16 ! Instead, explicitely make PRIVATE the relevant items. 17 PRIVATE CPP_NC_DOUBLE 14 18 15 19 INCLUDE 'netcdf.inc' 16 20 17 21 #ifdef NC_DOUBLE 22 LOGICAL, PARAMETER :: CPP_NC_DOUBLE = .TRUE. ! Define a variable to reduce use of preprocessor ahead 18 23 INTEGER, PARAMETER :: NF90_FORMAT = NF90_DOUBLE 19 24 INTEGER, PARAMETER :: REAL_FORMAT = REAL64 20 25 #else 26 LOGICAL, PARAMETER :: CPP_NC_DOUBLE = .FALSE. 21 27 INTEGER, PARAMETER :: NF90_FORMAT = NF90_FLOAT 22 28 INTEGER, PARAMETER :: REAL_FORMAT = REAL32 … … 24 30 CONTAINS 25 31 32 ! Note: below, we use the same declarations as the fortran netcdf lib, hence the use of (*) 33 26 34 ! We'd like to use "nf_put_var", but it already exists as a legacy nc4 function 35 ! CPP_NC_DOUBLE wrapper around nf_put_var_real, nf_put_var_double 27 36 INTEGER FUNCTION nf_put_var_rd(ncid, varid, vals) 28 37 INTEGER, INTENT(IN) :: ncid, varid 29 38 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 39 40 IF (CPP_NC_DOUBLE) THEN 41 nf_put_var_rd = nf_put_var_double(ncid, varid, vals) 42 ELSE 43 nf_put_var_rd = nf_put_var_real(ncid, varid, vals) 44 END IF 35 45 END FUNCTION nf_put_var_rd 36 46 47 ! CPP_NC_DOUBLE wrapper around nf_put_vara_real, nf_put_vara_double 37 48 INTEGER FUNCTION nf_put_vara_rd(ncid, varid, start, counts, vals) 38 49 INTEGER, INTENT(IN) :: ncid, varid 39 50 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 51 REAl(REAL_FORMAT), INTENT(IN) :: vals(*) 52 53 IF (CPP_NC_DOUBLE) THEN 54 nf_put_vara_rd = nf_put_vara_double(ncid, varid, start, counts, vals) 55 ELSE 56 nf_put_vara_rd = nf_put_vara_real(ncid, varid, start, counts, vals) 57 END IF 46 58 END FUNCTION nf_put_vara_rd 47 59 60 ! CPP_NC_DOUBLE wrapper around nf_get_vara_real, nf_get_vara_double 61 INTEGER FUNCTION nf_get_vara_rd(ncid, varid, start, counts, vals) 62 INTEGER, INTENT(IN) :: ncid, varid 63 INTEGER, INTENT(IN) :: start(*), counts(*) 64 REAl(REAL_FORMAT), INTENT(OUT) :: vals(*) 65 66 IF (CPP_NC_DOUBLE) THEN 67 nf_get_vara_rd = nf_get_vara_double(ncid, varid, start, counts, vals) 68 ELSE 69 nf_get_vara_rd = nf_get_vara_real(ncid, varid, start, counts, vals) 70 END IF 71 END FUNCTION nf_get_vara_rd 72 48 73 END MODULE lmdz_netcdf 49 50 ! TODO check that none of the wrapped functions remain elsewhere51 ! TODO check all uses of `use netcdf`
Note: See TracChangeset
for help on using the changeset viewer.