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 6736 for branches/NERC/dev_r3874_FASTNEt/NEMOGCM/NEMO/LIM_SRC_2/limthd_2.F90 – NEMO

Ignore:
Timestamp:
2016-06-24T09:50:27+02:00 (8 years ago)
Author:
jamesharle
Message:

FASTNEt code modifications

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/NERC/dev_r3874_FASTNEt/NEMOGCM/NEMO/LIM_SRC_2/limthd_2.F90

    r3625 r6736  
    1313   !!   'key_lim2' :                                  LIM 2.0 sea-ice model 
    1414   !!---------------------------------------------------------------------- 
    15    !!   lim_thd_2       : thermodynamic of sea ice 
    16    !!   lim_thd_init_2  : initialisation of sea-ice thermodynamic 
     15   !!   lim_thd_2      : thermodynamic of sea ice 
     16   !!   lim_thd_init_2 : initialisation of sea-ice thermodynamic 
    1717   !!---------------------------------------------------------------------- 
    18    USE phycst           ! physical constants 
    19    USE dom_oce          ! ocean space and time domain variables 
     18   USE phycst          ! physical constants 
     19   USE dom_oce         ! ocean space and time domain variables 
    2020   USE domvvl 
    2121   USE lbclnk 
    22    USE in_out_manager   ! I/O manager 
     22   USE in_out_manager  ! I/O manager 
    2323   USE lib_mpp 
    24    USE wrk_nemo         ! work arrays 
    25    USE iom              ! IOM library 
    26    USE ice_2            ! LIM sea-ice variables 
    27    USE sbc_oce          !  
    28    USE sbc_ice          !  
    29    USE thd_ice_2        ! LIM thermodynamic sea-ice variables 
    30    USE dom_ice_2        ! LIM sea-ice domain 
     24   USE wrk_nemo        ! work arrays 
     25   USE iom             ! IOM library 
     26   USE ice_2           ! LIM sea-ice variables 
     27   USE sbc_oce         !  
     28   USE sbc_ice         !  
     29   USE thd_ice_2       ! LIM thermodynamic sea-ice variables 
     30   USE dom_ice_2       ! LIM sea-ice domain 
    3131   USE limthd_zdf_2 
    3232   USE limthd_lac_2 
    3333   USE limtab_2 
    34    USE prtctl           ! Print control 
    35    USE cpl_oasis3, ONLY :   lk_cpl 
    36    USE diaar5    , ONLY :   lk_diaar5 
    37    USE lib_fortran      ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined)   
    38     
     34   USE prtctl          ! Print control 
     35   USE lib_fortran     ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined) 
     36   USE cpl_oasis3, ONLY : lk_cpl 
     37   USE diaar5, ONLY :   lk_diaar5 
     38       
    3939   IMPLICIT NONE 
    4040   PRIVATE 
     
    5656   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
    5757   !!---------------------------------------------------------------------- 
     58 
    5859CONTAINS 
    5960 
     
    8990      REAL(wp) ::   za , zh, zthsnice    ! 
    9091      REAL(wp) ::   zfric_u              ! friction velocity  
     92      REAL(wp) ::   zfnsol               ! total non solar heat 
     93      REAL(wp) ::   zfontn               ! heat flux from snow thickness 
    9194      REAL(wp) ::   zfntlat, zpareff     ! test. the val. of lead heat budget 
    9295 
     
    127130      zdvolif(:,:) = 0.e0   ! total variation of ice volume 
    128131      zdvonif(:,:) = 0.e0   ! transformation of snow to sea-ice volume 
     132!      zdvonif(:,:) = 0.e0   ! lateral variation of ice volume 
    129133      zlicegr(:,:) = 0.e0   ! lateral variation of ice volume 
    130134      zdvomif(:,:) = 0.e0   ! variation of ice volume at bottom due to melting only 
     
    134138      ffltbif(:,:) = 0.e0   ! linked with fstric 
    135139      qfvbq  (:,:) = 0.e0   ! linked with fstric 
    136       rdm_snw(:,:) = 0.e0   ! variation of snow mass over 1 time step 
    137       rdq_snw(:,:) = 0.e0   ! heat content associated with rdm_snw 
    138       rdm_ice(:,:) = 0.e0   ! variation of ice mass over 1 time step 
    139       rdq_ice(:,:) = 0.e0   ! heat content associated with rdm_ice 
     140      rdmsnif(:,:) = 0.e0   ! variation of snow mass per unit area 
     141      rdmicif(:,:) = 0.e0   ! variation of ice mass per unit area 
    140142      zmsk (:,:,:) = 0.e0 
    141143 
     
    198200      !-------------------------------------------------------------------------- 
    199201 
    200       !CDIR NOVERRCHK 
    201       DO jj = 1, jpj 
    202          !CDIR NOVERRCHK 
     202      sst_m(:,:) = sst_m(:,:) + rt0 
     203 
     204!CDIR NOVERRCHK 
     205      DO jj = 1, jpj 
     206!CDIR NOVERRCHK 
    203207         DO ji = 1, jpi 
    204208            zthsnice       = hsnif(ji,jj) + hicif(ji,jj) 
     
    214218            !  temperature and turbulent mixing (McPhee, 1992) 
    215219            zfric_u        = MAX ( MIN( SQRT( ust2s(ji,jj) ) , zfric_umax ) , zfric_umin )  ! friction velocity 
    216             fdtcn(ji,jj)  = zindb * rau0 * rcp * 0.006  * zfric_u * ( sst_m(ji,jj) + rt0 - tfu(ji,jj) )  
     220            fdtcn(ji,jj)  = zindb * rau0 * rcp * 0.006  * zfric_u * ( sst_m(ji,jj) - tfu(ji,jj) )  
    217221            qdtcn(ji,jj)  = zindb * fdtcn(ji,jj) * frld(ji,jj) * rdt_ice 
    218222                         
    219223            !  partial computation of the lead energy budget (qldif) 
    220224#if defined key_coupled  
    221             qldif(ji,jj)   = tms(ji,jj) * rdt_ice                                                  & 
     225            qldif(ji,jj)   = tms(ji,jj) * rdt_ice                                             & 
    222226               &    * (   ( qsr_tot(ji,jj) - qsr_ice(ji,jj,1) * zfricp ) * ( 1.0 - thcm(ji,jj) )   & 
    223227               &        + ( qns_tot(ji,jj) - qns_ice(ji,jj,1) * zfricp )                           & 
    224228               &        + frld(ji,jj) * ( fdtcn(ji,jj) + ( 1.0 - zindb ) * fsbbq(ji,jj) )   ) 
    225229#else 
    226             qldif(ji,jj)   = tms(ji,jj) * rdt_ice * frld(ji,jj)                    & 
    227                &                        * (  qsr(ji,jj) * ( 1.0 - thcm(ji,jj) )    & 
    228                &                           + qns(ji,jj)  +  fdtcn(ji,jj)           & 
    229                &                           + ( 1.0 - zindb ) * fsbbq(ji,jj)      ) 
     230            zfontn         = ( sprecip(ji,jj) / rhosn ) * xlsn  !   energy for melting solid precipitation 
     231            zfnsol         = qns(ji,jj)                         !  total non solar flux over the ocean 
     232            qldif(ji,jj)   = tms(ji,jj) * ( qsr(ji,jj) * ( 1.0 - thcm(ji,jj) )   & 
     233               &                               + zfnsol + fdtcn(ji,jj) - zfontn     & 
     234               &                               + ( 1.0 - zindb ) * fsbbq(ji,jj) )   & 
     235               &                        * frld(ji,jj) * rdt_ice     
     236!!$            qldif(ji,jj)   = tms(ji,jj) * rdt_ice * frld(ji,jj)  
     237!!$               &           * ( qsr(ji,jj) * ( 1.0 - thcm(ji,jj) )      & 
     238!!$               &             + qns(ji,jj)  + fdtcn(ji,jj) - zfontn     & 
     239!!$               &             + ( 1.0 - zindb ) * fsbbq(ji,jj)      )   & 
    230240#endif 
    231241            !  parlat : percentage of energy used for lateral ablation (0.0)  
     
    237247             
    238248            !  energy needed to bring ocean surface layer until its freezing 
    239             qcmif  (ji,jj) =  rau0 * rcp * fse3t_m(ji,jj,1) * ( tfu(ji,jj) - sst_m(ji,jj) - rt0 ) * ( 1 - zinda ) 
     249            qcmif  (ji,jj) =  rau0 * rcp * fse3t_m(ji,jj,1)   & 
     250                &          * ( tfu(ji,jj) - sst_m(ji,jj) ) * ( 1 - zinda ) 
    240251             
    241252            !  calculate oceanic heat flux. 
     
    247258      END DO 
    248259       
     260      sst_m(:,:) = sst_m(:,:) - rt0 
     261                
    249262      !         Select icy points and fulfill arrays for the vectorial grid. 
    250263      !---------------------------------------------------------------------- 
     
    300313         CALL tab_2d_1d_2( nbpb, qldif_1d   (1:nbpb)     , qldif      , jpi, jpj, npb(1:nbpb) ) 
    301314         CALL tab_2d_1d_2( nbpb, qstbif_1d  (1:nbpb)     , qstoif     , jpi, jpj, npb(1:nbpb) ) 
    302          CALL tab_2d_1d_2( nbpb, rdm_ice_1d (1:nbpb)     , rdm_ice    , jpi, jpj, npb(1:nbpb) ) 
    303          CALL tab_2d_1d_2( nbpb, rdq_ice_1d (1:nbpb)     , rdq_ice    , jpi, jpj, npb(1:nbpb) ) 
     315         CALL tab_2d_1d_2( nbpb, rdmicif_1d (1:nbpb)     , rdmicif    , jpi, jpj, npb(1:nbpb) ) 
    304316         CALL tab_2d_1d_2( nbpb, dmgwi_1d   (1:nbpb)     , dmgwi      , jpi, jpj, npb(1:nbpb) ) 
    305          CALL tab_2d_1d_2( nbpb, rdm_snw_1d (1:nbpb)     , rdm_snw    , jpi, jpj, npb(1:nbpb) ) 
    306          CALL tab_2d_1d_2( nbpb, rdq_snw_1d (1:nbpb)     , rdq_snw    , jpi, jpj, npb(1:nbpb) ) 
    307317         CALL tab_2d_1d_2( nbpb, qlbbq_1d   (1:nbpb)     , zqlbsbq    , jpi, jpj, npb(1:nbpb) ) 
    308318         ! 
     
    323333         CALL tab_1d_2d_2( nbpb, qfvbq      , npb, qfvbq_1d  (1:nbpb)     , jpi, jpj ) 
    324334         CALL tab_1d_2d_2( nbpb, qstoif     , npb, qstbif_1d (1:nbpb)     , jpi, jpj ) 
    325          CALL tab_1d_2d_2( nbpb, rdm_ice    , npb, rdm_ice_1d(1:nbpb)     , jpi, jpj ) 
    326          CALL tab_1d_2d_2( nbpb, rdq_ice    , npb, rdq_ice_1d(1:nbpb)     , jpi, jpj ) 
     335         CALL tab_1d_2d_2( nbpb, rdmicif    , npb, rdmicif_1d(1:nbpb)     , jpi, jpj ) 
    327336         CALL tab_1d_2d_2( nbpb, dmgwi      , npb, dmgwi_1d  (1:nbpb)     , jpi, jpj ) 
    328          CALL tab_1d_2d_2( nbpb, rdm_snw    , npb, rdm_snw_1d(1:nbpb)     , jpi, jpj ) 
    329          CALL tab_1d_2d_2( nbpb, rdq_snw    , npb, rdq_snw_1d(1:nbpb)     , jpi, jpj ) 
     337         CALL tab_1d_2d_2( nbpb, rdmsnif    , npb, rdmsnif_1d(1:nbpb)     , jpi, jpj ) 
    330338         CALL tab_1d_2d_2( nbpb, zdvosif    , npb, dvsbq_1d  (1:nbpb)     , jpi, jpj ) 
    331339         CALL tab_1d_2d_2( nbpb, zdvobif    , npb, dvbbq_1d  (1:nbpb)     , jpi, jpj ) 
     
    386394      IF( nbpac > 0 ) THEN 
    387395         ! 
    388          zlicegr(:,:) = rdm_ice(:,:)      ! to output the lateral sea-ice growth  
     396         zlicegr(:,:) = rdmicif(:,:)      ! to output the lateral sea-ice growth  
    389397         !...Put the variable in a 1-D array for lateral accretion 
    390398         CALL tab_2d_1d_2( nbpac, frld_1d   (1:nbpac)     , frld       , jpi, jpj, npac(1:nbpac) ) 
     
    397405         CALL tab_2d_1d_2( nbpac, qcmif_1d  (1:nbpac)     , qcmif      , jpi, jpj, npac(1:nbpac) ) 
    398406         CALL tab_2d_1d_2( nbpac, qstbif_1d (1:nbpac)     , qstoif     , jpi, jpj, npac(1:nbpac) ) 
    399          CALL tab_2d_1d_2( nbpac, rdm_ice_1d(1:nbpac)     , rdm_ice    , jpi, jpj, npac(1:nbpac) ) 
    400          CALL tab_2d_1d_2( nbpac, rdq_ice_1d(1:nbpac)     , rdq_ice    , jpi, jpj, npac(1:nbpac) ) 
     407         CALL tab_2d_1d_2( nbpac, rdmicif_1d(1:nbpac)     , rdmicif    , jpi, jpj, npac(1:nbpac) ) 
    401408         CALL tab_2d_1d_2( nbpac, dvlbq_1d  (1:nbpac)     , zdvolif    , jpi, jpj, npac(1:nbpac) ) 
    402409         CALL tab_2d_1d_2( nbpac, tfu_1d    (1:nbpac)     , tfu        , jpi, jpj, npac(1:nbpac) ) 
     
    412419         CALL tab_1d_2d_2( nbpac, tbif(:,:,3), npac(1:nbpac), tbif_1d   (1:nbpac , 3 ), jpi, jpj ) 
    413420         CALL tab_1d_2d_2( nbpac, qstoif     , npac(1:nbpac), qstbif_1d (1:nbpac)     , jpi, jpj ) 
    414          CALL tab_1d_2d_2( nbpac, rdm_ice    , npac(1:nbpac), rdm_ice_1d(1:nbpac)     , jpi, jpj ) 
    415          CALL tab_1d_2d_2( nbpac, rdq_ice    , npac(1:nbpac), rdq_ice_1d(1:nbpac)     , jpi, jpj ) 
     421         CALL tab_1d_2d_2( nbpac, rdmicif    , npac(1:nbpac), rdmicif_1d(1:nbpac)     , jpi, jpj ) 
    416422         CALL tab_1d_2d_2( nbpac, zdvolif    , npac(1:nbpac), dvlbq_1d  (1:nbpac)     , jpi, jpj ) 
    417423         ! 
     
    444450      CALL iom_put( 'iceprod_cea' , hicifp (:,:) * zztmp     )   ! Ice produced               [m/s] 
    445451      IF( lk_diaar5 ) THEN 
    446          CALL iom_put( 'snowmel_cea' , rdm_snw(:,:) * zztmp     )   ! Snow melt                  [kg/m2/s] 
     452         CALL iom_put( 'snowmel_cea' , rdmsnif(:,:) * zztmp     )   ! Snow melt                  [kg/m2/s] 
    447453         zztmp = rhoic / rdt_ice 
    448454         CALL iom_put( 'sntoice_cea' , zdvonif(:,:) * zztmp     )   ! Snow to Ice transformation [kg/m2/s] 
    449455         CALL iom_put( 'ticemel_cea' , zdvosif(:,:) * zztmp     )   ! Melt at Sea Ice top        [kg/m2/s] 
    450456         CALL iom_put( 'bicemel_cea' , zdvomif(:,:) * zztmp     )   ! Melt at Sea Ice bottom     [kg/m2/s] 
    451          zlicegr(:,:) = MAX( 0.e0, rdm_ice(:,:)-zlicegr(:,:) ) 
    452          CALL iom_put( 'licepro_cea' , zlicegr(:,:) * zztmp     )   ! Lateral sea ice growth     [kg/m2/s] 
     457         zlicegr(:,:) = MAX( 0.e0, rdmicif(:,:)-zlicegr(:,:) ) 
     458         CALL iom_put( 'licepro_cea' , zlicegr(:,:) * zztmp     )   ! Latereal sea ice growth    [kg/m2/s] 
    453459      ENDIF 
    454460      ! 
Note: See TracChangeset for help on using the changeset viewer.