Ignore:
Timestamp:
2019-08-08T16:02:49+02:00 (15 months ago)
Author:
mathiot
Message:

ENHANCE-02_ISF_nemo : add UKESM ice sheet coupling method (ticket #2142)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/ISF/isfstp.F90

    r11403 r11423  
    3131   USE isfcav         ! ice shelf cavity 
    3232   USE isfload        ! ice shelf load 
     33   USE isfcpl         ! isf variables 
    3334   USE isf            ! isf variables 
    3435 
     
    8788         ! before time step  
    8889         IF ( kt /= nit000 ) THEN  
    89             risf_par_tsc_b (:,:) = risf_par_tsc (:,:) 
    90             fwfisf_par_b(:,:)    = fwfisf_par(:,:) 
     90            risf_par_tsc_b(:,:,:) = risf_par_tsc(:,:,:) 
     91            fwfisf_par_b  (:,:)   = fwfisf_par  (:,:) 
    9192         END IF 
    9293         ! 
     
    100101         IF (lrst_oce) CALL isfrst_write(kt, 'par', risf_par_tsc, fwfisf_par) 
    101102         ! 
     103      END IF 
     104 
     105      IF ( ln_isfcpl ) THEN 
     106         IF (lrst_oce) CALL isfcpl_rst_write(kt) 
    102107      END IF 
    103108      ! 
     
    122127      INTEGER               :: ji, jj 
    123128      !!---------------------------------------------------------------------- 
    124       NAMELIST/namisf/ ln_isfcav_mlt, cn_isfcav_mlt, cn_gammablk, rn_gammat0, rn_gammas0, rn_htbl, sn_isfcav_fwf,  & 
    125          &             ln_isfpar_mlt, cn_isfpar_mlt, sn_isfpar_fwf, sn_isfpar_zmin, sn_isfpar_zmax, sn_isfpar_Leff 
     129      NAMELIST/namisf/ ln_isfcav_mlt, cn_isfcav_mlt, cn_gammablk, rn_gammat0, rn_gammas0, rn_htbl, sn_isfcav_fwf,   & 
     130         &             ln_isfpar_mlt, cn_isfpar_mlt, sn_isfpar_fwf, sn_isfpar_zmin, sn_isfpar_zmax, sn_isfpar_Leff, & 
     131         &             ln_isfcpl    , nn_drown, ln_isfcpl_cons,                                                     & 
     132         &             cn_isfload   , cn_isfdir 
    126133      !!---------------------------------------------------------------------- 
    127134      ! 
     
    130137      ! 
    131138      riceload(:,:)       = 0.0_wp 
    132       fwfisf_cpl(:,:)     = 0.0_wp 
     139      fwfisf_oasis(:,:)   = 0.0_wp 
    133140      fwfisf_par(:,:)     = 0.0_wp    ; fwfisf_par_b(:,:)     = 0.0_wp 
    134141      fwfisf_cav(:,:)     = 0.0_wp    ; fwfisf_cav_b(:,:)     = 0.0_wp 
     
    148155      IF(lwm) WRITE ( numond, namisf ) 
    149156      ! 
    150       IF(lwp) WRITE(numout,*) 
    151       IF(lwp) WRITE(numout,*) 'isf_init : ice shelf initialisation' 
    152       IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~' 
    153       IF(lwp) WRITE(numout,*) '   Namelist namisf :' 
    154       ! 
    155       IF(lwp) WRITE(numout,*) '      melt inside the cavity                  ln_isfcav_mlt   = ', ln_isfcav_mlt 
    156       IF ( ln_isfcav ) THEN 
    157          IF(lwp) WRITE(numout,*) '         melt formulation                        cn_isfcav_mlt   = ', cn_isfcav_mlt 
    158          IF(lwp) WRITE(numout,*) '         thickness of the top boundary layer     rn_htbl     = ', rn_htbl 
    159          IF(lwp) WRITE(numout,*) '         gamma formulation                       cn_gammablk = ', cn_gammablk  
    160          IF ( TRIM(cn_gammablk) .NE. 'spe' ) THEN  
    161             IF(lwp) WRITE(numout,*) '            gammat coefficient                      rn_gammat0  = ', rn_gammat0   
    162             IF(lwp) WRITE(numout,*) '            gammas coefficient                      rn_gammas0  = ', rn_gammas0   
    163             IF(lwp) WRITE(numout,*) '            top drag coef. used (from namdrg_top)   rn_Cd0      = ', r_Cdmin_top  
    164          END IF 
    165       END IF 
    166       ! 
    167       IF(lwp) WRITE(numout,*) '' 
    168       ! 
    169       IF(lwp) WRITE(numout,*) '      ice shelf melt parametrisation          ln_isfpar_mlt    = ', ln_isfpar_mlt 
    170       IF ( ln_isfpar_mlt ) THEN 
    171          IF(lwp) WRITE(numout,*) '         isf parametrisation formulation         cn_isfpar_mlt   = ', cn_isfpar_mlt 
    172       END IF 
    173       IF(lwp) WRITE(numout,*) '' 
    174       ! 
     157      IF (lwp) THEN 
     158         WRITE(numout,*) 
     159         WRITE(numout,*) 'isf_init : ice shelf initialisation' 
     160         WRITE(numout,*) '~~~~~~~~~~~~' 
     161         WRITE(numout,*) '   Namelist namisf :' 
     162         ! 
     163         WRITE(numout,*) '      melt inside the cavity                  ln_isfcav_mlt   = ', ln_isfcav_mlt 
     164         IF ( ln_isfcav ) THEN 
     165            WRITE(numout,*) '         melt formulation                        cn_isfcav_mlt   = ', TRIM(cn_isfcav_mlt) 
     166            WRITE(numout,*) '         thickness of the top boundary layer     rn_htbl     = ', rn_htbl 
     167            WRITE(numout,*) '         gamma formulation                       cn_gammablk = ', TRIM(cn_gammablk)  
     168            IF ( TRIM(cn_gammablk) .NE. 'spe' ) THEN  
     169               WRITE(numout,*) '            gammat coefficient                      rn_gammat0  = ', rn_gammat0   
     170               WRITE(numout,*) '            gammas coefficient                      rn_gammas0  = ', rn_gammas0   
     171               WRITE(numout,*) '            top drag coef. used (from namdrg_top)   rn_Cd0      = ', r_Cdmin_top  
     172            END IF 
     173         END IF 
     174         WRITE(numout,*) '' 
     175         ! 
     176         WRITE(numout,*) '      ice shelf melt parametrisation          ln_isfpar_mlt    = ', ln_isfpar_mlt 
     177         IF ( ln_isfpar_mlt ) THEN 
     178            WRITE(numout,*) '         isf parametrisation formulation         cn_isfpar_mlt   = ', TRIM(cn_isfpar_mlt) 
     179         END IF 
     180         WRITE(numout,*) '' 
     181         ! 
     182         WRITE(numout,*) '      Coupling to an ice sheet model          ln_isfcpl         = ', ln_isfcpl 
     183         IF ( ln_isfcpl ) THEN 
     184            WRITE(numout,*) '         conservation activated ln_isfcpl_cons           = ', ln_isfcpl_cons 
     185            WRITE(numout,*) '            number of call of the extrapolation loop = ', nn_drown 
     186         ENDIF 
     187         ! 
     188         WRITE(numout,*) '      Ice shelf load method                   cn_isfload        = ', TRIM(cn_isfload) 
     189 
     190      END IF 
     191      ! 
     192      !--------------------------------------------------------------------------------------------------------------------- 
    175193      ! sanity check 
    176194      ! melt in the cavity without cavity 
     
    178196         &   CALL ctl_stop('ice shelf melt in the cavity activated (ln_isfcav_mlt) but no cavity detected in domcfg (ln_isfcav), STOP' ) 
    179197      ! 
    180       IF ( ln_cpl ) THEN 
     198      IF ( ln_isfcpl .AND. ln_isfcpl_cons .AND. ln_linssh ) & 
     199         &   CALL ctl_stop( 'The coupling between NEMO and an ice sheet model with the conservation option does not work with the linssh option' ) 
     200      ! 
     201      IF ( l_isfoasis ) THEN 
    181202         ! 
    182203         CALL ctl_stop( ' ln_ctl and ice shelf not tested' ) 
    183204         ! 
    184205         ! NEMO coupled to ATMO model with isf cavity need oasis method for melt computation  
    185          IF ( ln_isfcav_mlt .AND. TRIM(cn_isfcav_mlt) /= 'oasis' ) CALL ctl_stop( 'cn_isfcav_mlt = oasis is the only option availble with ln_cpl' ) 
    186          IF ( ln_isfpar_mlt .AND. TRIM(cn_isfpar_mlt) /= 'oasis' ) CALL ctl_stop( 'cn_isfpar_mlt = oasis is the only option availble with ln_cpl' ) 
     206         IF ( ln_isfcav_mlt .AND. TRIM(cn_isfcav_mlt) /= 'oasis' ) CALL ctl_stop( 'cn_isfcav_mlt = oasis is the only option availble if fwf send by oasis' ) 
     207         IF ( ln_isfpar_mlt .AND. TRIM(cn_isfpar_mlt) /= 'oasis' ) CALL ctl_stop( 'cn_isfpar_mlt = oasis is the only option availble if fwf send by oasis' ) 
    187208         ! 
    188209         ! oasis melt computation not tested (coded but not tested) 
     
    198219      END IF 
    199220      ! 
     221      !--------------------------------------------------------------------------------------------------------------------- 
    200222      ! initialisation ice shelf load 
    201223      IF ( ln_isfcav ) THEN 
     
    212234      r1_Lfusisf =  1._wp / rLfusisf 
    213235      ! 
     236      ll_isfcpl     = .FALSE. 
     237      ll_isfcpl_cons= .FALSE. 
     238      ! 
    214239      ! initialisation melt in the cavity 
    215240      IF ( ln_isfcav_mlt ) THEN 
     
    223248      END IF 
    224249      ! 
     250      !--------------------------------------------------------------------------------------------------------------------- 
    225251      ! initialisation parametrised melt 
    226252      IF ( ln_isfpar_mlt ) THEN 
     
    234260      END IF 
    235261      ! 
     262      !--------------------------------------------------------------------------------------------------------------------- 
     263      ! initialisation ice sheet coupling 
     264      IF( ln_isfcpl ) THEN 
     265 
     266         ! prepare writing restart 
     267         IF( lwxios ) CALL iom_set_rstw_var_active('ssmask') 
     268         IF( lwxios ) CALL iom_set_rstw_var_active('tmask') 
     269         IF( lwxios ) CALL iom_set_rstw_var_active('e3t_n') 
     270         IF( lwxios ) CALL iom_set_rstw_var_active('e3u_n') 
     271         IF( lwxios ) CALL iom_set_rstw_var_active('e3v_n') 
     272 
     273         IF( ln_rstart ) THEN 
     274            ! 
     275            ll_isfcpl = .TRUE. 
     276            ! 
     277            CALL isf_alloc_cpl() 
     278            ! 
     279            ! extrapolation tracer properties 
     280            CALL isfcpl_tra() 
     281            ! 
     282            ! correction of the horizontal divergence and associated temp. and salt content flux 
     283            CALL isfcpl_vol() 
     284            ! 
     285            ! apply the 'conservation' method 
     286            IF ( ln_isfcpl_cons )  THEN 
     287               ll_isfcpl_cons = .TRUE. 
     288               CALL isfcpl_cons() 
     289            END IF 
     290            ! 
     291            ! Need to include in the cpl cons the isfrst_cpl_div contribution 
     292            ! decide how to manage thickness level change in conservation 
     293            ! 
     294            tsb    (:,:,:,:) = tsn (:,:,:,:) 
     295            sshb   (:,:)     = sshn(:,:) 
     296            ! 
     297         END IF 
     298      END IF 
     299          
    236300  END SUBROUTINE isf_stp_init 
    237301   !!====================================================================== 
Note: See TracChangeset for help on using the changeset viewer.