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

Ignore:
Timestamp:
2008-05-13T10:28:52+02:00 (16 years ago)
Author:
rblod
Message:

Correct indentation and print for debug in LIM3, see ticket #134, step I

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMO/LIM_SRC_3/limthd.F90

    r888 r921  
    3939   PUBLIC lim_thd         ! called by lim_step 
    4040 
    41   !! * Module variables 
    42      REAL(wp)  ::            &  ! constant values 
    43          epsi20 = 1e-20   ,  & 
    44          epsi16 = 1e-16   ,  & 
    45          epsi06 = 1e-06   ,  & 
    46          epsi04 = 1e-04   ,  & 
    47          zzero  = 0.e0     , & 
    48          zone   = 1.e0 
     41   !! * Module variables 
     42   REAL(wp)  ::            &  ! constant values 
     43      epsi20 = 1e-20   ,  & 
     44      epsi16 = 1e-16   ,  & 
     45      epsi06 = 1e-06   ,  & 
     46      epsi04 = 1e-04   ,  & 
     47      zzero  = 0.e0     , & 
     48      zone   = 1.e0 
    4949 
    5050   !! * Substitutions 
     
    5959CONTAINS 
    6060 
    61    SUBROUTINE lim_thd 
     61   SUBROUTINE lim_thd( kt ) 
    6262      !!------------------------------------------------------------------- 
    6363      !!                ***  ROUTINE lim_thd  ***        
     
    8484      !!                                     salinity variations 
    8585      !!--------------------------------------------------------------------- 
     86      INTEGER, INTENT(in) ::   kt     ! number of iteration 
    8687      !! * Local variables 
    8788      INTEGER  ::  ji, jj, jk, jl, nbpb   ! nb of icy pts for thermo. cal. 
     
    9091         zfric_umin = 5e-03 ,  &   ! lower bound for the friction velocity 
    9192         zfric_umax = 2e-02        ! upper bound for the friction velocity 
    92        
     93 
    9394      REAL(wp) ::   & 
    9495         zinda              ,  &   ! switch for test. the val. of concen. 
     
    103104      REAL(wp) ::   & 
    104105         zareamin 
    105           
     106 
    106107      REAL(wp), DIMENSION(jpi,jpj) :: & 
    107108         zhicifp            ,  &   ! ice thickness for outputs 
     
    112113      IF( numit == nstart  )   CALL lim_thd_init  ! Initialization (first time-step only) 
    113114 
    114       WRITE(numout,*) 'limthd : Ice Thermodynamics' 
    115       WRITE(numout,*) '~~~~~~' 
     115      IF( kt == nit000 .AND. lwp ) THEN 
     116         WRITE(numout,*) 'limthd : Ice Thermodynamics' 
     117         WRITE(numout,*) '~~~~~~' 
     118      ENDIF 
    116119 
    117120      IF( numit == nstart  )   CALL lim_thd_sal_init  ! Initialization (first time-step only) 
    118 !------------------------------------------------------------------------------! 
    119 ! 1) Initialization of diagnostic variables                                    ! 
    120 !------------------------------------------------------------------------------! 
     121      !------------------------------------------------------------------------------! 
     122      ! 1) Initialization of diagnostic variables                                    ! 
     123      !------------------------------------------------------------------------------! 
    121124      zeps = 1.0e-10 
    122125      tatm_ice(:,:) = tatm_ice(:,:) + 273.15 ! convert C to K 
     
    129132 
    130133      DO jl = 1, jpl 
    131         DO jk = 1, nlay_i 
    132           DO jj = 1, jpj 
    133             DO ji = 1, jpi 
    134                !Energy of melting q(S,T) [J.m-3] 
    135                e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) / area(ji,jj) / &  
    136                                   MAX( v_i(ji,jj,jl) , epsi06 ) * nlay_i 
    137                !0 if no ice and 1 if yes 
    138                zindb            = 1.0 - MAX ( 0.0 , SIGN ( 1.0 , - ht_i(ji,jj,jl) ) )  
    139                !convert units ! very important that this line is here 
    140                e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) * unit_fac * zindb  
     134         DO jk = 1, nlay_i 
     135            DO jj = 1, jpj 
     136               DO ji = 1, jpi 
     137                  !Energy of melting q(S,T) [J.m-3] 
     138                  e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) / area(ji,jj) / &  
     139                     MAX( v_i(ji,jj,jl) , epsi06 ) * nlay_i 
     140                  !0 if no ice and 1 if yes 
     141                  zindb            = 1.0 - MAX ( 0.0 , SIGN ( 1.0 , - ht_i(ji,jj,jl) ) )  
     142                  !convert units ! very important that this line is here 
     143                  e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) * unit_fac * zindb  
     144               END DO 
    141145            END DO 
    142           END DO 
    143         END DO 
     146         END DO 
    144147      END DO 
    145148 
    146149      DO jl = 1, jpl 
    147         DO jk = 1, nlay_s 
    148           DO jj = 1, jpj 
    149             DO ji = 1, jpi 
    150                !Energy of melting q(S,T) [J.m-3] 
    151                e_s(ji,jj,jk,jl) = e_s(ji,jj,jk,jl) / area(ji,jj) / &  
    152                                   MAX( v_s(ji,jj,jl) , epsi06 ) * nlay_s 
    153                !0 if no ice and 1 if yes 
    154                zindb            = 1.0 - MAX ( 0.0 , SIGN ( 1.0 , - ht_s(ji,jj,jl) ) )  
    155                !convert units ! very important that this line is here 
    156                e_s(ji,jj,jk,jl) = e_s(ji,jj,jk,jl) * unit_fac * zindb  
     150         DO jk = 1, nlay_s 
     151            DO jj = 1, jpj 
     152               DO ji = 1, jpi 
     153                  !Energy of melting q(S,T) [J.m-3] 
     154                  e_s(ji,jj,jk,jl) = e_s(ji,jj,jk,jl) / area(ji,jj) / &  
     155                     MAX( v_s(ji,jj,jl) , epsi06 ) * nlay_s 
     156                  !0 if no ice and 1 if yes 
     157                  zindb            = 1.0 - MAX ( 0.0 , SIGN ( 1.0 , - ht_s(ji,jj,jl) ) )  
     158                  !convert units ! very important that this line is here 
     159                  e_s(ji,jj,jk,jl) = e_s(ji,jj,jk,jl) * unit_fac * zindb  
     160               END DO 
    157161            END DO 
    158           END DO 
    159         END DO 
     162         END DO 
    160163      END DO 
    161164 
     
    187190      fatm(:,:) = 0.e0 
    188191 
    189 ! 2) Partial computation of forcing for the thermodynamic sea ice model.      ! 
    190 !-----------------------------------------------------------------------------! 
    191  
    192 !     !CDIR NOVERRCHK 
    193          DO jj = 1, jpj 
    194 !        !CDIR NOVERRCHK 
    195             DO ji = 1, jpi 
     192      ! 2) Partial computation of forcing for the thermodynamic sea ice model.      ! 
     193      !-----------------------------------------------------------------------------! 
     194 
     195!CDIR NOVERRCHK 
     196      DO jj = 1, jpj 
     197!CDIR NOVERRCHK 
     198         DO ji = 1, jpi 
    196199            zthsnice       = SUM( ht_s(ji,jj,1:jpl) ) + SUM( ht_i(ji,jj,1:jpl) ) 
    197200            zindb          = tms(ji,jj) * ( 1.0 - MAX( zzero , SIGN( zone , - zthsnice ) ) )  
     
    199202            pfrld(ji,jj)   = 1.0 - at_i(ji,jj) 
    200203            zinda          = 1.0 - MAX( zzero , SIGN( zone , - ( 1.0 - pfrld(ji,jj) ) ) ) 
    201              
    202 !           !  solar irradiance transmission at the mixed layer bottom and used in the lead heat budget 
    203 !           !  practically no "direct lateral ablation" 
    204 !            
    205 !           !  net downward heat flux from the ice to the ocean, expressed as a function of ocean  
    206 !           !  temperature and turbulent mixing (McPhee, 1992) 
     204 
     205            !           !  solar irradiance transmission at the mixed layer bottom and used in the lead heat budget 
     206            !           !  practically no "direct lateral ablation" 
     207            !            
     208            !           !  net downward heat flux from the ice to the ocean, expressed as a function of ocean  
     209            !           !  temperature and turbulent mixing (McPhee, 1992) 
    207210            ! friction velocity 
    208211            zfric_u        = MAX ( MIN( SQRT( ust2s(ji,jj) ) , zfric_umax ) , zfric_umin )  
     
    211214            fdtcn(ji,jj)  = zindb * rau0 * rcp * 0.006  * zfric_u * ( (sst_m(ji,jj) + rt0) - t_bo(ji,jj) )  
    212215            ! also category dependent 
    213 !           !-- Energy from the turbulent oceanic heat flux heat flux coming in the lead  
     216            !           !-- Energy from the turbulent oceanic heat flux heat flux coming in the lead  
    214217            qdtcn(ji,jj)  = zindb * fdtcn(ji,jj) * (1.0 - at_i(ji,jj)) * rdt_ice 
    215 !                        
    216  
    217 ! still need to be updated : fdtcn !!!! 
    218 !           !-- Lead heat budget (part 1, next one is in limthd_dh 
    219 !           !-- qldif -- (or qldif_1d in 1d routines) 
     218            !                        
     219 
     220            ! still need to be updated : fdtcn !!!! 
     221            !           !-- Lead heat budget (part 1, next one is in limthd_dh 
     222            !           !-- qldif -- (or qldif_1d in 1d routines) 
    220223            zfontn         = sprecip(ji,jj) * lfus              ! energy of melting 
    221224            zfnsol         = qns(ji,jj)                         ! total non solar flux 
     
    232235            !false 
    233236            zqlbsbq(ji,jj) = qldif(ji,jj) * ( 1.0 - zpareff ) / & 
    234                              MAX( at_i(ji,jj) * rdt_ice , epsi16 ) 
     237               MAX( at_i(ji,jj) * rdt_ice , epsi16 ) 
    235238 
    236239            ! Heat budget of the lead, energy transferred from ice to ocean 
     
    244247            !  calculate oceanic heat flux (limthd_dh) 
    245248            fbif   (ji,jj) = zindb * (  fsbbq(ji,jj) / MAX( at_i(ji,jj) , epsi20 ) + fdtcn(ji,jj) ) 
    246              
     249 
    247250            ! computation of the daily thermodynamic ice production (only needed for output) 
    248251            zhicifp(ji,jj) = ht_i(ji,jj,1) * at_i(ji,jj)  
     
    251254      END DO 
    252255 
    253 !------------------------------------------------------------------------------! 
    254 ! 3) Select icy points and fulfill arrays for the vectorial grid.             
    255 !------------------------------------------------------------------------------! 
     256      !------------------------------------------------------------------------------! 
     257      ! 3) Select icy points and fulfill arrays for the vectorial grid.             
     258      !------------------------------------------------------------------------------! 
    256259 
    257260      DO jl = 1, jpl      !loop over ice categories 
    258261 
    259          WRITE(numout,*) ' lim_thd : transfer to 1D vectors. Category no : ', jl  
    260          WRITE(numout,*) ' ~~~~~~~~' 
     262         IF( kt == nit000 .AND. lwp ) THEN 
     263            WRITE(numout,*) ' lim_thd : transfer to 1D vectors. Category no : ', jl  
     264            WRITE(numout,*) ' ~~~~~~~~' 
     265         ENDIF 
    261266 
    262267         zareamin = 1.0e-10 
     
    270275               ! debug point to follow 
    271276               IF ( (ji.eq.jiindx).AND.(jj.eq.jjindx) ) THEN 
    272                    jiindex_1d = nbpb 
     277                  jiindex_1d = nbpb 
    273278               ENDIF 
    274279            END DO 
    275280         END DO 
    276281 
    277 !------------------------------------------------------------------------------! 
    278 ! 4) Thermodynamic computation 
    279 !------------------------------------------------------------------------------! 
     282         !------------------------------------------------------------------------------! 
     283         ! 4) Thermodynamic computation 
     284         !------------------------------------------------------------------------------! 
    280285 
    281286         IF( lk_mpp ) CALL mpp_ini_ice(nbpb) 
     
    283288         IF (nbpb > 0) THEN  ! If there is no ice, do nothing. 
    284289 
    285          !------------------------- 
    286          ! 4.1 Move to 1D arrays 
    287          !------------------------- 
     290            !------------------------- 
     291            ! 4.1 Move to 1D arrays 
     292            !------------------------- 
    288293 
    289294            CALL tab_2d_1d( nbpb, at_i_b     (1:nbpb)     , at_i            , jpi, jpj, npb(1:nbpb) ) 
     
    330335            CALL tab_2d_1d( nbpb, qfvbq_1d   (1:nbpb)     , qfvbq      , jpi, jpj, npb(1:nbpb) ) 
    331336 
    332          !-------------------------------- 
    333          ! 4.3) Thermodynamic processes 
    334          !-------------------------------- 
    335              
     337            !-------------------------------- 
     338            ! 4.3) Thermodynamic processes 
     339            !-------------------------------- 
     340 
    336341            IF ( con_i ) CALL lim_thd_enmelt(1,nbpb)   ! computes sea ice energy of melting 
    337342            IF ( con_i ) CALL lim_thd_glohec( qt_i_in , qt_s_in ,             & 
    338                                               q_i_layer_in , 1 , nbpb , jl ) 
    339                                                                
    340                                           !---------------------------------! 
     343               q_i_layer_in , 1 , nbpb , jl ) 
     344 
     345            !---------------------------------! 
    341346            CALL lim_thd_dif(1,nbpb,jl)   ! Ice/Snow Temperature profile    ! 
    342                                           !---------------------------------! 
     347            !---------------------------------! 
    343348 
    344349            CALL lim_thd_enmelt(1,nbpb)   ! computes sea ice energy of melting 
    345                                           ! compulsory for limthd_dh 
     350            ! compulsory for limthd_dh 
    346351 
    347352            IF ( con_i ) CALL lim_thd_glohec( qt_i_fin , qt_s_fin ,           & 
    348                                               q_i_layer_fin , 1 , nbpb , jl )  
     353               q_i_layer_fin , 1 , nbpb , jl )  
    349354            IF ( con_i ) CALL lim_thd_con_dif( 1 , nbpb , jl ) 
    350355 
    351                                           !---------------------------------! 
     356            !---------------------------------! 
    352357            CALL lim_thd_dh(1,nbpb,jl)    ! Ice/Snow thickness              !  
    353                                           !---------------------------------! 
    354  
    355                                           !---------------------------------! 
     358            !---------------------------------! 
     359 
     360            !---------------------------------! 
    356361            CALL lim_thd_ent(1,nbpb,jl)   ! Ice/Snow enthalpy remapping     ! 
    357                                           !---------------------------------! 
    358  
    359                                           !---------------------------------! 
     362            !---------------------------------! 
     363 
     364            !---------------------------------! 
    360365            CALL lim_thd_sal(1,nbpb)      ! Ice salinity computation        ! 
    361                                           !---------------------------------! 
    362  
    363 !           CALL lim_thd_enmelt(1,nbpb)   ! computes sea ice energy of melting 
     366            !---------------------------------! 
     367 
     368            !           CALL lim_thd_enmelt(1,nbpb)   ! computes sea ice energy of melting 
    364369            IF ( con_i ) CALL lim_thd_glohec( qt_i_fin, qt_s_fin,             & 
    365                                               q_i_layer_fin , 1 , nbpb , jl )  
     370               q_i_layer_fin , 1 , nbpb , jl )  
    366371            IF ( con_i ) CALL lim_thd_con_dh ( 1 , nbpb , jl ) 
    367372 
    368          !-------------------------------- 
    369          ! 4.4) Move 1D to 2D vectors 
    370          !-------------------------------- 
     373            !-------------------------------- 
     374            ! 4.4) Move 1D to 2D vectors 
     375            !-------------------------------- 
    371376 
    372377            CALL tab_1d_2d( nbpb, at_i        , npb, at_i_b (1:nbpb), jpi, jpj ) 
     
    416421            !+++++ 
    417422 
    418          IF( lk_mpp ) CALL mpp_comm_free(ncomm_ice) !RB necessary ?? 
     423            IF( lk_mpp ) CALL mpp_comm_free(ncomm_ice) !RB necessary ?? 
    419424         ENDIF ! nbpb 
    420425 
    421426      END DO ! jl 
    422427 
    423 !------------------------------------------------------------------------------! 
    424 ! 5) Global variables, diagnostics 
    425 !------------------------------------------------------------------------------! 
     428      !------------------------------------------------------------------------------! 
     429      ! 5) Global variables, diagnostics 
     430      !------------------------------------------------------------------------------! 
    426431 
    427432      !------------------------ 
     
    431436      ! Enthalpies are global variables we have to readjust the units 
    432437      DO jl = 1, jpl 
    433       DO jk = 1, nlay_i 
    434          DO jj = 1, jpj 
    435          DO ji = 1, jpi 
    436             ! Change dimensions 
    437             e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) / unit_fac 
    438  
    439             ! Multiply by volume, divide by nlayers so that heat content in 10^9 Joules 
    440             e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) * & 
    441                                area(ji,jj) * a_i(ji,jj,jl) * & 
    442                                ht_i(ji,jj,jl) / nlay_i 
    443          END DO !ji 
    444          END DO !jj 
    445       END DO !jk 
     438         DO jk = 1, nlay_i 
     439            DO jj = 1, jpj 
     440               DO ji = 1, jpi 
     441                  ! Change dimensions 
     442                  e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) / unit_fac 
     443 
     444                  ! Multiply by volume, divide by nlayers so that heat content in 10^9 Joules 
     445                  e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) * & 
     446                     area(ji,jj) * a_i(ji,jj,jl) * & 
     447                     ht_i(ji,jj,jl) / nlay_i 
     448               END DO !ji 
     449            END DO !jj 
     450         END DO !jk 
    446451      END DO !jl 
    447452 
     
    459464                  ! Multiply by volume, so that heat content in 10^9 Joules 
    460465                  e_s(ji,jj,jk,jl) = e_s(ji,jj,jk,jl) * area(ji,jj) * & 
    461                                      a_i(ji,jj,jl) * ht_s(ji,jj,jl)  / nlay_s 
     466                     a_i(ji,jj,jl) * ht_s(ji,jj,jl)  / nlay_s 
    462467               END DO !ji 
    463468            END DO !jj 
     
    513518   END SUBROUTINE lim_thd 
    514519 
    515 !=============================================================================== 
     520   !=============================================================================== 
    516521 
    517522   SUBROUTINE lim_thd_glohec(eti,ets,etilayer,kideb,kiut,jl) 
     
    552557         DO ji = kideb, kiut 
    553558            etilayer(ji,jk) = q_i_b(ji,jk) & 
    554                             * ht_i_b(ji) / nlay_i 
     559               * ht_i_b(ji) / nlay_i 
    555560            eti(ji,jl) = eti(ji,jl) + etilayer(ji,jk)  
    556561         END DO 
     
    567572      WRITE(numout,*) ' qt_s_in : ', ets(jiindex_1d,jl) / rdt_ice 
    568573      WRITE(numout,*) ' qt_in   : ', ( eti(jiindex_1d,jl) +         & 
    569                                      ets(jiindex_1d,jl) ) / rdt_ice 
     574         ets(jiindex_1d,jl) ) / rdt_ice 
    570575 
    571576   END SUBROUTINE lim_thd_glohec 
    572577 
    573 !=============================================================================== 
     578   !=============================================================================== 
    574579 
    575580   SUBROUTINE lim_thd_con_dif(kideb,kiut,jl) 
     
    594599      INTEGER ::                    & 
    595600         numce                         !: number of points for which conservation 
    596                                        !  is violated 
     601      !  is violated 
    597602      INTEGER  :: & 
    598603         ji,jk,                     &  !: loop indices 
     
    602607      max_cons_err =  1.0 
    603608      max_surf_err =  0.001 
    604              
     609 
    605610      !-------------------------- 
    606611      ! Increment of energy 
     
    608613      ! global 
    609614      DO ji = kideb, kiut 
    610           dq_i(ji,jl) = qt_i_fin(ji,jl) - qt_i_in(ji,jl)  & 
    611                       + qt_s_fin(ji,jl) - qt_s_in(ji,jl) 
     615         dq_i(ji,jl) = qt_i_fin(ji,jl) - qt_i_in(ji,jl)  & 
     616            + qt_s_fin(ji,jl) - qt_s_in(ji,jl) 
    612617      END DO 
    613618      ! layer by layer 
     
    619624 
    620625      DO ji = kideb, kiut 
    621           zji                 = MOD( npb(ji) - 1, jpi ) + 1 
    622           zjj                 = ( npb(ji) - 1 ) / jpi + 1 
    623  
    624           fatm(ji,jl) = & 
    625           qnsr_ice_1d(ji)                  + & ! atm non solar 
    626           (1.0-i0(ji))*qsr_ice_1d(ji)          ! atm solar 
    627  
    628           sum_fluxq(ji,jl) = fc_su(ji) - fc_bo_i(ji) + qsr_ice_1d(ji)*i0(ji) & 
    629                            - fstroc(zji,zjj,jl) 
     626         zji                 = MOD( npb(ji) - 1, jpi ) + 1 
     627         zjj                 = ( npb(ji) - 1 ) / jpi + 1 
     628 
     629         fatm(ji,jl) = & 
     630            qnsr_ice_1d(ji)                  + & ! atm non solar 
     631            (1.0-i0(ji))*qsr_ice_1d(ji)          ! atm solar 
     632 
     633         sum_fluxq(ji,jl) = fc_su(ji) - fc_bo_i(ji) + qsr_ice_1d(ji)*i0(ji) & 
     634            - fstroc(zji,zjj,jl) 
    630635      END DO 
    631636 
     
    635640 
    636641      DO ji = kideb, kiut 
    637           cons_error(ji,jl) = ABS( dq_i(ji,jl) / rdt_ice + sum_fluxq(ji,jl) ) 
     642         cons_error(ji,jl) = ABS( dq_i(ji,jl) / rdt_ice + sum_fluxq(ji,jl) ) 
    638643      END DO 
    639644 
     
    641646      meance = 0.0 
    642647      DO ji = kideb, kiut 
    643           IF ( cons_error(ji,jl) .GT. max_cons_err ) THEN 
    644               numce = numce + 1 
    645               meance = meance + cons_error(ji,jl) 
    646           ENDIF 
     648         IF ( cons_error(ji,jl) .GT. max_cons_err ) THEN 
     649            numce = numce + 1 
     650            meance = meance + cons_error(ji,jl) 
     651         ENDIF 
    647652      ENDDO 
    648653      IF (numce .GT. 0 ) meance = meance / numce 
     
    651656      WRITE(numout,*) ' After lim_thd_dif, category : ', jl 
    652657      WRITE(numout,*) ' Mean conservation error on big error points ', meance, & 
    653       numit 
     658         numit 
    654659      WRITE(numout,*) ' Number of points where there is a cons err gt than c.e. : ', numce, numit 
    655660 
     
    663668         surf_error(ji,jl) = ABS ( fatm(ji,jl) - fc_su(ji) ) 
    664669         IF ( ( t_su_b(ji) .LT. rtt ) .AND. ( surf_error(ji,jl) .GT. & 
    665                 max_surf_err ) ) THEN 
     670            max_surf_err ) ) THEN 
    666671            numce = numce + 1  
    667672            meance = meance + surf_error(ji,jl) 
     
    685690      DO ji = kideb, kiut 
    686691         IF ( ( ( t_su_b(ji) .LT. rtt ) .AND. ( surf_error(ji,jl) .GT. max_surf_err ) ) .OR. & 
    687               ( cons_error(ji,jl) .GT. max_cons_err  ) ) THEN 
    688          zji                 = MOD( npb(ji) - 1, jpi ) + 1 
    689          zjj                 = ( npb(ji) - 1 ) / jpi + 1 
    690  
    691          WRITE(numout,*) ' alerte 1     ' 
    692          WRITE(numout,*) ' Untolerated conservation / surface error after ' 
    693          WRITE(numout,*) ' heat diffusion in the ice ' 
    694          WRITE(numout,*) ' Category   : ', jl 
    695          WRITE(numout,*) ' zji , zjj  : ', zji, zjj 
    696          WRITE(numout,*) ' lat, lon   : ', gphit(zji,zjj), glamt(zji,zjj) 
    697          WRITE(numout,*) ' cons_error : ', cons_error(ji,jl) 
    698          WRITE(numout,*) ' surf_error : ', surf_error(ji,jl) 
    699          WRITE(numout,*) ' dq_i       : ', - dq_i(ji,jl) / rdt_ice 
    700          WRITE(numout,*) ' Fdt        : ', sum_fluxq(ji,jl) 
    701          WRITE(numout,*) 
    702 !        WRITE(numout,*) ' qt_i_in   : ', qt_i_in(ji,jl) 
    703 !        WRITE(numout,*) ' qt_s_in   : ', qt_s_in(ji,jl) 
    704 !        WRITE(numout,*) ' qt_i_fin  : ', qt_i_fin(ji,jl) 
    705 !        WRITE(numout,*) ' qt_s_fin  : ', qt_s_fin(ji,jl) 
    706 !        WRITE(numout,*) ' qt        : ', qt_i_fin(ji,jl) + & 
    707 !                                         qt_s_fin(ji,jl) 
    708          WRITE(numout,*) ' ht_i       : ', ht_i_b(ji) 
    709          WRITE(numout,*) ' ht_s       : ', ht_s_b(ji) 
    710          WRITE(numout,*) ' t_su       : ', t_su_b(ji) 
    711          WRITE(numout,*) ' t_s        : ', t_s_b(ji,1) 
    712          WRITE(numout,*) ' t_i        : ', t_i_b(ji,1:nlay_i) 
    713          WRITE(numout,*) ' t_bo       : ', t_bo_b(ji) 
    714          WRITE(numout,*) ' q_i        : ', q_i_b(ji,1:nlay_i) 
    715          WRITE(numout,*) ' s_i        : ', s_i_b(ji,1:nlay_i) 
    716          WRITE(numout,*) ' tmelts     : ', rtt - tmut*s_i_b(ji,1:nlay_i) 
    717          WRITE(numout,*) 
    718          WRITE(numout,*) ' Fluxes ' 
    719          WRITE(numout,*) ' ~~~~~~ ' 
    720          WRITE(numout,*) ' fatm       : ', fatm(ji,jl) 
    721          WRITE(numout,*) ' fc_su      : ', fc_su    (ji) 
    722          WRITE(numout,*) ' fstr_inice : ', qsr_ice_1d(ji)*i0(ji) 
    723          WRITE(numout,*) ' fc_bo      : ', - fc_bo_i  (ji) 
    724          WRITE(numout,*) ' foc        : ', fbif_1d(ji) 
    725          WRITE(numout,*) ' fstroc     : ', fstroc   (zji,zjj,jl) 
    726          WRITE(numout,*) ' i0         : ', i0(ji) 
    727          WRITE(numout,*) ' qsr_ice    : ', (1.0-i0(ji))*qsr_ice_1d(ji) 
    728          WRITE(numout,*) ' qns_ice    : ', qnsr_ice_1d(ji) 
    729          WRITE(numout,*) ' Conduction fluxes : ' 
    730          WRITE(numout,*) ' fc_s      : ', fc_s(ji,0:nlay_s) 
    731          WRITE(numout,*) ' fc_i      : ', fc_i(ji,0:nlay_i) 
    732          WRITE(numout,*) 
    733          WRITE(numout,*) ' Layer by layer ... ' 
    734          WRITE(numout,*) ' dq_snow : ', ( qt_s_fin(ji,jl) - & 
    735                                           qt_s_in(ji,jl) )  &  
    736                                                  / rdt_ice 
    737          WRITE(numout,*) ' dfc_snow  : ', fc_s(ji,1) -      & 
    738                                           fc_s(ji,0) 
    739          DO jk = 1, nlay_i 
    740             WRITE(numout,*) ' layer  : ', jk 
    741             WRITE(numout,*) ' dq_ice : ', dq_i_layer(ji,jk) / rdt_ice   
    742             WRITE(numout,*) ' radab  : ', radab(ji,jk) 
    743             WRITE(numout,*) ' dfc_i  : ', fc_i(ji,jk) -               & 
    744                                           fc_i(ji,jk-1) 
    745             WRITE(numout,*) ' tot f  : ', fc_i(ji,jk) -               & 
    746                                           fc_i(ji,jk-1) - radab(ji,jk) 
    747          END DO 
     692            ( cons_error(ji,jl) .GT. max_cons_err  ) ) THEN 
     693            zji                 = MOD( npb(ji) - 1, jpi ) + 1 
     694            zjj                 = ( npb(ji) - 1 ) / jpi + 1 
     695 
     696            WRITE(numout,*) ' alerte 1     ' 
     697            WRITE(numout,*) ' Untolerated conservation / surface error after ' 
     698            WRITE(numout,*) ' heat diffusion in the ice ' 
     699            WRITE(numout,*) ' Category   : ', jl 
     700            WRITE(numout,*) ' zji , zjj  : ', zji, zjj 
     701            WRITE(numout,*) ' lat, lon   : ', gphit(zji,zjj), glamt(zji,zjj) 
     702            WRITE(numout,*) ' cons_error : ', cons_error(ji,jl) 
     703            WRITE(numout,*) ' surf_error : ', surf_error(ji,jl) 
     704            WRITE(numout,*) ' dq_i       : ', - dq_i(ji,jl) / rdt_ice 
     705            WRITE(numout,*) ' Fdt        : ', sum_fluxq(ji,jl) 
     706            WRITE(numout,*) 
     707            !        WRITE(numout,*) ' qt_i_in   : ', qt_i_in(ji,jl) 
     708            !        WRITE(numout,*) ' qt_s_in   : ', qt_s_in(ji,jl) 
     709            !        WRITE(numout,*) ' qt_i_fin  : ', qt_i_fin(ji,jl) 
     710            !        WRITE(numout,*) ' qt_s_fin  : ', qt_s_fin(ji,jl) 
     711            !        WRITE(numout,*) ' qt        : ', qt_i_fin(ji,jl) + & 
     712            !                                         qt_s_fin(ji,jl) 
     713            WRITE(numout,*) ' ht_i       : ', ht_i_b(ji) 
     714            WRITE(numout,*) ' ht_s       : ', ht_s_b(ji) 
     715            WRITE(numout,*) ' t_su       : ', t_su_b(ji) 
     716            WRITE(numout,*) ' t_s        : ', t_s_b(ji,1) 
     717            WRITE(numout,*) ' t_i        : ', t_i_b(ji,1:nlay_i) 
     718            WRITE(numout,*) ' t_bo       : ', t_bo_b(ji) 
     719            WRITE(numout,*) ' q_i        : ', q_i_b(ji,1:nlay_i) 
     720            WRITE(numout,*) ' s_i        : ', s_i_b(ji,1:nlay_i) 
     721            WRITE(numout,*) ' tmelts     : ', rtt - tmut*s_i_b(ji,1:nlay_i) 
     722            WRITE(numout,*) 
     723            WRITE(numout,*) ' Fluxes ' 
     724            WRITE(numout,*) ' ~~~~~~ ' 
     725            WRITE(numout,*) ' fatm       : ', fatm(ji,jl) 
     726            WRITE(numout,*) ' fc_su      : ', fc_su    (ji) 
     727            WRITE(numout,*) ' fstr_inice : ', qsr_ice_1d(ji)*i0(ji) 
     728            WRITE(numout,*) ' fc_bo      : ', - fc_bo_i  (ji) 
     729            WRITE(numout,*) ' foc        : ', fbif_1d(ji) 
     730            WRITE(numout,*) ' fstroc     : ', fstroc   (zji,zjj,jl) 
     731            WRITE(numout,*) ' i0         : ', i0(ji) 
     732            WRITE(numout,*) ' qsr_ice    : ', (1.0-i0(ji))*qsr_ice_1d(ji) 
     733            WRITE(numout,*) ' qns_ice    : ', qnsr_ice_1d(ji) 
     734            WRITE(numout,*) ' Conduction fluxes : ' 
     735            WRITE(numout,*) ' fc_s      : ', fc_s(ji,0:nlay_s) 
     736            WRITE(numout,*) ' fc_i      : ', fc_i(ji,0:nlay_i) 
     737            WRITE(numout,*) 
     738            WRITE(numout,*) ' Layer by layer ... ' 
     739            WRITE(numout,*) ' dq_snow : ', ( qt_s_fin(ji,jl) - & 
     740               qt_s_in(ji,jl) )  &  
     741               / rdt_ice 
     742            WRITE(numout,*) ' dfc_snow  : ', fc_s(ji,1) -      & 
     743               fc_s(ji,0) 
     744            DO jk = 1, nlay_i 
     745               WRITE(numout,*) ' layer  : ', jk 
     746               WRITE(numout,*) ' dq_ice : ', dq_i_layer(ji,jk) / rdt_ice   
     747               WRITE(numout,*) ' radab  : ', radab(ji,jk) 
     748               WRITE(numout,*) ' dfc_i  : ', fc_i(ji,jk) -               & 
     749                  fc_i(ji,jk-1) 
     750               WRITE(numout,*) ' tot f  : ', fc_i(ji,jk) -               & 
     751                  fc_i(ji,jk-1) - radab(ji,jk) 
     752            END DO 
    748753 
    749754         ENDIF 
    750755 
    751756      END DO 
    752   
     757 
    753758   END SUBROUTINE lim_thd_con_dif 
    754759 
    755 !============================================================================== 
     760   !============================================================================== 
    756761 
    757762   SUBROUTINE lim_thd_con_dh(kideb,kiut,jl) 
     
    775780      INTEGER ::                    & 
    776781         numce                         !: number of points for which conservation 
    777                                        !  is violated 
     782      !  is violated 
    778783      INTEGER  ::  ji, zji, zjj        ! loop indices 
    779784      !!--------------------------------------------------------------------- 
    780785 
    781786      max_cons_err = 1.0 
    782              
     787 
    783788      !-------------------------- 
    784789      ! Increment of energy 
     
    786791      ! global 
    787792      DO ji = kideb, kiut 
    788           dq_i(ji,jl) = qt_i_fin(ji,jl) - qt_i_in(ji,jl)  & 
    789                       + qt_s_fin(ji,jl) - qt_s_in(ji,jl) 
     793         dq_i(ji,jl) = qt_i_fin(ji,jl) - qt_i_in(ji,jl)  & 
     794            + qt_s_fin(ji,jl) - qt_s_in(ji,jl) 
    790795      END DO 
    791796      ! layer by layer 
     
    797802 
    798803      DO ji = kideb, kiut 
    799           zji                 = MOD( npb(ji) - 1, jpi ) + 1 
    800           zjj                 = ( npb(ji) - 1 ) / jpi + 1 
    801  
    802           fatm(ji,jl) = & 
    803           qnsr_ice_1d(ji)                  + & ! atm non solar 
    804 !         (1.0-i0(ji))*qsr_ice_1d(ji)          ! atm solar 
    805           qsr_ice_1d(ji)                       ! atm solar 
    806  
    807           sum_fluxq(ji,jl)     = fatm(ji,jl) + fbif_1d(ji) - ftotal_fin(ji) &  
    808                                - fstroc(zji,zjj,jl)  
    809           cons_error(ji,jl)   = ABS( dq_i(ji,jl) / rdt_ice + sum_fluxq(ji,jl) ) 
     804         zji                 = MOD( npb(ji) - 1, jpi ) + 1 
     805         zjj                 = ( npb(ji) - 1 ) / jpi + 1 
     806 
     807         fatm(ji,jl) = & 
     808            qnsr_ice_1d(ji)                  + & ! atm non solar 
     809            !         (1.0-i0(ji))*qsr_ice_1d(ji)          ! atm solar 
     810            qsr_ice_1d(ji)                       ! atm solar 
     811 
     812         sum_fluxq(ji,jl)     = fatm(ji,jl) + fbif_1d(ji) - ftotal_fin(ji) &  
     813            - fstroc(zji,zjj,jl)  
     814         cons_error(ji,jl)   = ABS( dq_i(ji,jl) / rdt_ice + sum_fluxq(ji,jl) ) 
    810815      END DO 
    811816 
     
    815820 
    816821      DO ji = kideb, kiut 
    817           cons_error(ji,jl) = ABS( dq_i(ji,jl) / rdt_ice + sum_fluxq(ji,jl) ) 
     822         cons_error(ji,jl) = ABS( dq_i(ji,jl) / rdt_ice + sum_fluxq(ji,jl) ) 
    818823      END DO 
    819824 
     
    821826      meance = 0.0 
    822827      DO ji = kideb, kiut 
    823           IF ( cons_error(ji,jl) .GT. max_cons_err ) THEN 
    824               numce = numce + 1 
    825               meance = meance + cons_error(ji,jl) 
    826           ENDIF 
     828         IF ( cons_error(ji,jl) .GT. max_cons_err ) THEN 
     829            numce = numce + 1 
     830            meance = meance + cons_error(ji,jl) 
     831         ENDIF 
    827832      ENDDO 
    828833      IF (numce .GT. 0 ) meance = meance / numce 
     
    833838      WRITE(numout,*) ' After lim_thd_ent, category : ', jl 
    834839      WRITE(numout,*) ' Mean conservation error on big error points ', meance, & 
    835       numit 
     840         numit 
    836841      WRITE(numout,*) ' Number of points where there is a cons err gt than 0.1 W/m2 : ', numce, numit 
    837842 
     
    842847      DO ji = kideb, kiut 
    843848         IF ( cons_error(ji,jl) .GT. max_cons_err  ) THEN 
    844          zji                 = MOD( npb(ji) - 1, jpi ) + 1 
    845          zjj                 = ( npb(ji) - 1 ) / jpi + 1 
    846  
    847          WRITE(numout,*) ' alerte 1 - category : ', jl 
    848          WRITE(numout,*) ' Untolerated conservation error after limthd_ent ' 
    849          WRITE(numout,*) ' zji , zjj  : ', zji, zjj 
    850          WRITE(numout,*) ' lat, lon   : ', gphit(zji,zjj), glamt(zji,zjj) 
    851          WRITE(numout,*) ' * ' 
    852          WRITE(numout,*) ' Ftotal     : ', sum_fluxq(ji,jl) 
    853          WRITE(numout,*) ' dq_t       : ', - dq_i(ji,jl) / rdt_ice 
    854          WRITE(numout,*) ' dq_i       : ', - ( qt_i_fin(ji,jl) - qt_i_in(ji,jl) ) / rdt_ice 
    855          WRITE(numout,*) ' dq_s       : ', - ( qt_s_fin(ji,jl) - qt_s_in(ji,jl) ) / rdt_ice 
    856          WRITE(numout,*) ' cons_error : ', cons_error(ji,jl) 
    857          WRITE(numout,*) ' * ' 
    858          WRITE(numout,*) ' Fluxes        --- : ' 
    859          WRITE(numout,*) ' fatm       : ', fatm(ji,jl) 
    860          WRITE(numout,*) ' foce       : ', fbif_1d(ji) 
    861          WRITE(numout,*) ' fres       : ', ftotal_fin(ji) 
    862          WRITE(numout,*) ' fhbri      : ', fhbricat(zji,zjj,jl) 
    863          WRITE(numout,*) ' * ' 
    864          WRITE(numout,*) ' Heat contents --- : ' 
    865          WRITE(numout,*) ' qt_s_in    : ', qt_s_in(ji,jl) / rdt_ice 
    866          WRITE(numout,*) ' qt_i_in    : ', qt_i_in(ji,jl) / rdt_ice 
    867          WRITE(numout,*) ' qt_in      : ', ( qt_i_in(ji,jl) + & 
    868                                            qt_s_in(ji,jl) ) / rdt_ice 
    869          WRITE(numout,*) ' qt_s_fin   : ', qt_s_fin(ji,jl) / rdt_ice 
    870          WRITE(numout,*) ' qt_i_fin   : ', qt_i_fin(ji,jl) / rdt_ice 
    871          WRITE(numout,*) ' qt_fin     : ', ( qt_i_fin(ji,jl) + & 
    872                                            qt_s_fin(ji,jl) ) / rdt_ice 
    873          WRITE(numout,*) ' * ' 
    874          WRITE(numout,*) ' Ice variables --- : ' 
    875          WRITE(numout,*) ' ht_i       : ', ht_i_b(ji) 
    876          WRITE(numout,*) ' ht_s       : ', ht_s_b(ji) 
    877          WRITE(numout,*) ' dh_s_tot  : ', dh_s_tot(ji) 
    878          WRITE(numout,*) ' dh_snowice: ', dh_snowice(ji) 
    879          WRITE(numout,*) ' dh_i_surf : ', dh_i_surf(ji) 
    880          WRITE(numout,*) ' dh_i_bott : ', dh_i_bott(ji) 
     849            zji                 = MOD( npb(ji) - 1, jpi ) + 1 
     850            zjj                 = ( npb(ji) - 1 ) / jpi + 1 
     851 
     852            WRITE(numout,*) ' alerte 1 - category : ', jl 
     853            WRITE(numout,*) ' Untolerated conservation error after limthd_ent ' 
     854            WRITE(numout,*) ' zji , zjj  : ', zji, zjj 
     855            WRITE(numout,*) ' lat, lon   : ', gphit(zji,zjj), glamt(zji,zjj) 
     856            WRITE(numout,*) ' * ' 
     857            WRITE(numout,*) ' Ftotal     : ', sum_fluxq(ji,jl) 
     858            WRITE(numout,*) ' dq_t       : ', - dq_i(ji,jl) / rdt_ice 
     859            WRITE(numout,*) ' dq_i       : ', - ( qt_i_fin(ji,jl) - qt_i_in(ji,jl) ) / rdt_ice 
     860            WRITE(numout,*) ' dq_s       : ', - ( qt_s_fin(ji,jl) - qt_s_in(ji,jl) ) / rdt_ice 
     861            WRITE(numout,*) ' cons_error : ', cons_error(ji,jl) 
     862            WRITE(numout,*) ' * ' 
     863            WRITE(numout,*) ' Fluxes        --- : ' 
     864            WRITE(numout,*) ' fatm       : ', fatm(ji,jl) 
     865            WRITE(numout,*) ' foce       : ', fbif_1d(ji) 
     866            WRITE(numout,*) ' fres       : ', ftotal_fin(ji) 
     867            WRITE(numout,*) ' fhbri      : ', fhbricat(zji,zjj,jl) 
     868            WRITE(numout,*) ' * ' 
     869            WRITE(numout,*) ' Heat contents --- : ' 
     870            WRITE(numout,*) ' qt_s_in    : ', qt_s_in(ji,jl) / rdt_ice 
     871            WRITE(numout,*) ' qt_i_in    : ', qt_i_in(ji,jl) / rdt_ice 
     872            WRITE(numout,*) ' qt_in      : ', ( qt_i_in(ji,jl) + & 
     873               qt_s_in(ji,jl) ) / rdt_ice 
     874            WRITE(numout,*) ' qt_s_fin   : ', qt_s_fin(ji,jl) / rdt_ice 
     875            WRITE(numout,*) ' qt_i_fin   : ', qt_i_fin(ji,jl) / rdt_ice 
     876            WRITE(numout,*) ' qt_fin     : ', ( qt_i_fin(ji,jl) + & 
     877               qt_s_fin(ji,jl) ) / rdt_ice 
     878            WRITE(numout,*) ' * ' 
     879            WRITE(numout,*) ' Ice variables --- : ' 
     880            WRITE(numout,*) ' ht_i       : ', ht_i_b(ji) 
     881            WRITE(numout,*) ' ht_s       : ', ht_s_b(ji) 
     882            WRITE(numout,*) ' dh_s_tot  : ', dh_s_tot(ji) 
     883            WRITE(numout,*) ' dh_snowice: ', dh_snowice(ji) 
     884            WRITE(numout,*) ' dh_i_surf : ', dh_i_surf(ji) 
     885            WRITE(numout,*) ' dh_i_bott : ', dh_i_bott(ji) 
    881886 
    882887         ENDIF 
    883888 
    884889      END DO 
    885   
     890 
    886891   END SUBROUTINE lim_thd_con_dh 
    887 !============================================================================== 
     892   !============================================================================== 
    888893 
    889894   SUBROUTINE lim_thd_enmelt(kideb,kiut) 
     
    899904      INTEGER, INTENT(in) ::        & 
    900905         kideb, kiut                   !: bounds for the spatial loop 
    901           
     906 
    902907      REAL(wp)                 ::   &  !: goes to trash 
    903908         ztmelts               ,    &  !: sea ice freezing point in K 
     
    916921            ztmelts      =   - tmut * s_i_b(ji,jk) + rtt  
    917922            q_i_b(ji,jk) =   rhoic*( cpic    * ( ztmelts - t_i_b(ji,jk) )  & 
    918                          + lfus  * ( 1.0 - (ztmelts-rtt)/MIN((t_i_b(ji,jk)-rtt),-zeps) )  & 
    919                          - rcp      * ( ztmelts-rtt  ) )  
     923               + lfus  * ( 1.0 - (ztmelts-rtt)/MIN((t_i_b(ji,jk)-rtt),-zeps) )  & 
     924               - rcp      * ( ztmelts-rtt  ) )  
    920925         END DO !ji 
    921926      END DO !jk 
     
    930935   END SUBROUTINE lim_thd_enmelt 
    931936 
    932 !============================================================================== 
     937   !============================================================================== 
    933938 
    934939   SUBROUTINE lim_thd_init 
     
    954959         &                kappa_i, nconv_i_thd, maxer_i_thd, thcon_i_swi 
    955960      !!------------------------------------------------------------------- 
    956        
     961 
    957962      ! Define the initial parameters 
    958963      ! ------------------------- 
     
    990995         WRITE(numout,*) 
    991996      ENDIF 
    992              
     997 
    993998      rcdsn = hakdif * rcdsn  
    994999      rcdic = hakdif * rcdic 
    995        
     1000 
    9961001 
    9971002   END SUBROUTINE lim_thd_init 
Note: See TracChangeset for help on using the changeset viewer.