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 8342 for branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/limthd_dif.F90 – NEMO

Ignore:
Timestamp:
2017-07-15T17:27:14+02:00 (7 years ago)
Author:
clem
Message:

simplify the code

File:
1 edited

Legend:

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

    r8325 r8342  
    3737CONTAINS 
    3838 
    39    SUBROUTINE lim_thd_dif( kideb , kiut ) 
     39   SUBROUTINE lim_thd_dif 
    4040      !!------------------------------------------------------------------ 
    4141      !!                ***  ROUTINE lim_thd_dif  *** 
     
    6767      !!           of temperature 
    6868      !! 
    69       !! ** Arguments : 
    70       !!           kideb , kiut : Starting and ending points on which the  
    71       !!                         the computation is applied 
    7269      !! 
    7370      !! ** Inputs / Ouputs : (global commons) 
     
    8986      !!           (04-2007) Energy conservation tested by M. Vancoppenolle 
    9087      !!------------------------------------------------------------------ 
    91       INTEGER , INTENT(in) ::   kideb, kiut   ! Start/End point on which the  the computation is applied 
    92  
    9388      !! * Local variables 
    9489      INTEGER ::   ji             ! spatial loop index 
     
    180175      ! --- diag error on heat diffusion - PART 1 --- ! 
    181176      zdq(:) = 0._wp ; zq_ini(:) = 0._wp       
    182       DO ji = kideb, kiut 
     177      DO ji = 1, nidx 
    183178         zq_ini(ji) = ( SUM( e_i_1d(ji,1:nlay_i) ) * ht_i_1d(ji) * r1_nlay_i +  & 
    184179            &           SUM( e_s_1d(ji,1:nlay_s) ) * ht_s_1d(ji) * r1_nlay_s )  
     
    188183      ! 1) Initialization                                                            ! 
    189184      !------------------------------------------------------------------------------! 
    190       DO ji = kideb , kiut 
     185      DO ji = 1 , nidx 
    191186         isnow(ji)= 1._wp - MAX( 0._wp , SIGN(1._wp, - ht_s_1d(ji) ) )  ! is there snow or not 
    192187         ! layer thickness 
     
    203198 
    204199      DO jk = 1, nlay_s            ! vert. coord of the up. lim. of the layer-th snow layer 
    205          DO ji = kideb , kiut 
     200         DO ji = 1 , nidx 
    206201            z_s(ji,jk) = z_s(ji,jk-1) + ht_s_1d(ji) * r1_nlay_s 
    207202         END DO 
     
    209204 
    210205      DO jk = 1, nlay_i            ! vert. coord of the up. lim. of the layer-th ice layer 
    211          DO ji = kideb , kiut 
     206         DO ji = 1 , nidx 
    212207            z_i(ji,jk) = z_i(ji,jk-1) + ht_i_1d(ji) * r1_nlay_i 
    213208         END DO 
     
    230225      ! fr1_i0_1d = i0 for a thin ice cover, fr1_i0_2d = i0 for a thick ice cover 
    231226      zhsu = 0.1_wp ! threshold for the computation of i0 
    232       DO ji = kideb , kiut 
     227      DO ji = 1 , nidx 
    233228         ! switches 
    234229         isnow(ji) = 1._wp - MAX( 0._wp , SIGN( 1._wp , - ht_s_1d(ji) ) )  
     
    243238      ! Derivative of the non solar flux 
    244239      !------------------------------------------------------- 
    245       DO ji = kideb , kiut 
     240      DO ji = 1 , nidx 
    246241         zfsw   (ji)    =  qsr_ice_1d(ji) * ( 1 - i0(ji) )   ! Shortwave radiation absorbed at surface 
    247242         zftrice(ji)    =  qsr_ice_1d(ji) *       i0(ji)     ! Solar radiation transmitted below the surface layer 
     
    254249      !--------------------------------------------------------- 
    255250 
    256       DO ji = kideb, kiut           ! snow initialization 
     251      DO ji = 1, nidx           ! snow initialization 
    257252         zradtr_s(ji,0) = zftrice(ji)     ! radiation penetrating through snow 
    258253      END DO 
    259254 
    260255      DO jk = 1, nlay_s          ! Radiation through snow 
    261          DO ji = kideb, kiut 
     256         DO ji = 1, nidx 
    262257            !                             ! radiation transmitted below the layer-th snow layer 
    263258            zradtr_s(ji,jk) = zradtr_s(ji,0) * EXP( - zraext_s * ( MAX ( 0._wp , z_s(ji,jk) ) ) ) 
     
    267262      END DO 
    268263 
    269       DO ji = kideb, kiut           ! ice initialization 
     264      DO ji = 1, nidx           ! ice initialization 
    270265         zradtr_i(ji,0) = zradtr_s(ji,nlay_s) * isnow(ji) + zftrice(ji) * ( 1._wp - isnow(ji) ) 
    271266      END DO 
    272267 
    273268      DO jk = 1, nlay_i          ! Radiation through ice 
    274          DO ji = kideb, kiut 
     269         DO ji = 1, nidx 
    275270            !                             ! radiation transmitted below the layer-th ice layer 
    276271            zradtr_i(ji,jk) = zradtr_i(ji,0) * EXP( - rn_kappa_i * ( MAX ( 0._wp , z_i(ji,jk) ) ) ) 
     
    280275      END DO 
    281276 
    282       DO ji = kideb, kiut           ! Radiation transmitted below the ice 
     277      DO ji = 1, nidx           ! Radiation transmitted below the ice 
    283278         ftr_ice_1d(ji) = zradtr_i(ji,nlay_i)  
    284279      END DO 
     
    288283      !------------------------------------------------------------------------------| 
    289284      ! 
    290       DO ji = kideb, kiut        ! Old surface temperature 
     285      DO ji = 1, nidx        ! Old surface temperature 
    291286         ztsub  (ji) =  t_su_1d(ji)                              ! temperature at the beg of iter pr. 
    292287         ztsubit(ji) =  t_su_1d(ji)                              ! temperature at the previous iter 
     
    296291 
    297292      DO jk = 1, nlay_s       ! Old snow temperature 
    298          DO ji = kideb , kiut 
     293         DO ji = 1 , nidx 
    299294            ztsb(ji,jk) =  t_s_1d(ji,jk) 
    300295         END DO 
     
    302297 
    303298      DO jk = 1, nlay_i       ! Old ice temperature 
    304          DO ji = kideb , kiut 
     299         DO ji = 1 , nidx 
    305300            ztib(ji,jk) =  t_i_1d(ji,jk) 
    306301         END DO 
     
    319314         ! 
    320315         IF( nn_ice_thcon == 0 ) THEN      ! Untersteiner (1964) formula 
    321             DO ji = kideb , kiut 
     316            DO ji = 1 , nidx 
    322317               ztcond_i(ji,0) = rcdic + zbeta * s_i_1d(ji,1) / MIN( -epsi10, t_i_1d(ji,1) - rt0 ) 
    323318               ztcond_i(ji,0) = MAX( ztcond_i(ji,0), zkimin ) 
    324319            END DO 
    325320            DO jk = 1, nlay_i-1 
    326                DO ji = kideb , kiut 
     321               DO ji = 1 , nidx 
    327322                  ztcond_i(ji,jk) = rcdic + zbeta * ( s_i_1d(ji,jk) + s_i_1d(ji,jk+1) ) /  & 
    328323                     MIN(-2.0_wp * epsi10, t_i_1d(ji,jk) + t_i_1d(ji,jk+1) - 2.0_wp * rt0) 
     
    333328 
    334329         IF( nn_ice_thcon == 1 ) THEN      ! Pringle et al formula included: 2.11 + 0.09 S/T - 0.011.T 
    335             DO ji = kideb , kiut 
     330            DO ji = 1 , nidx 
    336331               ztcond_i(ji,0) = rcdic + 0.090_wp * s_i_1d(ji,1) / MIN( -epsi10, t_i_1d(ji,1) - rt0 )   & 
    337332                  &                   - 0.011_wp * ( t_i_1d(ji,1) - rt0 )   
     
    339334            END DO 
    340335            DO jk = 1, nlay_i-1 
    341                DO ji = kideb , kiut 
     336               DO ji = 1 , nidx 
    342337                  ztcond_i(ji,jk) = rcdic +                                                                       &  
    343338                     &                 0.09_wp * ( s_i_1d(ji,jk) + s_i_1d(ji,jk+1) )                              & 
     
    347342               END DO 
    348343            END DO 
    349             DO ji = kideb , kiut 
     344            DO ji = 1 , nidx 
    350345               ztcond_i(ji,nlay_i) = rcdic + 0.090_wp * s_i_1d(ji,nlay_i) / MIN( -epsi10, t_bo_1d(ji) - rt0 )   & 
    351346                  &                        - 0.011_wp * ( t_bo_1d(ji) - rt0 )   
     
    372367            zh_thres = EXP( 1._wp ) * zepsilon * 0.5_wp 
    373368 
    374             DO ji = kideb, kiut 
     369            DO ji = 1, nidx 
    375370    
    376371               ! Mean sea ice thermal conductivity 
     
    400395         ! 
    401396         !--- Snow 
    402          DO ji = kideb, kiut 
     397         DO ji = 1, nidx 
    403398            zfac                  =  1. / MAX( epsi10 , zh_s(ji) ) 
    404399            zkappa_s(ji,0)        = zghe(ji) * rn_cdsn * zfac 
     
    407402 
    408403         DO jk = 1, nlay_s-1 
    409             DO ji = kideb , kiut 
     404            DO ji = 1 , nidx 
    410405               zkappa_s(ji,jk)    = zghe(ji) * 2.0 * rn_cdsn / MAX( epsi10, 2.0 * zh_s(ji) ) 
    411406            END DO 
     
    414409         !--- Ice 
    415410         DO jk = 1, nlay_i-1 
    416             DO ji = kideb , kiut 
     411            DO ji = 1 , nidx 
    417412               zkappa_i(ji,jk)    = zghe(ji) * 2.0 * ztcond_i(ji,jk) / MAX( epsi10 , 2.0 * zh_i(ji) ) 
    418413            END DO 
     
    420415 
    421416         !--- Snow-ice interface 
    422          DO ji = kideb , kiut 
     417         DO ji = 1 , nidx 
    423418            zfac                  = 1./ MAX( epsi10 , zh_i(ji) ) 
    424419            zkappa_i(ji,0)        = zghe(ji) * ztcond_i(ji,0) * zfac 
     
    435430         ! 
    436431         DO jk = 1, nlay_i 
    437             DO ji = kideb , kiut 
     432            DO ji = 1 , nidx 
    438433               ztitemp(ji,jk)   = t_i_1d(ji,jk) 
    439434               zspeche_i(ji,jk) = cpic + zgamma * s_i_1d(ji,jk) / MAX( ( t_i_1d(ji,jk) - rt0 ) * ( ztib(ji,jk) - rt0 ), epsi10 ) 
     
    443438 
    444439         DO jk = 1, nlay_s 
    445             DO ji = kideb , kiut 
     440            DO ji = 1 , nidx 
    446441               ztstemp(ji,jk) = t_s_1d(ji,jk) 
    447442               zeta_s(ji,jk)  = rdt_ice / MAX( rhosn * cpic * zh_s(ji), epsi10 ) 
     
    455450         ! 
    456451         IF ( ln_dqnsice ) THEN  
    457             DO ji = kideb , kiut 
     452            DO ji = 1 , nidx 
    458453               ! update of the non solar flux according to the update in T_su 
    459454               qns_ice_1d(ji) = qns_ice_1d(ji) + dqns_ice_1d(ji) * ( t_su_1d(ji) - ztsubit(ji) ) 
     
    462457 
    463458         ! Update incoming flux 
    464          DO ji = kideb , kiut 
     459         DO ji = 1 , nidx 
    465460            ! update incoming flux 
    466461            zf(ji)    =          zfsw(ji)              & ! net absorbed solar radiation 
     
    481476 
    482477         DO numeq=1,nlay_i+3 
    483             DO ji = kideb , kiut 
     478            DO ji = 1 , nidx 
    484479               ztrid(ji,numeq,1) = 0. 
    485480               ztrid(ji,numeq,2) = 0. 
     
    492487 
    493488         DO numeq = nlay_s + 2, nlay_s + nlay_i  
    494             DO ji = kideb , kiut 
     489            DO ji = 1 , nidx 
    495490               jk                 = numeq - nlay_s - 1 
    496491               ztrid(ji,numeq,1)  =  - zeta_i(ji,jk) * zkappa_i(ji,jk-1) 
     
    502497 
    503498         numeq =  nlay_s + nlay_i + 1 
    504          DO ji = kideb , kiut 
     499         DO ji = 1 , nidx 
    505500            !!ice bottom term 
    506501            ztrid(ji,numeq,1)  =  - zeta_i(ji,nlay_i)*zkappa_i(ji,nlay_i-1)    
     
    512507 
    513508 
    514          DO ji = kideb , kiut 
     509         DO ji = 1 , nidx 
    515510            IF ( ht_s_1d(ji) > 0.0 ) THEN 
    516511               ! 
     
    659654         minnumeqmin = nlay_i+5 
    660655 
    661          DO ji = kideb , kiut 
     656         DO ji = 1 , nidx 
    662657            zindtbis(ji,numeqmin(ji)) =  zindterm(ji,numeqmin(ji)) 
    663658            zdiagbis(ji,numeqmin(ji)) =  ztrid(ji,numeqmin(ji),2) 
     
    667662 
    668663         DO jk = minnumeqmin+1, maxnumeqmax 
    669             DO ji = kideb , kiut 
     664            DO ji = 1 , nidx 
    670665               numeq               =  min(max(numeqmin(ji)+1,jk),numeqmax(ji)) 
    671666               zdiagbis(ji,numeq)  =  ztrid(ji,numeq,2)  - ztrid(ji,numeq,1) * ztrid(ji,numeq-1,3)  / zdiagbis(ji,numeq-1) 
     
    674669         END DO 
    675670 
    676          DO ji = kideb , kiut 
     671         DO ji = 1 , nidx 
    677672            ! ice temperatures 
    678673            t_i_1d(ji,nlay_i)    =  zindtbis(ji,numeqmax(ji)) / zdiagbis(ji,numeqmax(ji)) 
     
    680675 
    681676         DO numeq = nlay_i + nlay_s, nlay_s + 2, -1 
    682             DO ji = kideb , kiut 
     677            DO ji = 1 , nidx 
    683678               jk    =  numeq - nlay_s - 1 
    684679               t_i_1d(ji,jk)  =  ( zindtbis(ji,numeq) - ztrid(ji,numeq,3) * t_i_1d(ji,jk+1) ) / zdiagbis(ji,numeq) 
     
    686681         END DO 
    687682 
    688          DO ji = kideb , kiut 
     683         DO ji = 1 , nidx 
    689684            ! snow temperatures       
    690685            IF (ht_s_1d(ji) > 0._wp) & 
     
    706701         ! check that nowhere it has started to melt 
    707702         ! zdti(ji) is a measure of error, it has to be under zdti_bnd 
    708          DO ji = kideb , kiut 
     703         DO ji = 1 , nidx 
    709704            t_su_1d(ji) =  MAX(  MIN( t_su_1d(ji) , rt0 ) , 190._wp  ) 
    710705            zdti   (ji) =  ABS( t_su_1d(ji) - ztsubit(ji) )      
     
    712707 
    713708         DO jk  =  1, nlay_s 
    714             DO ji = kideb , kiut 
     709            DO ji = 1 , nidx 
    715710               t_s_1d(ji,jk) = MAX(  MIN( t_s_1d(ji,jk), rt0 ), 190._wp  ) 
    716711               zdti  (ji)    = MAX( zdti(ji), ABS( t_s_1d(ji,jk) - ztstemp(ji,jk) ) ) 
     
    719714 
    720715         DO jk  =  1, nlay_i 
    721             DO ji = kideb , kiut 
     716            DO ji = 1 , nidx 
    722717               ztmelt_i      = -tmut * s_i_1d(ji,jk) + rt0  
    723718               t_i_1d(ji,jk) =  MAX( MIN( t_i_1d(ji,jk), ztmelt_i ), 190._wp ) 
     
    729724         ! note that this could be optimized substantially by iterating only the non-converging points 
    730725         zdti_max = 0._wp 
    731          DO ji = kideb, kiut 
     726         DO ji = 1, nidx 
    732727            zdti_max = MAX( zdti_max, zdti(ji) )    
    733728         END DO 
     
    738733      ! MV SIMIP 2016 
    739734      !--- Snow-ice interfacial temperature (diagnostic SIMIP) 
    740       DO ji = kideb, kiut 
     735      DO ji = 1, nidx 
    741736         zfac        = 1. / MAX( epsi10 , rn_cdsn * zh_i(ji) + ztcond_i(ji,1) * zh_s(ji) ) 
    742737         t_si_1d(ji) = ( rn_cdsn        * zh_i(ji) * t_s_1d(ji,1) + & 
     
    755750      !   12) Fluxes at the interfaces                                          ! 
    756751      !-------------------------------------------------------------------------! 
    757       DO ji = kideb, kiut 
     752      DO ji = 1, nidx 
    758753         !                                ! surface ice conduction flux 
    759754         isnow(ji)       = 1._wp - MAX( 0._wp, SIGN( 1._wp, -ht_s_1d(ji) ) ) 
     
    771766 
    772767      ! --- computes sea ice energy of melting compulsory for limthd_dh --- ! 
    773       CALL lim_thd_enmelt( kideb, kiut ) 
     768      CALL lim_thd_enmelt 
    774769 
    775770      ! --- diagnose the change in non-solar flux due to surface temperature change --- ! 
    776771      IF ( ln_dqnsice ) THEN 
    777          DO ji = kideb, kiut 
     772         DO ji = 1, nidx 
    778773            hfx_err_dif_1d(ji) = hfx_err_dif_1d(ji) - ( qns_ice_1d(ji)  - zqns_ice_b(ji) ) * a_i_1d(ji)  
    779774         END DO 
     
    781776 
    782777      ! --- diag conservation imbalance on heat diffusion - PART 2 --- ! 
    783       DO ji = kideb, kiut 
     778      DO ji = 1, nidx 
    784779         zdq(ji)        = - zq_ini(ji) + ( SUM( e_i_1d(ji,1:nlay_i) ) * ht_i_1d(ji) * r1_nlay_i +  & 
    785780            &                              SUM( e_s_1d(ji,1:nlay_s) ) * ht_s_1d(ji) * r1_nlay_s ) 
     
    798793      ! Heat flux used to warm/cool ice in W.m-2 
    799794      !----------------------------------------- 
    800       DO ji = kideb, kiut 
     795      DO ji = 1, nidx 
    801796         IF( t_su_1d(ji) < rt0 ) THEN  ! case T_su < 0degC 
    802797            hfx_dif_1d(ji) = hfx_dif_1d(ji)  +   & 
     
    821816   END SUBROUTINE lim_thd_dif 
    822817 
    823    SUBROUTINE lim_thd_enmelt( kideb, kiut ) 
     818   SUBROUTINE lim_thd_enmelt 
    824819      !!----------------------------------------------------------------------- 
    825820      !!                   ***  ROUTINE lim_thd_enmelt ***  
     
    829824      !! ** Method  :   Formula (Bitz and Lipscomb, 1999) 
    830825      !!------------------------------------------------------------------- 
    831       INTEGER, INTENT(in) ::   kideb, kiut   ! bounds for the spatial loop 
    832       ! 
    833826      INTEGER  ::   ji, jk   ! dummy loop indices 
    834827      REAL(wp) ::   ztmelts  ! local scalar  
     
    836829      ! 
    837830      DO jk = 1, nlay_i             ! Sea ice energy of melting 
    838          DO ji = kideb, kiut 
     831         DO ji = 1, nidx 
    839832            ztmelts      = - tmut  * s_i_1d(ji,jk) + rt0 
    840833            t_i_1d(ji,jk) = MIN( t_i_1d(ji,jk), ztmelts ) ! Force t_i_1d to be lower than melting point 
     
    846839      END DO 
    847840      DO jk = 1, nlay_s             ! Snow energy of melting 
    848          DO ji = kideb, kiut 
     841         DO ji = 1, nidx 
    849842            e_s_1d(ji,jk) = rhosn * ( cpic * ( rt0 - t_s_1d(ji,jk) ) + lfus ) 
    850843         END DO 
Note: See TracChangeset for help on using the changeset viewer.