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 5051 for branches/2015/dev_r5044_CNRS_LIM3CLEAN/NEMOGCM/NEMO/LIM_SRC_3/limthd.F90 – NEMO

Ignore:
Timestamp:
2015-02-02T18:31:34+01:00 (9 years ago)
Author:
clem
Message:

LIM3 initialization is now called at the same time as other sbc fields

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2015/dev_r5044_CNRS_LIM3CLEAN/NEMOGCM/NEMO/LIM_SRC_3/limthd.F90

    r5049 r5051  
    4949 
    5050   PUBLIC   lim_thd        ! called by limstp module 
    51    PUBLIC   lim_thd_init   ! called by iceini module 
     51   PUBLIC   lim_thd_init   ! called by sbc_lim_init 
    5252 
    5353   !! * Substitutions 
     
    9292      ! 
    9393      REAL(wp) :: zvi_b, zsmv_b, zei_b, zfs_b, zfw_b, zft_b  
    94       REAL(wp) :: zda 
    9594      ! 
    9695      REAL(wp), POINTER, DIMENSION(:,:) ::  zqsr, zqns 
     
    363362            !-------------------------------- 
    364363 
     364            !--------------------------------------! 
     365            ! --- Ice/Snow Temperature profile --- ! 
     366            !--------------------------------------! 
     367            CALL lim_thd_dif( 1, nbpb ) 
     368 
    365369            !---------------------------------! 
    366             ! Ice/Snow Temperature profile    ! 
    367             !---------------------------------! 
    368             CALL lim_thd_dif( 1, nbpb ) 
    369  
    370             !---------------------------------! 
    371             ! Ice/Snow thicnkess              ! 
     370            ! --- Ice/Snow thickness ---      ! 
    372371            !---------------------------------! 
    373372            CALL lim_thd_dh( 1, nbpb )     
     
    377376                                             
    378377            !---------------------------------! 
    379             ! --- Ice salinity --- ! 
     378            ! --- Ice salinity ---            ! 
    380379            !---------------------------------! 
    381380            CALL lim_thd_sal( 1, nbpb )     
    382381 
    383382            !---------------------------------! 
    384             ! --- temperature update --- ! 
     383            ! --- temperature update ---      ! 
    385384            !---------------------------------! 
    386385            CALL lim_thd_temp( 1, nbpb ) 
     386 
     387            !------------------------------------! 
     388            ! --- lateral melting if monocat --- ! 
     389            !------------------------------------! 
     390            IF ( ( ( nn_monocat == 1 ) .OR. ( nn_monocat == 4 ) ) .AND. ( jpl == 1 ) ) THEN 
     391               CALL lim_thd_lam( 1, nbpb ) 
     392            END IF 
    387393 
    388394            !-------------------------------- 
     
    435441              CALL tab_1d_2d( nbpb, hfx_err       , npb, hfx_err_1d(1:nbpb)   , jpi, jpj ) 
    436442              CALL tab_1d_2d( nbpb, hfx_res       , npb, hfx_res_1d(1:nbpb)   , jpi, jpj ) 
    437               CALL tab_1d_2d( nbpb, hfx_err_rem   , npb, hfx_err_rem_1d(1:nbpb)   , jpi, jpj ) 
    438  
    439             IF ( ( ( nn_monocat .EQ. 1 ) .OR. ( nn_monocat .EQ. 4 ) ) .AND. ( jpl == 1 ) ) THEN 
    440               CALL tab_1d_2d( nbpb, dh_i_melt(:,:,jl) , npb, dh_i_melt_1d(1:nbpb) , jpi, jpj ) 
    441             ENDIF 
     443              CALL tab_1d_2d( nbpb, hfx_err_rem   , npb, hfx_err_rem_1d(1:nbpb), jpi, jpj ) 
     444 
     445!clem            IF ( ( ( nn_monocat == 1 ) .OR. ( nn_monocat == 4 ) ) .AND. ( jpl == 1 ) ) THEN 
     446!clem              CALL tab_1d_2d( nbpb, dh_i_melt(:,:,jl) , npb, dh_i_melt_1d(1:nbpb) , jpi, jpj ) 
     447!clem            ENDIF 
    442448            ! 
    443449              CALL tab_1d_2d( nbpb, qns_ice(:,:,jl), npb, qns_ice_1d(1:nbpb) , jpi, jpj) 
     
    477483      !---------------------------------- 
    478484      CALL lim_var_eqv2glo 
    479  
    480       !---------------------------------- 
    481       ! 5.X) Lateral melting 
    482       !---------------------------------- 
    483       IF ( ( ( nn_monocat .EQ. 1 ) .OR. ( nn_monocat .EQ. 4 ) ) .AND. ( jpl == 1 ) ) THEN 
    484  
    485          WRITE(numout,*) ' Lateral melting ON ' 
    486  
    487          ! select points where lateral melting occurs 
    488          jl = 1 
    489  
    490          nbplm = 0 
    491          DO jj = 1, jpj 
    492             DO ji = 1, jpi 
    493                IF ( ( dh_i_melt(ji,jj,jl)                  .LT.-epsi10 ) .AND.    & 
    494      &              ( ht_i(ji,jj,jl) - dh_i_melt(ji,jj,jl) .GT. epsi10 ) .AND.    &  
    495      &              ( ht_i(ji,jj,jl)                       .GT. epsi10 ) ) THEN      
    496                   nbplm   = nbplm  + 1 
    497                   nplm(nbplm) = (jj - 1) * jpi + ji 
    498                ENDIF 
    499             END DO 
    500          END DO 
    501  
    502          IF( nbplm > 0 ) THEN  ! If there is no net melting, do nothing 
    503  
    504             ! Move to 1D arrays 
    505             !------------------------- 
    506  
    507             CALL tab_2d_1d( nbplm, a_i_1d      (1:nbplm), a_i(:,:,jl)       , jpi, jpj, nplm(1:nbplm) ) 
    508             CALL tab_2d_1d( nbplm, ht_i_1d     (1:nbplm), ht_i(:,:,jl)      , jpi, jpj, nplm(1:nbplm) ) 
    509             CALL tab_2d_1d( nbplm, dh_i_melt_1d(1:nbplm), dh_i_melt(:,:,jl) , jpi, jpj, nplm(1:nbplm) ) 
    510  
    511             ! Compute lateral melting (dA = A/2h dh ) 
    512             DO ji = 1, nbplm 
    513                zda        = a_i_1d(ji) * dh_i_melt_1d(ji) / ( 2._wp * ht_i_1d(ji) ) 
    514                a_i_1d(ji) = a_i_1d(ji) + zda 
    515             END DO 
    516  
    517             ! Move back to 2D arrays 
    518             !------------------------- 
    519             CALL tab_1d_2d( nbplm, a_i (:,:,jl)  , nplm, a_i_1d     (1:nbplm)   , jpi, jpj ) 
    520             at_i(:,:) = a_i(:,:,jl) 
    521  
    522          ENDIF 
    523  
    524       ENDIF 
    525485 
    526486      !-------------------------------------------- 
     
    602562   END SUBROUTINE lim_thd_temp 
    603563 
     564   SUBROUTINE lim_thd_lam( kideb, kiut ) 
     565      !!----------------------------------------------------------------------- 
     566      !!                   ***  ROUTINE lim_thd_lam ***  
     567      !!                  
     568      !! ** Purpose :   Lateral melting in case monocategory 
     569      !!                          ( dA = A/2h dh ) 
     570      !!----------------------------------------------------------------------- 
     571      INTEGER, INTENT(in) ::   kideb, kiut   ! bounds for the spatial loop 
     572      INTEGER             ::   ji            ! dummy loop indices 
     573 
     574      WRITE(numout,*) ' Lateral melting ON ' 
     575      DO ji = kideb, kiut 
     576         IF( ht_i_1d(ji) > epsi10 .AND. dh_i_melt_1d(ji) < 0._wp ) THEN      
     577            a_i_1d(ji) = MAX( 0._wp, a_i_1d(ji) + a_i_1d(ji) * dh_i_melt_1d(ji) / ( 2._wp * ht_i_1d(ji) ) )  
     578         END IF 
     579      END DO 
     580      at_i_1d(:) = a_i_1d(:) 
     581       
     582   END SUBROUTINE lim_thd_lam 
     583 
    604584   SUBROUTINE lim_thd_init 
    605585      !!----------------------------------------------------------------------- 
Note: See TracChangeset for help on using the changeset viewer.