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/UKMO/dev_merge_2017_CICE_interface/NEMOGCM/NEMO/OPA_SRC/IOM/iom.F90 – NEMO

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.

File:
1 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 
Note: See TracChangeset for help on using the changeset viewer.