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 15742 – NEMO

Changeset 15742


Ignore:
Timestamp:
2022-03-08T16:20:40+01:00 (2 years ago)
Author:
emmafiedler
Message:

Merging in R75 strength changes, diagnostics updates and latest changes

Location:
NEMO/branches/UKMO/NEMO_4.0.4_EAP_rheology_fix
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/UKMO/NEMO_4.0.4_EAP_rheology_fix/cfgs/SHARED/field_def_nemo-ice.xml

    r15570 r15742  
    9191          <field id="yield22"      long_name="yield surface tensor component 22"                       standard_name="yield22"                                   unit="N/m"  /> 
    9292          <field id="yield12"      long_name="yield surface tensor component 12"                       standard_name="yield12"                                   unit="N/m"  /> 
    93           <field id="beta_evp"     long_name="Relaxation parameter of ice rheology (beta)"             standard_name="relaxation_parameter_of_ice_rheology"      unit=""  />    
    94   
     93          <field id="beta_evp"     long_name="Relaxation parameter of ice rheology (beta)"             standard_name="relaxation_parameter_of_ice_rheology"      unit=""     />  
     94          <field id="opning"       long_name="Lead area opening rate"                                  standard_name="opning"                                    unit="1/s"  /> 
     95          <field id="dairdg1dt"    long_name="Ridging ice area loss rate"                              standard_name="dairdg1dt"                                 unit="1/s"  /> 
     96          <field id="dairft1dt"    long_name="Rafting ice area loss rate"     
     97standard_name="dairft1dt"                                 unit="1/s"  /> 
     98          <field id="dairdg2dt"    long_name="New ridged ice area gain rate"                             standard_name="dairdg2dt"                                 unit="1/s"  /> 
     99          <field id="dairft2dt"    long_name="New rafted ice area gain rate"                            standard_name="dairft2dt"                                 unit="1/s"  /> 
     100 
    95101     <!-- surface heat fluxes --> 
    96102          <field id="qt_ice"       long_name="total heat flux at ice surface"                          standard_name="surface_downward_heat_flux_in_air"         unit="W/m2" /> 
     
    409415          <field field_ref="sig2_pnorm"       name="sig2_pnorm"/> 
    410416     <field field_ref="icedlt"           name="sidelta" /> 
     417          <field field_ref="opning"           name="opning"      /> 
     418          <field field_ref="dairdg1dt"        name="dairdg1dt"   /> 
     419          <field field_ref="dairft1dt"        name="dairft1dt"   /> 
     420          <field field_ref="dairdg2dt"        name="dairdg2dt"   /> 
     421          <field field_ref="dairft2dt"        name="dairft2dt"   /> 
     422 
    411423      
    412424     <!-- heat fluxes --> 
  • NEMO/branches/UKMO/NEMO_4.0.4_EAP_rheology_fix/src/ICE/icedyn_rdgrft.F90

    r15570 r15742  
    4343   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:)     ::   opning          ! rate of opening due to divergence/shear 
    4444   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:)     ::   closing_gross   ! rate at which area removed, not counting area of new ridges 
     45   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:)     ::   zaksum          ! normalisation factor 
     46   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:)     ::   zasum           ! sum of ice area plus open water    
    4547   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   apartf          ! participation function; fraction of ridging/closing associated w/ category n 
     48   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   zhi             ! ice thickness in category n 
    4649   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   hrmin           ! minimum ridge thickness 
    4750   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   hrmax           ! maximum ridge thickness 
     51   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   hrexp           ! e-folding ridge thickness 
    4852   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   hraft           ! thickness of rafted ice 
    4953   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   hi_hrdg         ! thickness of ridging ice / mean ridge thickness 
     
    5357   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   ze_s_2d 
    5458   ! 
     59   ! For ridging diagnostics 
     60   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:)     ::   airdg1          ! Ridging ice area loss 
     61   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:)     ::   airft1          ! Rafting ice area loss 
     62   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:)     ::   airdg2          ! New ridged ice area gain 
     63   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:)     ::   airft2          ! New rafted ice area gain 
     64   ! 
    5565   REAL(wp), PARAMETER ::   hrdg_hi_min = 1.1_wp    ! min ridge thickness multiplier: min(hrdg/hi) 
    56    REAL(wp), PARAMETER ::   hi_hrft     = 0.5_wp    ! rafting multipliyer: (hi/hraft) 
     66   REAL(wp), PARAMETER ::   hi_hrft     = 0.5_wp    ! rafting multiplier: (hi/hraft) 
    5767   ! 
    5868   ! ** namelist (namdyn_rdgrft) ** 
    5969   LOGICAL  ::   ln_str_H79       ! ice strength parameterization (Hibler79) 
    60    REAL(wp) ::   rn_pstar         ! determines ice strength, Hibler JPO79 
     70   REAL(wp) ::   rn_pstar         !    determines ice strength, Hibler JPO79 
     71   LOGICAL  ::   ln_str_R75       ! ice strength parameterization (Rothrock75) 
     72   REAL(wp) ::   rn_Cf            !    ratio of ridging work to PE change in ridging, R75 
     73   INTEGER  ::   ismooth          ! smoothing the resistance to deformation (strength) 
     74   LOGICAL  ::   ln_redist_ufm    ! uniform redistribution of ridged ice (Hibler, 1980)  
     75   LOGICAL  ::   ln_redist_exp    ! exponential redistribution of ridged ice 
     76   REAL(wp) ::   max_strength     !    maximum strength cap    
     77   REAL(wp) ::   rn_murdg         !    gives e-folding scale of ridged ice (m^.5) for ln_redist_exp 
    6178   REAL(wp) ::   rn_csrdg         ! fraction of shearing energy contributing to ridging             
    6279   LOGICAL  ::   ln_partf_lin     ! participation function linear (Thorndike et al. (1975)) 
     
    86103      !!                ***  ROUTINE ice_dyn_rdgrft_alloc *** 
    87104      !!------------------------------------------------------------------- 
    88       ALLOCATE( closing_net(jpij)  , opning(jpij)      , closing_gross(jpij) ,               & 
    89          &      apartf(jpij,0:jpl) , hrmin  (jpij,jpl) , hraft(jpij,jpl) , aridge(jpij,jpl), & 
    90          &      hrmax (jpij,jpl)   , hi_hrdg(jpij,jpl) , araft(jpij,jpl) ,                   & 
    91          &      ze_i_2d(jpij,nlay_i,jpl), ze_s_2d(jpij,nlay_s,jpl), STAT=ice_dyn_rdgrft_alloc ) 
     105      ALLOCATE( closing_net(jpij)  , opning(jpij)      , closing_gross(jpij) ,  & 
     106         &      apartf(jpij,0:jpl) , hrmin(jpij,jpl)   , hrmax(jpij,jpl)     , zhi(jpij,jpl),  & 
     107         &      zaksum(jpij)       , hraft(jpij,jpl)   , hrexp(jpij,jpl)     ,  & 
     108         &      hi_hrdg(jpij,jpl)  , araft(jpij,jpl)   , aridge(jpij,jpl)    , zasum(jpij), & 
     109         &      ze_i_2d(jpij,nlay_i,jpl), ze_s_2d(jpij,nlay_s,jpl), & 
     110         &      airdg1(jpij), airft1(jpij), airdg2(jpij), airft2(jpij), STAT=ice_dyn_rdgrft_alloc ) 
    92111 
    93112      CALL mpp_sum ( 'icedyn_rdgrft', ice_dyn_rdgrft_alloc ) 
     
    139158      REAL(wp), DIMENSION(jpij) ::   zdivu, zdelt  ! 1D divu_i & delta_i 
    140159      REAL(wp), DIMENSION(jpij) ::   zconv         ! 1D rdg_conv (if EAP rheology) 
     160 
     161      REAL(wp), DIMENSION(jpi,jpj) ::   opning_2d  ! Lead opening diagnostic 
     162      REAL(wp), DIMENSION(jpi,jpj) ::   airdg1_2d  ! Ridging ice area loss diagnostic 
     163      REAL(wp), DIMENSION(jpi,jpj) ::   airft1_2d  ! Rafting ice area loss diagnostic 
     164      REAL(wp), DIMENSION(jpi,jpj) ::   airdg2_2d  ! New ridged ice area gain diagnostic 
     165      REAL(wp), DIMENSION(jpi,jpj) ::   airft2_2d  ! New rafted ice area gain diagnostic 
     166      REAL(wp), DIMENSION(jpi,jpj) ::   dairdg1dt  ! Ridging ice area loss rate diagnostic 
     167      REAL(wp), DIMENSION(jpi,jpj) ::   dairft1dt  ! Rafting ice area loss rate diagnostic 
     168      REAL(wp), DIMENSION(jpi,jpj) ::   dairdg2dt  ! New ridged ice area gain rate diagnostic 
     169      REAL(wp), DIMENSION(jpi,jpj) ::   dairft2dt  ! New rafted ice area gain rate diagnostic 
     170      REAL(wp), DIMENSION(jpi,jpj) ::   zmsk00     ! Mask for ice presence 
    141171      ! 
    142172      INTEGER, PARAMETER ::   jp_itermax = 20     
     
    151181         IF(lwp) WRITE(numout,*)'ice_dyn_rdgrft: ice ridging and rafting' 
    152182         IF(lwp) WRITE(numout,*)'~~~~~~~~~~~~~~' 
    153       ENDIF       
     183      ENDIF      
     184 
     185      ! Initialise ridging diagnostics 
     186      opning_2d(:,:) = 0.0_wp 
     187      dairdg1dt(:,:) = 0.0_wp 
     188      dairft1dt(:,:) = 0.0_wp 
     189      dairdg2dt(:,:) = 0.0_wp 
     190      dairft2dt(:,:) = 0.0_wp 
     191      airdg1_2d(:,:) = 0.0_wp 
     192      airft1_2d(:,:) = 0.0_wp 
     193      airdg2_2d(:,:) = 0.0_wp 
     194      airft2_2d(:,:) = 0.0_wp 
    154195 
    155196      !-------------------------------- 
     
    162203      DO jj = 1, jpj 
    163204         DO ji = 1, jpi 
     205            zmsk00(ji,jj) = MAX( 0._wp , SIGN( 1._wp , at_i(ji,jj) - epsi06  ) ) ! 1 if ice, 0 if no ice. epsi06 used here rather than epsi10 as below for consistency with ice masking elsewhere 
    164206            IF ( at_i(ji,jj) > epsi10 ) THEN 
    165207               npti           = npti + 1 
     
    188230            IF( ln_rhg_EVP )  closing_net(ji) = rn_csrdg * 0.5_wp * ( zdelt(ji) - ABS( zdivu(ji) ) ) - MIN( zdivu(ji), 0._wp ) 
    189231            IF( ln_rhg_EAP )  closing_net(ji) = zconv(ji) 
    190             ! 
     232            !      
    191233            IF( zdivu(ji) < 0._wp )   closing_net(ji) = MAX( closing_net(ji), -zdivu(ji) )   ! make sure the closing rate is large enough 
    192234            !                                                                                ! to give asum = 1.0 after ridging 
    193235            ! Opening rate (non-negative) that will give asum = 1.0 after ridging. 
    194236            opning(ji) = closing_net(ji) + zdivu(ji) 
     237            ! 
    195238         END DO 
    196239         ! 
     
    266309         CALL ice_dyn_1d2d( 2 )            ! --- Move to 2D arrays --- ! 
    267310 
     311! --- Ridging diagnostics --- ! 
     312 
     313         IF( iom_use('opning') ) THEN 
     314           CALL tab_1d_2d( npti, nptidx(1:npti), opning(1:npti), opning_2d(:,:) ) 
     315         END IF 
     316 
     317         IF( iom_use('dairdg1dt') .OR. iom_use('dairft1dt') .OR. iom_use('dairdg2dt') .OR. iom_use('dairft2dt') ) THEN 
     318           ! 
     319           CALL tab_1d_2d( npti, nptidx(1:npti), airdg1(1:npti), airdg1_2d(:,:) ) 
     320           CALL tab_1d_2d( npti, nptidx(1:npti), airft1(1:npti), airft1_2d(:,:) ) 
     321           CALL tab_1d_2d( npti, nptidx(1:npti), airdg2(1:npti), airdg2_2d(:,:) ) 
     322           CALL tab_1d_2d( npti, nptidx(1:npti), airft2(1:npti), airft2_2d(:,:) ) 
     323           ! 
     324           DO jj = 1, jpj 
     325              DO ji = 1, jpi 
     326              ! 
     327              dairdg1dt(ji,jj) = airdg1_2d(ji,jj) * r1_rdtice 
     328              dairft1dt(ji,jj) = airft1_2d(ji,jj) * r1_rdtice                       
     329              dairdg2dt(ji,jj) = airdg2_2d(ji,jj) * r1_rdtice 
     330              dairft2dt(ji,jj) = airft2_2d(ji,jj) * r1_rdtice  
     331              ! 
     332              END DO 
     333           END DO     
     334          !          
     335         ENDIF 
     336        !  
     337      ENDIF  ! npti>0 
     338 
     339 
     340      IF( iom_use('opning') ) THEN 
     341        CALL lbc_lnk( 'icedyn_rdgrft', opning_2d(:,:), 'T', 1. ) 
     342        CALL iom_put( 'opning', opning_2d(:,:) * zmsk00(:,:) )     ! Lead area opening rate 
    268343      ENDIF 
    269     
     344 
     345      IF( iom_use('dairdg1dt') ) THEN 
     346        CALL lbc_lnk( 'icedyn_rdgrft', dairdg1dt(:,:), 'T', 1. ) 
     347        CALL iom_put( 'dairdg1dt', dairdg1dt(:,:) * zmsk00(:,:) )  ! Ridging ice area loss rate 
     348      ENDIF 
     349 
     350      IF( iom_use('dairft1dt') ) THEN 
     351        CALL lbc_lnk( 'icedyn_rdgrft', dairft1dt(:,:), 'T', 1. ) 
     352        CALL iom_put( 'dairft1dt', dairft1dt(:,:) * zmsk00(:,:) )  ! Rafting ice area loss rate 
     353      ENDIF 
     354 
     355      IF( iom_use('dairdg2dt') ) THEN 
     356        CALL lbc_lnk( 'icedyn_rdgrft', dairdg2dt(:,:), 'T', 1. ) 
     357        CALL iom_put( 'dairdg2dt', dairdg2dt(:,:) * zmsk00(:,:) )  ! New ridged ice area gain rate 
     358      ENDIF 
     359 
     360      IF( iom_use('dairft2dt') ) THEN 
     361        CALL lbc_lnk( 'icedyn_rdgrft', dairft2dt(:,:), 'T', 1. ) 
     362        CALL iom_put( 'dairft2dt', dairft2dt(:,:) * zmsk00(:,:) )  ! New rafted ice area gain rate 
     363      ENDIF 
     364 
     365! ------- ! 
     366 
    270367      CALL ice_var_agg( 1 )  
    271368 
     
    280377 
    281378 
    282    SUBROUTINE rdgrft_prep( pa_i, pv_i, pato_i, pclosing_net ) 
     379 
     380   SUBROUTINE rdgrft_prep( pa_i_in, pv_i, pato_i, pclosing_net ) 
    283381      !!------------------------------------------------------------------- 
    284382      !!                ***  ROUTINE rdgrft_prep *** 
     
    290388      !!------------------------------------------------------------------- 
    291389      REAL(wp), DIMENSION(:)  , INTENT(in) ::   pato_i, pclosing_net  
    292       REAL(wp), DIMENSION(:,:), INTENT(in) ::   pa_i, pv_i  
     390      REAL(wp), DIMENSION(:,:), INTENT(in) ::   pa_i_in, pv_i  
     391      REAL(wp), DIMENSION(jpij,jpl)        ::   pa_i                     ! area adjusted for minimum zhi 
    293392      !! 
    294393      INTEGER  ::   ji, jl                     ! dummy loop indices 
    295394      REAL(wp) ::   z1_gstar, z1_astar, zhmean, zfac   ! local scalar 
    296       REAL(wp), DIMENSION(jpij)        ::   zasum, z1_asum, zaksum   ! sum of a_i+ato_i and reverse  
    297       REAL(wp), DIMENSION(jpij,jpl)    ::   zhi                      ! ice thickness 
     395      REAL(wp), DIMENSION(jpij)        ::   z1_asum                  ! inverse of sum of a_i+ato_i 
    298396      REAL(wp), DIMENSION(jpij,-1:jpl) ::   zGsum                    ! zGsum(n) = sum of areas in categories 0 to n 
    299397      !-------------------------------------------------------------------- 
     
    301399      z1_gstar = 1._wp / rn_gstar 
    302400      z1_astar = 1._wp / rn_astar 
     401 
     402      pa_i(:,:) = pa_i_in(:,:) 
    303403 
    304404      !                       ! Ice thickness needed for rafting 
     
    306406      ELSEWHERE                          ;   zhi(1:npti,:) = 0._wp 
    307407      END WHERE 
     408      ! Make sure ice thickness is not below the minimum (from iceitd.F90; no minimum was causing issues for R75  
     409      ! strength) 
     410      WHERE( pa_i(1:npti,:) > epsi10 .AND. zhi(1:npti,:) < rn_himin )  
     411        pa_i(1:npti,:) = pa_i(1:npti,:) * zhi(1:npti,:) / rn_himin 
     412        zhi(1:npti,:) = rn_himin 
     413      END WHERE 
     414 
     415      ! Set tiny values of pa_i to zero 
     416      ! If this isn't done, can end up with zhi=0 but apartf>0 
     417      WHERE( pa_i(1:npti,:) <= epsi10 )   ;   pa_i(1:npti,:) = 0._wp 
     418      END WHERE 
     419 
    308420 
    309421      ! 1) Participation function (apartf): a(h) = b(h).g(h) 
     
    320432      ! Compute total area of ice plus open water. 
    321433      ! This is in general not equal to one because of divergence during transport 
    322       zasum(1:npti) = pato_i(1:npti) + SUM( pa_i(1:npti,:), dim=2 ) 
    323       ! 
     434      zasum(1:npti) = pato_i(1:npti) + SUM( pa_i(1:npti,1:jpl), dim=2 ) 
     435 
    324436      WHERE( zasum(1:npti) > epsi10 )   ;   z1_asum(1:npti) = 1._wp / zasum(1:npti) 
    325437      ELSEWHERE                         ;   z1_asum(1:npti) = 0._wp 
    326438      END WHERE 
    327       ! 
     439 
    328440      ! Compute cumulative thickness distribution function 
    329441      ! Compute the cumulative thickness distribution function zGsum, 
     
    333445      zGsum(1:npti,0 ) = pato_i(1:npti) * z1_asum(1:npti) 
    334446      DO jl = 1, jpl 
    335          zGsum(1:npti,jl) = ( pato_i(1:npti) + SUM( pa_i(1:npti,1:jl), dim=2 ) ) * z1_asum(1:npti)  ! sum(1:jl) is ok (and not jpl) 
     447         zGsum(1:npti,jl) = ( pato_i(1:npti) + SUM( pa_i(1:npti,1:jl), dim=2 ) ) * z1_asum(1:npti)  ! sum(1:jl) is correct (and not jpl)  
    336448      END DO 
    337449      ! 
     
    398510      ENDIF 
    399511 
     512 
     513 
    400514      ! 2) Transfer function 
    401515      !----------------------------------------------------------------- 
     516      ! If assuming ridged ice is uniformly distributed between hrmin and  
     517      ! hrmax (ln_redist_ufm): 
     518      ! 
    402519      ! Compute max and min ridged ice thickness for each ridging category. 
    403       ! Assume ridged ice is uniformly distributed between hrmin and hrmax. 
    404520      !  
    405521      ! This parameterization is a modified version of Hibler (1980). 
     
    416532      ! (relative to the Hibler formulation) when very thick ice is ridging. 
    417533      ! 
    418       ! zaksum = net area removed/ total area removed 
    419       ! where total area removed = area of ice that ridges 
    420       !         net area removed = total area removed - area of new ridges 
     534      !----------------------------------------------------------------- 
     535      ! If assuming ridged ice ITD is a negative exponential  
     536      ! (ln_redist_exp) and following CICE implementation:  
     537      !  
     538      !  g(h) ~ exp[-(h-hrmin)/hrexp], h >= hrmin  
     539      !  
     540      ! where hrmin is the minimum thickness of ridging ice and  
     541      ! hrexp is the e-folding thickness. 
     542      !  
     543      ! Here, assume as above that hrmin = min(2*hi, hi+maxraft). 
     544      ! That is, the minimum ridge thickness results from rafting, 
     545      !  unless the ice is thicker than maxraft. 
     546      ! 
     547      ! Also, assume that hrexp = mu_rdg*sqrt(hi). 
     548      ! The parameter mu_rdg is tuned to give e-folding scales mostly 
     549      !  in the range 2-4 m as observed by upward-looking sonar. 
     550      ! 
     551      ! Values of mu_rdg in the right column give ice strengths 
     552      !  roughly equal to values of Hstar in the left column 
     553      !  (within ~10 kN/m for typical ITDs): 
     554      ! 
     555      !   Hstar     mu_rdg 
     556      ! 
     557      !     25        3.0 
     558      !     50        4.0 
     559      !     75        5.0 
     560      !    100        6.0 
     561      ! 
     562      ! zaksum = net area removed/ total area participating 
     563      ! where total area participating = area of ice that ridges 
     564      !         net area removed = total area participating - area of new ridges 
    421565      !----------------------------------------------------------------- 
    422566      zfac = 1._wp / hi_hrft 
     
    428572               zhmean         = MAX( SQRT( rn_hstar * zhi(ji,jl) ), zhi(ji,jl) * hrdg_hi_min ) 
    429573               hrmin  (ji,jl) = MIN( 2._wp * zhi(ji,jl), 0.5_wp * ( zhmean + zhi(ji,jl) ) ) 
    430                hrmax  (ji,jl) = 2._wp * zhmean - hrmin(ji,jl) 
    431574               hraft  (ji,jl) = zhi(ji,jl) * zfac 
    432                hi_hrdg(ji,jl) = zhi(ji,jl) / MAX( zhmean, epsi20 ) 
     575               ! 
     576               IF ( ln_redist_ufm ) THEN 
     577                 hrmax  (ji,jl) = 2._wp * zhmean - hrmin(ji,jl) 
     578                 hi_hrdg(ji,jl) = zhi(ji,jl) / zhmean 
     579               ELSE IF ( ln_redist_exp ) THEN 
     580                 hrexp  (ji,jl) = rn_murdg * SQRT( zhi(ji,jl) )                
     581                 hi_hrdg(ji,jl) = zhi(ji,jl) / ( hrmin(ji,jl) + hrexp(ji,jl) )      
     582               END IF     
    433583               ! 
    434584               ! Normalization factor : zaksum, ensures mass conservation 
     
    439589               hrmax  (ji,jl) = 0._wp  
    440590               hraft  (ji,jl) = 0._wp  
     591               hrexp  (ji,jl) = 0._wp 
    441592               hi_hrdg(ji,jl) = 1._wp 
     593               zaksum (ji)    = 0._wp 
    442594            ENDIF 
    443595         END DO 
     
    493645      INTEGER  ::   ji, jj, jl, jl1, jl2, jk   ! dummy loop indices 
    494646      REAL(wp) ::   hL, hR, farea              ! left and right limits of integration and new area going to jl2 
     647      REAL(wp) ::   expL, expR                 ! exponentials involving hL, hR 
    495648      REAL(wp) ::   vsw                        ! vol of water trapped into ridges 
    496649      REAL(wp) ::   afrdg, afrft               ! fraction of category area ridged/rafted  
    497       REAL(wp)                  ::   airdg1, oirdg1, aprdg1, virdg1, sirdg1 
    498       REAL(wp)                  ::   airft1, oirft1, aprft1 
    499       REAL(wp), DIMENSION(jpij) ::   airdg2, oirdg2, aprdg2, virdg2, sirdg2, vsrdg, vprdg, vlrdg  ! area etc of new ridges 
    500       REAL(wp), DIMENSION(jpij) ::   airft2, oirft2, aprft2, virft , sirft , vsrft, vprft, vlrft  ! area etc of rafted ice 
     650      REAL(wp)                  ::   oirdg1, aprdg1, virdg1, sirdg1 
     651      REAL(wp)                  ::   oirft1, aprft1 
     652      REAL(wp), DIMENSION(jpij) ::   oirdg2, aprdg2, virdg2, sirdg2, vsrdg, vprdg, vlrdg  ! area etc of new ridges 
     653      REAL(wp), DIMENSION(jpij) ::   oirft2, aprft2, virft , sirft , vsrft, vprft, vlrft  ! area etc of rafted ice 
    501654      ! 
    502655      REAL(wp), DIMENSION(jpij) ::   ersw             ! enth of water trapped into ridges 
     
    538691                
    539692               ! area of ridging / rafting ice (airdg1) and of new ridge (airdg2) 
    540                airdg1 = aridge(ji,jl1) * closing_gross(ji) * rdt_ice 
    541                airft1 = araft (ji,jl1) * closing_gross(ji) * rdt_ice 
    542  
    543                airdg2(ji) = airdg1 * hi_hrdg(ji,jl1) 
    544                airft2(ji) = airft1 * hi_hrft 
     693               airdg1(ji) = aridge(ji,jl1) * closing_gross(ji) * rdt_ice 
     694               airft1(ji) = araft (ji,jl1) * closing_gross(ji) * rdt_ice 
     695 
     696               airdg2(ji) = airdg1(ji) * hi_hrdg(ji,jl1) 
     697               airft2(ji) = airft1(ji) * hi_hrft 
    545698 
    546699               ! ridging /rafting fractions 
    547                afrdg = airdg1 * z1_ai(ji) 
    548                afrft = airft1 * z1_ai(ji) 
     700               afrdg = airdg1(ji) * z1_ai(ji) 
     701               afrft = airft1(ji) * z1_ai(ji) 
    549702 
    550703               ! volume and enthalpy (J/m2, >0) of seawater trapped into ridges 
     
    602755               ! Remove area, volume of new ridge to each category jl1 
    603756               !------------------------------------------------------ 
    604                a_i_2d (ji,jl1) = a_i_2d (ji,jl1) - airdg1    - airft1 
     757               a_i_2d (ji,jl1) = a_i_2d (ji,jl1) - airdg1(ji)- airft1(ji) 
    605758               v_i_2d (ji,jl1) = v_i_2d (ji,jl1) - virdg1    - virft(ji) 
    606759               v_s_2d (ji,jl1) = v_s_2d (ji,jl1) - vsrdg(ji) - vsrft(ji) 
     
    661814         itest_rdg(1:npti) = 0 
    662815         itest_rft(1:npti) = 0 
     816         ! 
    663817         DO jl2  = 1, jpl  
    664818            ! 
    665819            DO ji = 1, npti 
    666820 
    667                IF( apartf(ji,jl1) > 0._wp .AND. closing_gross(ji) > 0._wp ) THEN 
    668  
    669                   ! Compute the fraction of ridged ice area and volume going to thickness category jl2 
     821              IF( apartf(ji,jl1) > 0._wp .AND. closing_gross(ji) > 0._wp ) THEN 
     822                 ! 
     823                 ! Compute the fraction of ridged ice area and volume going to thickness category jl2 
     824                 ! 
     825                 IF ( ln_redist_ufm ) THEN ! Hibler (1980) uniform formulation 
     826                 ! 
    670827                  IF( hrmin(ji,jl1) <= hi_max(jl2) .AND. hrmax(ji,jl1) > hi_max(jl2-1) ) THEN 
    671828                     hL = MAX( hrmin(ji,jl1), hi_max(jl2-1) ) 
     
    679836                     fvol(ji) = 0._wp                   
    680837                  ENDIF 
     838                  ! 
     839                 ELSE IF ( ln_redist_exp ) THEN ! Lipscomb et al. (2007) exponential formulation 
     840                  ! 
     841                  IF (jl2 < jpl) THEN 
     842                  ! 
     843                    IF (hrmin(ji,jl1) <= hi_max(jl2)) THEN 
     844                       hL       = MAX( hrmin(ji,jl1), hi_max(jl2-1) ) 
     845                       hR       = hi_max(jl2) 
     846                       expL     = EXP( -( hL - hrmin(ji,jl1) ) / hrexp(ji,jl1) ) 
     847                       expR     = EXP( -( hR - hrmin(ji,jl1) ) / hrexp(ji,jl1) ) 
     848                       farea    = expL - expR 
     849                       fvol(ji) = ( ( hL + hrexp(ji,jl1) ) * expL  & 
     850                                  - ( hR + hrexp(ji,jl1) ) * expR ) / ( hrmin(ji,jl1) + hrexp(ji,jl1) ) 
     851                     ELSE 
     852                       farea    = 0._wp  
     853                       fvol(ji) = 0._wp   
     854                     END IF              
     855                     !                  
     856                  ELSE             ! jl2 = jpl 
     857                    ! 
     858                    hL       = MAX( hrmin(ji,jl1), hi_max(jl2-1) ) 
     859                    expL     = EXP(-( hL - hrmin(ji,jl1) ) / hrexp(ji,jl1) ) 
     860                    farea    = expL 
     861                    fvol(ji) = ( hL + hrexp(ji,jl1) ) * expL / ( hrmin(ji,jl1) + hrexp(ji,jl1) )   
     862                    ! 
     863                  END IF            ! jl2 < jpl 
     864                  !  
     865                 END IF             ! ridge redistribution 
    681866 
    682867                  ! Compute the fraction of rafted ice area and volume going to thickness category jl2 
     
    757942      !!              dissipated per unit area removed from the ice pack under compression, 
    758943      !!              and assumed proportional to the change in potential energy caused 
    759       !!              by ridging. Note that only Hibler's formulation is stable and that 
    760       !!              ice strength has to be smoothed 
     944      !!              by ridging. Note that ice strength using Hibler's formulation must be 
     945      !!              smoothed. 
    761946      !!---------------------------------------------------------------------- 
    762947      INTEGER             ::   ji, jj, jl  ! dummy loop indices 
    763       INTEGER             ::   ismooth     ! smoothing the resistance to deformation 
    764948      INTEGER             ::   itframe     ! number of time steps for the P smoothing 
    765949      REAL(wp)            ::   zp, z1_3    ! local scalars 
     950      REAL(wp)            ::   Cp          ! proportional constant for PE 
     951      REAL(wp)            ::   h2rdg       ! mean value of h^2 for new ridge 
     952      REAL(wp)            ::   dh2rdg      ! change in mean value of h^2 per unit area consumed by ridging  
    766953      REAL(wp), DIMENSION(jpi,jpj) ::   zworka           ! temporary array used here 
    767954      REAL(wp), DIMENSION(jpi,jpj) ::   zstrp1, zstrp2   ! strength at previous time steps 
     955      REAL(wp), DIMENSION(jpij)     ::   strength_1d      ! 1-dimensional strength 
     956      REAL(wp), DIMENSION(jpij,jpl) ::   strength_pe      ! PE component of R75 strength 
     957      REAL(wp), DIMENSION(jpij)     ::   strength_pe_sum  ! PE component of R75 strength  
    768958      !!---------------------------------------------------------------------- 
    769959      !                              !--------------------------------------------------! 
    770960      IF( ln_str_H79 ) THEN          ! Ice strength => Hibler (1979) method             ! 
    771961      !                              !--------------------------------------------------! 
    772          strength(:,:) = rn_pstar * SUM( v_i(:,:,:), dim=3 ) * EXP( -rn_crhg * ( 1._wp - SUM( a_i(:,:,:), dim=3 ) ) ) 
    773          ismooth = 1 
     962      ! Recommend using ismooth = 1 (spatial smoothing) 
     963        strength(:,:) = rn_pstar * SUM( v_i(:,:,:), dim=3 ) * EXP( -rn_crhg * ( 1._wp - SUM( a_i(:,:,:), dim=3 ) ) ) 
     964      !                              !--------------------------------------------------! 
     965      ELSE IF( ln_str_R75 ) THEN     ! Ice strength => Rothrock (1975) method           ! 
     966      !                              !--------------------------------------------------! 
     967      ! Recommend using ismooth = 0 (no smoothing needed) 
     968      ! Initialise the strength field at each timestep 
     969        strength(:,:) = 0._wp 
     970      ! 
     971        !-------------------------------- 
     972        ! 0) Identify grid cells with ice 
     973        !-------------------------------- 
     974        at_i(:,:) = SUM( a_i(:,:,:), dim=3 ) 
     975        vt_i(:,:) = SUM( v_i(:,:,:), dim=3 ) 
     976        ato_i(:,:) = 1 - at_i(:,:) 
     977        ! 
     978        npti = 0   ;   nptidx(:) = 0 
     979        DO jj = 1, jpj 
     980           DO ji = 1, jpi 
     981              IF ( at_i(ji,jj) > epsi10 ) THEN 
     982                 npti           = npti + 1 
     983                 nptidx( npti ) = (jj - 1) * jpi + ji 
     984              ENDIF 
     985           END DO 
     986        END DO 
     987 
     988        CALL tab_3d_2d( npti, nptidx(1:npti), a_i_2d  (1:npti,1:jpl), a_i   ) 
     989        CALL tab_3d_2d( npti, nptidx(1:npti), v_i_2d  (1:npti,1:jpl), v_i   ) 
     990        CALL tab_2d_1d( npti, nptidx(1:npti), ato_i_1d(1:npti)      , ato_i ) 
     991 
     992        !----------------------------------- 
     993        ! Get thickness distribution of ice 
     994        !----------------------------------- 
     995 
     996        Cp = 0.5_wp * grav * (rhow-rhoi) * rhoi / rhow  ! EF: This should go in an initialisation routine but unclear where, won't let me set as a parameter above 
     997 
     998        CALL rdgrft_prep( a_i_2d, v_i_2d, ato_i_1d, closing_net ) 
     999        ! EF: Note that closing rate is not needed here, could split this function up, and refactor as initial rdgrft_prep is  
     1000        ! called here, before going into ridging iterations 
     1001 
     1002        ! Initialise 
     1003        strength_pe_sum(:) = 0._wp 
     1004 
     1005        IF ( npti > 0 ) THEN 
     1006 
     1007          DO jl = 1, jpl              ! categories 
     1008            DO ji = 1, npti           ! grid cells 
     1009              IF ( apartf(ji,jl) > 0._wp ) THEN 
     1010                ! 
     1011                IF ( ln_redist_ufm ) THEN   ! Uniform redistribution of ridged ice                
     1012                  h2rdg = (1._wp/3._wp) * (hrmax(ji,jl)**3._wp - hrmin(ji,jl)**3._wp)  & 
     1013                           / (hrmax(ji,jl) - hrmin(ji,jl)) 
     1014                ! 
     1015                ELSE IF ( ln_redist_exp ) THEN   ! Exponential redistribution of ridged ice 
     1016        h2rdg = hrmin(ji,jl) * hrmin(ji,jl) &  
     1017                + 2._wp * hrmin(ji,jl) * hrexp(ji,jl) &  
     1018                + 2._wp * hrexp(ji,jl) * hrexp(ji,jl)  
     1019                END IF 
     1020                 
     1021                dh2rdg = -zhi(ji,jl)*zhi(ji,jl) + h2rdg * hi_hrdg(ji,jl) 
     1022    
     1023                strength_pe_sum(ji) = strength_pe_sum(ji) + apartf(ji,jl) * dh2rdg 
     1024 
     1025              ELSE 
     1026 
     1027                strength_pe_sum(ji) = strength_pe_sum(ji) + 0._wp 
     1028 
     1029              END IF 
     1030 
     1031            END DO                    ! grid cells 
     1032          END DO                      ! categories 
     1033 
     1034 
     1035          DO ji = 1, npti 
     1036            IF ( zaksum(ji) > epsi10 ) THEN 
     1037              strength_1d(ji) = rn_Cf * Cp * strength_pe_sum(ji) / zaksum(ji) 
     1038            ELSE 
     1039              strength_1d(ji) = 0._wp 
     1040            END IF 
     1041          END DO 
     1042 
     1043 
     1044          ! Enforce a maximum for strength 
     1045          ! Richter-Menge and Elder (1998) estimate maximum in Beaufort Sea in wintertime of the order 150 kN/m 
     1046          WHERE( strength_1d(:) > max_strength ) ; strength_1d(:) = max_strength 
     1047          END WHERE 
     1048 
     1049 
     1050          ! Convert strength_1d to 2d 
     1051          CALL tab_1d_2d( npti, nptidx(1:npti), strength_1d(1:npti), strength(:,:) ) 
     1052 
     1053         END IF  ! number of ice points 
     1054 
     1055 
    7741056         !                           !--------------------------------------------------! 
    775       ELSE                           ! Zero strength                                    ! 
     1057      ELSE                           ! Zero strength      (this just crashes)           ! 
    7761058         !                           !--------------------------------------------------! 
    7771059         strength(:,:) = 0._wp 
    778          ismooth = 0 
    779       ENDIF 
    780       !                              !--------------------------------------------------! 
     1060         ! 
     1061      ENDIF  ! Ice strength formulation 
     1062      !       
     1063                                     !--------------------------------------------------! 
    7811064      SELECT CASE( ismooth )         ! Smoothing ice strength                           ! 
    7821065      !                              !--------------------------------------------------! 
     1066      CASE( 0 )               !--- No smoothing 
     1067 
     1068         CALL lbc_lnk( 'icedyn_rdgrft', strength, 'T', 1. ) 
     1069 
    7831070      CASE( 1 )               !--- Spatial smoothing 
    7841071         DO jj = 2, jpjm1 
     
    9181205      INTEGER :: ios                 ! Local integer output status for namelist read 
    9191206      !! 
    920       NAMELIST/namdyn_rdgrft/ ln_str_H79, rn_pstar, rn_crhg, & 
    921          &                    rn_csrdg  ,                    & 
     1207      NAMELIST/namdyn_rdgrft/ ismooth, ln_str_H79, rn_pstar, & 
     1208         &                    ln_str_R75, rn_Cf,             & 
     1209         &                    ln_redist_ufm, ln_redist_exp,  & 
     1210         &                    max_strength, rn_murdg,        & 
     1211         &                    rn_crhg, rn_csrdg,             & 
    9221212         &                    ln_partf_lin, rn_gstar,        & 
    9231213         &                    ln_partf_exp, rn_astar,        &  
     
    9391229         WRITE(numout,*) '~~~~~~~~~~~~~~~~~~' 
    9401230         WRITE(numout,*) '   Namelist namdyn_rdgrft:' 
    941          WRITE(numout,*) '      ice strength parameterization Hibler (1979)              ln_str_H79   = ', ln_str_H79  
     1231         WRITE(numout,*) '      ice strength parameterization Hibler (1979)              ln_str_H79   = ', ln_str_H79 
    9421232         WRITE(numout,*) '            1st bulk-rheology parameter                        rn_pstar     = ', rn_pstar 
    9431233         WRITE(numout,*) '            2nd bulk-rhelogy parameter                         rn_crhg      = ', rn_crhg 
     1234         WRITE(numout,*) '      ice strength parameterization Rothrock (1975)            ln_str_R75   = ', ln_str_R75 
     1235         WRITE(numout,*) '            ratio of ridging work to PE change in ridging      rn_Cf        = ', rn_Cf 
     1236         WRITE(numout,*) '      smoothing the resistance to deformation (strength)       ismooth      = ', ismooth 
     1237         WRITE(numout,*) '      maximum strength cap                                     max_strength = ', max_strength 
     1238         WRITE(numout,*) '      uniform redistribution of ridged ice (Hibler, 1980)     ln_redist_ufm = ', ln_redist_ufm 
     1239         WRITE(numout,*) '      exponential redistribution of ridged ice                ln_redist_exp = ', ln_redist_exp 
     1240         WRITE(numout,*) '            e-folding scale of ridged ice for ln_redist_exp    rn_murdg     = ', rn_murdg 
    9441241         WRITE(numout,*) '      Fraction of shear energy contributing to ridging         rn_csrdg     = ', rn_csrdg  
    9451242         WRITE(numout,*) '      linear ridging participation function                    ln_partf_lin = ', ln_partf_lin 
     
    9591256      ENDIF 
    9601257      ! 
     1258      IF ( ( ln_str_H79 .AND. ln_str_R75 ) .OR. ( .NOT.ln_str_H79 .AND. .NOT.ln_str_R75 ) ) THEN 
     1259         CALL ctl_stop( 'ice_dyn_rdgrft_init: choose one and only one ice strength formulation (ln_str_H79 or ln_str_R75)' ) 
     1260      ENDIF 
     1261      ! 
    9611262      IF ( ( ln_partf_lin .AND. ln_partf_exp ) .OR. ( .NOT.ln_partf_lin .AND. .NOT.ln_partf_exp ) ) THEN 
    9621263         CALL ctl_stop( 'ice_dyn_rdgrft_init: choose one and only one participation function (ln_partf_lin or ln_partf_exp)' ) 
    9631264      ENDIF 
     1265      ! 
     1266      IF ( ( ln_redist_ufm .AND. ln_redist_exp ) .OR. ( .NOT.ln_redist_ufm .AND. .NOT.ln_redist_exp ) ) THEN 
     1267         CALL ctl_stop( 'ice_dyn_rdgrft_init: choose one and only one ice redistribution function (ln_redist_ufm or ln_redist_exp)' ) 
     1268      ENDIF 
     1269      ! 
     1270      IF ( ( ismooth .NE. 0 ) .AND. ( ismooth .NE. 1 ) .AND. (ismooth .NE. 2 ) ) THEN 
     1271         CALL ctl_stop( 'ice_dyn_rdgrft_init: ismooth must be one of 0 (no smoothing), 1 (spatial), or 2 (temporal)' ) 
     1272      ENDIF 
     1273      ! 
    9641274      ! 
    9651275      IF( .NOT. ln_icethd ) THEN 
  • NEMO/branches/UKMO/NEMO_4.0.4_EAP_rheology_fix/src/ICE/icedyn_rhg_evp.F90

    r15692 r15742  
    137137      ! 
    138138      REAL(wp), DIMENSION(jpi,jpj) ::   zdelta, zp_delt                 ! delta and P/delta at T points 
    139       REAL(wp), DIMENSION(jpi,jpj) ::   zten_i                          ! tension 
     139      REAL(wp), DIMENSION(jpi,jpj) ::   zten_i, zshear                  ! tension, shear 
    140140      REAL(wp), DIMENSION(jpi,jpj) ::   zbeta                           ! beta coef from Kimmritz 2017 
    141141      ! 
     
    773773               &   ) * 0.25_wp * r1_e1e2t(ji,jj) 
    774774             
    775             ! shear at T points 
     775            ! maximum shear rate at T points (includes tension, output only) 
    776776            pshear_i(ji,jj) = SQRT( zdt2 + zds2 ) 
     777 
     778            ! shear at T-points 
     779            zshear(ji,jj)   = SQRT( zds2 ) 
    777780 
    778781            ! divergence at T points 
     
    789792      END DO 
    790793      CALL lbc_lnk_multi( 'icedyn_rhg_evp', pshear_i, 'T', 1., pdivu_i, 'T', 1., pdelta_i, 'T', 1., zten_i, 'T', 1., & 
    791          &                                  zs1     , 'T', 1., zs2    , 'T', 1., zs12    , 'F', 1. ) 
     794         &                                  zs1     , 'T', 1., zs2    , 'T', 1., zs12    , 'F', 1., zshear, 'T', 1. ) 
    792795       
    793796      ! --- Store the stress tensor for the next time step --- ! 
     
    835838               zsig1            =   zfac * ( pdivu_i(ji,jj) - pdelta_i(ji,jj) ) 
    836839               zsig2            =   zfac * z1_ecc2 * zten_i(ji,jj) 
    837                zsig12           =   zfac * z1_ecc2 * pshear_i(ji,jj) 
    838                 
     840               zsig12           =   zfac * z1_ecc2 * zshear(ji,jj) * 0.5_wp 
     841 
    839842               ! Stress invariants (sigma_I, sigma_II, Coon 1974, Feltham 2008) 
    840843               zsig_I (ji,jj)   =   zsig1 * 0.5_wp                                           ! 1st stress invariant, aka average normal stress, aka negative pressure 
    841                zsig_II(ji,jj)   =   SQRT( zsig2 * zsig2 * 0.25_wp + zsig12 * zsig12 )        ! 2nd  ''       '', aka maximum shear stress 
     844               zsig_II(ji,jj)   =   SQRT( zsig2 * zsig2 * 0.25_wp + zsig12 * zsig12 )        ! 2nd  ''       ''    , aka maximum shear stress 
    842845                
    843846            END DO 
     
    866869               !                        and **deformations** at current iterates 
    867870               !                        following Lemieux & Dupont (2020) 
    868                zfac             =   zp_delt(ji,jj) 
    869                zsig1            =   zfac * ( pdivu_i(ji,jj) - ( zdelta(ji,jj) + rn_creepl ) ) 
     871               zfac             =   strength(ji,jj) / ( pdelta_i(ji,jj) + rn_creepl ) 
     872               zsig1            =   zfac * ( pdivu_i(ji,jj) - zdelta(ji,jj) ) 
    870873               zsig2            =   zfac * z1_ecc2 * zten_i(ji,jj) 
    871                zsig12           =   zfac * z1_ecc2 * pshear_i(ji,jj) 
    872                 
     874               zsig12           =   zfac * z1_ecc2 * zshear(ji,jj) * 0.5_wp 
     875 
    873876               ! Stress invariants (sigma_I, sigma_II, Coon 1974, Feltham 2008), T-point 
    874877               zsig_I(ji,jj)    =   zsig1 * 0.5_wp                                           ! 1st stress invariant, aka average normal stress, aka negative pressure 
    875                zsig_II(ji,jj)   =   SQRT( zsig2 * zsig2 * 0.25_wp + zsig12 * zsig12 )        ! 2nd  ''       '', aka maximum shear stress 
     878               zsig_II(ji,jj)   =   SQRT( zsig2 * zsig2 * 0.25_wp + zsig12 * zsig12 )        ! 2nd  ''       ''    , aka maximum shear stress 
    876879       
    877880               ! Normalized  principal stresses (used to display the ellipse) 
     
    882885         END DO                
    883886         ! 
    884          IF( iom_use('sig1_pnorm') )  CALL iom_put( 'sig1_pnorm' , zsig1_p(:,:) * zmsk00(:,:) )  
     887         IF( iom_use('sig1_pnorm') )  CALL iom_put( 'sig1_pnorm' , zsig1_p(:,:) * zmsk00(:,:) )   
    885888         IF( iom_use('sig2_pnorm') )  CALL iom_put( 'sig2_pnorm' , zsig2_p(:,:) * zmsk00(:,:) )  
    886889       
     
    10061009 
    10071010      ! time 
    1008       it = ( kt - 1 ) * kitermax + kiter 
     1011      it = ( kt - nit000 ) * kitermax + kiter 
    10091012       
    10101013      ! convergence 
     
    10261029         istatus = NF90_PUT_VAR( ncvgid, nvarid, (/zresm/), (/it/), (/1/) ) 
    10271030         ! close file 
    1028          IF( kt == nitend - nn_fsbc + 1 )   istatus = NF90_CLOSE(ncvgid) 
     1031         IF( kt == nitend - nn_fsbc + 1 .AND. kiter == kitermax )   istatus = NF90_CLOSE(ncvgid) 
    10291032      ENDIF 
    10301033       
  • NEMO/branches/UKMO/NEMO_4.0.4_EAP_rheology_fix/src/ICE/icewri.F90

    r15570 r15742  
    254254      CALL iom_rstput( 0, 0, kid, 'sivolu', vt_i         )   ! Ice volume 
    255255      CALL iom_rstput( 0, 0, kid, 'sidive', divu_i*1.0e8 )   ! Ice divergence 
    256       CALL iom_rstput( 0, 0, kid, 'sishea', shear_i*1.0e8 )   ! Ice shear 
     256      CALL iom_rstput( 0, 0, kid, 'sishea', shear_i*1.0e8 )  ! Ice shear 
    257257      CALL iom_rstput( 0, 0, kid, 'si_amp', at_ip        )   ! Melt pond fraction 
    258258      CALL iom_rstput( 0, 0, kid, 'si_vmp', vt_ip        )   ! Melt pond volume 
  • NEMO/branches/UKMO/NEMO_4.0.4_EAP_rheology_fix/src/OCE/timing.F90

    r14075 r15742  
    295295 
    296296      ll_averep = .TRUE. 
     297      zperc = 0._wp 
    297298     
    298299      ! total CPU and elapse 
Note: See TracChangeset for help on using the changeset viewer.