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 14276 for NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p5zmeso.F90 – NEMO

Ignore:
Timestamp:
2021-01-07T23:09:56+01:00 (3 years ago)
Author:
aumont
Message:

numerous updates to PISCES, PISCES-QUOTA and the sediment module

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p5zmeso.F90

    r13234 r14276  
    8888      REAL(wp) :: zepsherf, zepshert, zepsherq, zepsherv, zrespirc, zrespirn, zrespirp, zbasresb, zbasresi 
    8989      REAL(wp) :: zgraztotc, zgraztotn, zgraztotp, zgraztotf, zbasresn, zbasresp, zbasresf 
    90       REAL(wp) :: zgratmp, zgradoct, zgradont, zgrareft, zgradopt 
     90      REAL(wp) :: zgradoct, zgradont, zgrareft, zgradopt 
    9191      REAL(wp) :: zprcaca, zmortz, zexcess 
    9292      REAL(wp) :: zbeta, zrespz, ztortz, zgrasratp, zgrasratn, zgrasratf 
     
    104104      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrarep, zgraren, zgrapon, zgrapop 
    105105      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgradoc, zgradon, zgradop 
    106       REAL(wp), ALLOCATABLE, DIMENSION(:,:)   ::   zgramigrem, zgramigref, zgramigpoc, zgramigpof, zstrn 
     106      REAL(wp), ALLOCATABLE, DIMENSION(:,:)   ::   zgramigrem, zgramigref, zgramigpoc, zgramigpof 
    107107      REAL(wp), ALLOCATABLE, DIMENSION(:,:)   ::   zgramigrep, zgramigren, zgramigpop, zgramigpon 
    108108      REAL(wp), ALLOCATABLE, DIMENSION(:,:)   ::   zgramigdoc, zgramigdop, zgramigdon 
     
    190190               ! to avoid starvation. 
    191191               ! ---------------------------------------------------------- 
    192                zsigma = 1.0 - zdenom**2/(0.05**2+zdenom**2) 
     192               zsigma = 1.0 - zdenom**3/(0.1**3+zdenom**3) 
    193193               zsigma = xsigma2 + xsigma2del * zsigma 
    194194               ! Nanophytoplankton and diatoms are the only preys considered 
     
    267267 
    268268               zgraztotc  = zgrazdc + zgrazz + zgraznc + zgrazm + zgrazpoc + zgrazffep + zgrazffeg 
    269                zgraztotf  = zgrazdf + zgraznf + ( zgrazz + zgrazm ) * ferat3 + zgrazpof & 
     269               zgraztotf  = zgrazdf + zgraznf + zgrazz * feratz + zgrazm * feratm + zgrazpof & 
    270270               &            + zgrazfffp + zgrazfffg 
    271271               zgraztotn  = zgrazdn + (zgrazm + zgrazz) * no3rat3 + zgraznn + zgrazpon  & 
     
    291291               ! Fulton, 2012) 
    292292               ! ----------------------------------------------------------------------------------- 
    293                zepshert  = MIN( 1., zgrasratn/ no3rat3, zgrasratp/ po4rat3, zgrasratf / ferat3) 
     293               zepshert  = MIN( 1., zgrasratn/ no3rat3, zgrasratp/ po4rat3, zgrasratf / feratm) 
    294294               zbeta     = MAX(0., (epsher2 - epsher2min) ) 
    295295               zepsherf  = epsher2min + zbeta / ( 1.0 + 0.04E6 * 12. * zfood * zbeta ) 
     
    312312               zexcess  = ( zgrasratp/ po4rat3 - zepshert ) / ( 1.0 - zepshert + rtrn) 
    313313               zbasresp = zbasresi * zexcess * zgrasratp 
    314                zexcess  = ( zgrasratf/ ferat3 - zepshert ) / ( 1.0 - zepshert + rtrn) 
     314               zexcess  = ( zgrasratf/ feratm - zepshert ) / ( 1.0 - zepshert + rtrn) 
    315315               zbasresf = zbasresi * zexcess * zgrasratf 
    316316 
     
    320320               zgradont = (1. - unass2n) * zgraztotn - zepsherv * no3rat3 * zgraztotc - zbasresn 
    321321               zgradopt = (1. - unass2p) * zgraztotp - zepsherv * po4rat3 * zgraztotc - zbasresp 
    322                zgrareft = (1. - unass2c) * zgraztotf - zepsherv * ferat3 * zgraztotc - zbasresf 
    323                ztmp1   = ( 1. - epsher2 - unass2c ) /( 1. - 0.8 * epsher2 ) * ztortz 
     322               zgrareft = (1. - unass2c) * zgraztotf - zepsherv * feratm * zgraztotc - zbasresf 
     323               ztmp1    = (1. - epsher2 - unass2c) /( 1. - epsher2 ) * ztortz 
    324324               zgradoc(ji,jj,jk) = (zgradoct + ztmp1) * ssigma2 
    325325               zgradon(ji,jj,jk) = (zgradont + no3rat3 * ztmp1) * ssigma2 
    326326               zgradop(ji,jj,jk) = (zgradopt + po4rat3 * ztmp1) * ssigma2 
    327                zgratmp = 0.2 * epsher2 /( 1. - 0.8 * epsher2 ) * ztortz 
    328327 
    329328               !  Since only semilabile DOM is represented in PISCES 
     
    331330               !  as dissolved inorganic compounds (ssigma2) 
    332331               !  -------------------------------------------------- 
    333                zgrarem(ji,jj,jk) = zgratmp + ( zgradoct + ztmp1 ) * (1.0 - ssigma2) 
    334                zgraren(ji,jj,jk) = no3rat3 * zgratmp + ( zgradont + no3rat3 * ztmp1 ) * (1.0 - ssigma2) 
    335                zgrarep(ji,jj,jk) = po4rat3 * zgratmp + ( zgradopt + po4rat3 * ztmp1 ) * (1.0 - ssigma2) 
    336                zgraref(ji,jj,jk) = zgrareft + ferat3 * ( ztmp1 + zgratmp ) 
     332               zgrarem(ji,jj,jk) = ( zgradoct + ztmp1 ) * (1.0 - ssigma2) 
     333               zgraren(ji,jj,jk) = ( zgradont + no3rat3 * ztmp1 ) * (1.0 - ssigma2) 
     334               zgrarep(ji,jj,jk) = ( zgradopt + po4rat3 * ztmp1 ) * (1.0 - ssigma2) 
     335               zgraref(ji,jj,jk) = zgrareft + feratm * ztmp1 
    337336 
    338337               !   Defecation as a result of non assimilated products 
    339338               !   -------------------------------------------------- 
    340                zgrapoc(ji,jj,jk)  = zgraztotc * unass2c + unass2c / ( 1. - 0.8 * epsher2 ) * ztortz 
    341                zgrapon(ji,jj,jk)  = zgraztotn * unass2n + no3rat3 * unass2n / ( 1. - 0.8 * epsher2 ) * ztortz 
    342                zgrapop(ji,jj,jk)  = zgraztotp * unass2p + po4rat3 * unass2p / ( 1. - 0.8 * epsher2 ) * ztortz 
    343                zgrapof(ji,jj,jk)  = zgraztotf * unass2c + ferat3  * unass2c / ( 1. - 0.8 * epsher2 ) * ztortz 
     339               zgrapoc(ji,jj,jk)  = zgraztotc * unass2c + unass2c / ( 1. - epsher2 ) * ztortz 
     340               zgrapon(ji,jj,jk)  = zgraztotn * unass2n + no3rat3 * unass2n / ( 1. - epsher2 ) * ztortz 
     341               zgrapop(ji,jj,jk)  = zgraztotp * unass2p + po4rat3 * unass2p / ( 1. - epsher2 ) * ztortz 
     342               zgrapof(ji,jj,jk)  = zgraztotf * unass2c + feratm  * unass2c / ( 1. - epsher2 ) * ztortz 
    344343 
    345344               !  Addition of respiration to the release of inorganic nutrients 
     
    348347               zgraren(ji,jj,jk) = zgraren(ji,jj,jk) + zbasresn + zrespirc * no3rat3 
    349348               zgrarep(ji,jj,jk) = zgrarep(ji,jj,jk) + zbasresp + zrespirc * po4rat3 
    350                zgraref(ji,jj,jk) = zgraref(ji,jj,jk) + zbasresf + zrespirc * ferat3 
     349               zgraref(ji,jj,jk) = zgraref(ji,jj,jk) + zbasresf + zrespirc * feratm 
    351350 
    352351               !   Update the arrays TRA which contain the biological sources and 
     
    404403         ALLOCATE( zgramigrep(jpi,jpj), zgramigren(jpi,jpj), zgramigpop(jpi,jpj), zgramigpon(jpi,jpj) ) 
    405404         ALLOCATE( zgramigdoc(jpi,jpj), zgramigdon(jpi,jpj), zgramigdop(jpi,jpj) ) 
    406          ALLOCATE( zstrn(jpi,jpj) ) 
    407405         zgramigrem(:,:)  = 0.0   ;   zgramigref(:,:) = 0.0 
    408406         zgramigrep(:,:)  = 0.0   ;   zgramigren(:,:) = 0.0 
     
    411409         zgramigdoc(:,:)  = 0.0   ;   zgramigdon(:,:) = 0.0 
    412410         zgramigdop(:,:)  = 0.0    
    413  
    414          ! compute the day length depending on latitude and the day 
    415          zrum = REAL( nday_year - 80, wp ) / REAL( nyear_len(1), wp ) 
    416          zcodel = ASIN(  SIN( zrum * rpi * 2._wp ) * SIN( rad * 23.5_wp )  ) 
    417  
    418          ! day length in hours 
    419          zstrn(:,:) = 0. 
    420          DO jj = 1, jpj 
    421             DO ji = 1, jpi 
    422                zargu = TAN( zcodel ) * TAN( gphit(ji,jj) * rad ) 
    423                zargu = MAX( -1., MIN(  1., zargu ) ) 
    424                zstrn(ji,jj) = MAX( 0.0, 24. - 2. * ACOS( zargu ) / rad / 15. ) 
    425                zstrn(ji,jj) = MIN(0.75, MAX( 0.25, zstrn(ji,jj) / 24.) ) 
    426             END DO 
    427          END DO 
    428  
    429411 
    430412        ! Compute the amount of materials that will go into vertical migration 
     
    435417            DO jj = 1, jpj 
    436418               DO ji = 1, jpi 
    437                   zmigreltime = (1. - zstrn(ji,jj)) 
     419                  zmigreltime = (1. - strn(ji,jj)) 
    438420                  IF ( gdept_n(ji,jj,jk) <= heup(ji,jj) ) THEN 
    439421                     zgramigrem(ji,jj) = zgramigrem(ji,jj) + xfracmig * zgrarem(ji,jj,jk) * (1. - zmigreltime )    & 
     
    441423                     zgramigrep(ji,jj) = zgramigrep(ji,jj) + xfracmig * zgrarep(ji,jj,jk) * (1. - zmigreltime )    & 
    442424                     &                   * e3t_n(ji,jj,jk) * tmask(ji,jj,jk) 
    443                      zgramigrep(ji,jj) = zgramigren(ji,jj) + xfracmig * zgrarep(ji,jj,jk) * (1. - zmigreltime )    & 
     425                     zgramigren(ji,jj) = zgramigren(ji,jj) + xfracmig * zgraren(ji,jj,jk) * (1. - zmigreltime )    & 
    444426                     &                   * e3t_n(ji,jj,jk) * tmask(ji,jj,jk) 
    445427                     zgramigref(ji,jj) = zgramigref(ji,jj) + xfracmig * zgraref(ji,jj,jk) * (1. - zmigreltime )   & 
     
    503485         DEALLOCATE( zgramigrep, zgramigren, zgramigpop, zgramigpon ) 
    504486         DEALLOCATE( zgramigdoc, zgramigdon, zgramigdop ) 
    505          DEALLOCATE( zstrn ) 
    506487      ! End of the ln_dvm_meso part 
    507488      ENDIF 
Note: See TracChangeset for help on using the changeset viewer.