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/LIM_SRC_3/limthd.F90 – NEMO

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

STEP4 (1): put all thermodynamics in 1D

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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 
Note: See TracChangeset for help on using the changeset viewer.