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 8325 for branches/2017/dev_r8183_ICEMODEL/NEMOGCM – NEMO

Ignore:
Timestamp:
2017-07-12T16:51:20+02:00 (7 years ago)
Author:
clem
Message:

STEP4 (1): put all thermodynamics in 1D

Location:
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/ice.F90

    r8321 r8325  
    110110   !! oa_i        !      -      !    Sea ice areal age content    | s     | 
    111111   !! e_i         !      -      !    Ice enthalpy                 | J/m2  |  
    112    !!      -      ! q_i_1d      !    Ice enthalpy per unit vol.   | J/m3  |  
     112   !!      -      ! e_i_1d      !    Ice enthalpy per unit vol.   | J/m3  |  
    113113   !! e_s         !      -      !    Snow enthalpy                | J/m2  |  
    114    !!      -      ! q_s_1d      !    Snow enthalpy per unit vol.  | J/m3  |  
     114   !!      -      ! e_s_1d      !    Snow enthalpy per unit vol.  | J/m3  |  
    115115   !!                                                                     | 
    116116   !!-------------|-------------|---------------------------------|-------| 
  • branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/limthd.F90

    r8321 r8325  
    131131      CALL lbc_lnk( zfric, 'T',  1. ) 
    132132      ! 
    133       !----------------------------------! 
    134       ! Initialization and units change 
    135       !----------------------------------! 
    136       ftr_ice(:,:,:) = 0._wp  ! part of solar radiation transmitted through the ice 
    137  
    138       ! Change the units of heat content; from J/m2 to J/m3 
    139       DO jl = 1, jpl 
    140          DO jk = 1, nlay_i 
    141             DO jj = 1, jpj 
    142                DO ji = 1, jpi 
    143                   rswitch = MAX(  0._wp , SIGN( 1._wp , v_i(ji,jj,jl) - epsi20 )  ) 
    144                   !Energy of melting q(S,T) [J.m-3] 
    145                   e_i(ji,jj,jk,jl) = rswitch * e_i(ji,jj,jk,jl) / MAX( v_i(ji,jj,jl) , epsi20 ) * REAL( nlay_i ) 
    146                END DO 
    147             END DO 
    148          END DO 
    149          DO jk = 1, nlay_s 
    150             DO jj = 1, jpj 
    151                DO ji = 1, jpi 
    152                   rswitch = MAX(  0._wp , SIGN( 1._wp , v_s(ji,jj,jl) - epsi20 )  ) 
    153                   !Energy of melting q(S,T) [J.m-3] 
    154                   e_s(ji,jj,jk,jl) = rswitch * e_s(ji,jj,jk,jl) / MAX( v_s(ji,jj,jl) , epsi20 ) * REAL( nlay_s ) 
    155                END DO 
    156             END DO 
    157          END DO 
    158       END DO 
     133      ftr_ice(:,:,:) = 0._wp  ! initialization (part of solar radiation transmitted through the ice) 
    159134 
    160135      !--------------------------------------------------------------------! 
     
    269244                              CALL lim_thd_1d2d( nbpb, jl, 1 )               ! --- Move to 1D arrays --- ! 
    270245            ! 
     246            DO jk = 1, nlay_i                                                ! --- Change units from J/m2 to J/m3 --- ! 
     247               WHERE( ht_i_1d(:)>0._wp ) e_i_1d(:,jk) = e_i_1d(:,jk) / (ht_i_1d(:) * a_i_1d(:)) * nlay_i 
     248            ENDDO 
     249            DO jk = 1, nlay_s 
     250               WHERE( ht_s_1d(:)>0._wp ) e_s_1d(:,jk) = e_s_1d(:,jk) / (ht_s_1d(:) * a_i_1d(:)) * nlay_s 
     251            ENDDO 
     252            ! 
    271253            IF( ln_limdH )    CALL lim_thd_dif( 1, nbpb )                    ! --- Ice/Snow Temperature profile --- ! 
    272254            ! 
    273255            IF( ln_limdH )    CALL lim_thd_dh( 1, nbpb )                     ! --- Ice/Snow thickness --- !     
    274256            ! 
    275             IF( ln_limdH )    CALL lim_thd_ent( 1, nbpb, q_i_1d(1:nbpb,:) )  ! --- Ice enthalpy remapping --- ! 
     257            IF( ln_limdH )    CALL lim_thd_ent( 1, nbpb, e_i_1d(1:nbpb,:) )  ! --- Ice enthalpy remapping --- ! 
    276258            ! 
    277259                              CALL lim_thd_sal( 1, nbpb )                    ! --- Ice salinity --- !     
     
    285267            END IF 
    286268            ! 
     269            DO jk = 1, nlay_i                                                ! --- Change units from J/m3 to J/m2 --- ! 
     270               e_i_1d(:,jk) = e_i_1d(:,jk) * ht_i_1d(:) * a_i_1d(:) * r1_nlay_i 
     271            ENDDO 
     272            DO jk = 1, nlay_s 
     273               e_s_1d(:,jk) = e_s_1d(:,jk) * ht_s_1d(:) * a_i_1d(:) * r1_nlay_s 
     274            ENDDO 
     275            ! 
    287276                              CALL lim_thd_1d2d( nbpb, jl, 2 )               ! --- Move to 2D arrays --- ! 
    288277            ! 
     
    294283      IF( ln_limdA)           CALL lim_thd_da                                ! --- lateral melting --- ! 
    295284 
    296       ! Enthalpies are global variables we have to readjust the units (heat content in J/m2) 
    297       DO jl = 1, jpl 
    298          DO jk = 1, nlay_i 
    299             e_i(:,:,jk,jl) = e_i(:,:,jk,jl) * a_i(:,:,jl) * ht_i(:,:,jl) * r1_nlay_i 
    300          END DO 
    301          DO jk = 1, nlay_s 
    302             e_s(:,:,jk,jl) = e_s(:,:,jk,jl) * a_i(:,:,jl) * ht_s(:,:,jl) * r1_nlay_s 
    303          END DO 
    304       END DO 
    305   
    306285      ! Change thickness to volume 
    307286      v_i(:,:,:)   = ht_i(:,:,:) * a_i(:,:,:) 
     
    375354            ! Conversion q(S,T) -> T (second order equation) 
    376355            zaaa          =  cpic 
    377             zbbb          =  ( rcp - cpic ) * ( ztmelts - rt0 ) + q_i_1d(ji,jk) * r1_rhoic - lfus 
     356            zbbb          =  ( rcp - cpic ) * ( ztmelts - rt0 ) + e_i_1d(ji,jk) * r1_rhoic - lfus 
    378357            zccc          =  lfus * ( ztmelts - rt0 ) 
    379358            zdiscrim      =  SQRT( MAX( zbbb * zbbb - 4._wp * zaaa * zccc, 0._wp ) ) 
     
    451430         DO jk = 1, nlay_s 
    452431            CALL tab_2d_1d( nbpb, t_s_1d(1:nbpb,jk), t_s(:,:,jk,jl)  , jpi, jpj, npb(1:nbpb) ) 
    453             CALL tab_2d_1d( nbpb, q_s_1d(1:nbpb,jk), e_s(:,:,jk,jl)  , jpi, jpj, npb(1:nbpb) ) 
     432            CALL tab_2d_1d( nbpb, e_s_1d(1:nbpb,jk), e_s(:,:,jk,jl)  , jpi, jpj, npb(1:nbpb) ) 
    454433         END DO 
    455434         DO jk = 1, nlay_i 
    456435            CALL tab_2d_1d( nbpb, t_i_1d(1:nbpb,jk), t_i(:,:,jk,jl)  , jpi, jpj, npb(1:nbpb) ) 
    457             CALL tab_2d_1d( nbpb, q_i_1d(1:nbpb,jk), e_i(:,:,jk,jl)  , jpi, jpj, npb(1:nbpb) ) 
     436            CALL tab_2d_1d( nbpb, e_i_1d(1:nbpb,jk), e_i(:,:,jk,jl)  , jpi, jpj, npb(1:nbpb) ) 
    458437            CALL tab_2d_1d( nbpb, s_i_1d(1:nbpb,jk), s_i(:,:,jk,jl)  , jpi, jpj, npb(1:nbpb) ) 
    459438         END DO 
     
    523502         DO jk = 1, nlay_s 
    524503            CALL tab_1d_2d( nbpb, t_s(:,:,jk,jl), npb, t_s_1d     (1:nbpb,jk), jpi, jpj) 
    525             CALL tab_1d_2d( nbpb, e_s(:,:,jk,jl), npb, q_s_1d     (1:nbpb,jk), jpi, jpj) 
     504            CALL tab_1d_2d( nbpb, e_s(:,:,jk,jl), npb, e_s_1d     (1:nbpb,jk), jpi, jpj) 
    526505         END DO 
    527506         DO jk = 1, nlay_i 
    528507            CALL tab_1d_2d( nbpb, t_i(:,:,jk,jl), npb, t_i_1d     (1:nbpb,jk), jpi, jpj) 
    529             CALL tab_1d_2d( nbpb, e_i(:,:,jk,jl), npb, q_i_1d     (1:nbpb,jk), jpi, jpj) 
     508            CALL tab_1d_2d( nbpb, e_i(:,:,jk,jl), npb, e_i_1d     (1:nbpb,jk), jpi, jpj) 
    530509            CALL tab_1d_2d( nbpb, s_i(:,:,jk,jl), npb, s_i_1d     (1:nbpb,jk), jpi, jpj) 
    531510         END DO 
  • branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/limthd_da.F90

    r7753 r8325  
    150150                
    151151               ! Contribution to heat flux into the ocean [W.m-2], <0   
    152                hfx_thd(ji,jj) = hfx_thd(ji,jj) + zda * r1_rdtice * ( ht_i(ji,jj,jl) * SUM( e_i(ji,jj,:,jl) ) * r1_nlay_i  & 
    153                   &                                                + ht_s(ji,jj,jl) *      e_s(ji,jj,1,jl)   * r1_nlay_s ) 
     152!clemX               hfx_thd(ji,jj) = hfx_thd(ji,jj) + zda * r1_rdtice * ( ht_i(ji,jj,jl) * SUM( e_i(ji,jj,:,jl) ) * r1_nlay_i  & 
     153!                  &                                                + ht_s(ji,jj,jl) *      e_s(ji,jj,1,jl)   * r1_nlay_s ) 
     154               hfx_thd(ji,jj) = hfx_thd(ji,jj) + rswitch * zda_tot(ji,jj) / MAX( at_i(ji,jj), epsi10 )  & 
     155                  &                                      * r1_rdtice * ( SUM( e_i(ji,jj,:,jl) ) + e_s(ji,jj,1,jl) ) 
    154156                
    155157               ! Contribution to mass flux 
  • branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/limthd_dh.F90

    r8316 r8325  
    104104      INTEGER , POINTER, DIMENSION(:,:) ::   icount    ! number of layers vanished by melting  
    105105 
    106       REAL(wp), POINTER, DIMENSION(:) ::   zqh_i       ! total ice heat content  (J.m-2) 
     106      REAL(wp), POINTER, DIMENSION(:) ::   zeh_i       ! total ice heat content  (J.m-2) 
    107107      REAL(wp), POINTER, DIMENSION(:) ::   zsnw        ! distribution of snow after wind blowing 
    108108 
     
    121121 
    122122      CALL wrk_alloc( jpij, zqprec, zq_su, zq_bo, zf_tt, zq_rema, zsnw, zevap_rema ) 
    123       CALL wrk_alloc( jpij, zdh_s_mel, zdh_s_pre, zdh_s_sub, zqh_i ) 
     123      CALL wrk_alloc( jpij, zdh_s_mel, zdh_s_pre, zdh_s_sub, zeh_i ) 
    124124      CALL wrk_alloc( jpij, nlay_i, zdeltah, zh_i ) 
    125125      CALL wrk_alloc( jpij, nlay_i, icount ) 
     
    127127      zqprec   (:) = 0._wp ; zq_su    (:) = 0._wp ; zq_bo    (:) = 0._wp ; zf_tt(:) = 0._wp 
    128128      zq_rema  (:) = 0._wp ; zsnw     (:) = 0._wp ; zevap_rema(:) = 0._wp ; 
    129       zdh_s_mel(:) = 0._wp ; zdh_s_pre(:) = 0._wp ; zdh_s_sub(:) = 0._wp ; zqh_i(:) = 0._wp 
     129      zdh_s_mel(:) = 0._wp ; zdh_s_pre(:) = 0._wp ; zdh_s_sub(:) = 0._wp ; zeh_i(:) = 0._wp 
    130130 
    131131      zdeltah(:,:) = 0._wp ; zh_i(:,:) = 0._wp        
     
    134134      ! Initialize enthalpy at nlay_i+1 
    135135      DO ji = kideb, kiut 
    136          q_i_1d(ji,nlay_i+1) = 0._wp 
     136         e_i_1d(ji,nlay_i+1) = 0._wp 
    137137      END DO 
    138138 
    139139      ! initialize layer thicknesses and enthalpies 
    140140      h_i_old (:,0:nlay_i+1) = 0._wp 
    141       qh_i_old(:,0:nlay_i+1) = 0._wp 
     141      eh_i_old(:,0:nlay_i+1) = 0._wp 
    142142      DO jk = 1, nlay_i 
    143143         DO ji = kideb, kiut 
    144144            h_i_old (ji,jk) = ht_i_1d(ji) * r1_nlay_i 
    145             qh_i_old(ji,jk) = q_i_1d(ji,jk) * h_i_old(ji,jk) 
     145            eh_i_old(ji,jk) = e_i_1d(ji,jk) * h_i_old(ji,jk) 
    146146         ENDDO 
    147147      ENDDO 
     
    167167         IF( t_s_1d(ji,1) > rt0 ) THEN !!! Internal melting 
    168168            ! Contribution to heat flux to the ocean [W.m-2], < 0   
    169             hfx_res_1d(ji) = hfx_res_1d(ji) + q_s_1d(ji,1) * ht_s_1d(ji) * a_i_1d(ji) * r1_rdtice 
     169            hfx_res_1d(ji) = hfx_res_1d(ji) + e_s_1d(ji,1) * ht_s_1d(ji) * a_i_1d(ji) * r1_rdtice 
    170170            ! Contribution to mass flux 
    171171            wfx_snw_sum_1d(ji) = wfx_snw_sum_1d(ji) + rhosn * ht_s_1d(ji) * a_i_1d(ji) * r1_rdtice 
    172172            ! updates 
    173173            ht_s_1d(ji)   = 0._wp 
    174             q_s_1d (ji,1) = 0._wp 
     174            e_s_1d (ji,1) = 0._wp 
    175175            t_s_1d (ji,1) = rt0 
    176176         END IF 
     
    184184         DO ji = kideb, kiut 
    185185            zh_i(ji,jk) = ht_i_1d(ji) * r1_nlay_i 
    186             zqh_i(ji)   = zqh_i(ji) + q_i_1d(ji,jk) * zh_i(ji,jk) 
     186            zeh_i(ji)   = zeh_i(ji) + e_i_1d(ji,jk) * zh_i(ji,jk) 
    187187         END DO 
    188188      END DO 
     
    248248            ! thickness change 
    249249            rswitch          = 1._wp - MAX( 0._wp, SIGN( 1._wp, - ht_s_1d(ji) ) )  
    250             rswitch          = rswitch * ( MAX( 0._wp, SIGN( 1._wp, q_s_1d(ji,jk) - epsi20 ) ) )  
    251             zdeltah  (ji,jk) = - rswitch * zq_su(ji) / MAX( q_s_1d(ji,jk), epsi20 ) 
     250            rswitch          = rswitch * ( MAX( 0._wp, SIGN( 1._wp, e_s_1d(ji,jk) - epsi20 ) ) )  
     251            zdeltah  (ji,jk) = - rswitch * zq_su(ji) / MAX( e_s_1d(ji,jk), epsi20 ) 
    252252            zdeltah  (ji,jk) = MAX( zdeltah(ji,jk) , - ht_s_1d(ji) ) ! bound melting 
    253253            zdh_s_mel(ji)    = zdh_s_mel(ji) + zdeltah(ji,jk)     
    254254            ! heat used to melt snow(W.m-2, >0) 
    255             hfx_snw_1d(ji)   = hfx_snw_1d(ji) - zdeltah(ji,jk) * a_i_1d(ji) * q_s_1d(ji,jk) * r1_rdtice  
     255            hfx_snw_1d(ji)   = hfx_snw_1d(ji) - zdeltah(ji,jk) * a_i_1d(ji) * e_s_1d(ji,jk) * r1_rdtice  
    256256            ! snow melting only = water into the ocean (then without snow precip) 
    257257            wfx_snw_sum_1d(ji)   = wfx_snw_sum_1d(ji) - rhosn * a_i_1d(ji) * zdeltah(ji,jk) * r1_rdtice 
    258258            ! updates available heat + thickness 
    259             zq_su (ji)  = MAX( 0._wp , zq_su (ji) + zdeltah(ji,jk) * q_s_1d(ji,jk) ) 
     259            zq_su (ji)  = MAX( 0._wp , zq_su (ji) + zdeltah(ji,jk) * e_s_1d(ji,jk) ) 
    260260            ht_s_1d(ji) = MAX( 0._wp , ht_s_1d(ji) + zdeltah(ji,jk) ) 
    261261         END DO 
     
    274274         ! Heat flux by sublimation [W.m-2], < 0 (sublimate first snow that had fallen, then pre-existing snow) 
    275275         zdeltah(ji,1)  = MAX( zdh_s_sub(ji), - zdh_s_pre(ji) ) 
    276          hfx_sub_1d(ji) = hfx_sub_1d(ji) + ( zdeltah(ji,1) * zqprec(ji) + ( zdh_s_sub(ji) - zdeltah(ji,1) ) * q_s_1d(ji,1)  & 
     276         hfx_sub_1d(ji) = hfx_sub_1d(ji) + ( zdeltah(ji,1) * zqprec(ji) + ( zdh_s_sub(ji) - zdeltah(ji,1) ) * e_s_1d(ji,1)  & 
    277277            &                              ) * a_i_1d(ji) * r1_rdtice 
    278278         ! Mass flux by sublimation 
     
    298298         DO ji = kideb,kiut 
    299299            rswitch       = MAX( 0._wp , SIGN( 1._wp, ht_s_1d(ji) - epsi20 ) ) 
    300             q_s_1d(ji,jk) = rswitch / MAX( ht_s_1d(ji), epsi20 ) *           & 
     300            e_s_1d(ji,jk) = rswitch / MAX( ht_s_1d(ji), epsi20 ) *           & 
    301301              &            ( ( zdh_s_pre(ji)               ) * zqprec(ji) +  & 
    302302              &              ( ht_s_1d(ji) - zdh_s_pre(ji) ) * rhosn * ( cpic * ( rt0 - t_s_1d(ji,jk) ) + lfus ) ) 
     
    314314            IF( t_i_1d(ji,jk) >= ztmelts ) THEN !!! Internal melting 
    315315 
    316                zEi            = - q_i_1d(ji,jk) * r1_rhoic            ! Specific enthalpy of layer k [J/kg, <0]        
     316               zEi            = - e_i_1d(ji,jk) * r1_rhoic            ! Specific enthalpy of layer k [J/kg, <0]        
    317317               zdE            = 0._wp                                 ! Specific enthalpy difference   (J/kg, <0) 
    318318                                                                      ! set up at 0 since no energy is needed to melt water...(it is already melted) 
     
    336336            ELSE                                !!! Surface melting 
    337337                
    338                zEi            = - q_i_1d(ji,jk) * r1_rhoic            ! Specific enthalpy of layer k [J/kg, <0] 
     338               zEi            = - e_i_1d(ji,jk) * r1_rhoic            ! Specific enthalpy of layer k [J/kg, <0] 
    339339               zEw            =    rcp * ( ztmelts - rt0 )            ! Specific enthalpy of resulting meltwater [J/kg, <0] 
    340340               zdE            =    zEi - zEw                          ! Specific enthalpy difference < 0 
     
    377377            sfx_sub_1d(ji) = sfx_sub_1d(ji) - rhoic * a_i_1d(ji) * zdum * sm_i_1d(ji) * r1_rdtice 
    378378            ! Heat flux [W.m-2], < 0 
    379             hfx_sub_1d(ji) = hfx_sub_1d(ji) + zdum * q_i_1d(ji,jk) * a_i_1d(ji) * r1_rdtice 
     379            hfx_sub_1d(ji) = hfx_sub_1d(ji) + zdum * e_i_1d(ji,jk) * a_i_1d(ji) * r1_rdtice 
    380380            ! Mass flux > 0 
    381381            wfx_ice_sub_1d(ji) =  wfx_ice_sub_1d(ji) - rhoic * a_i_1d(ji) * zdum * r1_rdtice 
     
    392392                         
    393393            ! update heat content (J.m-2) and layer thickness 
    394             qh_i_old(ji,jk) = qh_i_old(ji,jk) + zdeltah(ji,jk) * q_i_1d(ji,jk) 
     394            eh_i_old(ji,jk) = eh_i_old(ji,jk) + zdeltah(ji,jk) * e_i_1d(ji,jk) 
    395395            h_i_old (ji,jk) = h_i_old (ji,jk) + zdeltah(ji,jk) 
    396396         END DO 
     
    464464               dh_i_bott(ji)      = rdt_ice * MAX( 0._wp , zf_tt(ji) / ( zdE * rhoic ) ) 
    465465 
    466                q_i_1d(ji,nlay_i+1) = -zEi * rhoic                        ! New ice energy of melting (J/m3, >0) 
     466               e_i_1d(ji,nlay_i+1) = -zEi * rhoic                        ! New ice energy of melting (J/m3, >0) 
    467467                
    468468            ENDIF 
     
    502502 
    503503            ! update heat content (J.m-2) and layer thickness 
    504             qh_i_old(ji,nlay_i+1) = qh_i_old(ji,nlay_i+1) + dh_i_bott(ji) * q_i_1d(ji,nlay_i+1) 
     504            eh_i_old(ji,nlay_i+1) = eh_i_old(ji,nlay_i+1) + dh_i_bott(ji) * e_i_1d(ji,nlay_i+1) 
    505505            h_i_old (ji,nlay_i+1) = h_i_old (ji,nlay_i+1) + dh_i_bott(ji) 
    506506         ENDIF 
     
    519519               IF( t_i_1d(ji,jk) >= ztmelts ) THEN !!! Internal melting 
    520520 
    521                   zEi               = - q_i_1d(ji,jk) * r1_rhoic    ! Specific enthalpy of melting ice (J/kg, <0) 
     521                  zEi               = - e_i_1d(ji,jk) * r1_rhoic    ! Specific enthalpy of melting ice (J/kg, <0) 
    522522                  zdE               = 0._wp                         ! Specific enthalpy difference   (J/kg, <0) 
    523523                                                                    ! set up at 0 since no energy is needed to melt water...(it is already melted) 
     
    539539 
    540540                  ! update heat content (J.m-2) and layer thickness 
    541                   qh_i_old(ji,jk) = qh_i_old(ji,jk) + zdeltah(ji,jk) * q_i_1d(ji,jk) 
     541                  eh_i_old(ji,jk) = eh_i_old(ji,jk) + zdeltah(ji,jk) * e_i_1d(ji,jk) 
    542542                  h_i_old (ji,jk) = h_i_old (ji,jk) + zdeltah(ji,jk) 
    543543 
    544544               ELSE                               !!! Basal melting 
    545545 
    546                   zEi             = - q_i_1d(ji,jk) * r1_rhoic ! Specific enthalpy of melting ice (J/kg, <0) 
     546                  zEi             = - e_i_1d(ji,jk) * r1_rhoic ! Specific enthalpy of melting ice (J/kg, <0) 
    547547                  zEw             = rcp * ( ztmelts - rt0 )    ! Specific enthalpy of meltwater (J/kg, <0) 
    548548                  zdE             = zEi - zEw                  ! Specific enthalpy difference   (J/kg, <0) 
     
    575575 
    576576                  ! update heat content (J.m-2) and layer thickness 
    577                   qh_i_old(ji,jk) = qh_i_old(ji,jk) + zdeltah(ji,jk) * q_i_1d(ji,jk) 
     577                  eh_i_old(ji,jk) = eh_i_old(ji,jk) + zdeltah(ji,jk) * e_i_1d(ji,jk) 
    578578                  h_i_old (ji,jk) = h_i_old (ji,jk) + zdeltah(ji,jk) 
    579579               ENDIF 
     
    599599         zq_rema(ji)     = zq_su(ji) + zq_bo(ji)  
    600600         rswitch         = 1._wp - MAX( 0._wp, SIGN( 1._wp, - ht_s_1d(ji) ) )   ! =1 if snow 
    601          rswitch         = rswitch * MAX( 0._wp, SIGN( 1._wp, q_s_1d(ji,1) - epsi20 ) ) 
    602          zdeltah  (ji,1) = - rswitch * zq_rema(ji) / MAX( q_s_1d(ji,1), epsi20 ) 
     601         rswitch         = rswitch * MAX( 0._wp, SIGN( 1._wp, e_s_1d(ji,1) - epsi20 ) ) 
     602         zdeltah  (ji,1) = - rswitch * zq_rema(ji) / MAX( e_s_1d(ji,1), epsi20 ) 
    603603         zdeltah  (ji,1) = MIN( 0._wp , MAX( zdeltah(ji,1) , - ht_s_1d(ji) ) ) ! bound melting 
    604604         dh_s_tot (ji)   = dh_s_tot(ji)  + zdeltah(ji,1) 
    605605         ht_s_1d   (ji)  = ht_s_1d(ji)   + zdeltah(ji,1) 
    606606         
    607          zq_rema(ji)     = zq_rema(ji) + zdeltah(ji,1) * q_s_1d(ji,1)                ! update available heat (J.m-2) 
     607         zq_rema(ji)     = zq_rema(ji) + zdeltah(ji,1) * e_s_1d(ji,1)                ! update available heat (J.m-2) 
    608608         ! heat used to melt snow 
    609          hfx_snw_1d(ji)  = hfx_snw_1d(ji) - zdeltah(ji,1) * a_i_1d(ji) * q_s_1d(ji,1) * r1_rdtice ! W.m-2 (>0) 
     609         hfx_snw_1d(ji)  = hfx_snw_1d(ji) - zdeltah(ji,1) * a_i_1d(ji) * e_s_1d(ji,1) * r1_rdtice ! W.m-2 (>0) 
    610610         ! Contribution to mass flux 
    611611         wfx_snw_sum_1d(ji)  =  wfx_snw_sum_1d(ji) - rhosn * a_i_1d(ji) * zdeltah(ji,1) * r1_rdtice 
     
    661661 
    662662         ! update heat content (J.m-2) and layer thickness 
    663          qh_i_old(ji,0) = qh_i_old(ji,0) + dh_snowice(ji) * q_s_1d(ji,1) + zfmdt * zEw 
     663         eh_i_old(ji,0) = eh_i_old(ji,0) + dh_snowice(ji) * e_s_1d(ji,1) + zfmdt * zEw 
    664664         h_i_old (ji,0) = h_i_old (ji,0) + dh_snowice(ji) 
    665665          
     
    679679            ! mask enthalpy 
    680680            rswitch       = 1._wp - MAX(  0._wp , SIGN( 1._wp, - ht_s_1d(ji) )  ) 
    681             q_s_1d(ji,jk) = rswitch * q_s_1d(ji,jk) 
    682             ! recalculate t_s_1d from q_s_1d 
    683             t_s_1d(ji,jk) = rt0 + rswitch * ( - q_s_1d(ji,jk) / ( rhosn * cpic ) + lfus / cpic ) 
     681            e_s_1d(ji,jk) = rswitch * e_s_1d(ji,jk) 
     682            ! recalculate t_s_1d from e_s_1d 
     683            t_s_1d(ji,jk) = rt0 + rswitch * ( - e_s_1d(ji,jk) / ( rhosn * cpic ) + lfus / cpic ) 
    684684         END DO 
    685685      END DO 
     
    689689       
    690690      CALL wrk_dealloc( jpij, zqprec, zq_su, zq_bo, zf_tt, zq_rema, zsnw, zevap_rema ) 
    691       CALL wrk_dealloc( jpij, zdh_s_mel, zdh_s_pre, zdh_s_sub, zqh_i ) 
     691      CALL wrk_dealloc( jpij, zdh_s_mel, zdh_s_pre, zdh_s_sub, zeh_i ) 
    692692      CALL wrk_dealloc( jpij, nlay_i, zdeltah, zh_i ) 
    693693      CALL wrk_dealloc( jpij, nlay_i, icount ) 
  • branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/limthd_dif.F90

    r8313 r8325  
    109109      REAL(wp) ::   zraext_s  =  10._wp       ! extinction coefficient of radiation in the snow 
    110110      REAL(wp) ::   zkimin    =  0.10_wp      ! minimum ice thermal conductivity 
    111       REAL(wp) ::   ztsu_err  =  1.e-5_wp     ! range around which t_su is considered as 0°C  
     111      REAL(wp) ::   ztsu_err  =  1.e-5_wp     ! range around which t_su is considered at 0C  
    112112      REAL(wp) ::   ztmelt_i                  ! ice melting temperature 
    113113      REAL(wp) ::   zhsu 
     
    181181      zdq(:) = 0._wp ; zq_ini(:) = 0._wp       
    182182      DO ji = kideb, kiut 
    183          zq_ini(ji) = ( SUM( q_i_1d(ji,1:nlay_i) ) * ht_i_1d(ji) * r1_nlay_i +  & 
    184             &           SUM( q_s_1d(ji,1:nlay_s) ) * ht_s_1d(ji) * r1_nlay_s )  
     183         zq_ini(ji) = ( SUM( e_i_1d(ji,1:nlay_i) ) * ht_i_1d(ji) * r1_nlay_i +  & 
     184            &           SUM( e_s_1d(ji,1:nlay_s) ) * ht_s_1d(ji) * r1_nlay_s )  
    185185      END DO 
    186186 
     
    782782      ! --- diag conservation imbalance on heat diffusion - PART 2 --- ! 
    783783      DO ji = kideb, kiut 
    784          zdq(ji)        = - zq_ini(ji) + ( SUM( q_i_1d(ji,1:nlay_i) ) * ht_i_1d(ji) * r1_nlay_i +  & 
    785             &                              SUM( q_s_1d(ji,1:nlay_s) ) * ht_s_1d(ji) * r1_nlay_s ) 
     784         zdq(ji)        = - zq_ini(ji) + ( SUM( e_i_1d(ji,1:nlay_i) ) * ht_i_1d(ji) * r1_nlay_i +  & 
     785            &                              SUM( e_s_1d(ji,1:nlay_s) ) * ht_s_1d(ji) * r1_nlay_s ) 
    786786         IF( t_su_1d(ji) < rt0 ) THEN  ! case T_su < 0degC 
    787787            zhfx_err(ji) = qns_ice_1d(ji) + qsr_ice_1d(ji) - zradtr_i(ji,nlay_i) - fc_bo_i(ji) + zdq(ji) * r1_rdtice  
     
    840840            t_i_1d(ji,jk) = MIN( t_i_1d(ji,jk), ztmelts ) ! Force t_i_1d to be lower than melting point 
    841841                                                          !   (sometimes dif scheme produces abnormally high temperatures)    
    842             q_i_1d(ji,jk) = rhoic * ( cpic * ( ztmelts - t_i_1d(ji,jk) )                           & 
     842            e_i_1d(ji,jk) = rhoic * ( cpic * ( ztmelts - t_i_1d(ji,jk) )                           & 
    843843               &                    + lfus * ( 1.0 - ( ztmelts-rt0 ) / ( t_i_1d(ji,jk) - rt0 ) )   & 
    844844               &                    - rcp  *         ( ztmelts-rt0 )  )  
     
    847847      DO jk = 1, nlay_s             ! Snow energy of melting 
    848848         DO ji = kideb, kiut 
    849             q_s_1d(ji,jk) = rhosn * ( cpic * ( rt0 - t_s_1d(ji,jk) ) + lfus ) 
     849            e_s_1d(ji,jk) = rhosn * ( cpic * ( rt0 - t_s_1d(ji,jk) ) + lfus ) 
    850850         END DO 
    851851      END DO 
  • branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/limthd_ent.F90

    r8316 r8325  
    7575      INTEGER  :: jk0, jk1   !  old/new layer indices 
    7676      ! 
    77       REAL(wp), POINTER, DIMENSION(:,:) :: zqh_cum0, zh_cum0   ! old cumulative enthlapies and layers interfaces 
    78       REAL(wp), POINTER, DIMENSION(:,:) :: zqh_cum1, zh_cum1   ! new cumulative enthlapies and layers interfaces 
     77      REAL(wp), POINTER, DIMENSION(:,:) :: zeh_cum0, zh_cum0   ! old cumulative enthlapies and layers interfaces 
     78      REAL(wp), POINTER, DIMENSION(:,:) :: zeh_cum1, zh_cum1   ! new cumulative enthlapies and layers interfaces 
    7979      REAL(wp), POINTER, DIMENSION(:)   :: zhnew               ! new layers thicknesses 
    8080      !!------------------------------------------------------------------- 
    8181 
    82       CALL wrk_alloc( jpij, nlay_i+3, zqh_cum0, zh_cum0, kjstart = 0 ) 
    83       CALL wrk_alloc( jpij, nlay_i+1, zqh_cum1, zh_cum1, kjstart = 0 ) 
     82      CALL wrk_alloc( jpij, nlay_i+3, zeh_cum0, zh_cum0, kjstart = 0 ) 
     83      CALL wrk_alloc( jpij, nlay_i+1, zeh_cum1, zh_cum1, kjstart = 0 ) 
    8484      CALL wrk_alloc( jpij, zhnew ) 
    8585 
     
    8787      !  1) Cumulative integral of old enthalpy * thickness and layers interfaces 
    8888      !-------------------------------------------------------------------------- 
    89       zqh_cum0(:,0:nlay_i+2) = 0._wp  
     89      zeh_cum0(:,0:nlay_i+2) = 0._wp  
    9090      zh_cum0 (:,0:nlay_i+2) = 0._wp 
    9191      DO jk0 = 1, nlay_i+2 
    9292         DO ji = kideb, kiut 
    93             zqh_cum0(ji,jk0) = zqh_cum0(ji,jk0-1) + qh_i_old(ji,jk0-1) 
     93            zeh_cum0(ji,jk0) = zeh_cum0(ji,jk0-1) + eh_i_old(ji,jk0-1) 
    9494            zh_cum0 (ji,jk0) = zh_cum0 (ji,jk0-1) + h_i_old (ji,jk0-1) 
    9595         ENDDO 
     
    112112      ENDDO 
    113113 
    114       zqh_cum1(:,0:nlay_i) = 0._wp  
     114      zeh_cum1(:,0:nlay_i) = 0._wp  
    115115      ! new cumulative q*h => linear interpolation 
    116116      DO jk0 = 1, nlay_i+1 
     
    118118            DO ji = kideb, kiut 
    119119               IF( zh_cum1(ji,jk1) <= zh_cum0(ji,jk0) .AND. zh_cum1(ji,jk1) > zh_cum0(ji,jk0-1) ) THEN 
    120                   zqh_cum1(ji,jk1) = ( zqh_cum0(ji,jk0-1) * ( zh_cum0(ji,jk0) - zh_cum1(ji,jk1  ) ) +  & 
    121                      &                 zqh_cum0(ji,jk0  ) * ( zh_cum1(ji,jk1) - zh_cum0(ji,jk0-1) ) )  & 
     120                  zeh_cum1(ji,jk1) = ( zeh_cum0(ji,jk0-1) * ( zh_cum0(ji,jk0) - zh_cum1(ji,jk1  ) ) +  & 
     121                     &                 zeh_cum0(ji,jk0  ) * ( zh_cum1(ji,jk1) - zh_cum0(ji,jk0-1) ) )  & 
    122122                     &             / ( zh_cum0(ji,jk0) - zh_cum0(ji,jk0-1) ) 
    123123               ENDIF 
     
    126126      ENDDO 
    127127      ! to ensure that total heat content is strictly conserved, set: 
    128       zqh_cum1(:,nlay_i) = zqh_cum0(:,nlay_i+2)  
     128      zeh_cum1(:,nlay_i) = zeh_cum0(:,nlay_i+2)  
    129129 
    130130      ! new enthalpies 
     
    132132         DO ji = kideb, kiut 
    133133            rswitch      = MAX( 0._wp , SIGN( 1._wp , zhnew(ji) - epsi20 ) )  
    134             qnew(ji,jk1) = rswitch * ( zqh_cum1(ji,jk1) - zqh_cum1(ji,jk1-1) ) / MAX( zhnew(ji), epsi20 ) 
     134            qnew(ji,jk1) = rswitch * ( zeh_cum1(ji,jk1) - zeh_cum1(ji,jk1-1) ) / MAX( zhnew(ji), epsi20 ) 
    135135         ENDDO 
    136136      ENDDO 
    137137 
    138138      ! --- diag error on heat remapping --- ! 
    139       ! comment: if input h_i_old and qh_i_old are already multiplied by a_i (as in limthd_lac),  
     139      ! comment: if input h_i_old and eh_i_old are already multiplied by a_i (as in limthd_lac),  
    140140      ! then we should not (* a_i) again but not important since this is just to check that remap error is ~0 
    141141      DO ji = kideb, kiut 
    142142         hfx_err_rem_1d(ji) = hfx_err_rem_1d(ji) + a_i_1d(ji) * r1_rdtice *  & 
    143             &               ( SUM( qnew(ji,1:nlay_i) ) * zhnew(ji) - SUM( qh_i_old(ji,0:nlay_i+1) ) )  
     143            &               ( SUM( qnew(ji,1:nlay_i) ) * zhnew(ji) - SUM( eh_i_old(ji,0:nlay_i+1) ) )  
    144144      END DO 
    145145       
    146146      ! 
    147       CALL wrk_dealloc( jpij, nlay_i+3, zqh_cum0, zh_cum0, kjstart = 0 ) 
    148       CALL wrk_dealloc( jpij, nlay_i+1, zqh_cum1, zh_cum1, kjstart = 0 ) 
     147      CALL wrk_dealloc( jpij, nlay_i+3, zeh_cum0, zh_cum0, kjstart = 0 ) 
     148      CALL wrk_dealloc( jpij, nlay_i+1, zeh_cum1, zh_cum1, kjstart = 0 ) 
    149149      CALL wrk_dealloc( jpij, zhnew ) 
    150150      ! 
  • branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/limthd_lac.F90

    r8316 r8325  
    446446            ! for remapping 
    447447            h_i_old (1:nbpac,0:nlay_i+1) = 0._wp 
    448             qh_i_old(1:nbpac,0:nlay_i+1) = 0._wp 
     448            eh_i_old(1:nbpac,0:nlay_i+1) = 0._wp 
    449449            DO jk = 1, nlay_i 
    450450               DO ji = 1, nbpac 
    451451                  h_i_old (ji,jk) = zv_i_1d(ji,jl) * r1_nlay_i 
    452                   qh_i_old(ji,jk) = ze_i_1d(ji,jk,jl) * h_i_old(ji,jk) 
     452                  eh_i_old(ji,jk) = ze_i_1d(ji,jk,jl) * h_i_old(ji,jk) 
    453453               END DO 
    454454            END DO 
     
    462462               ! for remapping 
    463463               h_i_old (ji,nlay_i+1) = zv_newfra 
    464                qh_i_old(ji,nlay_i+1) = ze_newice(ji) * zv_newfra 
     464               eh_i_old(ji,nlay_i+1) = ze_newice(ji) * zv_newfra 
    465465            ENDDO 
    466466            ! --- Ice enthalpy remapping --- ! 
  • branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/limvar.F90

    r8316 r8325  
    162162      !!------------------------------------------------------------------ 
    163163      INTEGER  ::   ji, jj, jk, jl   ! dummy loop indices 
    164       REAL(wp) ::   zq_i, zaaa, zbbb, zccc, zdiscrim     ! local scalars 
    165       REAL(wp) ::   ztmelts, zq_s, zfac1, zfac2   !   -      - 
     164      REAL(wp) ::   ze_i, zaaa, zbbb, zccc, zdiscrim     ! local scalars 
     165      REAL(wp) ::   ztmelts, ze_s, zfac1, zfac2   !   -      - 
    166166      !!------------------------------------------------------------------ 
    167167 
     
    218218            DO jj = 1, jpj 
    219219               DO ji = 1, jpi 
    220                   !                                                              ! Energy of melting q(S,T) [J.m-3] 
     220                  !                                                              ! Energy of melting e(S,T) [J.m-3] 
    221221                  rswitch = MAX( 0.0 , SIGN( 1.0 , v_i(ji,jj,jl) - epsi20 ) )     ! rswitch = 0 if no ice and 1 if yes 
    222                   zq_i    = rswitch * e_i(ji,jj,jk,jl) / MAX( v_i(ji,jj,jl) , epsi20 ) * REAL(nlay_i,wp)  
     222                  ze_i    = rswitch * e_i(ji,jj,jk,jl) / MAX( v_i(ji,jj,jl) , epsi20 ) * REAL(nlay_i,wp)  
    223223                  ztmelts = -tmut * s_i(ji,jj,jk,jl) + rt0              ! Ice layer melt temperature 
    224224                  ! 
    225225                  zaaa       =  cpic                  ! Conversion q(S,T) -> T (second order equation) 
    226                   zbbb       =  ( rcp - cpic ) * ( ztmelts - rt0 ) + zq_i * r1_rhoic - lfus 
     226                  zbbb       =  ( rcp - cpic ) * ( ztmelts - rt0 ) + ze_i * r1_rhoic - lfus 
    227227                  zccc       =  lfus * (ztmelts-rt0) 
    228228                  zdiscrim   =  SQRT( MAX(zbbb*zbbb - 4._wp*zaaa*zccc , 0._wp) ) 
     
    245245                  !Energy of melting q(S,T) [J.m-3] 
    246246                  rswitch = MAX( 0._wp , SIGN( 1._wp , v_s(ji,jj,jl) - epsi20 ) )     ! rswitch = 0 if no ice and 1 if yes 
    247                   zq_s  = rswitch * e_s(ji,jj,jk,jl) / MAX( v_s(ji,jj,jl) , epsi20 ) * REAL(nlay_s,wp) 
     247                  ze_s  = rswitch * e_s(ji,jj,jk,jl) / MAX( v_s(ji,jj,jl) , epsi20 ) * REAL(nlay_s,wp) 
    248248                  ! 
    249                   t_s(ji,jj,jk,jl) = rt0 + rswitch * ( - zfac1 * zq_s + zfac2 ) 
     249                  t_s(ji,jj,jk,jl) = rt0 + rswitch * ( - zfac1 * ze_s + zfac2 ) 
    250250                  t_s(ji,jj,jk,jl) = MIN( rt0, MAX( rt0 - 100._wp , t_s(ji,jj,jk,jl) ) )     ! -100 < t_s < rt0 
    251251               END DO 
  • branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/thd_ice.F90

    r8313 r8325  
    111111   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   t_i_1d   !: corresponding to the 2D var  t_i 
    112112   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   s_i_1d   !: profiled ice salinity 
    113    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   q_i_1d   !:    Ice  enthalpy per unit volume 
    114    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   q_s_1d   !:    Snow enthalpy per unit volume 
     113   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   e_i_1d   !:    Ice  enthalpy per unit volume 
     114   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   e_s_1d   !:    Snow enthalpy per unit volume 
    115115 
    116    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   qh_i_old !: ice heat content (q*h, J.m-2) 
     116   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   eh_i_old !: ice heat content (q*h, J.m-2) 
    117117   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   h_i_old  !: ice thickness layer (m) 
    118118 
     
    172172      ii = ii + 1 
    173173      ALLOCATE( t_s_1d  (jpij,nlay_s)     , t_i_1d (jpij,nlay_i)     , s_i_1d(jpij,nlay_i) ,  &             
    174          &      q_i_1d  (jpij,nlay_i+1)   , q_s_1d (jpij,nlay_s)     ,                        & 
    175          &      qh_i_old(jpij,0:nlay_i+1) , h_i_old(jpij,0:nlay_i+1) , STAT=ierr(ii) ) 
     174         &      e_i_1d  (jpij,nlay_i+1)   , e_s_1d (jpij,nlay_s)     ,                        & 
     175         &      eh_i_old(jpij,0:nlay_i+1) , h_i_old(jpij,0:nlay_i+1) , STAT=ierr(ii) ) 
    176176      ! 
    177177      ii = ii + 1 
Note: See TracChangeset for help on using the changeset viewer.