Changeset 2368


Ignore:
Timestamp:
2010-11-09T16:38:45+01:00 (10 years ago)
Author:
acc
Message:

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

Location:
branches/nemo_v3_3_beta/NEMOGCM
Files:
5 edited
1 moved

Legend:

Unmodified
Added
Removed
  • branches/nemo_v3_3_beta/NEMOGCM/CONFIG/ORCA2_LIM/cpp_ORCA2_LIM.fcm

    r2365 r2368  
    1  bld::tool::fppkeys key_trabbl key_vectopt_loop key_orca_r2 key_lim2 key_dynspg_flt key_diaeiv key_ldfslp key_traldf_c2d key_traldf_eiv key_dynldf_c3d key_dtatem key_dtasal key_tradmp key_zdftke key_zdfddm key_iomput key_nproci=1 key_nprocj=1 
     1 bld::tool::fppkeys key_trabbl key_vectopt_loop key_orca_r2 key_lim2 key_dynspg_flt key_diaeiv key_ldfslp key_traldf_c2d key_traldf_eiv key_dynldf_c3d key_dtatem key_dtasal key_tradmp key_zdftke key_zdfddm key_iomput key_nproci=1 key_nprocj=1 key_netcdf4 
  • branches/nemo_v3_3_beta/NEMOGCM/EXTERNAL/IOIPSL/src/histcom.f90

    r2364 r2368  
    77!- 
    88  USE netcdf 
    9   USE nc4dummy ! needed to allow compilation with netcdf3 libraries 
     9  USE nc4interface ! needed to allow compilation with netcdf3 libraries 
    1010!- 
    1111  USE stringop, ONLY : nocomma,cmpblank,findpos,find_str,strlowercase 
     
    3636!- to describe the grid, just two vectors. 
    3737!--------------------------------------------------------------------- 
    38 !- 
    39   TYPE, PUBLIC :: snc4_ctl    !: netcdf4 chunking control structure  
    40                               !: (optional on histbeg and histend calls) 
    41      SEQUENCE 
    42      INTEGER :: ni 
    43      INTEGER :: nj 
    44      INTEGER :: nk 
    45      LOGICAL :: luse 
    46   END TYPE snc4_ctl 
    4738!- 
    4839  INTERFACE histbeg 
     
    428419!- 
    429420  IF (PRESENT(snc4chunks)) THEN 
    430     IF (snc4chunks%luse) m_c = NF90_HDF5  ! will conflict if compiling with netcdf4 libraries without "key_netcdf4" 
     421    IF (snc4chunks%luse) CALL get_nf90_symbol("NF90_HDF5", m_c) 
    431422  ENDIF 
    432423!- 
     
    15641555           ichunksz(3) = MIN(ichunksz(3), MAX((ichunksz(3)-1)/snc4chunks%nk + 1, 1)) 
    15651556           ! Always use a chunk size of 1 for the unlimited dimension 
    1566            iret = NF90_DEF_VAR_CHUNKING(nfid, nvid, ichunkalg, ichunksz) ! will conflict if compiling with netcdf4 libraries without "key_netcdf4" 
    1567  
    1568            iret = NF90_DEF_VAR_DEFLATE(nfid, nvid, ishuffle, ideflate, ideflate_level) ! will conflict if compiling with netcdf4 libraries without "key_netcdf4" 
    1569  
     1557           iret = SET_NF90_DEF_VAR_CHUNKING(nfid, nvid, ichunkalg, ichunksz) 
     1558           iret = SET_NF90_DEF_VAR_DEFLATE(nfid, nvid, ishuffle, ideflate, ideflate_level) 
    15701559          ENDIF 
    15711560        ENDIF 
  • branches/nemo_v3_3_beta/NEMOGCM/EXTERNAL/IOIPSL/src/nc4interface.F90

    r2366 r2368  
    1 MODULE nc4dummy 
     1MODULE nc4interface 
    22!- 
    33!- 
     
    1010      !!                   calls when compiling without netcdf4 libraries 
    1111      !!-------------------------------------------------------------------- 
    12      INTEGER, PUBLIC :: NF90_HDF5 
     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 
    1322CONTAINS 
    1423!=== 
    15    INTEGER FUNCTION NF90_DEF_VAR_CHUNKING(idum1, idum2, idum3, iarr1) 
     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) 
    1630      !!-------------------------------------------------------------------- 
    1731      !!                   ***  SUBROUTINE NF90_DEF_VAR_CHUNKING  *** 
     
    2135      INTEGER,               INTENT(in) :: idum1, idum2, idum3 
    2236      INTEGER, DIMENSION(4), INTENT(in) :: iarr1 
    23       IF(lwp) WRITE(numout,*) 'Warning: Attempt to chunk output variable without NetCDF4 support' 
    24       NF90_DEF_VAR_CHUNKING = -1 
    25    END FUNCTION NF90_DEF_VAR_CHUNKING 
     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 
    2640 
    27    INTEGER FUNCTION NF90_DEF_VAR_DEFLATE(idum1, idum2, idum3, idum4, idum5) 
     41   INTEGER FUNCTION SET_NF90_DEF_VAR_DEFLATE(idum1, idum2, idum3, idum4, idum5) 
    2842      !!-------------------------------------------------------------------- 
    2943      !!                   ***  SUBROUTINE NF90_DEF_VAR_DEFLATE  *** 
     
    3246      !!-------------------------------------------------------------------- 
    3347      INTEGER,               INTENT(in) :: idum1, idum2, idum3, idum4, idum5 
    34       IF(lwp) WRITE(numout,*) 'Warning: Attempt to compress output variable without NetCDF4 support' 
    35       NF90_DEF_VAR_DEFLATE = -1 
    36    END FUNCTION NF90_DEF_VAR_DEFLATE 
     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 
    3751#else 
    3852      !!-------------------------------------------------------------------- 
     
    4054      !!               calls when compiling without netcdf4 libraries 
    4155      !!-------------------------------------------------------------------- 
     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 
    42119#endif 
    43120 
    44121!------------------ 
    45 END MODULE nc4dummy 
     122END MODULE nc4interface 
  • branches/nemo_v3_3_beta/NEMOGCM/EXTERNAL/XMLIO_SERVER/src/IOSERVER/mod_ioserver_namelist.f90

    r2364 r2368  
    11MODULE mod_ioserver_namelist 
    22 
     3  USE nc4interface 
    34  LOGICAL,SAVE :: using_server 
    45  LOGICAL,SAVE :: using_oasis 
     
    1112 
    1213  INTEGER,PARAMETER,PRIVATE :: starting_unit=356 
    13   TYPE, PUBLIC :: snc4_ctl    !: netcdf4 chunking control structure 
    14                               !: (optional on histbeg and histend calls) 
    15      SEQUENCE 
    16      INTEGER :: ni 
    17      INTEGER :: nj 
    18      INTEGER :: nk 
    19      LOGICAL :: luse 
    20   END TYPE snc4_ctl 
    2114  TYPE(snc4_ctl), SAVE :: snc4ioset 
    2215  INTEGER :: nn_nchunks_i, nn_nchunks_j, nn_nchunks_k 
  • branches/nemo_v3_3_beta/NEMOGCM/NEMO/OPA_SRC/IOM/in_out_manager.F90

    r2364 r2368  
    1919   USE par_oce         ! ocean parameter 
    2020   USE lib_print       ! formated print library 
     21   USE nc4interface 
    2122 
    2223   IMPLICIT NONE 
     
    6263#endif 
    6364 
    64 !$AGRIF_DO_NOT_TREAT 
    65    TYPE, PUBLIC :: snc4_ctl                            !: netcdf4 chunking control structure (always needed for decision making) 
    66       SEQUENCE 
    67       INTEGER :: ni 
    68       INTEGER :: nj 
    69       INTEGER :: nk 
    70       LOGICAL :: luse 
    71    END TYPE snc4_ctl 
    72  
    73    TYPE(snc4_ctl) :: snc4set                          !: netcdf4 chunking control structure (always needed for decision making) 
    74 !$AGRIF_END_DO_NOT_TREAT 
     65   TYPE(snc4_ctl)     :: snc4set                       !: netcdf4 chunking control structure (always needed for decision making) 
    7566 
    7667 
  • branches/nemo_v3_3_beta/NEMOGCM/NEMO/OPA_SRC/IOM/iom_nf90.F90

    r2364 r2368  
    4040   END INTERFACE 
    4141 
    42 #if ! defined key_netcdf4 
    43    !!-------------------------------------------------------------------- 
    44    !! NOT 'key_netcdf4' Defines dummy routines for netcdf4 
    45    !!                   calls when compiling without netcdf4 libraries 
    46    !!-------------------------------------------------------------------- 
    47    PUBLIC NF90_DEF_VAR_CHUNKING, NF90_DEF_VAR_DEFLATE ! contained below 
    48    INTEGER :: NF90_HDF5 
    49 #endif 
    5042   !!---------------------------------------------------------------------- 
    5143   !! NEMO/OPA 3.3 , NEMO Consortium (2010) 
     
    7769      INTEGER            ::   ichunk           ! temporary storage of nn_chunksz 
    7870      INTEGER            ::   imode            ! creation mode flag: NF90_CLOBBER or NF90_NOCLOBBER or NF90_HDF5 
     71      INTEGER            ::   ihdf5            ! local variable for retrieval of value for NF90_HDF5 
    7972      LOGICAL            ::   llclobber        ! local definition of ln_clobber 
    8073      !--------------------------------------------------------------------- 
     
    116109            IF( snc4set%luse ) THEN 
    117110               IF(lwp) WRITE(numout,*) TRIM(clinfo)//' creating file: '//TRIM(cdname)//' in hdf5 (netcdf4) mode' 
    118                IF( llclobber ) THEN   ;   imode = IOR(NF90_HDF5, NF90_CLOBBER) 
    119                ELSE                   ;   imode = IOR(NF90_HDF5, NF90_NOCLOBBER) 
     111               CALL GET_NF90_SYMBOL("NF90_HDF5", ihdf5) 
     112               IF( llclobber ) THEN   ;   imode = IOR(ihdf5, NF90_CLOBBER) 
     113               ELSE                   ;   imode = IOR(ihdf5, NF90_NOCLOBBER) 
    120114               ENDIF 
    121115               CALL iom_nf90_check(NF90_CREATE( TRIM(cdname), imode, if90id ), clinfo) 
     
    496490            ichunksz(4) = 1                                                            ! Do not allow chunks to span the 
    497491                                                                                       ! unlimited dimension 
    498             CALL iom_nf90_check(NF90_DEF_VAR_CHUNKING(if90id, idvar, ichunkalg, ichunksz), clinfo) 
    499             CALL iom_nf90_check(NF90_DEF_VAR_DEFLATE(if90id, idvar, ishuffle, ideflate, ideflate_level), clinfo) 
     492            CALL iom_nf90_check(SET_NF90_DEF_VAR_CHUNKING(if90id, idvar, ichunkalg, ichunksz), clinfo) 
     493            CALL iom_nf90_check(SET_NF90_DEF_VAR_DEFLATE(if90id, idvar, ishuffle, ideflate, ideflate_level), clinfo) 
    500494            IF(lwp) WRITE(numout,*) TRIM(clinfo)//' chunked ok. Chunks sizes: ', ichunksz 
    501495         ENDIF 
     
    579573   END SUBROUTINE iom_nf90_check 
    580574 
    581 #if ! defined key_netcdf4 
    582  
    583       !!-------------------------------------------------------------------- 
    584       !! NOT 'key_netcdf4' Defines dummy routines for netcdf4 
    585       !!                   calls when compiling without netcdf4 libraries 
    586       !!-------------------------------------------------------------------- 
    587  
    588    INTEGER FUNCTION NF90_DEF_VAR_CHUNKING(idum1, idum2, idum3, iarr1) 
    589       !!-------------------------------------------------------------------- 
    590       !!                   ***  SUBROUTINE NF90_DEF_VAR_CHUNKING  *** 
    591       !! 
    592       !! ** Purpose :   Dummy NetCDF4 routine to enable compiling with NetCDF3 libraries 
    593       !!-------------------------------------------------------------------- 
    594       INTEGER,               INTENT(in) :: idum1, idum2, idum3 
    595       INTEGER, DIMENSION(4), INTENT(in) :: iarr1 
    596       IF(lwp) WRITE(numout,*) 'Warning: Attempt to chunk output variable without NetCDF4 support' 
    597       NF90_DEF_VAR_CHUNKING = -1 
    598    END FUNCTION NF90_DEF_VAR_CHUNKING 
    599  
    600    INTEGER FUNCTION NF90_DEF_VAR_DEFLATE(idum1, idum2, idum3, idum4, idum5) 
    601       !!-------------------------------------------------------------------- 
    602       !!                   ***  SUBROUTINE NF90_DEF_VAR_DEFLATE  *** 
    603       !! 
    604       !! ** Purpose :   Dummy NetCDF4 routine to enable compiling with NetCDF3 libraries 
    605       !!-------------------------------------------------------------------- 
    606       INTEGER,               INTENT(in) :: idum1, idum2, idum3, idum4, idum5 
    607       IF(lwp) WRITE(numout,*) 'Warning: Attempt to compress output variable without NetCDF4 support' 
    608       NF90_DEF_VAR_DEFLATE = -1 
    609    END FUNCTION NF90_DEF_VAR_DEFLATE 
    610 #endif 
    611  
    612575   !!====================================================================== 
    613576END MODULE iom_nf90 
Note: See TracChangeset for help on using the changeset viewer.