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 11837 for NEMO/branches/2019/dev_r11756_SI3restart_XIOS/src/ICE/icerst.F90 – NEMO

Ignore:
Timestamp:
2019-10-30T15:10:36+01:00 (4 years ago)
Author:
andmirek
Message:

ticket #2323 read SI3 restart with XIOS

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r11756_SI3restart_XIOS/src/ICE/icerst.F90

    r11536 r11837  
    184184      ENDIF 
    185185 
     186      lxios_sini = .FALSE. 
    186187      CALL iom_open ( TRIM(cn_icerst_indir)//'/'//cn_icerst_in, numrir, kdlev = jpl ) 
    187188 
     
    192193      IF( id0 > 0 ) THEN   ! == case of a normal restart == ! 
    193194         !                 ! ------------------------------ ! 
    194           
     195         IF(.NOT.lxios_set) THEN 
     196            lrxios = lrxios.AND.lxios_sini 
     197         ELSE 
     198            IF(.NOT.lxios_sini) THEN 
     199               WRITE(ctmp1,*) 'E R R O R : XIOS can not be used to read SI3 restart from multiple files' 
     200               CALL ctl_stop( 'ice_rst_read:', ctmp1 ) 
     201            ENDIF 
     202         ENDIF 
     203 
     204         lrsi3_nemo = .TRUE.                       ! SI3 restart written by NEMO 
     205 
     206         IF(lrxios) THEN 
     207           crixios_context = 'si3_rst' 
     208           CALL iom_init( crixios_context, TRIM(cn_icerst_indir)//'/'//cn_icerst_in, ld_tmppatch = .false. ) 
     209           lxios_set = .TRUE. 
     210         ENDIF 
     211 
    195212         ! Time info 
    196          CALL iom_get( numrir, 'nn_fsbc', zfice ) 
    197          CALL iom_get( numrir, 'kt_ice' , ziter )     
     213         CALL iom_get( numrir, 'nn_fsbc', zfice, ldxios = lrxios ) 
     214         CALL iom_get( numrir, 'kt_ice' , ziter, ldxios = lrxios )     
    198215         IF(lwp) WRITE(numout,*) '   read ice restart file at time step    : ', ziter 
    199216         IF(lwp) WRITE(numout,*) '   in any case we force it to nit000 - 1 : ', nit000 - 1 
     
    210227 
    211228         ! --- mandatory fields --- !  
    212          CALL iom_get( numrir, jpdom_autoglo, 'v_i'  , v_i   ) 
    213          CALL iom_get( numrir, jpdom_autoglo, 'v_s'  , v_s   ) 
    214          CALL iom_get( numrir, jpdom_autoglo, 'sv_i' , sv_i  ) 
    215          CALL iom_get( numrir, jpdom_autoglo, 'a_i'  , a_i   ) 
    216          CALL iom_get( numrir, jpdom_autoglo, 't_su' , t_su  ) 
    217          CALL iom_get( numrir, jpdom_autoglo, 'u_ice', u_ice ) 
    218          CALL iom_get( numrir, jpdom_autoglo, 'v_ice', v_ice ) 
     229         CALL iom_get( numrir, jpdom_autoglo, 'v_i'  , v_i, ldxios = lrxios   ) 
     230         CALL iom_get( numrir, jpdom_autoglo, 'v_s'  , v_s, ldxios = lrxios   ) 
     231         CALL iom_get( numrir, jpdom_autoglo, 'sv_i' , sv_i, ldxios = lrxios  ) 
     232         CALL iom_get( numrir, jpdom_autoglo, 'a_i'  , a_i, ldxios = lrxios   ) 
     233         CALL iom_get( numrir, jpdom_autoglo, 't_su' , t_su, ldxios = lrxios  ) 
     234         CALL iom_get( numrir, jpdom_autoglo, 'u_ice', u_ice, ldxios = lrxios ) 
     235         CALL iom_get( numrir, jpdom_autoglo, 'v_ice', v_ice, ldxios = lrxios ) 
    219236         ! Snow enthalpy 
    220          DO jk = 1, nlay_s 
    221             WRITE(zchar1,'(I2.2)') jk 
    222             znam = 'e_s'//'_l'//zchar1 
    223             CALL iom_get( numrir, jpdom_autoglo, znam , z3d ) 
    224             e_s(:,:,jk,:) = z3d(:,:,:) 
    225          END DO 
    226          ! Ice enthalpy 
    227          DO jk = 1, nlay_i 
    228             WRITE(zchar1,'(I2.2)') jk 
    229             znam = 'e_i'//'_l'//zchar1 
    230             CALL iom_get( numrir, jpdom_autoglo, znam , z3d ) 
    231             e_i(:,:,jk,:) = z3d(:,:,:) 
    232          END DO 
     237         IF(lrsi3_nemo) THEN 
     238!NEMO read inerface 
     239            DO jk = 1, nlay_s 
     240               WRITE(zchar1,'(I2.2)') jk 
     241               znam = 'e_s'//'_l'//zchar1 
     242               CALL iom_get( numrir, jpdom_autoglo, znam , z3d ) 
     243               e_s(:,:,jk,:) = z3d(:,:,:) 
     244            END DO 
     245            ! Ice enthalpy 
     246            DO jk = 1, nlay_i 
     247               WRITE(zchar1,'(I2.2)') jk 
     248               znam = 'e_i'//'_l'//zchar1 
     249               CALL iom_get( numrir, jpdom_autoglo, znam , z3d ) 
     250               e_i(:,:,jk,:) = z3d(:,:,:) 
     251            END DO 
     252         ELSE 
     253!XIOS read interface 
     254            CALL iom_get( numrir, jpdom_autoglo, "e_s" , e_s ) 
     255            CALL iom_get( numrir, jpdom_autoglo, "e_i" , e_i )  
     256         ENDIF 
    233257         ! -- optional fields -- ! 
    234258         ! ice age 
    235259         id1 = iom_varid( numrir, 'oa_i' , ldstop = .FALSE. ) 
    236260         IF( id1 > 0 ) THEN                       ! fields exist 
    237             CALL iom_get( numrir, jpdom_autoglo, 'oa_i', oa_i ) 
     261            CALL iom_get( numrir, jpdom_autoglo, 'oa_i', oa_i, ldxios = lrxios ) 
    238262         ELSE                                     ! start from rest 
    239263            IF(lwp) WRITE(numout,*) '   ==>>   previous run without ice age output then set it to zero' 
     
    243267         id2 = iom_varid( numrir, 'a_ip' , ldstop = .FALSE. ) 
    244268         IF( id2 > 0 ) THEN                       ! fields exist 
    245             CALL iom_get( numrir, jpdom_autoglo, 'a_ip' , a_ip ) 
    246             CALL iom_get( numrir, jpdom_autoglo, 'v_ip' , v_ip ) 
     269            CALL iom_get( numrir, jpdom_autoglo, 'a_ip' , a_ip, ldxios = lrxios ) 
     270            CALL iom_get( numrir, jpdom_autoglo, 'v_ip' , v_ip, ldxios = lrxios ) 
    247271         ELSE                                     ! start from rest 
    248272            IF(lwp) WRITE(numout,*) '   ==>>   previous run without melt ponds output then set it to zero' 
     
    255279            id4 = iom_varid( numrir, 't1_ice'  , ldstop = .FALSE. ) 
    256280            IF( id3 > 0 .AND. id4 > 0 ) THEN         ! fields exist 
    257                CALL iom_get( numrir, jpdom_autoglo, 'cnd_ice', cnd_ice ) 
    258                CALL iom_get( numrir, jpdom_autoglo, 't1_ice' , t1_ice  ) 
     281               CALL iom_get( numrir, jpdom_autoglo, 'cnd_ice', cnd_ice, ldxios = lrxios ) 
     282               CALL iom_get( numrir, jpdom_autoglo, 't1_ice' , t1_ice, ldxios = lrxios  ) 
    259283            ELSE                                     ! start from rest 
    260284               IF(lwp) WRITE(numout,*) '   ==>>   previous run without conductivity output then set it to zero' 
     
    263287            ENDIF 
    264288         ENDIF 
    265  
     289         IF(lrxios) CALL iom_swap( TRIM(cxios_context) ) 
    266290         CALL iom_delay_rst( 'READ', 'ICE', numrir )   ! read only ice delayed global communication variables 
    267291 
Note: See TracChangeset for help on using the changeset viewer.