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 9969 for branches – NEMO

Changeset 9969 for branches


Ignore:
Timestamp:
2018-07-19T10:07:31+02:00 (6 years ago)
Author:
timgraham
Message:

Picked all the changes in IOM from the trunk as it was crashing in calls to XIOS.
Added/corrected allocate calls in sbc_ice.F90 for CICE case.

Location:
branches/UKMO/dev_merge_2017_CICE_interface/NEMOGCM/NEMO/OPA_SRC
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • branches/UKMO/dev_merge_2017_CICE_interface/NEMOGCM/NEMO/OPA_SRC/IOM/iom.F90

    r9499 r9969  
    6565   PRIVATE set_grid, set_grid_bounds, set_scalar, set_xmlatt, set_mooring, iom_update_file_name, iom_sdate 
    6666   PRIVATE iom_set_rst_context, iom_set_rstw_active, iom_set_rstr_active 
    67    PUBLIC iom_set_rstw_var_active, iom_set_rst_vars 
    6867# endif 
     68   PUBLIC iom_set_rstw_var_active, iom_set_rstw_core, iom_set_rst_vars 
    6969 
    7070   INTERFACE iom_get 
     
    8080      MODULE PROCEDURE iom_rp0d, iom_rp1d, iom_rp2d, iom_rp3d 
    8181   END INTERFACE 
    82   INTERFACE iom_put 
    83      MODULE PROCEDURE iom_p0d, iom_p1d, iom_p2d, iom_p3d 
    84   END INTERFACE 
     82   INTERFACE iom_put 
     83      MODULE PROCEDURE iom_p0d, iom_p1d, iom_p2d, iom_p3d 
     84   END INTERFACE 
    8585 
    8686   !!---------------------------------------------------------------------- 
     
    9191CONTAINS 
    9292 
    93    SUBROUTINE iom_init( cdname, fname )  
     93   SUBROUTINE iom_init( cdname, fname, ld_tmppatch )  
    9494      !!---------------------------------------------------------------------- 
    9595      !!                     ***  ROUTINE   *** 
     
    100100      CHARACTER(len=*), INTENT(in)  :: cdname 
    101101      CHARACTER(len=*), OPTIONAL, INTENT(in)  :: fname 
     102      LOGICAL         , OPTIONAL, INTENT(in)  :: ld_tmppatch 
    102103#if defined key_iomput 
    103104      ! 
     
    109110      ! 
    110111      REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zt_bnds, zw_bnds 
    111       !!---------------------------------------------------------------------- 
     112      LOGICAL ::   ll_tmppatch = .TRUE.    !: seb: patch before we remove periodicity 
     113      INTEGER ::   nldi_save, nlei_save    !:      and close boundaries in output files 
     114      INTEGER ::   nldj_save, nlej_save    !: 
     115      !!---------------------------------------------------------------------- 
     116      ! 
     117      ! seb: patch before we remove periodicity and close boundaries in output files 
     118      IF( PRESENT(ld_tmppatch) ) THEN   ;   ll_tmppatch = ld_tmppatch 
     119      ELSE                              ;   ll_tmppatch = .TRUE. 
     120      ENDIF 
     121      IF ( ll_tmppatch ) THEN 
     122         nldi_save = nldi   ;   nlei_save = nlei 
     123         nldj_save = nldj   ;   nlej_save = nlej 
     124         IF( nimpp           ==      1 ) nldi = 1 
     125         IF( nimpp + jpi - 1 == jpiglo ) nlei = jpi 
     126         IF( njmpp           ==      1 ) nldj = 1 
     127         IF( njmpp + jpj - 1 == jpjglo ) nlej = jpj 
     128      ENDIF 
    112129      ! 
    113130      ALLOCATE( zt_bnds(2,jpk), zw_bnds(2,jpk) ) 
     
    232249      DEALLOCATE( zt_bnds, zw_bnds ) 
    233250      ! 
     251      IF ( ll_tmppatch ) THEN 
     252         nldi = nldi_save   ;   nlei = nlei_save 
     253         nldj = nldj_save   ;   nlej = nlej_save 
     254      ENDIF 
    234255#endif 
    235256      ! 
     
    245266   INTEGER :: i 
    246267   LOGICAL :: llis_set 
    247  
     268   CHARACTER(LEN=256) :: clinfo    ! info character 
     269 
     270#if defined key_iomput 
    248271   llis_set = .FALSE. 
    249272 
     
    263286        nstop = nstop + 1 
    264287   ENDIF 
     288#else 
     289        clinfo = 'iom_set_rstw_var_active: key_iomput is needed to use XIOS restart read/write functionality' 
     290        CALL ctl_stop('STOP', TRIM(clinfo)) 
     291#endif 
    265292 
    266293   END SUBROUTINE iom_set_rstw_var_active 
     
    276303!sets enabled = .TRUE. for each field in restart file 
    277304   CHARACTER(len=256) :: rst_file 
     305 
     306#if defined key_iomput 
    278307   TYPE(xios_field) :: field_hdl 
    279308   TYPE(xios_file) :: file_hdl 
     
    319348         ENDIF 
    320349        END DO 
     350#endif 
    321351   END SUBROUTINE iom_set_rstr_active 
    322352 
     
    328358      !!--------------------------------------------------------------------- 
    329359   CHARACTER (len=*), INTENT (IN) :: cdmdl ! model OPA or SAS 
    330     
     360   CHARACTER(LEN=256)             :: clinfo    ! info character 
     361#if defined key_iomput 
    331362   IF(cdmdl == "OPA") THEN 
    332363!from restart.F90 
     
    362393         CALL iom_set_rstw_var_active('sbc_sc_b') 
    363394   ENDIF 
     395#else 
     396        clinfo = 'iom_set_rstw_core: key_iomput is needed to use XIOS restart read/write functionality' 
     397        CALL ctl_stop('STOP', TRIM(clinfo)) 
     398#endif 
    364399   END SUBROUTINE iom_set_rstw_core 
    365400 
     
    539574   SUBROUTINE iom_set_rst_context( )  
    540575     !!--------------------------------------------------------------------- 
    541       !!                   ***  SUBROUTINE  iom_set_rstr_active  *** 
     576      !!                   ***  SUBROUTINE  iom_set_rst_context  *** 
    542577      !! 
    543578      !! ** Purpose : Define domain, axis and grid for restart (read/write)  
     
    869904               IF( PRESENT(kdimsz) ) THEN  
    870905                  i_nvd = iom_file(kiomid)%ndims(iiv) 
    871                   IF( i_nvd == size(kdimsz) ) THEN 
    872                      kdimsz(:) = iom_file(kiomid)%dimsz(1:i_nvd,iiv) 
     906                  IF( i_nvd <= size(kdimsz) ) THEN 
     907                     kdimsz(1:i_nvd) = iom_file(kiomid)%dimsz(1:i_nvd,iiv) 
    873908                  ELSE 
    874909                     WRITE(ctmp1,*) i_nvd, size(kdimsz) 
     
    929964         ENDIF 
    930965      ELSE 
     966#if defined key_iomput 
    931967         IF(lwp) WRITE(numout,*) 'XIOS RST READ (0D): ', trim(cdvar) 
    932968         CALL iom_swap( TRIM(crxios_context) ) 
    933969         CALL xios_recv_field( trim(cdvar), pvar) 
    934970         CALL iom_swap( TRIM(cxios_context) ) 
     971#else 
     972         nstop = nstop + 1  
     973         clinfo = 'Can not use XIOS in iom_g0d, file: '//trim(clname)//', var:'//trim(cdvar) 
     974#endif 
    935975      ENDIF 
    936976   END SUBROUTINE iom_g0d 
     
    11151155            ! Identify the domain in case of jpdom_local definition 
    11161156            IF( idom == jpdom_local ) THEN 
     1157               WRITE(numout,*) jpi,jpj,idimsz(1),idimsz(2),nlci,nlcj,nlei,nldi,nlej,nldj 
     1158               CALL FLUSH(numout) 
    11171159               IF(     idimsz(1) == jpi               .AND. idimsz(2) == jpj               ) THEN   ;   idom = jpdom_local_full 
    11181160               ELSEIF( idimsz(1) == nlci              .AND. idimsz(2) == nlcj              ) THEN   ;   idom = jpdom_local_noextra 
     
    12921334         CALL iom_swap( TRIM(crxios_context) )  
    12931335         IF( PRESENT(pv_r3d) ) THEN 
     1336            pv_r3d(:, :, :) = 0. 
    12941337            if(lwp) write(numout,*) 'XIOS RST READ (3D): ',trim(cdvar) 
    12951338            CALL xios_recv_field( trim(cdvar), pv_r3d) 
     
    12981341            ENDIF 
    12991342         ELSEIF( PRESENT(pv_r2d) ) THEN 
     1343            pv_r2d(:, :) = 0. 
    13001344            if(lwp) write(numout,*) 'XIOS RST READ (2D): ', trim(cdvar) 
    13011345            CALL xios_recv_field( trim(cdvar), pv_r2d) 
     
    13041348            ENDIF 
    13051349         ELSEIF( PRESENT(pv_r1d) ) THEN 
     1350            pv_r1d(:) = 0. 
    13061351            if(lwp) write(numout,*) 'XIOS RST READ (1D): ', trim(cdvar) 
    13071352            CALL xios_recv_field( trim(cdvar), pv_r1d) 
     
    17161761#if defined key_iomput 
    17171762   !!---------------------------------------------------------------------- 
    1718    !!   'key_iomput'                                         IOM interface 
     1763   !!   'key_iomput'                                         XIOS interface 
    17191764   !!---------------------------------------------------------------------- 
    17201765 
  • branches/UKMO/dev_merge_2017_CICE_interface/NEMOGCM/NEMO/OPA_SRC/IOM/iom_def.F90

    r9499 r9969  
    8080!$AGRIF_END_DO_NOT_TREAT 
    8181   ! 
    82    TYPE(RST_FIELD), PUBLIC :: rst_wfields(max_rst_fields), rst_rfields(max_rst_fields) 
     82   TYPE(RST_FIELD), PUBLIC, SAVE :: rst_wfields(max_rst_fields), rst_rfields(max_rst_fields) 
    8383   ! 
    8484   !!---------------------------------------------------------------------- 
  • branches/UKMO/dev_merge_2017_CICE_interface/NEMOGCM/NEMO/OPA_SRC/IOM/iom_nf90.F90

    r9499 r9969  
    253253         ! return the simension size 
    254254         IF( PRESENT(kdimsz) ) THEN  
    255             IF( i_nvd == SIZE(kdimsz) ) THEN 
    256                kdimsz(:) = iom_file(kiomid)%dimsz(1:i_nvd,kiv) 
     255            IF( i_nvd <= SIZE(kdimsz) ) THEN 
     256               kdimsz(1:i_nvd) = iom_file(kiomid)%dimsz(1:i_nvd,kiv) 
    257257            ELSE 
    258258               WRITE(ctmp1,*) i_nvd, SIZE(kdimsz) 
  • branches/UKMO/dev_merge_2017_CICE_interface/NEMOGCM/NEMO/OPA_SRC/IOM/prtctl.F90

    r9499 r9969  
    3613619000     FORMAT(a41,i4.4,a14) 
    3623629001     FORMAT(a59) 
    363 9002     FORMAT(a20,i4.4,a36,i3.3) 
     3639002     FORMAT(a20,i4.4,a36,i4.4) 
    3643649003     FORMAT(a20,i4.4,a17,i4.4) 
    3653659004     FORMAT(a11,i4.4,a26,i4.4,a14) 
  • branches/UKMO/dev_merge_2017_CICE_interface/NEMOGCM/NEMO/OPA_SRC/IOM/restart.F90

    r9499 r9969  
    6262      CHARACTER(lc)       ::   clpath   ! full path to ocean output restart file 
    6363      CHARACTER(LEN=52)   ::   clpname   ! ocean output restart file name including prefix for AGRIF 
     64      CHARACTER(LEN=256)  ::   clinfo    ! info character 
    6465      !!---------------------------------------------------------------------- 
    6566      ! 
     
    110111               CALL iom_open( TRIM(clpath)//TRIM(clname), numrow, ldwrt = .TRUE., kiolib = jprstlib ) 
    111112            ELSE 
     113#if defined key_iomput 
    112114               cwxios_context = "rstw_"//TRIM(ADJUSTL(clkt)) 
    113115               IF( TRIM(Agrif_CFixed()) == '0' ) THEN 
     
    116118                  clpname = TRIM(Agrif_CFixed())//"_"//clname    
    117119               ENDIF 
    118                CALL iom_init( cwxios_context, TRIM(clpath)//TRIM(clpname)) 
     120               CALL iom_init( cwxios_context, TRIM(clpath)//TRIM(clpname), .false. ) 
    119121               CALL xios_update_calendar(nitrst) 
    120122               CALL iom_swap(      cxios_context          ) 
     123#else 
     124               clinfo = 'Can not use XIOS in rst_opn' 
     125               CALL ctl_stop(TRIM(clinfo)) 
     126#endif 
    121127            ENDIF 
    122128            lrst_oce = .TRUE. 
     
    222228             IF( .NOT.lxios_set ) THEN 
    223229                 IF(lwp) WRITE(numout,*) 'Enable restart reading by XIOS' 
    224                  CALL iom_init( crxios_context ) 
     230                 CALL iom_init( crxios_context, ld_tmppatch = .false. ) 
    225231                 lxios_set = .TRUE. 
    226232             ENDIF 
    227233         ENDIF 
    228234         IF( TRIM(Agrif_CFixed()) /= '0' .AND. lrxios) THEN 
    229              CALL iom_init( crxios_context ) 
     235             CALL iom_init( crxios_context, ld_tmppatch = .false. ) 
    230236             IF(lwp) WRITE(numout,*) 'Enable restart reading by XIOS for AGRIF' 
    231237             lxios_set = .TRUE. 
  • branches/UKMO/dev_merge_2017_CICE_interface/NEMOGCM/NEMO/OPA_SRC/SBC/sbc_ice.F90

    r9819 r9969  
    162162               ndaice_da(jpi,jpj)    , nfresh_da(jpi,jpj)    , nfsalt_da(jpi,jpj)    , & 
    163163#endif 
    164                sstfrz(jpi,jpj)       , STAT= ierr(2) ) 
     164               sstfrz(jpi,jpj)       , qsr_ice_tr(jpi,jpj,jpl), STAT= ierr(2) ) 
    165165      IF( ln_cpl )   ALLOCATE( u_ice(jpi,jpj)        , t1_ice (jpi,jpj,jpl)    , & 
    166166         &                     v_ice(jpi,jpj)        , alb_ice(jpi,jpj,1)      , & 
    167          &                     emp_ice(jpi,jpj)      , qns_ice(jpi,jpj,1)      , dqns_ice(jpi,jpj,1)   , & 
     167         &                     emp_ice(jpi,jpj)      , qns_ice(jpi,jpj,1)      , dqns_ice(jpi,jpj,jpl)   , & 
    168168         &                     a_ip(jpi,jpj,jpl)      , v_ip(jpi,jpj,jpl)     , tsfc_ice(jpi,jpj,jpl) , & 
    169169         &                     cnd_ice(jpi,jpj,jpl) ,    STAT=ierr(3) ) 
Note: See TracChangeset for help on using the changeset viewer.