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 3625 for branches/2012/dev_NOC_2012_rev3555/NEMOGCM/NEMO/LIM_SRC_2/limthd_2.F90 – NEMO

Ignore:
Timestamp:
2012-11-21T14:19:18+01:00 (11 years ago)
Author:
acc
Message:

Branch dev_NOC_2012_r3555. #1006. Step 7. Check in code now merged with dev_r3385_NOCS04_HAMF

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2012/dev_NOC_2012_rev3555/NEMOGCM/NEMO/LIM_SRC_2/limthd_2.F90

    r3294 r3625  
    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        
     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    
    3839   IMPLICIT NONE 
    3940   PRIVATE 
     
    5556   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
    5657   !!---------------------------------------------------------------------- 
    57  
    5858CONTAINS 
    5959 
     
    8989      REAL(wp) ::   za , zh, zthsnice    ! 
    9090      REAL(wp) ::   zfric_u              ! friction velocity  
    91       REAL(wp) ::   zfnsol               ! total non solar heat 
    92       REAL(wp) ::   zfontn               ! heat flux from snow thickness 
    9391      REAL(wp) ::   zfntlat, zpareff     ! test. the val. of lead heat budget 
    9492 
     
    129127      zdvolif(:,:) = 0.e0   ! total variation of ice volume 
    130128      zdvonif(:,:) = 0.e0   ! transformation of snow to sea-ice volume 
    131 !      zdvonif(:,:) = 0.e0   ! lateral variation of ice volume 
    132129      zlicegr(:,:) = 0.e0   ! lateral variation of ice volume 
    133130      zdvomif(:,:) = 0.e0   ! variation of ice volume at bottom due to melting only 
     
    137134      ffltbif(:,:) = 0.e0   ! linked with fstric 
    138135      qfvbq  (:,:) = 0.e0   ! linked with fstric 
    139       rdmsnif(:,:) = 0.e0   ! variation of snow mass per unit area 
    140       rdmicif(:,:) = 0.e0   ! variation of ice mass per unit area 
     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 
    141140      zmsk (:,:,:) = 0.e0 
    142141 
     
    199198      !-------------------------------------------------------------------------- 
    200199 
    201       sst_m(:,:) = sst_m(:,:) + rt0 
    202  
    203 !CDIR NOVERRCHK 
    204       DO jj = 1, jpj 
    205 !CDIR NOVERRCHK 
     200      !CDIR NOVERRCHK 
     201      DO jj = 1, jpj 
     202         !CDIR NOVERRCHK 
    206203         DO ji = 1, jpi 
    207204            zthsnice       = hsnif(ji,jj) + hicif(ji,jj) 
     
    217214            !  temperature and turbulent mixing (McPhee, 1992) 
    218215            zfric_u        = MAX ( MIN( SQRT( ust2s(ji,jj) ) , zfric_umax ) , zfric_umin )  ! friction velocity 
    219             fdtcn(ji,jj)  = zindb * rau0 * rcp * 0.006  * zfric_u * ( sst_m(ji,jj) - tfu(ji,jj) )  
     216            fdtcn(ji,jj)  = zindb * rau0 * rcp * 0.006  * zfric_u * ( sst_m(ji,jj) + rt0 - tfu(ji,jj) )  
    220217            qdtcn(ji,jj)  = zindb * fdtcn(ji,jj) * frld(ji,jj) * rdt_ice 
    221218                         
    222219            !  partial computation of the lead energy budget (qldif) 
    223220#if defined key_coupled  
    224             qldif(ji,jj)   = tms(ji,jj) * rdt_ice                                             & 
     221            qldif(ji,jj)   = tms(ji,jj) * rdt_ice                                                  & 
    225222               &    * (   ( qsr_tot(ji,jj) - qsr_ice(ji,jj,1) * zfricp ) * ( 1.0 - thcm(ji,jj) )   & 
    226223               &        + ( qns_tot(ji,jj) - qns_ice(ji,jj,1) * zfricp )                           & 
    227224               &        + frld(ji,jj) * ( fdtcn(ji,jj) + ( 1.0 - zindb ) * fsbbq(ji,jj) )   ) 
    228225#else 
    229             zfontn         = ( sprecip(ji,jj) / rhosn ) * xlsn  !   energy for melting solid precipitation 
    230             zfnsol         = qns(ji,jj)                         !  total non solar flux over the ocean 
    231             qldif(ji,jj)   = tms(ji,jj) * ( qsr(ji,jj) * ( 1.0 - thcm(ji,jj) )   & 
    232                &                               + zfnsol + fdtcn(ji,jj) - zfontn     & 
    233                &                               + ( 1.0 - zindb ) * fsbbq(ji,jj) )   & 
    234                &                        * frld(ji,jj) * rdt_ice     
    235 !!$            qldif(ji,jj)   = tms(ji,jj) * rdt_ice * frld(ji,jj)  
    236 !!$               &           * ( qsr(ji,jj) * ( 1.0 - thcm(ji,jj) )      & 
    237 !!$               &             + qns(ji,jj)  + fdtcn(ji,jj) - zfontn     & 
    238 !!$               &             + ( 1.0 - zindb ) * fsbbq(ji,jj)      )   & 
     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)      ) 
    239230#endif 
    240231            !  parlat : percentage of energy used for lateral ablation (0.0)  
     
    246237             
    247238            !  energy needed to bring ocean surface layer until its freezing 
    248             qcmif  (ji,jj) =  rau0 * rcp * fse3t_m(ji,jj,1)   & 
    249                 &          * ( tfu(ji,jj) - sst_m(ji,jj) ) * ( 1 - zinda ) 
     239            qcmif  (ji,jj) =  rau0 * rcp * fse3t_m(ji,jj,1) * ( tfu(ji,jj) - sst_m(ji,jj) - rt0 ) * ( 1 - zinda ) 
    250240             
    251241            !  calculate oceanic heat flux. 
     
    257247      END DO 
    258248       
    259       sst_m(:,:) = sst_m(:,:) - rt0 
    260                 
    261249      !         Select icy points and fulfill arrays for the vectorial grid. 
    262250      !---------------------------------------------------------------------- 
     
    312300         CALL tab_2d_1d_2( nbpb, qldif_1d   (1:nbpb)     , qldif      , jpi, jpj, npb(1:nbpb) ) 
    313301         CALL tab_2d_1d_2( nbpb, qstbif_1d  (1:nbpb)     , qstoif     , jpi, jpj, npb(1:nbpb) ) 
    314          CALL tab_2d_1d_2( nbpb, rdmicif_1d (1:nbpb)     , rdmicif    , 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) ) 
    315304         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) ) 
    316307         CALL tab_2d_1d_2( nbpb, qlbbq_1d   (1:nbpb)     , zqlbsbq    , jpi, jpj, npb(1:nbpb) ) 
    317308         ! 
     
    332323         CALL tab_1d_2d_2( nbpb, qfvbq      , npb, qfvbq_1d  (1:nbpb)     , jpi, jpj ) 
    333324         CALL tab_1d_2d_2( nbpb, qstoif     , npb, qstbif_1d (1:nbpb)     , jpi, jpj ) 
    334          CALL tab_1d_2d_2( nbpb, rdmicif    , npb, rdmicif_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 ) 
    335327         CALL tab_1d_2d_2( nbpb, dmgwi      , npb, dmgwi_1d  (1:nbpb)     , jpi, jpj ) 
    336          CALL tab_1d_2d_2( nbpb, rdmsnif    , npb, rdmsnif_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 ) 
    337330         CALL tab_1d_2d_2( nbpb, zdvosif    , npb, dvsbq_1d  (1:nbpb)     , jpi, jpj ) 
    338331         CALL tab_1d_2d_2( nbpb, zdvobif    , npb, dvbbq_1d  (1:nbpb)     , jpi, jpj ) 
     
    393386      IF( nbpac > 0 ) THEN 
    394387         ! 
    395          zlicegr(:,:) = rdmicif(:,:)      ! to output the lateral sea-ice growth  
     388         zlicegr(:,:) = rdm_ice(:,:)      ! to output the lateral sea-ice growth  
    396389         !...Put the variable in a 1-D array for lateral accretion 
    397390         CALL tab_2d_1d_2( nbpac, frld_1d   (1:nbpac)     , frld       , jpi, jpj, npac(1:nbpac) ) 
     
    404397         CALL tab_2d_1d_2( nbpac, qcmif_1d  (1:nbpac)     , qcmif      , jpi, jpj, npac(1:nbpac) ) 
    405398         CALL tab_2d_1d_2( nbpac, qstbif_1d (1:nbpac)     , qstoif     , jpi, jpj, npac(1:nbpac) ) 
    406          CALL tab_2d_1d_2( nbpac, rdmicif_1d(1:nbpac)     , rdmicif    , 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) ) 
    407401         CALL tab_2d_1d_2( nbpac, dvlbq_1d  (1:nbpac)     , zdvolif    , jpi, jpj, npac(1:nbpac) ) 
    408402         CALL tab_2d_1d_2( nbpac, tfu_1d    (1:nbpac)     , tfu        , jpi, jpj, npac(1:nbpac) ) 
     
    418412         CALL tab_1d_2d_2( nbpac, tbif(:,:,3), npac(1:nbpac), tbif_1d   (1:nbpac , 3 ), jpi, jpj ) 
    419413         CALL tab_1d_2d_2( nbpac, qstoif     , npac(1:nbpac), qstbif_1d (1:nbpac)     , jpi, jpj ) 
    420          CALL tab_1d_2d_2( nbpac, rdmicif    , npac(1:nbpac), rdmicif_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 ) 
    421416         CALL tab_1d_2d_2( nbpac, zdvolif    , npac(1:nbpac), dvlbq_1d  (1:nbpac)     , jpi, jpj ) 
    422417         ! 
     
    449444      CALL iom_put( 'iceprod_cea' , hicifp (:,:) * zztmp     )   ! Ice produced               [m/s] 
    450445      IF( lk_diaar5 ) THEN 
    451          CALL iom_put( 'snowmel_cea' , rdmsnif(:,:) * zztmp     )   ! Snow melt                  [kg/m2/s] 
     446         CALL iom_put( 'snowmel_cea' , rdm_snw(:,:) * zztmp     )   ! Snow melt                  [kg/m2/s] 
    452447         zztmp = rhoic / rdt_ice 
    453448         CALL iom_put( 'sntoice_cea' , zdvonif(:,:) * zztmp     )   ! Snow to Ice transformation [kg/m2/s] 
    454449         CALL iom_put( 'ticemel_cea' , zdvosif(:,:) * zztmp     )   ! Melt at Sea Ice top        [kg/m2/s] 
    455450         CALL iom_put( 'bicemel_cea' , zdvomif(:,:) * zztmp     )   ! Melt at Sea Ice bottom     [kg/m2/s] 
    456          zlicegr(:,:) = MAX( 0.e0, rdmicif(:,:)-zlicegr(:,:) ) 
    457          CALL iom_put( 'licepro_cea' , zlicegr(:,:) * zztmp     )   ! Latereal sea ice growth    [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] 
    458453      ENDIF 
    459454      ! 
Note: See TracChangeset for help on using the changeset viewer.