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 12957 for NEMO/branches/2020/dev_12905_xios_restart/src/ICE/icerst.F90 – NEMO

Ignore:
Timestamp:
2020-05-20T18:53:27+02:00 (4 years ago)
Author:
andmirek
Message:

Ticket #2462: write/read SI3 restart with XIOS (has debug print statements)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2020/dev_12905_xios_restart/src/ICE/icerst.F90

    r12649 r12957  
    5151      CHARACTER(len=50)   ::   clname   ! ice output restart file name 
    5252      CHARACTER(len=256)  ::   clpath   ! full path to ice output restart file  
     53      CHARACTER(LEN=52)   ::   clpname   ! ocean output restart file name including prefix for AGRIF 
    5354      !!---------------------------------------------------------------------- 
    5455      ! 
     
    8081            ENDIF 
    8182            ! 
    82             CALL iom_open( TRIM(clpath)//TRIM(clname), numriw, ldwrt = .TRUE., kdlev = jpl, cdcomp = 'ICE' ) 
     83            IF(.NOT.lwxios) THEN 
     84               CALL iom_open( TRIM(clpath)//TRIM(clname), numriw, ldwrt = .TRUE., kdlev = jpl, cdcomp = 'ICE' ) 
     85            ELSE 
     86#if defined key_iomput 
     87               cwixios_context = "rstwi_"//TRIM(ADJUSTL(clkt)) 
     88               IF( TRIM(Agrif_CFixed()) == '0' ) THEN 
     89                  clpname = clname 
     90               ELSE 
     91                  clpname = TRIM(Agrif_CFixed())//"_"//clname 
     92               ENDIF 
     93               CALL iom_init( cwixios_context, TRIM(clpath)//TRIM(clpname), .false., ld_closedef = .FALSE. ) 
     94               CALL iom_swap(      cxios_context          ) 
     95#else 
     96               clinfo = 'Can not use XIOS in rst_opn' 
     97               CALL ctl_stop(TRIM(clinfo)) 
     98#endif 
     99            ENDIF 
    83100            lrst_ice = .TRUE. 
    84101         ENDIF 
     
    117134      ! ------------------  
    118135      !                                                                        ! calendar control 
    119       CALL iom_rstput( iter, nitrst, numriw, 'nn_fsbc', REAL( nn_fsbc, wp ) )      ! time-step  
    120       CALL iom_rstput( iter, nitrst, numriw, 'kt_ice' , REAL( iter   , wp ) )      ! date 
     136      IF( lwxios ) CALL iom_swap(      cwixios_context         ) 
     137      CALL iom_rstput( iter, nitrst, numriw, 'nn_fsbc', REAL( nn_fsbc, wp ), ldxios = lwxios )      ! time-step  
     138      CALL iom_rstput( iter, nitrst, numriw, 'kt_ice' , REAL( iter   , wp ), ldxios = lwxios )      ! date 
    121139      CALL iom_delay_rst( 'WRITE', 'ICE', numriw )   ! save only ice delayed global communication variables 
    122140 
    123141      ! Prognostic variables 
    124       CALL iom_rstput( iter, nitrst, numriw, 'v_i'  , v_i  ) 
    125       CALL iom_rstput( iter, nitrst, numriw, 'v_s'  , v_s  ) 
    126       CALL iom_rstput( iter, nitrst, numriw, 'sv_i' , sv_i  ) 
    127       CALL iom_rstput( iter, nitrst, numriw, 'a_i'  , a_i  ) 
    128       CALL iom_rstput( iter, nitrst, numriw, 't_su' , t_su  ) 
    129       CALL iom_rstput( iter, nitrst, numriw, 'u_ice', u_ice ) 
    130       CALL iom_rstput( iter, nitrst, numriw, 'v_ice', v_ice ) 
    131       CALL iom_rstput( iter, nitrst, numriw, 'oa_i' , oa_i  ) 
    132       CALL iom_rstput( iter, nitrst, numriw, 'a_ip' , a_ip  ) 
    133       CALL iom_rstput( iter, nitrst, numriw, 'v_ip' , v_ip  ) 
     142      CALL iom_rstput( iter, nitrst, numriw, 'v_i'  , v_i,   ldxios = lwxios ) 
     143      CALL iom_rstput( iter, nitrst, numriw, 'v_s'  , v_s,   ldxios = lwxios ) 
     144      CALL iom_rstput( iter, nitrst, numriw, 'sv_i' , sv_i,  ldxios = lwxios ) 
     145      CALL iom_rstput( iter, nitrst, numriw, 'a_i'  , a_i,   ldxios = lwxios ) 
     146      CALL iom_rstput( iter, nitrst, numriw, 't_su' , t_su,  ldxios = lwxios ) 
     147      CALL iom_rstput( iter, nitrst, numriw, 'u_ice', u_ice, ldxios = lwxios ) 
     148      CALL iom_rstput( iter, nitrst, numriw, 'v_ice', v_ice, ldxios = lwxios ) 
     149      CALL iom_rstput( iter, nitrst, numriw, 'oa_i' , oa_i,  ldxios = lwxios ) 
     150      CALL iom_rstput( iter, nitrst, numriw, 'a_ip' , a_ip,  ldxios = lwxios ) 
     151      CALL iom_rstput( iter, nitrst, numriw, 'v_ip' , v_ip,  ldxios = lwxios ) 
    134152      ! Snow enthalpy 
    135153      DO jk = 1, nlay_s  
     
    137155         znam = 'e_s'//'_l'//zchar1 
    138156         z3d(:,:,:) = e_s(:,:,jk,:) 
    139          CALL iom_rstput( iter, nitrst, numriw, znam , z3d ) 
     157         CALL iom_rstput( iter, nitrst, numriw, znam , z3d, ldxios = lwxios ) 
    140158      END DO 
    141159      ! Ice enthalpy 
     
    144162         znam = 'e_i'//'_l'//zchar1 
    145163         z3d(:,:,:) = e_i(:,:,jk,:) 
    146          CALL iom_rstput( iter, nitrst, numriw, znam , z3d ) 
     164         CALL iom_rstput( iter, nitrst, numriw, znam , z3d, ldxios = lwxios ) 
    147165      END DO 
    148166      ! fields needed for Met Office (Jules) coupling 
    149167      IF( ln_cpl ) THEN 
    150          CALL iom_rstput( iter, nitrst, numriw, 'cnd_ice', cnd_ice ) 
    151          CALL iom_rstput( iter, nitrst, numriw, 't1_ice' , t1_ice  ) 
    152       ENDIF 
     168         CALL iom_rstput( iter, nitrst, numriw, 'cnd_ice', cnd_ice, ldxios = lwxios ) 
     169         CALL iom_rstput( iter, nitrst, numriw, 't1_ice' , t1_ice,  ldxios = lwxios ) 
     170      ENDIF 
     171      IF( lwxios ) CALL iom_swap(      cxios_context         ) 
    153172      ! 
    154173 
     
    156175      ! ------------------ 
    157176      IF( iter == nitrst ) THEN 
    158          CALL iom_close( numriw ) 
     177         IF(.NOT.lwxios) THEN 
     178            CALL iom_close( numriw ) 
     179         ELSE 
     180            CALL iom_context_finalize(      cwixios_context          ) 
     181         ENDIF 
    159182         lrst_ice = .FALSE. 
    160183      ENDIF 
     
    176199      CHARACTER(len=2)  ::   zchar, zchar1 
    177200      REAL(wp)          ::   zfice, ziter 
     201      CHARACTER(lc)     ::   clpname 
    178202      REAL(wp), DIMENSION(jpi,jpj,jpl) ::   z3d   ! 3D workspace 
    179203      !!---------------------------------------------------------------------- 
     
    185209      ENDIF 
    186210 
     211      lxios_sini = .FALSE. 
    187212      CALL iom_open ( TRIM(cn_icerst_indir)//'/'//cn_icerst_in, numrir ) 
     213 
     214      IF( lrxios .AND. .NOT. lxios_sini) STOP 'OCE and ICE restart must be in a single file' 
     215      IF(lwp) write(numout, *) 'USE XIOS to read restart: ', lrxios 
     216      IF(lwp) CALL FLUSH(numout) 
     217      IF( lrxios) THEN 
     218          crixios_context = 'si3_rst' 
     219          IF(lwp) WRITE(numout,*) 'Enable restart reading by XIOS for SI3' 
     220          IF( TRIM(Agrif_CFixed()) == '0' ) THEN 
     221             clpname = cn_icerst_in 
     222          ELSE 
     223             clpname = TRIM(Agrif_CFixed())//"_"//cn_icerst_in    
     224          ENDIF 
     225          CALL iom_init( crixios_context, fname = TRIM(cn_icerst_indir)//'/'//TRIM(clpname), ld_tmppatch = .TRUE. ) 
     226      ENDIF 
    188227 
    189228      ! test if v_i exists  
     
    193232      IF( id0 > 0 ) THEN   ! == case of a normal restart == ! 
    194233         !                 ! ------------------------------ ! 
    195           
     234         IF(lrxios) CALL iom_swap(crixios_context)  
    196235         ! Time info 
    197          CALL iom_get( numrir, 'nn_fsbc', zfice ) 
    198          CALL iom_get( numrir, 'kt_ice' , ziter )     
     236         CALL iom_get( numrir, 'nn_fsbc', zfice, ldxios = lrxios ) 
     237         CALL iom_get( numrir, 'kt_ice' , ziter, ldxios = lrxios )     
    199238         IF(lwp) WRITE(numout,*) '   read ice restart file at time step    : ', ziter 
    200239         IF(lwp) WRITE(numout,*) '   in any case we force it to nit000 - 1 : ', nit000 - 1 
     
    211250 
    212251         ! --- mandatory fields --- !  
    213          CALL iom_get( numrir, jpdom_autoglo, 'v_i'  , v_i  ) 
    214          CALL iom_get( numrir, jpdom_autoglo, 'v_s'  , v_s  ) 
    215          CALL iom_get( numrir, jpdom_autoglo, 'sv_i' , sv_i  ) 
    216          CALL iom_get( numrir, jpdom_autoglo, 'a_i'  , a_i  ) 
    217          CALL iom_get( numrir, jpdom_autoglo, 't_su' , t_su  ) 
    218          CALL iom_get( numrir, jpdom_autoglo, 'u_ice', u_ice ) 
    219          CALL iom_get( numrir, jpdom_autoglo, 'v_ice', v_ice ) 
     252         CALL iom_get( numrir, jpdom_autoglo, 'v_i'  , v_i,   ldxios = lrxios ) 
     253         CALL iom_get( numrir, jpdom_autoglo, 'v_s'  , v_s,   ldxios = lrxios ) 
     254         CALL iom_get( numrir, jpdom_autoglo, 'sv_i' , sv_i,  ldxios = lrxios ) 
     255         CALL iom_get( numrir, jpdom_autoglo, 'a_i'  , a_i,   ldxios = lrxios ) 
     256         CALL iom_get( numrir, jpdom_autoglo, 't_su' , t_su,  ldxios = lrxios ) 
     257         CALL iom_get( numrir, jpdom_autoglo, 'u_ice', u_ice, ldxios = lrxios ) 
     258         CALL iom_get( numrir, jpdom_autoglo, 'v_ice', v_ice, ldxios = lrxios ) 
    220259         ! Snow enthalpy 
    221260         DO jk = 1, nlay_s 
    222261            WRITE(zchar1,'(I2.2)') jk 
    223262            znam = 'e_s'//'_l'//zchar1 
    224             CALL iom_get( numrir, jpdom_autoglo, znam , z3d ) 
     263            CALL iom_get( numrir, jpdom_autoglo, znam , z3d, ldxios = lrxios ) 
    225264            e_s(:,:,jk,:) = z3d(:,:,:) 
    226265         END DO 
     
    229268            WRITE(zchar1,'(I2.2)') jk 
    230269            znam = 'e_i'//'_l'//zchar1 
    231             CALL iom_get( numrir, jpdom_autoglo, znam , z3d ) 
     270            CALL iom_get( numrir, jpdom_autoglo, znam , z3d, ldxios = lrxios ) 
    232271            e_i(:,:,jk,:) = z3d(:,:,:) 
    233272         END DO 
     
    236275         id1 = iom_varid( numrir, 'oa_i' , ldstop = .FALSE. ) 
    237276         IF( id1 > 0 ) THEN                       ! fields exist 
    238             CALL iom_get( numrir, jpdom_autoglo, 'oa_i', oa_i ) 
     277            CALL iom_get( numrir, jpdom_autoglo, 'oa_i', oa_i, ldxios = lrxios ) 
    239278         ELSE                                     ! start from rest 
    240279            IF(lwp) WRITE(numout,*) '   ==>>   previous run without ice age output then set it to zero' 
     
    244283         id2 = iom_varid( numrir, 'a_ip' , ldstop = .FALSE. ) 
    245284         IF( id2 > 0 ) THEN                       ! fields exist 
    246             CALL iom_get( numrir, jpdom_autoglo, 'a_ip' , a_ip ) 
    247             CALL iom_get( numrir, jpdom_autoglo, 'v_ip' , v_ip ) 
     285            CALL iom_get( numrir, jpdom_autoglo, 'a_ip' , a_ip, ldxios = lrxios ) 
     286            CALL iom_get( numrir, jpdom_autoglo, 'v_ip' , v_ip, ldxios = lrxios ) 
    248287         ELSE                                     ! start from rest 
    249288            IF(lwp) WRITE(numout,*) '   ==>>   previous run without melt ponds output then set it to zero' 
     
    256295            id4 = iom_varid( numrir, 't1_ice'  , ldstop = .FALSE. ) 
    257296            IF( id3 > 0 .AND. id4 > 0 ) THEN         ! fields exist 
    258                CALL iom_get( numrir, jpdom_autoglo, 'cnd_ice', cnd_ice ) 
    259                CALL iom_get( numrir, jpdom_autoglo, 't1_ice' , t1_ice  ) 
     297               CALL iom_get( numrir, jpdom_autoglo, 'cnd_ice', cnd_ice, ldxios = lrxios ) 
     298               CALL iom_get( numrir, jpdom_autoglo, 't1_ice' , t1_ice,  ldxios = lrxios ) 
    260299            ELSE                                     ! start from rest 
    261300               IF(lwp) WRITE(numout,*) '   ==>>   previous run without conductivity output then set it to zero' 
     
    266305 
    267306         CALL iom_delay_rst( 'READ', 'ICE', numrir )   ! read only ice delayed global communication variables 
    268  
     307         IF(lrxios) CALL iom_swap(cxios_context) 
    269308         !                 ! ---------------------------------- ! 
    270309      ELSE                 ! == case of a simplified restart == ! 
Note: See TracChangeset for help on using the changeset viewer.