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 4672 for branches/2013/dev_r4028_CNRS_LIM3/NEMOGCM/NEMO/LIM_SRC_3/limthd_dif.F90 – NEMO

Ignore:
Timestamp:
2014-06-17T17:06:59+02:00 (10 years ago)
Author:
clem
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2013/dev_r4028_CNRS_LIM3/NEMOGCM/NEMO/LIM_SRC_3/limthd_dif.F90

    r4649 r4672  
    4040CONTAINS 
    4141 
    42    SUBROUTINE lim_thd_dif( kideb , kiut , jl ) 
     42   SUBROUTINE lim_thd_dif( kideb , kiut ) 
    4343      !!------------------------------------------------------------------ 
    4444      !!                ***  ROUTINE lim_thd_dif  *** 
     
    9393      !!------------------------------------------------------------------ 
    9494      INTEGER , INTENT(in) ::   kideb, kiut   ! Start/End point on which the  the computation is applied 
    95       INTEGER , INTENT(in) ::   jl            ! Thickness cateogry number 
    9695 
    9796      !! * Local variables 
     
    146145      REAL(wp), POINTER, DIMENSION(:,:) ::   zdiagbis 
    147146      REAL(wp), POINTER, DIMENSION(:,:,:) ::   ztrid   ! tridiagonal system terms 
     147      ! diag errors on heat 
     148      REAL(wp), POINTER, DIMENSION(:) :: zdq, zq_ini 
     149      REAL(wp)                        :: zhfx_err 
    148150      !!------------------------------------------------------------------      
    149151      !  
     
    155157      CALL wrk_alloc( jpij, jkmax+2, zindterm, zindtbis, zdiagbis  ) 
    156158      CALL wrk_alloc( jpij, jkmax+2, 3, ztrid ) 
     159 
     160      CALL wrk_alloc( jpij, zdq, zq_ini ) 
     161 
     162      ! --- diag error on heat diffusion - PART 1 --- ! 
     163      zdq(:) = 0._wp ; zq_ini(:) = 0._wp       
     164      DO ji = kideb, kiut 
     165         zq_ini(ji) = ( SUM( q_i_b(ji,1:nlay_i) ) * ht_i_b(ji) / REAL( nlay_i ) +  & 
     166            &           SUM( q_s_b(ji,1:nlay_s) ) * ht_s_b(ji) / REAL( nlay_s ) )  
     167      END DO 
    157168 
    158169      !------------------------------------------------------------------------------! 
     
    671682         DO layer  =  1, nlay_s 
    672683            DO ji = kideb , kiut 
    673                ii = MOD( npb(ji) - 1, jpi ) + 1 
    674                ij = ( npb(ji) - 1 ) / jpi + 1 
    675684               t_s_b(ji,layer) = MAX(  MIN( t_s_b(ji,layer), rtt ), 190._wp  ) 
    676685               zerrit(ji)      = MAX(zerrit(ji),ABS(t_s_b(ji,layer) - ztstemp(ji,layer))) 
     
    722731         IF( t_su_b(ji) < rtt ) THEN  ! case T_su < 0degC 
    723732            hfx_dif_1d(ji) = hfx_dif_1d(ji) + ( qns_ice_1d(ji) + qsr_ice_1d(ji) - zradtr_i(ji,nlay_i) - fc_bo_i(ji) ) * a_i_b(ji) 
    724          ELSE                                    ! case T_su = 0degC 
     733         ELSE                         ! case T_su = 0degC 
    725734            hfx_dif_1d(ji) = hfx_dif_1d(ji) + ( fc_su(ji) + i0(ji) * qsr_ice_1d(ji) - zradtr_i(ji,nlay_i) - fc_bo_i(ji) ) * a_i_b(ji) 
    726735         ENDIF 
    727736      END DO 
    728737 
     738      ! --- computes sea ice energy of melting compulsory for limthd_dh --- ! 
     739      CALL lim_thd_enmelt( kideb, kiut ) 
     740 
     741      ! --- diag error on heat diffusion - PART 2 --- ! 
     742      DO ji = kideb, kiut 
     743         zdq(ji)        = - zq_ini(ji) + ( SUM( q_i_b(ji,1:nlay_i) ) * ht_i_b(ji) / REAL( nlay_i ) +  & 
     744            &                              SUM( q_s_b(ji,1:nlay_s) ) * ht_s_b(ji) / REAL( nlay_s ) ) 
     745         zhfx_err    = ( fc_su(ji) + i0(ji) * qsr_ice_1d(ji) - zradtr_i(ji,nlay_i) - fc_bo_i(ji) + zdq(ji) * r1_rdtice )  
     746         hfx_err_1d(ji) = hfx_err_1d(ji) + zhfx_err * a_i_b(ji) 
     747         ! --- correction of qns_ice and surface conduction flux --- ! 
     748         qns_ice_1d(ji) = qns_ice_1d(ji) - zhfx_err  
     749         fc_su     (ji) = fc_su     (ji) - zhfx_err  
     750         ! --- Heat flux at the ice surface in W.m-2 --- ! 
     751         ii = MOD( npb(ji) - 1, jpi ) + 1 ; ij = ( npb(ji) - 1 ) / jpi + 1 
     752         hfx_in (ii,ij) = hfx_in (ii,ij) + a_i_b(ji) * ( qsr_ice_1d(ji) + qns_ice_1d(ji) ) 
     753      END DO 
     754    
    729755      ! 
    730756      CALL wrk_dealloc( jpij, numeqmin, numeqmax, isnow ) 
     
    735761      CALL wrk_dealloc( jpij, jkmax+2, zindterm, zindtbis, zdiagbis ) 
    736762      CALL wrk_dealloc( jpij, jkmax+2, 3, ztrid ) 
     763      CALL wrk_dealloc( jpij, zdq, zq_ini ) 
    737764 
    738765   END SUBROUTINE lim_thd_dif 
     766 
     767   SUBROUTINE lim_thd_enmelt( kideb, kiut ) 
     768      !!----------------------------------------------------------------------- 
     769      !!                   ***  ROUTINE lim_thd_enmelt ***  
     770      !!                  
     771      !! ** Purpose :   Computes sea ice energy of melting q_i (J.m-3) from temperature 
     772      !! 
     773      !! ** Method  :   Formula (Bitz and Lipscomb, 1999) 
     774      !!------------------------------------------------------------------- 
     775      INTEGER, INTENT(in) ::   kideb, kiut   ! bounds for the spatial loop 
     776      ! 
     777      INTEGER  ::   ji, jk   ! dummy loop indices 
     778      REAL(wp) ::   ztmelts, zindb  ! local scalar  
     779      !!------------------------------------------------------------------- 
     780      ! 
     781      DO jk = 1, nlay_i             ! Sea ice energy of melting 
     782         DO ji = kideb, kiut 
     783            ztmelts      = - tmut  * s_i_b(ji,jk) + rtt  
     784            zindb        = MAX( 0._wp , SIGN( 1._wp , -(t_i_b(ji,jk) - rtt) - epsi10 ) ) 
     785            q_i_b(ji,jk) = rhoic * ( cpic * ( ztmelts - t_i_b(ji,jk) )                                             & 
     786               &                   + lfus * ( 1.0 - zindb * ( ztmelts-rtt ) / MIN( t_i_b(ji,jk)-rtt, -epsi10 ) )   & 
     787               &                   - rcp  *                 ( ztmelts-rtt )  )  
     788         END DO 
     789      END DO 
     790      DO jk = 1, nlay_s             ! Snow energy of melting 
     791         DO ji = kideb, kiut 
     792            q_s_b(ji,jk) = rhosn * ( cpic * ( rtt - t_s_b(ji,jk) ) + lfus ) 
     793         END DO 
     794      END DO 
     795      ! 
     796   END SUBROUTINE lim_thd_enmelt 
    739797 
    740798#else 
Note: See TracChangeset for help on using the changeset viewer.