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

Ignore:
Timestamp:
2020-09-14T17:40:34+02:00 (4 years ago)
Author:
andmirek
Message:

Ticket #2195:update to trunk 13461

Location:
NEMO/branches/2019/dev_r11351_fldread_with_XIOS
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r11351_fldread_with_XIOS

    • Property svn:externals
      •  

        old new  
        33^/utils/build/mk@HEAD         mk 
        44^/utils/tools@HEAD            tools 
        5 ^/vendors/AGRIF/dev@HEAD      ext/AGRIF 
         5^/vendors/AGRIF/dev_r12970_AGRIF_CMEMS      ext/AGRIF 
        66^/vendors/FCM@HEAD            ext/FCM 
        77^/vendors/IOIPSL@HEAD         ext/IOIPSL 
         8 
         9# SETTE 
         10^/utils/CI/sette@13382        sette 
  • NEMO/branches/2019/dev_r11351_fldread_with_XIOS/src/ICE/icerst.F90

    r10425 r13463  
    1414   !!   ice_rst_read  : read  restart file  
    1515   !!---------------------------------------------------------------------- 
    16    USE ice            ! sea-ice variables 
     16   USE ice            ! sea-ice: variables 
    1717   USE dom_oce        ! ocean domain 
     18   USE phycst  , ONLY : rt0 
    1819   USE sbc_oce , ONLY : nn_fsbc, ln_cpl 
    19    USE icectl 
     20   USE iceistate      ! sea-ice: initial state 
     21   USE icectl         ! sea-ice: control 
    2022   ! 
    2123   USE in_out_manager ! I/O manager 
     
    5355      IF( kt == nit000 )   lrst_ice = .FALSE.   ! default definition 
    5456 
     57      IF( ln_rst_list .OR. nn_stock /= -1 ) THEN 
    5558      ! in order to get better performances with NetCDF format, we open and define the ice restart file  
    5659      ! one ice time step before writing the data (-> at nitrst - 2*nn_fsbc + 1), except if we write ice  
    5760      ! restart files every ice time step or if an ice restart file was writen at nitend - 2*nn_fsbc + 1 
    58       IF( kt == nitrst - 2*nn_fsbc + 1 .OR. nstock == nn_fsbc    & 
     61      IF( kt == nitrst - 2*nn_fsbc + 1 .OR. nn_stock == nn_fsbc    & 
    5962         &                             .OR. ( kt == nitend - nn_fsbc + 1 .AND. .NOT. lrst_ice ) ) THEN 
    6063         IF( nitrst <= nitend .AND. nitrst > 0 ) THEN 
     
    7780            ENDIF 
    7881            ! 
    79             CALL iom_open( TRIM(clpath)//TRIM(clname), numriw, ldwrt = .TRUE., kdlev = jpl ) 
     82            CALL iom_open( TRIM(clpath)//TRIM(clname), numriw, ldwrt = .TRUE., kdlev = jpl, cdcomp = 'ICE' ) 
    8083            lrst_ice = .TRUE. 
    8184         ENDIF 
     85      ENDIF 
    8286      ENDIF 
    8387      ! 
     
    118122 
    119123      ! Prognostic variables 
    120       CALL iom_rstput( iter, nitrst, numriw, 'v_i' , v_i  ) 
    121       CALL iom_rstput( iter, nitrst, numriw, 'v_s' , v_s  ) 
    122       CALL iom_rstput( iter, nitrst, numriw, 'sv_i', sv_i ) 
    123       CALL iom_rstput( iter, nitrst, numriw, 'oa_i', oa_i ) 
    124       CALL iom_rstput( iter, nitrst, numriw, 'a_i' , a_i  ) 
    125       CALL iom_rstput( iter, nitrst, numriw, 't_su', t_su ) 
    126       ! Melt ponds 
    127       CALL iom_rstput( iter, nitrst, numriw, 'a_ip', a_ip ) 
    128       CALL iom_rstput( iter, nitrst, numriw, 'v_ip', v_ip ) 
     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  ) 
    129134      ! Snow enthalpy 
    130135      DO jk = 1, nlay_s  
     
    141146         CALL iom_rstput( iter, nitrst, numriw, znam , z3d ) 
    142147      END DO 
    143       ! ice velocity 
    144       CALL iom_rstput( iter, nitrst, numriw, 'u_ice', u_ice ) ! u_ice 
    145       CALL iom_rstput( iter, nitrst, numriw, 'v_ice', v_ice ) ! v_ice 
    146148      ! fields needed for Met Office (Jules) coupling 
    147149      IF( ln_cpl ) THEN 
     
    161163 
    162164 
    163    SUBROUTINE ice_rst_read 
     165   SUBROUTINE ice_rst_read( Kbb, Kmm, Kaa ) 
    164166      !!---------------------------------------------------------------------- 
    165167      !!                    ***  ice_rst_read  *** 
     
    167169      !! ** purpose  :   read restart file 
    168170      !!---------------------------------------------------------------------- 
     171      INTEGER, INTENT(in) :: Kbb, Kmm, Kaa ! ocean time level indices 
    169172      INTEGER           ::   jk 
    170173      LOGICAL           ::   llok 
    171       INTEGER           ::   id1            ! local integer 
     174      INTEGER           ::   id0, id1, id2, id3, id4   ! local integer 
    172175      CHARACTER(len=25) ::   znam 
    173176      CHARACTER(len=2)  ::   zchar, zchar1 
     
    182185      ENDIF 
    183186 
    184       CALL iom_open ( TRIM(cn_icerst_indir)//'/'//cn_icerst_in, numrir, kdlev = jpl ) 
    185  
    186       CALL iom_get( numrir, 'nn_fsbc', zfice ) 
    187       CALL iom_get( numrir, 'kt_ice' , ziter )     
    188       IF(lwp) WRITE(numout,*) '   read ice restart file at time step    : ', ziter 
    189       IF(lwp) WRITE(numout,*) '   in any case we force it to nit000 - 1 : ', nit000 - 1 
    190  
    191       ! Control of date 
    192       IF( ( nit000 - NINT(ziter) ) /= 1 .AND. ABS( nrstdt ) == 1 )   & 
    193          &     CALL ctl_stop( 'ice_rst_read ===>>>> : problem with nit000 in ice restart',  & 
    194          &                   '   verify the file or rerun with the value 0 for the',        & 
    195          &                   '   control of time parameter  nrstdt' ) 
    196       IF( NINT(zfice) /= nn_fsbc          .AND. ABS( nrstdt ) == 1 )   & 
    197          &     CALL ctl_stop( 'ice_rst_read ===>>>> : problem with nn_fsbc in ice restart',  & 
    198          &                   '   verify the file or rerun with the value 0 for the',         & 
    199          &                   '   control of time parameter  nrstdt' ) 
    200  
    201       ! Prognostic variables  
    202       CALL iom_get( numrir, jpdom_autoglo, 'v_i' , v_i  ) 
    203       CALL iom_get( numrir, jpdom_autoglo, 'v_s' , v_s  ) 
    204       CALL iom_get( numrir, jpdom_autoglo, 'sv_i', sv_i ) 
    205       CALL iom_get( numrir, jpdom_autoglo, 'oa_i', oa_i ) 
    206       CALL iom_get( numrir, jpdom_autoglo, 'a_i' , a_i  ) 
    207       CALL iom_get( numrir, jpdom_autoglo, 't_su', t_su ) 
    208       ! Melt ponds 
    209       id1 = iom_varid( numrir, 'a_ip' , ldstop = .FALSE. ) 
    210       IF( id1 > 0 ) THEN                       ! fields exist (melt ponds) 
    211          CALL iom_get( numrir, jpdom_autoglo, 'a_ip' , a_ip ) 
    212          CALL iom_get( numrir, jpdom_autoglo, 'v_ip' , v_ip ) 
    213       ELSE                                     ! start from rest 
    214          IF(lwp) WRITE(numout,*) '   ==>>   previous run without melt ponds output then set it to zero' 
    215          a_ip(:,:,:) = 0._wp 
    216          v_ip(:,:,:) = 0._wp 
    217       ENDIF 
    218       ! Snow enthalpy 
    219       DO jk = 1, nlay_s 
    220          WRITE(zchar1,'(I2.2)') jk 
    221          znam = 'e_s'//'_l'//zchar1 
    222          CALL iom_get( numrir, jpdom_autoglo, znam , z3d ) 
    223          e_s(:,:,jk,:) = z3d(:,:,:) 
    224       END DO 
    225       ! Ice enthalpy 
    226       DO jk = 1, nlay_i 
    227          WRITE(zchar1,'(I2.2)') jk 
    228          znam = 'e_i'//'_l'//zchar1 
    229          CALL iom_get( numrir, jpdom_autoglo, znam , z3d ) 
    230          e_i(:,:,jk,:) = z3d(:,:,:) 
    231       END DO 
    232       ! ice velocity 
    233       CALL iom_get( numrir, jpdom_autoglo, 'u_ice', u_ice ) 
    234       CALL iom_get( numrir, jpdom_autoglo, 'v_ice', v_ice ) 
    235  
    236       CALL iom_delay_rst( 'READ', 'ICE', numrir )   ! read only ice delayed global communication variables 
    237  
    238       ! fields needed for Met Office (Jules) coupling 
    239       IF( ln_cpl ) THEN 
    240          CALL iom_get( numrir, jpdom_autoglo, 'cnd_ice', cnd_ice ) 
    241          CALL iom_get( numrir, jpdom_autoglo, 't1_ice' , t1_ice  ) 
     187      CALL iom_open ( TRIM(cn_icerst_indir)//'/'//cn_icerst_in, numrir ) 
     188 
     189      ! test if v_i exists  
     190      id0 = iom_varid( numrir, 'v_i' , ldstop = .FALSE. ) 
     191 
     192      !                    ! ------------------------------ ! 
     193      IF( id0 > 0 ) THEN   ! == case of a normal restart == ! 
     194         !                 ! ------------------------------ ! 
     195          
     196         ! Time info 
     197         CALL iom_get( numrir, 'nn_fsbc', zfice ) 
     198         CALL iom_get( numrir, 'kt_ice' , ziter )     
     199         IF(lwp) WRITE(numout,*) '   read ice restart file at time step    : ', ziter 
     200         IF(lwp) WRITE(numout,*) '   in any case we force it to nit000 - 1 : ', nit000 - 1 
     201 
     202         ! Control of date 
     203         IF( ( nit000 - NINT(ziter) ) /= 1 .AND. ABS( nrstdt ) == 1 )   & 
     204            &     CALL ctl_stop( 'ice_rst_read ===>>>> : problem with nit000 in ice restart',  & 
     205            &                   '   verify the file or rerun with the value 0 for the',        & 
     206            &                   '   control of time parameter  nrstdt' ) 
     207         IF( NINT(zfice) /= nn_fsbc          .AND. ABS( nrstdt ) == 1 )   & 
     208            &     CALL ctl_stop( 'ice_rst_read ===>>>> : problem with nn_fsbc in ice restart',  & 
     209            &                   '   verify the file or rerun with the value 0 for the',         & 
     210            &                   '   control of time parameter  nrstdt' ) 
     211 
     212         ! --- mandatory fields --- !  
     213         CALL iom_get( numrir, jpdom_auto, 'v_i'  , v_i   ) 
     214         CALL iom_get( numrir, jpdom_auto, 'v_s'  , v_s   ) 
     215         CALL iom_get( numrir, jpdom_auto, 'sv_i' , sv_i  ) 
     216         CALL iom_get( numrir, jpdom_auto, 'a_i'  , a_i   ) 
     217         CALL iom_get( numrir, jpdom_auto, 't_su' , t_su  ) 
     218         CALL iom_get( numrir, jpdom_auto, 'u_ice', u_ice, cd_type = 'U', psgn = -1._wp ) 
     219         CALL iom_get( numrir, jpdom_auto, 'v_ice', v_ice, cd_type = 'V', psgn = -1._wp ) 
     220         ! Snow enthalpy 
     221         DO jk = 1, nlay_s 
     222            WRITE(zchar1,'(I2.2)') jk 
     223            znam = 'e_s'//'_l'//zchar1 
     224            CALL iom_get( numrir, jpdom_auto, znam , z3d ) 
     225            e_s(:,:,jk,:) = z3d(:,:,:) 
     226         END DO 
     227         ! Ice enthalpy 
     228         DO jk = 1, nlay_i 
     229            WRITE(zchar1,'(I2.2)') jk 
     230            znam = 'e_i'//'_l'//zchar1 
     231            CALL iom_get( numrir, jpdom_auto, znam , z3d ) 
     232            e_i(:,:,jk,:) = z3d(:,:,:) 
     233         END DO 
     234         ! -- optional fields -- ! 
     235         ! ice age 
     236         id1 = iom_varid( numrir, 'oa_i' , ldstop = .FALSE. ) 
     237         IF( id1 > 0 ) THEN                       ! fields exist 
     238            CALL iom_get( numrir, jpdom_auto, 'oa_i', oa_i ) 
     239         ELSE                                     ! start from rest 
     240            IF(lwp) WRITE(numout,*) '   ==>>   previous run without ice age output then set it to zero' 
     241            oa_i(:,:,:) = 0._wp 
     242         ENDIF 
     243         ! melt ponds 
     244         id2 = iom_varid( numrir, 'a_ip' , ldstop = .FALSE. ) 
     245         IF( id2 > 0 ) THEN                       ! fields exist 
     246            CALL iom_get( numrir, jpdom_auto, 'a_ip' , a_ip ) 
     247            CALL iom_get( numrir, jpdom_auto, 'v_ip' , v_ip ) 
     248         ELSE                                     ! start from rest 
     249            IF(lwp) WRITE(numout,*) '   ==>>   previous run without melt ponds output then set it to zero' 
     250            a_ip(:,:,:) = 0._wp 
     251            v_ip(:,:,:) = 0._wp 
     252         ENDIF 
     253         ! fields needed for Met Office (Jules) coupling 
     254         IF( ln_cpl ) THEN 
     255            id3 = iom_varid( numrir, 'cnd_ice' , ldstop = .FALSE. ) 
     256            id4 = iom_varid( numrir, 't1_ice'  , ldstop = .FALSE. ) 
     257            IF( id3 > 0 .AND. id4 > 0 ) THEN         ! fields exist 
     258               CALL iom_get( numrir, jpdom_auto, 'cnd_ice', cnd_ice ) 
     259               CALL iom_get( numrir, jpdom_auto, 't1_ice' , t1_ice  ) 
     260            ELSE                                     ! start from rest 
     261               IF(lwp) WRITE(numout,*) '   ==>>   previous run without conductivity output then set it to zero' 
     262               cnd_ice(:,:,:) = 0._wp 
     263               t1_ice (:,:,:) = rt0 
     264            ENDIF 
     265         ENDIF 
     266 
     267         CALL iom_delay_rst( 'READ', 'ICE', numrir )   ! read only ice delayed global communication variables 
     268 
     269         !                 ! ---------------------------------- ! 
     270      ELSE                 ! == case of a simplified restart == ! 
     271         !                 ! ---------------------------------- ! 
     272         CALL ctl_warn('ice_rst_read: you are using a simplified ice restart') 
     273         ! 
     274         CALL ice_istate_init 
     275         CALL ice_istate( nit000, Kbb, Kmm, Kaa ) 
     276         ! 
     277         IF( .NOT.ln_iceini .OR. .NOT.ln_iceini_file ) & 
     278            &   CALL ctl_stop('STOP', 'ice_rst_read: you need ln_ice_ini=T and ln_iceini_file=T') 
     279         ! 
    242280      ENDIF 
    243281 
Note: See TracChangeset for help on using the changeset viewer.