New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 14644 for NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/IOM/iom.F90 – NEMO

Ignore:
Timestamp:
2021-03-26T15:33:49+01:00 (3 years ago)
Author:
sparonuz
Message:

Merge trunk -r14642:HEAD

Location:
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final

    • Property svn:externals
      •  

        old new  
        99 
        1010# SETTE 
        11 ^/utils/CI/sette_wave@13990         sette 
         11^/utils/CI/sette@14244        sette 
  • NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/IOM/iom.F90

    r14219 r14644  
    3636   USE phycst          ! physical constants 
    3737   USE dianam          ! build name of file 
    38 #if defined key_iomput 
     38#if defined key_xios 
    3939   USE xios 
    4040# endif 
     
    5252   PUBLIC   !   must be public to be able to access iom_def through iom 
    5353 
    54 #if defined key_iomput 
     54#if defined key_xios 
    5555   LOGICAL, PUBLIC, PARAMETER ::   lk_iomput = .TRUE.        !: iom_put flag 
    5656#else 
     
    6969   PRIVATE iom_p1d_sp, iom_p2d_sp, iom_p3d_sp, iom_p4d_sp 
    7070   PRIVATE iom_p1d_dp, iom_p2d_dp, iom_p3d_dp, iom_p4d_dp 
    71 #if defined key_iomput 
     71#if defined key_xios 
    7272   PRIVATE iom_set_domain_attr, iom_set_axis_attr, iom_set_field_attr, iom_set_file_attr, iom_get_file_attr, iom_set_grid_attr 
    7373   PRIVATE set_grid, set_grid_bounds, set_scalar, set_xmlatt, set_mooring, iom_sdate 
     
    116116      INTEGER         , OPTIONAL, INTENT(in)  :: kdid 
    117117      LOGICAL         , OPTIONAL, INTENT(in)  :: ld_closedef 
    118 #if defined key_iomput 
     118#if defined key_xios 
    119119      ! 
    120120      TYPE(xios_duration) :: dtime    = xios_duration(0, 0, 0, 0, 0, 0) 
     
    144144 
    145145      llrstr = (cdname == cr_ocerst_cxt) .OR. (cdname == cr_icerst_cxt) 
     146      llrstr = llrstr .OR. (cdname == cr_ablrst_cxt) 
    146147      llrstr = llrstr .OR. (cdname == cr_toprst_cxt) 
    147148      llrstr = llrstr .OR. (cdname == cr_sedrst_cxt) 
    148149 
    149150      llrstw = (cdname == cw_ocerst_cxt) .OR. (cdname == cw_icerst_cxt) 
     151      llrstw = llrstw .OR. (cdname == cw_ablrst_cxt) 
    150152      llrstw = llrstw .OR. (cdname == cw_toprst_cxt) 
    151153      llrstw = llrstw .OR. (cdname == cw_sedrst_cxt) 
     
    309311      !!---------------------------------------------------------------------- 
    310312      CHARACTER(len=*), OPTIONAL, INTENT(IN) :: cdname 
    311 #if defined key_iomput 
     313#if defined key_xios 
    312314      LOGICAL :: llrstw 
    313315 
     
    316318         llrstw = (cdname == cw_ocerst_cxt) 
    317319         llrstw = llrstw .OR. (cdname == cw_icerst_cxt) 
     320         llrstw = llrstw .OR. (cdname == cw_ablrst_cxt) 
    318321         llrstw = llrstw .OR. (cdname == cw_toprst_cxt) 
    319322         llrstw = llrstw .OR. (cdname == cw_sedrst_cxt) 
     
    344347      INTEGER, INTENT(IN) :: idnum 
    345348 
    346 #if defined key_iomput 
     349#if defined key_xios 
    347350      INTEGER                                    :: ndims, nvars, natts, unlimitedDimId, dimlen, xtype,mdims 
    348351      TYPE(xios_field)                           :: field_hdl 
     
    358361      LOGICAL                                    :: lmeta 
    359362!metadata in restart file for restart read with XIOS 
    360       INTEGER, PARAMETER                         :: NMETA = 10 
     363      INTEGER, PARAMETER                         :: NMETA = 11 
    361364      CHARACTER(LEN=lc)                          :: meta(NMETA) 
    362365 
     
    372375      meta(9) = "y" 
    373376      meta(10) = "numcat" 
     377      meta(11) = "nav_hgt" 
    374378 
    375379      clinfo = '          iom_set_vars_active, file: '//TRIM(iom_file(idnum)%name) 
     
    450454      !!--------------------------------------------------------------------- 
    451455      CHARACTER(len=*) :: cdrst_file 
    452 #if defined key_iomput 
     456#if defined key_xios 
    453457      TYPE(xios_file) :: file_hdl 
    454458      TYPE(xios_filegroup) :: filegroup_hdl 
     
    489493      REAL(dp), OPTIONAL, INTENT(IN), DIMENSION(:, :, :) :: rd3 
    490494      REAL(sp), OPTIONAL, INTENT(IN), DIMENSION(:, :, :) :: rs3 
    491 #if defined key_iomput 
     495#if defined key_xios 
    492496      TYPE(xios_field) :: field_hdl 
    493497      TYPE(xios_file) :: file_hdl 
     
    549553      IF(idlev == jpk) THEN 
    550554         axis_ref="nav_lev" 
     555      ELSEIF(idlev == jpka) THEN 
     556         axis_ref="nav_hgt" 
    551557#if defined key_si3 
    552558      ELSEIF(idlev == jpl) THEN 
     
    594600      LOGICAL, INTENT(IN)               :: ld_rstr 
    595601      INTEGER :: ji 
    596 #if defined key_iomput 
     602#if defined key_xios 
    597603      TYPE(xios_domaingroup)            :: domaingroup_hdl 
    598604      TYPE(xios_domain)                 :: domain_hdl 
     
    616622      CALL iom_set_axis_attr( "numcat", (/ (REAL(ji,wp), ji=1,jpl) /) ) 
    617623#endif 
     624      CALL xios_add_child(axisgroup_hdl, axis_hdl, "nav_hgt") 
     625      CALL iom_set_axis_attr( "nav_hgt", (/ (REAL(ji,wp), ji=1,jpka) /) ) 
    618626      CALL xios_get_handle("scalar_definition", scalargroup_hdl) 
    619627      CALL xios_add_child(scalargroup_hdl, scalar_hdl, "grid_scalar") 
     
    639647         ELSEIF(kdid == numrir) THEN 
    640648            cdcont = cr_icerst_cxt 
     649         ELSEIF(kdid == numrar) THEN 
     650            cdcont = cr_ablrst_cxt 
    641651         ELSEIF(kdid == numrtr) THEN 
    642652            cdcont = cr_toprst_cxt 
     
    651661         ELSEIF(kdid == numriw) THEN 
    652662            cdcont = cw_icerst_cxt 
     663         ELSEIF(kdid == numraw) THEN 
     664            cdcont = cw_ablrst_cxt 
    653665         ELSEIF(kdid == numrtw) THEN 
    654666            cdcont = cw_toprst_cxt 
     
    667679      !!--------------------------------------------------------------------- 
    668680      CHARACTER(len=*), INTENT(in) :: cdname 
    669 #if defined key_iomput 
     681#if defined key_xios 
    670682      TYPE(xios_context) :: nemo_hdl 
    671683      IF( TRIM(Agrif_CFixed()) == '0' ) THEN 
     
    956968         ENDIF 
    957969      ELSE 
    958 #if defined key_iomput 
     970#if defined key_xios 
    959971         IF(lwp) WRITE(numout,*) 'XIOS RST READ (0D): ', trim(cdvar) 
    960972         CALL iom_swap(context) 
     
    10041016         ENDIF 
    10051017      ELSE 
    1006 #if defined key_iomput 
     1018#if defined key_xios 
    10071019         IF(lwp) WRITE(numout,*) 'XIOS RST READ (0D): ', trim(cdvar) 
    10081020         CALL iom_swap(context) 
     
    13681380         ! 
    13691381      ELSE        ! read using XIOS. Only if KEY_IOMPUT is defined 
    1370 #if defined key_iomput 
     1382#if defined key_xios 
    13711383!would be good to be able to check which context is active and swap only if current is not restart 
    13721384         idvar = iom_varid( kiomid, cdvar ) 
     
    14231435      CHARACTER(LEN=*), INTENT(in ) ::   cdname 
    14241436      REAL(wp), DIMENSION(jpi,jpj) ::   z2d 
    1425 #if defined key_iomput 
     1437#if defined key_xios 
    14261438      IF( xios_field_is_active( cdname, at_current_timestep_arg = .TRUE. ) ) THEN 
    14271439         z2d(:,:) = 0._wp 
     
    16061618 
    16071619      IF( llx ) THEN 
    1608 #ifdef key_iomput 
     1620#ifdef key_xios 
    16091621         IF( kt == kwrite ) THEN 
    16101622            IF(lwp) write(numout,*) 'RESTART: write (XIOS 0D) ',trim(cdvar) 
     
    16461658 
    16471659      IF( llx ) THEN 
    1648 #ifdef key_iomput 
     1660#ifdef key_xios 
    16491661         IF( kt == kwrite ) THEN 
    16501662            IF(lwp) write(numout,*) 'RESTART: write (XIOS 0D) ',trim(cdvar) 
     
    16871699 
    16881700      IF( llx ) THEN 
    1689 #ifdef key_iomput 
     1701#ifdef key_xios 
    16901702         IF( kt == kwrite ) THEN 
    16911703            IF(lwp) write(numout,*) 'RESTART: write (XIOS 1D) ',trim(cdvar) 
     
    17271739 
    17281740      IF( llx ) THEN 
    1729 #ifdef key_iomput 
     1741#ifdef key_xios 
    17301742         IF( kt == kwrite ) THEN 
    17311743            IF(lwp) write(numout,*) 'RESTART: write (XIOS 1D) ',trim(cdvar) 
     
    17681780 
    17691781      IF( llx ) THEN 
    1770 #ifdef key_iomput 
     1782#ifdef key_xios 
    17711783         IF( kt == kwrite ) THEN 
    17721784            IF(lwp) write(numout,*) 'RESTART: write (XIOS 2D) ',trim(cdvar) 
     
    18081820 
    18091821      IF( llx ) THEN 
    1810 #ifdef key_iomput 
     1822#ifdef key_xios 
    18111823         IF( kt == kwrite ) THEN 
    18121824            IF(lwp) write(numout,*) 'RESTART: write (XIOS 2D) ',trim(cdvar) 
     
    18491861 
    18501862      IF( llx ) THEN 
    1851 #ifdef key_iomput 
     1863#ifdef key_xios 
    18521864         IF( kt == kwrite ) THEN 
    18531865            IF(lwp) write(numout,*) 'RESTART: write (XIOS 3D) ',trim(cdvar) 
     
    18891901 
    18901902      IF( llx ) THEN 
    1891 #ifdef key_iomput 
     1903#ifdef key_xios 
    18921904         IF( kt == kwrite ) THEN 
    18931905            IF(lwp) write(numout,*) 'RESTART: write (XIOS 3D) ',trim(cdvar) 
     
    19671979      REAL(sp)        , INTENT(in) ::   pfield0d 
    19681980      !!      REAL(wp)        , DIMENSION(jpi,jpj) ::   zz     ! masson 
    1969 #if defined key_iomput 
     1981#if defined key_xios 
    19701982!!clem      zz(:,:)=pfield0d 
    19711983!!clem      CALL xios_send_field(cdname, zz) 
     
    19801992      REAL(dp)        , INTENT(in) ::   pfield0d 
    19811993!!      REAL(wp)        , DIMENSION(jpi,jpj) ::   zz     ! masson 
    1982 #if defined key_iomput 
     1994#if defined key_xios 
    19831995!!clem      zz(:,:)=pfield0d 
    19841996!!clem      CALL xios_send_field(cdname, zz) 
     
    19932005      CHARACTER(LEN=*)          , INTENT(in) ::   cdname 
    19942006      REAL(sp),     DIMENSION(:), INTENT(in) ::   pfield1d 
    1995 #if defined key_iomput 
     2007#if defined key_xios 
    19962008      CALL xios_send_field( cdname, RESHAPE( (/pfield1d/), (/1,1,SIZE(pfield1d)/) ) ) 
    19972009#else 
     
    20032015      CHARACTER(LEN=*)          , INTENT(in) ::   cdname 
    20042016      REAL(dp),     DIMENSION(:), INTENT(in) ::   pfield1d 
    2005 #if defined key_iomput 
     2017#if defined key_xios 
    20062018      CALL xios_send_field( cdname, RESHAPE( (/pfield1d/), (/1,1,SIZE(pfield1d)/) ) ) 
    20072019#else 
     
    20142026      REAL(sp),     DIMENSION(:,:), INTENT(in) ::   pfield2d 
    20152027      IF( iom_use(cdname) ) THEN 
    2016 #if defined key_iomput 
     2028#if defined key_xios 
    20172029         CALL xios_send_field( cdname, pfield2d ) 
    20182030#else 
     
    20262038      REAL(dp),     DIMENSION(:,:), INTENT(in) ::   pfield2d 
    20272039      IF( iom_use(cdname) ) THEN 
    2028 #if defined key_iomput 
     2040#if defined key_xios 
    20292041         CALL xios_send_field( cdname, pfield2d ) 
    20302042#else 
     
    20382050      REAL(sp),       DIMENSION(:,:,:), INTENT(in) ::   pfield3d 
    20392051      IF( iom_use(cdname) ) THEN 
    2040 #if defined key_iomput 
     2052#if defined key_xios 
    20412053         CALL xios_send_field( cdname, pfield3d ) 
    20422054#else 
     
    20502062      REAL(dp),       DIMENSION(:,:,:), INTENT(in) ::   pfield3d 
    20512063      IF( iom_use(cdname) ) THEN 
    2052 #if defined key_iomput 
     2064#if defined key_xios 
    20532065         CALL xios_send_field( cdname, pfield3d ) 
    20542066#else 
     
    20622074      REAL(sp),       DIMENSION(:,:,:,:), INTENT(in) ::   pfield4d 
    20632075      IF( iom_use(cdname) ) THEN 
    2064 #if defined key_iomput 
     2076#if defined key_xios 
    20652077         CALL xios_send_field (cdname, pfield4d ) 
    20662078#else 
     
    20742086      REAL(dp),       DIMENSION(:,:,:,:), INTENT(in) ::   pfield4d 
    20752087      IF( iom_use(cdname) ) THEN 
    2076 #if defined key_iomput 
     2088#if defined key_xios 
    20772089         CALL xios_send_field (cdname, pfield4d ) 
    20782090#else 
     
    20822094   END SUBROUTINE iom_p4d_dp 
    20832095 
    2084 #if defined key_iomput 
     2096#if defined key_xios 
    20852097   !!---------------------------------------------------------------------- 
    2086    !!   'key_iomput'                                         XIOS interface 
     2098   !!   'key_xios'                                         XIOS interface 
    20872099   !!---------------------------------------------------------------------- 
    20882100 
     
    27142726#else 
    27152727   !!---------------------------------------------------------------------- 
    2716    !!   NOT 'key_iomput'                               a few dummy routines 
     2728   !!   NOT 'key_xios'                               a few dummy routines 
    27172729   !!---------------------------------------------------------------------- 
    27182730   SUBROUTINE iom_setkt( kt, cdname ) 
     
    27362748   LOGICAL FUNCTION iom_use( cdname ) 
    27372749      CHARACTER(LEN=*), INTENT(in) ::   cdname 
    2738 #if defined key_iomput 
     2750#if defined key_xios 
    27392751      iom_use = xios_field_is_active( cdname ) 
    27402752#else 
     
    27472759      REAL(wp)        , INTENT(out) ::   pmiss_val 
    27482760      REAL(dp)                      ::   ztmp_pmiss_val 
    2749 #if defined key_iomput 
     2761#if defined key_xios 
    27502762      ! get missing value 
    27512763      CALL xios_get_field_attr( cdname, default_value = ztmp_pmiss_val ) 
Note: See TracChangeset for help on using the changeset viewer.