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 7510 for branches/2016/dev_v3_6_STABLE_r6506_AGRIF_LIM3/NEMOGCM/NEMO/LIM_SRC_3/limthd.F90 – NEMO

Ignore:
Timestamp:
2016-12-19T16:20:16+01:00 (8 years ago)
Author:
clem
Message:

update version

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2016/dev_v3_6_STABLE_r6506_AGRIF_LIM3/NEMOGCM/NEMO/LIM_SRC_3/limthd.F90

    r6994 r7510  
    2222   USE phycst         ! physical constants 
    2323   USE dom_oce        ! ocean space and time domain variables 
    24    USE ice            ! LIM: sea-ice variables 
     24   USE ice            ! sea-ice variables 
    2525   USE sbc_oce        ! Surface boundary condition: ocean fields 
    2626   USE sbc_ice        ! Surface boundary condition: ice fields 
    27    USE thd_ice        ! LIM thermodynamic sea-ice variables 
    28    USE limthd_dif     ! LIM: thermodynamics, vertical diffusion 
    29    USE limthd_dh      ! LIM: thermodynamics, ice and snow thickness variation 
    30    USE limthd_da      ! LIM: thermodynamics, lateral melting 
    31    USE limthd_sal     ! LIM: thermodynamics, ice salinity 
    32    USE limthd_ent     ! LIM: thermodynamics, ice enthalpy redistribution 
    33    USE limthd_lac     ! LIM-3 lateral accretion 
     27   USE thd_ice        ! thermodynamic sea-ice variables 
     28   USE limthd_dif     ! vertical diffusion 
     29   USE limthd_dh      ! ice-snow growth and melt 
     30   USE limthd_da      ! lateral melting 
     31   USE limthd_sal     ! ice salinity 
     32   USE limthd_ent     ! ice enthalpy redistribution 
     33   USE limthd_lac     ! lateral accretion 
    3434   USE limitd_th      ! remapping thickness distribution 
    35    USE limtab         ! LIM: 1D <==> 2D transformation 
    36    USE limvar         ! LIM: sea-ice variables 
     35   USE limtab         ! 1D <==> 2D transformation 
     36   USE limvar         ! 
     37   USE limcons        ! conservation tests 
     38   USE limctl         ! control print 
     39   ! 
     40   USE in_out_manager ! I/O manager 
    3741   USE lbclnk         ! lateral boundary condition - MPP links 
    3842   USE lib_mpp        ! MPP library 
    3943   USE wrk_nemo       ! work arrays 
    40    USE in_out_manager ! I/O manager 
    4144   USE lib_fortran    ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined)   
    4245   USE timing         ! Timing 
    43    USE limcons        ! conservation tests 
    44    USE limctl 
    4546 
    4647   IMPLICIT NONE 
     
    8081      !!--------------------------------------------------------------------- 
    8182      INTEGER, INTENT(in) :: kt    ! number of iteration 
    82       !! 
     83      ! 
    8384      INTEGER  :: ji, jj, jk, jl   ! dummy loop indices 
    8485      INTEGER  :: nbpb             ! nb of icy pts for vertical thermo calculations 
    85       INTEGER  :: ii, ij           ! temporary dummy loop index 
    8686      REAL(wp) :: zfric_u, zqld, zqfr 
    8787      REAL(wp) :: zvi_b, zsmv_b, zei_b, zfs_b, zfw_b, zft_b  
     
    9292      !!------------------------------------------------------------------- 
    9393 
    94       IF( nn_timing == 1 )  CALL timing_start('limthd') 
     94      IF( nn_timing == 1 )   CALL timing_start('limthd') 
    9595 
    9696      CALL wrk_alloc( jpi,jpj, zu_io, zv_io, zfric ) 
     
    224224         END DO 
    225225      END DO 
    226           
     226 
    227227      !------------------------------------------------------------------------------! 
    228228      ! Thermodynamic computation (only on grid points covered by ice) 
    229229      !------------------------------------------------------------------------------! 
     230 
    230231      DO jl = 1, jpl      !loop over ice categories 
    231232 
     
    358359      !!------------------------------------------------------------------- 
    359360      INTEGER, INTENT(in) ::   kideb, kiut   ! bounds for the spatial loop 
    360       !! 
     361      ! 
    361362      INTEGER  ::   ji, jk   ! dummy loop indices 
    362363      REAL(wp) ::   ztmelts, zaaa, zbbb, zccc, zdiscrim  ! local scalar  
     
    378379         END DO  
    379380      END DO  
    380  
     381      ! 
    381382   END SUBROUTINE lim_thd_temp 
     383 
    382384 
    383385   SUBROUTINE lim_thd_lam( kideb, kiut ) 
     
    389391      !!----------------------------------------------------------------------- 
    390392      INTEGER, INTENT(in) ::   kideb, kiut        ! bounds for the spatial loop 
    391       INTEGER             ::   ji                 ! dummy loop indices 
    392       REAL(wp)            ::   zhi_bef            ! ice thickness before thermo 
    393       REAL(wp)            ::   zdh_mel, zda_mel   ! net melting 
    394       REAL(wp)            ::   zvi, zvs           ! ice/snow volumes  
    395  
     393      ! 
     394      INTEGER  ::   ji                 ! dummy loop indices 
     395      REAL(wp) ::   zhi_bef            ! ice thickness before thermo 
     396      REAL(wp) ::   zdh_mel, zda_mel   ! net melting 
     397      REAL(wp) ::   zvi, zvs           ! ice/snow volumes  
     398      !!----------------------------------------------------------------------- 
     399      ! 
    396400      DO ji = kideb, kiut 
    397401         zdh_mel = MIN( 0._wp, dh_i_surf(ji) + dh_i_bott(ji) + dh_snowice(ji) + dh_i_sub(ji) ) 
     
    411415         END IF 
    412416      END DO 
    413        
     417      ! 
    414418   END SUBROUTINE lim_thd_lam 
     419 
    415420 
    416421   SUBROUTINE lim_thd_1d2d( nbpb, jl, kn ) 
     
    420425      !! ** Purpose :   move arrays from 1d to 2d and the reverse 
    421426      !!----------------------------------------------------------------------- 
    422       INTEGER, INTENT(in) ::   kn       ! 1= from 2D to 1D 
    423                                         ! 2= from 1D to 2D 
     427      INTEGER, INTENT(in) ::   kn       ! 1= from 2D to 1D   ;   2= from 1D to 2D 
    424428      INTEGER, INTENT(in) ::   nbpb     ! size of 1D arrays 
    425429      INTEGER, INTENT(in) ::   jl       ! ice cat 
     430      ! 
    426431      INTEGER             ::   jk       ! dummy loop indices 
    427  
     432      !!----------------------------------------------------------------------- 
     433      ! 
    428434      SELECT CASE( kn ) 
    429  
    430       CASE( 1 ) 
    431  
     435      ! 
     436      CASE( 1 )            ! from 2D to 1D 
     437         ! 
    432438         CALL tab_2d_1d( nbpb, at_i_1d     (1:nbpb), at_i            , jpi, jpj, npb(1:nbpb) ) 
    433439         CALL tab_2d_1d( nbpb, a_i_1d      (1:nbpb), a_i(:,:,jl)     , jpi, jpj, npb(1:nbpb) ) 
    434440         CALL tab_2d_1d( nbpb, ht_i_1d     (1:nbpb), ht_i(:,:,jl)    , jpi, jpj, npb(1:nbpb) ) 
    435441         CALL tab_2d_1d( nbpb, ht_s_1d     (1:nbpb), ht_s(:,:,jl)    , jpi, jpj, npb(1:nbpb) ) 
    436           
     442         ! 
    437443         CALL tab_2d_1d( nbpb, t_su_1d     (1:nbpb), t_su(:,:,jl)    , jpi, jpj, npb(1:nbpb) ) 
    438444         CALL tab_2d_1d( nbpb, sm_i_1d     (1:nbpb), sm_i(:,:,jl)    , jpi, jpj, npb(1:nbpb) ) 
     
    446452            CALL tab_2d_1d( nbpb, s_i_1d(1:nbpb,jk), s_i(:,:,jk,jl)  , jpi, jpj, npb(1:nbpb) ) 
    447453         END DO 
    448           
     454         ! 
    449455         CALL tab_2d_1d( nbpb, qprec_ice_1d(1:nbpb), qprec_ice(:,:) , jpi, jpj, npb(1:nbpb) ) 
    450456         CALL tab_2d_1d( nbpb, qevap_ice_1d(1:nbpb), qevap_ice(:,:,jl) , jpi, jpj, npb(1:nbpb) ) 
     
    461467         CALL tab_2d_1d( nbpb, qlead_1d   (1:nbpb), qlead           , jpi, jpj, npb(1:nbpb) ) 
    462468         CALL tab_2d_1d( nbpb, fhld_1d    (1:nbpb), fhld            , jpi, jpj, npb(1:nbpb) ) 
    463           
     469         ! 
    464470         CALL tab_2d_1d( nbpb, wfx_snw_1d (1:nbpb), wfx_snw         , jpi, jpj, npb(1:nbpb) ) 
    465471         CALL tab_2d_1d( nbpb, wfx_sub_1d (1:nbpb), wfx_sub         , jpi, jpj, npb(1:nbpb) ) 
    466           
     472         ! 
    467473         CALL tab_2d_1d( nbpb, wfx_bog_1d (1:nbpb), wfx_bog         , jpi, jpj, npb(1:nbpb) ) 
    468474         CALL tab_2d_1d( nbpb, wfx_bom_1d (1:nbpb), wfx_bom         , jpi, jpj, npb(1:nbpb) ) 
     
    471477         CALL tab_2d_1d( nbpb, wfx_res_1d (1:nbpb), wfx_res         , jpi, jpj, npb(1:nbpb) ) 
    472478         CALL tab_2d_1d( nbpb, wfx_spr_1d (1:nbpb), wfx_spr         , jpi, jpj, npb(1:nbpb) ) 
    473           
     479         ! 
    474480         CALL tab_2d_1d( nbpb, sfx_bog_1d (1:nbpb), sfx_bog         , jpi, jpj, npb(1:nbpb) ) 
    475481         CALL tab_2d_1d( nbpb, sfx_bom_1d (1:nbpb), sfx_bom         , jpi, jpj, npb(1:nbpb) ) 
     
    479485         CALL tab_2d_1d( nbpb, sfx_res_1d (1:nbpb), sfx_res         , jpi, jpj, npb(1:nbpb) ) 
    480486         CALL tab_2d_1d( nbpb, sfx_sub_1d (1:nbpb), sfx_sub         , jpi, jpj,npb(1:nbpb) ) 
    481   
     487         ! 
    482488         CALL tab_2d_1d( nbpb, hfx_thd_1d (1:nbpb), hfx_thd         , jpi, jpj, npb(1:nbpb) ) 
    483489         CALL tab_2d_1d( nbpb, hfx_spr_1d (1:nbpb), hfx_spr         , jpi, jpj, npb(1:nbpb) ) 
     
    493499         CALL tab_2d_1d( nbpb, hfx_err_dif_1d (1:nbpb), hfx_err_dif , jpi, jpj, npb(1:nbpb) ) 
    494500         CALL tab_2d_1d( nbpb, hfx_err_rem_1d (1:nbpb), hfx_err_rem , jpi, jpj, npb(1:nbpb) ) 
    495  
    496       CASE( 2 ) 
    497  
     501         ! 
     502      CASE( 2 )            ! from 1D to 2D 
     503         ! 
    498504         CALL tab_1d_2d( nbpb, at_i          , npb, at_i_1d    (1:nbpb)   , jpi, jpj ) 
    499505         CALL tab_1d_2d( nbpb, ht_i(:,:,jl)  , npb, ht_i_1d    (1:nbpb)   , jpi, jpj ) 
     
    512518         END DO 
    513519         CALL tab_1d_2d( nbpb, qlead         , npb, qlead_1d  (1:nbpb)   , jpi, jpj ) 
    514           
     520         ! 
    515521         CALL tab_1d_2d( nbpb, wfx_snw       , npb, wfx_snw_1d(1:nbpb)   , jpi, jpj ) 
    516522         CALL tab_1d_2d( nbpb, wfx_sub       , npb, wfx_sub_1d(1:nbpb)   , jpi, jpj ) 
    517           
     523         ! 
    518524         CALL tab_1d_2d( nbpb, wfx_bog       , npb, wfx_bog_1d(1:nbpb)   , jpi, jpj ) 
    519525         CALL tab_1d_2d( nbpb, wfx_bom       , npb, wfx_bom_1d(1:nbpb)   , jpi, jpj ) 
     
    522528         CALL tab_1d_2d( nbpb, wfx_res       , npb, wfx_res_1d(1:nbpb)   , jpi, jpj ) 
    523529         CALL tab_1d_2d( nbpb, wfx_spr       , npb, wfx_spr_1d(1:nbpb)   , jpi, jpj ) 
    524           
     530         ! 
    525531         CALL tab_1d_2d( nbpb, sfx_bog       , npb, sfx_bog_1d(1:nbpb)   , jpi, jpj ) 
    526532         CALL tab_1d_2d( nbpb, sfx_bom       , npb, sfx_bom_1d(1:nbpb)   , jpi, jpj ) 
     
    530536         CALL tab_1d_2d( nbpb, sfx_bri       , npb, sfx_bri_1d(1:nbpb)   , jpi, jpj ) 
    531537         CALL tab_1d_2d( nbpb, sfx_sub       , npb, sfx_sub_1d(1:nbpb)   , jpi, jpj )         
    532   
     538         ! 
    533539         CALL tab_1d_2d( nbpb, hfx_thd       , npb, hfx_thd_1d(1:nbpb)   , jpi, jpj ) 
    534540         CALL tab_1d_2d( nbpb, hfx_spr       , npb, hfx_spr_1d(1:nbpb)   , jpi, jpj ) 
     
    549555         !          
    550556      END SELECT 
    551  
     557      ! 
    552558   END SUBROUTINE lim_thd_1d2d 
    553559 
     
    580586902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namicethd in configuration namelist', lwp ) 
    581587      IF(lwm) WRITE ( numoni, namicethd ) 
    582       ! 
    583       IF ( ( jpl > 1 ) .AND. ( nn_monocat == 1 ) ) THEN  
    584          nn_monocat = 0 
    585          IF(lwp) WRITE(numout, *) '   nn_monocat must be 0 in multi-category case ' 
    586       ENDIF 
    587588      ! 
    588589      IF(lwp) THEN                          ! control print 
     
    615616         WRITE(numout,*)'      check heat conservation in the ice/snow                 con_i        = ', con_i 
    616617      ENDIF 
     618      IF( jpl > 1 .AND. nn_monocat == 1 ) THEN  
     619         nn_monocat = 0 
     620         IF(lwp) WRITE(numout,*) 
     621         IF(lwp) WRITE(numout,*) '   nn_monocat forced to 0 as jpl>1, i.e. multi-category case is chosen' 
     622      ENDIF 
    617623      ! 
    618624   END SUBROUTINE lim_thd_init 
Note: See TracChangeset for help on using the changeset viewer.