- Timestamp:
- 2020-07-02T20:34:16+02:00 (4 years ago)
- Location:
- NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES
- Files:
-
- 20 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zagg.F90
r12537 r13233 100 100 zaggdoc2 = ( 3.53E3 * zfact + 0.1 * xstep ) * trb(ji,jj,jk,jpgoc) * 0.3 * trb(ji,jj,jk,jpdoc) 101 101 ! tranfer of DOC to POC due to brownian motion 102 ! The temperature dependency has been omitted. 102 103 zaggdoc3 = 114. * 0.3 * trb(ji,jj,jk,jpdoc) *xstep * 0.3 * trb(ji,jj,jk,jpdoc) 103 104 … … 123 124 ! 124 125 zfact = xstep * xdiss(ji,jj,jk) 125 ! 126 ! Part I : Coagulation dependent on turbulence 126 127 ! The stickiness has been assumed to be 0.1 127 128 zaggtmp = 25.9 * zfact * trb(ji,jj,jk,jppoc) -
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zbio.F90
r12759 r13233 66 66 67 67 ! ASSIGN THE SHEAR RATE THAT IS USED FOR AGGREGATION 68 ! OF PHYTOPLANKTON AND DETRITUS 68 ! OF PHYTOPLANKTON AND DETRITUS. Shear rate is supposed to equal 1 69 ! in the mixed layer and 0.1 below the mixed layer. 69 70 xdiss(:,:,:) = 1. 70 71 DO jk = 2, jpkm1 … … 80 81 CALL p4z_fechem ( kt, knt ) ! Iron chemistry/scavenging 81 82 ! 82 IF( ln_p4z ) THEN 83 IF( ln_p4z ) THEN ! PISCES standard 84 ! Phytoplankton only sources/sinks terms 83 85 CALL p4z_lim ( kt, knt ) ! co-limitations by the various nutrients 84 86 CALL p4z_prod ( kt, knt ) ! phytoplankton growth rate over the global ocean. 85 87 ! ! (for each element : C, Si, Fe, Chl ) 86 88 CALL p4z_mort ( kt ) ! phytoplankton mortality 87 ! !zooplankton sources/sinks routines89 ! zooplankton sources/sinks routines 88 90 CALL p4z_micro( kt, knt ) ! microzooplankton 89 91 CALL p4z_meso ( kt, knt ) ! mesozooplankton 90 ELSE 92 ELSE ! PISCES-QUOTA 93 ! Phytoplankton only sources/sinks terms 91 94 CALL p5z_lim ( kt, knt ) ! co-limitations by the various nutrients 92 95 CALL p5z_prod ( kt, knt ) ! phytoplankton growth rate over the global ocean. 93 96 ! ! (for each element : C, N, P, Si, Fe, Chl ) 94 97 CALL p5z_mort ( kt ) ! phytoplankton mortality 95 ! !zooplankton sources/sinks routines98 ! zooplankton sources/sinks routines 96 99 CALL p5z_micro( kt, knt ) ! microzooplankton 97 100 CALL p5z_meso ( kt, knt ) ! mesozooplankton … … 99 102 ! 100 103 CALL p4z_agg ( kt, knt ) ! Aggregation of particles 101 CALL p4z_rem ( kt, knt ) ! remineralization terms of organic matter +scavenging of Fe104 CALL p4z_rem ( kt, knt ) ! remineralization terms of organic matter 102 105 CALL p4z_poc ( kt, knt ) ! Remineralization of organic particles 103 106 ! -
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zlim.F90
r12759 r13233 84 84 !! 85 85 !! ** Method : - Limitation follows the Liebieg law of the minimum 86 !! - Monod approach for N, P and Si. Quota approach 87 !! for Iron 86 88 !!--------------------------------------------------------------------- 87 89 INTEGER, INTENT(in) :: kt, knt … … 113 115 ! Computation of a variable Ks of diatoms taking into account 114 116 ! that increasing biomass is made of generally bigger cells 117 ! The allometric relationship is classical. 115 118 !------------------------------------------------------------ 116 119 z1_trbphy = 1. / ( trb(ji,jj,jk,jpphy) + rtrn ) … … 156 159 157 160 ! Michaelis-Menten Limitation term by nutrients: Nanophyto 161 ! Optimal parameterization by Smith and Pahlow series of 162 ! papers is used. Optimal allocation is supposed independant 163 ! for all nutrients. 158 164 ! -------------------------------------------------------- 159 ! Limitation of Fe uptake 165 166 ! Limitation of Fe uptake (Quota formalism) 160 167 zfalim = (1.-fananof) / fananof 161 168 xnanofer(ji,jj,jk) = (1. - fananof) * biron(ji,jj,jk) / ( biron(ji,jj,jk) + zfalim * concnfe(ji,jj,jk) ) … … 181 188 ! Michaelis-Menten Limitation term by nutrients : Diatoms 182 189 ! ------------------------------------------------------- 183 ! Limitation of Fe uptake 190 ! Limitation of Fe uptake (Quota formalism) 184 191 zfalim = (1.-fadiatf) / fadiatf 185 192 xdiatfer(ji,jj,jk) = (1. - fadiatf) * biron(ji,jj,jk) / ( biron(ji,jj,jk) + zfalim * concdfe(ji,jj,jk) ) … … 256 263 DO ji = 1, jpi 257 264 ! denitrification factor computed from O2 levels 265 ! This factor diagnoses below which level of O2 denitrification 266 ! is active 258 267 nitrfac(ji,jj,jk) = MAX( 0.e0, 0.4 * ( 6.e-6 - trb(ji,jj,jk,jpoxy) ) & 259 268 & / ( oxymin + trb(ji,jj,jk,jpoxy) ) ) … … 261 270 ! 262 271 ! redox factor computed from NO3 levels 272 ! This factor diagnoses below which level of NO3 additional redox 273 ! reactions are taking place. 263 274 nitrfac2(ji,jj,jk) = MAX( 0.e0, ( 1.E-6 - trb(ji,jj,jk,jpno3) ) & 264 275 & / ( 1.E-6 + trb(ji,jj,jk,jpno3) ) ) … … 296 307 !!---------------------------------------------------------------------- 297 308 INTEGER :: ios ! Local integer 298 ! 309 310 ! Namelist block 299 311 NAMELIST/namp4zlim/ concnno3, concdno3, concnnh4, concdnh4, concnfer, concdfer, concbfe, & 300 312 & concbno3, concbnh4, xsizedia, xsizephy, xsizern, xsizerd, & … … 348 360 !!---------------------------------------------------------------------- 349 361 !! *** ROUTINE p5z_lim_alloc *** 362 !! 363 ! Allocation of the arrays used in this module 350 364 !!---------------------------------------------------------------------- 351 365 USE lib_mpp , ONLY: ctl_stop -
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zlys.F90
r11536 r13233 51 51 !! OF CACO3 TO THE CACO3 SEDIMENT POOL. 52 52 !! 53 !! ** Method : - ??? 53 !! ** Method : - pH is computed using the MOCSY module and dissolution 54 !! is a function of the saturation state of CO3 54 55 !!--------------------------------------------------------------------- 55 56 INTEGER, INTENT(in) :: kt, knt ! ocean time step and ??? … … 71 72 ! COMPUTE [CO3--] and [H+] CONCENTRATIONS 72 73 ! ------------------------------------------- 73 74 ! Call the carbonate chemistry subroutine to compute pH 75 ! This subroutine is in the p4zche module 74 76 CALL solve_at_general( zhinit, zhi ) 75 77 … … 85 87 86 88 ! --------------------------------------------------------- 87 ! 88 ! 89 ! 89 ! CALCULATE DEGREE OF CACO3 SATURATION AND CORRESPONDING 90 ! DISSOLOUTION AND PRECIPITATION OF CACO3 (BE AWARE OF 91 ! MGCO3) 90 92 ! --------------------------------------------------------- 91 93 … … 106 108 zexcess = zexcess0**nca 107 109 108 ! AMOUNT CACO3 (12C) THAT RE-ENTERS SOLUTION 109 ! (ACCORDING TO THIS FORMULATION ALSO SOME PARTICULATE 110 ! CACO3 GETS DISSOLVED EVEN IN THE CASE OF OVERSATURATION) 110 ! AMOUNT CACO3 THAT RE-ENTERS SOLUTION 111 111 zdispot = kdca * zexcess * trb(ji,jj,jk,jpcal) 112 !CHANGE OF [CO3--] , [ALK], PARTICULATE [CACO3],113 !AND [SUM(CO2)] DUE TO CACO3 DISSOLUTION/PRECIPITATION114 zcaldiss(ji,jj,jk) = zdispot * rfact2 / rmtss ! calcite dissolution115 !116 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + 2. * zcaldiss(ji,jj,jk)117 tra(ji,jj,jk,jpcal) = tra(ji,jj,jk,jpcal) - zcaldiss(ji,jj,jk)118 tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zcaldiss(ji,jj,jk)112 ! CHANGE OF [CO3--] , [ALK], PARTICULATE [CACO3], 113 ! AND [SUM(CO2)] DUE TO CACO3 DISSOLUTION/PRECIPITATION 114 zcaldiss(ji,jj,jk) = zdispot * rfact2 / rmtss ! calcite dissolution 115 ! 116 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + 2. * zcaldiss(ji,jj,jk) 117 tra(ji,jj,jk,jpcal) = tra(ji,jj,jk,jpcal) - zcaldiss(ji,jj,jk) 118 tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zcaldiss(ji,jj,jk) 119 119 END DO 120 120 END DO 121 121 END DO 122 !123 122 123 ! output of diagnostics 124 124 IF( lk_iomput .AND. knt == nrdttrc ) THEN 125 125 IF( iom_use( "PH" ) ) CALL iom_put( "PH" , -1. * LOG10( MAX( hi(:,:,:), rtrn ) ) * tmask(:,:,:) ) -
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zmeso.F90
r13200 r13233 45 45 REAL(wp), PUBLIC :: epsher2 !: growth efficiency 46 46 REAL(wp), PUBLIC :: epsher2min !: minimum growth efficiency at high food for grazing 2 47 REAL(wp), PUBLIC :: xsigma2 !: Width of the predation window 48 REAL(wp), PUBLIC :: xsigma2del !: Maximum width of the predation window at low food density 47 49 REAL(wp), PUBLIC :: grazflux !: mesozoo flux feeding rate 48 50 REAL(wp), PUBLIC :: xfracmig !: Fractional biomass of meso that performs DVM … … 169 171 ! ---------------------------------------------------------- 170 172 zsigma = 1.0 - zdenom**2/(0.05**2+zdenom**2) 171 zsigma = 0.5 + 1.0* zsigma173 zsigma = xsigma2 + xsigma2del * zsigma 172 174 ! Nanophytoplankton and diatoms are the only preys considered 173 175 ! to be close enough to have potential interference … … 186 188 ! Mesozooplankton regular grazing on the different preys 187 189 ! ------------------------------------------------------ 188 zgrazdc = zgraze2 * ztmp3 * zdenom 189 zgraznc = zgraze2 * ztmp1 * zdenom 190 zgrazpoc = zgraze2 * ztmp2 * zdenom 191 zgrazz = zgraze2 * ztmp4 * zdenom 192 190 zgrazdc = zgraze2 * ztmp3 * zdenom ! diatoms 191 zgraznc = zgraze2 * ztmp1 * zdenom ! nanophytoplankton 192 zgrazpoc = zgraze2 * ztmp2 * zdenom ! small POC 193 zgrazz = zgraze2 * ztmp4 * zdenom ! microzooplankton 194 195 ! Ingestion rates of the Fe content of the different preys 193 196 zgraznf = zgraznc * trb(ji,jj,jk,jpnfe) / ( trb(ji,jj,jk,jpphy) + rtrn) 194 197 zgrazdf = zgrazdc * trb(ji,jj,jk,jpdfe) / ( trb(ji,jj,jk,jpdia) + rtrn) … … 228 231 zgrazfffp = zproport * zgrazfffp 229 232 zgrazfffg = zproport * zgrazfffg 233 234 ! Total ingestion rates in C, N, Fe 230 235 zgraztotc = zgrazdc + zgrazz + zgraznc + zgrazpoc + zgrazffep + zgrazffeg 231 236 zgraztotn = zgrazdc * quotad(ji,jj,jk) + zgrazz + zgraznc * quotan(ji,jj,jk) & … … 248 253 zepshert = MIN( 1., zgrasratn, zgrasratf / ferat3) 249 254 zbeta = MAX(0., (epsher2 - epsher2min) ) 255 ! Food quantity deprivation of GGE 250 256 zepsherf = epsher2min + zbeta / ( 1.0 + 0.04E6 * 12. * zfood * zbeta ) 257 ! Food quality deprivation of GGE 251 258 zepsherq = 0.5 + (1.0 - 0.5) * zepshert * ( 1.0 + 1.0 ) / ( zepshert + 1.0 ) 259 ! Actual GGE 252 260 zepsherv = zepsherf * zepshert * zepsherq 253 261 ! … … 258 266 ! according to a infinite chain of predators (ANderson et al., 2013) 259 267 zmortzgoc = unass2 / ( 1. - epsher2 ) * ztortz + zrespz 268 269 ! Update of the trends 260 270 tra(ji,jj,jk,jpmes) = tra(ji,jj,jk,jpmes) - zmortz + zepsherv * zgraztotc 261 271 tra(ji,jj,jk,jpdia) = tra(ji,jj,jk,jpdia) - zgrazdc … … 502 512 WRITE(numout,*) ' Fraction of mesozoo excretion as DOM sigma2 =', sigma2 503 513 WRITE(numout,*) ' half sturation constant for grazing 2 xkgraz2 =', xkgraz2 514 WRITE(numout,*) ' Width of the grazing window xsigma2 =', xsigma2 515 WRITE(numout,*) ' Maximum additional width of the grazing window xsigma2del =', xsigma2del 504 516 WRITE(numout,*) ' Diurnal vertical migration of mesozoo. ln_dvm_meso =', ln_dvm_meso 505 517 WRITE(numout,*) ' Fractional biomass of meso that performs DVM xfracmig =', xfracmig -
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zmicro.F90
r13200 r13233 42 42 REAL(wp), PUBLIC :: epsher !: growth efficiency for grazing 1 43 43 REAL(wp), PUBLIC :: epshermin !: minimum growth efficiency for grazing 1 44 REAL(wp), PUBLIC :: xsigma !: Width of the grazing window 45 REAL(wp), PUBLIC :: xsigmadel !: Maximum additional width of the grazing window at low food density 46 44 47 45 48 !!---------------------------------------------------------------------- … … 59 62 !! parameterization. 60 63 !! All living compartments smaller than microzooplankton 61 !! are potential preys of m esozooplankton64 !! are potential preys of microzooplankton 62 65 !! 63 66 !! ** Method : - ??? … … 146 149 ! ---------------------------------------------------------- 147 150 zsigma = 1.0 - zdenom**2/(0.05**2+zdenom**2) 148 zsigma = 0.5 + 1.0*zsigma151 zsigma = xsigma + xsigmadel * zsigma 149 152 zdiffdn = exp( -ABS(log(1.67 * sizen(ji,jj,jk) / (5.0 * sized(ji,jj,jk) + rtrn )) )**2 / zsigma**2) 150 153 ztmp1 = xprefn * zcompaph * ( zcompaph + zdiffdn * zcompadi ) / ( 1.0 + zdiffdn ) … … 156 159 ztmp3 = ztmp3 / ztmptot 157 160 158 zgraznc = zgraze * ztmp1 * zdenom 159 zgrazdc = zgraze * ztmp2 * zdenom 160 zgrazpoc = zgraze * ztmp3 * zdenom 161 161 ! Ingestion terms on the different preys of microzooplankton 162 zgraznc = zgraze * ztmp1 * zdenom ! Nanophytoplankton 163 zgrazdc = zgraze * ztmp2 * zdenom ! Diatoms 164 zgrazpoc = zgraze * ztmp3 * zdenom ! POC 165 166 ! Ingestion terms on the iron content of the different preys 162 167 zgraznf = zgraznc * trb(ji,jj,jk,jpnfe) / (trb(ji,jj,jk,jpphy) + rtrn) 163 168 zgrazpof = zgrazpoc * trb(ji,jj,jk,jpsfe) / (trb(ji,jj,jk,jppoc) + rtrn) 164 169 zgrazdf = zgrazdc * trb(ji,jj,jk,jpdfe) / (trb(ji,jj,jk,jpdia) + rtrn) 165 170 ! 171 ! Total ingestion rate in C, Fe, N units 166 172 zgraztotc = zgraznc + zgrazpoc + zgrazdc 167 173 zgraztotf = zgraznf + zgrazdf + zgrazpof … … 183 189 zepshert = MIN( 1., zgrasratn, zgrasratf / ferat3) 184 190 zbeta = MAX(0., (epsher - epshermin) ) 191 ! Food quantity deprivation of the GGE 185 192 zepsherf = epshermin + zbeta / ( 1.0 + 0.04E6 * 12. * zfood * zbeta ) 193 ! Food quality deprivation of the GGE 186 194 zepsherq = 0.5 + (1.0 - 0.5) * zepshert * ( 1.0 + 1.0 ) / ( zepshert + 1.0 ) 195 ! Actual GGE of microzooplankton 187 196 zepsherv = zepsherf * zepshert * zepsherq 197 ! Excretion of Fe 188 198 zgrafer = zgraztotc * MAX( 0. , ( 1. - unass ) * zgrasratf - ferat3 * zepsherv ) 199 ! Excretion of C, N, P 189 200 zgrarem = zgraztotc * ( 1. - zepsherv - unass ) 201 ! Egestion of C, N, P 190 202 zgrapoc = zgraztotc * unass 191 203 192 204 ! Update of the TRA arrays 193 205 ! ------------------------ 206 ! Fraction of excretion as inorganic nutrients and DIC 194 207 zgrarsig = zgrarem * sigma1 195 208 tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + zgrarsig … … 287 300 NAMELIST/namp4zzoo/ part, grazrat, resrat, mzrat, xprefn, xprefc, & 288 301 & xprefd, xthreshdia, xthreshphy, xthreshpoc, & 289 & xthresh, xkgraz, epsher, epshermin, sigma1, unass 302 & xthresh, xkgraz, epsher, epshermin, sigma1, unass & 303 & xsigma, xsigmadel 290 304 !!---------------------------------------------------------------------- 291 305 ! … … 321 335 WRITE(numout,*) ' Minimum efficicency of microzoo growth epshermin =', epshermin 322 336 WRITE(numout,*) ' Fraction of microzoo excretion as DOM sigma1 =', sigma1 323 WRITE(numout,*) ' half sturation constant for grazing 1 xkgraz =', xkgraz 337 WRITE(numout,*) ' half saturation constant for grazing 1 xkgraz =', xkgraz 338 WRITE(numout,*) ' Width of the grazing window xsigma =', xsigma 339 WRITE(numout,*) ' Maximum additional width of the grazing window xsigmadel =', xsigmadel 340 324 341 ENDIF 325 342 ! -
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zmort.F90
r12537 r13233 48 48 !!--------------------------------------------------------------------- 49 49 ! 50 CALL p4z_ nano ! nanophytoplankton51 CALL p4z_ diat ! diatoms50 CALL p4z_mort_nano ! nanophytoplankton 51 CALL p4z_mort_diat ! diatoms 52 52 ! 53 53 END SUBROUTINE p4z_mort 54 54 55 55 56 SUBROUTINE p4z_ nano57 !!--------------------------------------------------------------------- 58 !! *** ROUTINE p4z_ nano ***56 SUBROUTINE p4z_mort_nano 57 !!--------------------------------------------------------------------- 58 !! *** ROUTINE p4z_mort_nano *** 59 59 !! 60 60 !! ** Purpose : Compute the mortality terms for nanophytoplankton 61 61 !! 62 !! ** Method : - ???62 !! ** Method : Both quadratic and simili linear mortality terms 63 63 !!--------------------------------------------------------------------- 64 64 INTEGER :: ji, jj, jk … … 69 69 !!--------------------------------------------------------------------- 70 70 ! 71 IF( ln_timing ) CALL timing_start('p4z_ nano')71 IF( ln_timing ) CALL timing_start('p4z_mort_nano') 72 72 ! 73 73 prodcal(:,:,:) = 0._wp ! calcite production variable set to zero … … 101 101 tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) - zmortp * zfactch 102 102 tra(ji,jj,jk,jpnfe) = tra(ji,jj,jk,jpnfe) - zmortp * zfactfe 103 103 104 ! Production PIC particles due to mortality 104 105 zprcaca = xfracal(ji,jj,jk) * zmortp 105 106 prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo) 107 108 ! POC associated with the shell is supposed to be routed to 109 ! big particles because of the ballasting effect 106 110 zfracal = 0.5 * xfracal(ji,jj,jk) 107 111 tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) - zprcaca … … 112 116 prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + ( 1. - zfracal ) * zmortp 113 117 prodgoc(ji,jj,jk) = prodgoc(ji,jj,jk) + zfracal * zmortp 118 119 ! Update the arrays TRA which contains the biological sources and sinks 114 120 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + ( 1. - zfracal ) * zmortp * zfactfe 115 121 tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zfracal * zmortp * zfactfe … … 124 130 ENDIF 125 131 ! 126 IF( ln_timing ) CALL timing_stop('p4z_ nano')127 ! 128 END SUBROUTINE p4z_ nano129 130 131 SUBROUTINE p4z_ diat132 !!--------------------------------------------------------------------- 133 !! *** ROUTINE p4z_ diat ***132 IF( ln_timing ) CALL timing_stop('p4z_mort_nano') 133 ! 134 END SUBROUTINE p4z_mort_nano 135 136 137 SUBROUTINE p4z_mort_diat 138 !!--------------------------------------------------------------------- 139 !! *** ROUTINE p4z_mort_diat *** 134 140 !! 135 141 !! ** Purpose : Compute the mortality terms for diatoms 136 142 !! 137 !! ** Method : - ???143 !! ** Method : - Both quadratic and simili linear mortality terms 138 144 !!--------------------------------------------------------------------- 139 145 INTEGER :: ji, jj, jk … … 144 150 !!--------------------------------------------------------------------- 145 151 ! 146 IF( ln_timing ) CALL timing_start('p4z_ diat')152 IF( ln_timing ) CALL timing_start('p4z_mort_diat') 147 153 ! 148 154 ! Aggregation term for diatoms is increased in case of nutrient 149 155 ! stress as observed in reality. The stressed cells become more 150 156 ! sticky and coagulate to sink quickly out of the euphotic zone 157 ! This is due to the production of EPS by stressed cells 151 158 ! ------------------------------------------------------------- 152 159 … … 183 190 tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) - zmortp2 * zfactsi 184 191 tra(ji,jj,jk,jpgsi) = tra(ji,jj,jk,jpgsi) + zmortp2 * zfactsi 192 193 ! Half of the linear mortality term is routed to big particles 194 ! becaue of the ballasting effect 185 195 tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) + zrespp2 + 0.5 * ztortp2 186 196 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + 0.5 * ztortp2 … … 199 209 ENDIF 200 210 ! 201 IF( ln_timing ) CALL timing_stop('p4z_ diat')202 ! 203 END SUBROUTINE p4z_ diat211 IF( ln_timing ) CALL timing_stop('p4z_mort_diat') 212 ! 213 END SUBROUTINE p4z_mort_diat 204 214 205 215 -
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zopt.F90
r11536 r13233 80 80 ze2(:,:,:) = 0._wp 81 81 ze3(:,:,:) = 0._wp 82 ! 83 ! !* attenuation coef. function of Chlorophyll and wavelength (Red-Green-Blue) 84 ! ! -------------------------------------------------------- 82 83 ! Attenuation coef. function of Chlorophyll and wavelength (Red-Green-Blue) 84 ! Thus the light penetration scheme is based on a decomposition of PAR 85 ! into three wave length domains. This was first officially published 86 ! in Lengaigne et al. (2007). 87 ! -------------------------------------------------------- 85 88 zchl3d(:,:,:) = trb(:,:,:,jpnch) + trb(:,:,:,jpdch) 86 89 IF( ln_p5z ) zchl3d(:,:,:) = zchl3d(:,:,:) + trb(:,:,:,jppch) 87 90 ! 91 ! Computation of the light attenuation parameters based on a 92 ! look-up table 88 93 DO jk = 1, jpkm1 89 94 DO jj = 1, jpj … … 99 104 END DO 100 105 END DO 101 ! !* Photosynthetically Available Radiation (PAR) 102 ! ! -------------------------------------- 106 107 ! Photosynthetically Available Radiation (PAR) 108 ! Two cases are considered in the following : 109 ! (1) An explicit diunal cycle is activated. In that case, mean 110 ! QSR is used as PISCES in its current state has not been parameterized 111 ! for an explicit diurnal cycle 112 ! (2) no diurnal cycle of SW is active and in that case, QSR is used. 113 ! -------------------------------------------- 103 114 IF( l_trcdm2dc ) THEN ! diurnal cycle 104 115 ! 116 ! SW over the ice free zone of the grid cell. This assumes that 117 ! SW is zero below sea ice which is a very crude assumption that is 118 ! not fully correct with LIM3 and SI3 but no information is 119 ! currently available to do a better job. SHould be improved in the 120 ! (near) future. 105 121 zqsr_corr(:,:) = qsr_mean(:,:) / ( 1.-fr_i(:,:) + rtrn ) 106 122 ! 107 123 CALL p4z_opt_par( kt, zqsr_corr, ze1, ze2, ze3, pqsr100 = zqsr100 ) 108 124 ! 125 ! Used PAR is computed for each phytoplankton species 126 ! etot_ndcy is PAR at level jk averaged over 24h. 127 ! Due to their size, they have different light absorption characteristics 109 128 DO jk = 1, nksrp 110 129 etot_ndcy(:,:,jk) = ze1(:,:,jk) + ze2(:,:,jk) + ze3(:,:,jk) … … 117 136 END DO 118 137 ENDIF 119 ! 138 139 ! SW over the ice free zone of the grid cell. This assumes that 140 ! SW is zero below sea ice which is a very crude assumption that is 141 ! not fully correct with LIM3 and SI3 but no information is 142 ! currently available to do a better job. SHould be improved in the 143 ! (near) future. 120 144 zqsr_corr(:,:) = qsr(:,:) / ( 1.-fr_i(:,:) + rtrn ) 121 145 ! 122 146 CALL p4z_opt_par( kt, zqsr_corr, ze1, ze2, ze3 ) 123 ! 147 148 ! Total PAR computation at level jk that includes the diurnal cycle 124 149 DO jk = 1, nksrp 125 150 etot(:,:,jk) = ze1(:,:,jk) + ze2(:,:,jk) + ze3(:,:,jk) 126 151 END DO 127 152 ! 128 ELSE 129 ! 153 ELSE ! no diurnal cycle 154 ! 155 ! SW over the ice free zone of the grid cell. This assumes that 156 ! SW is zero below sea ice which is a very crude assumption that is 157 ! not fully correct with LIM3 and SI3 but no information is 158 ! currently available to do a better job. SHould be improved in the 159 ! (near) future. 130 160 zqsr_corr(:,:) = qsr(:,:) / ( 1.-fr_i(:,:) + rtrn ) 131 ! 161 132 162 CALL p4z_opt_par( kt, zqsr_corr, ze1, ze2, ze3, pqsr100 = zqsr100 ) 133 ! 163 164 ! Used PAR is computed for each phytoplankton species 165 ! Due to their size, they have different light absorption characteristics 134 166 DO jk = 1, nksrp 135 etot (:,:,jk) = ze1(:,:,jk) + ze2(:,:,jk) + ze3(:,:,jk) 136 enano(:,:,jk) = 1.85 * ze1(:,:,jk) + 0.69 * ze2(:,:,jk) + 0.46 * ze3(:,:,jk) 137 ediat(:,:,jk) = 1.62 * ze1(:,:,jk) + 0.74 * ze2(:,:,jk) + 0.63 * ze3(:,:,jk) 167 etot (:,:,jk) = ze1(:,:,jk) + ze2(:,:,jk) + ze3(:,:,jk) ! Total PAR 168 enano(:,:,jk) = 1.85 * ze1(:,:,jk) + 0.69 * ze2(:,:,jk) + 0.46 * ze3(:,:,jk) ! Nanophytoplankton 169 ediat(:,:,jk) = 1.62 * ze1(:,:,jk) + 0.74 * ze2(:,:,jk) + 0.63 * ze3(:,:,jk) ! Diatoms 138 170 END DO 139 171 IF( ln_p5z ) THEN 140 172 DO jk = 1, nksrp 141 epico(:,:,jk) = 1.94 * ze1(:,:,jk) + 0.66 * ze2(:,:,jk) + 0.4 * ze3(:,:,jk) 173 epico(:,:,jk) = 1.94 * ze1(:,:,jk) + 0.66 * ze2(:,:,jk) + 0.4 * ze3(:,:,jk) ! Picophytoplankton (PISCES-QUOTA) 142 174 END DO 143 175 ENDIF … … 146 178 147 179 180 ! Biophysical feedback part (computation of vertical penetration of SW) 148 181 IF( ln_qsr_bio ) THEN !* heat flux accros w-level (used in the dynamics) 149 182 ! ! ------------------------ … … 154 187 etot3(:,:,jk) = ( ze0(:,:,jk) + ze1(:,:,jk) + ze2(:,:,jk) + ze3(:,:,jk) ) * tmask(:,:,jk) 155 188 END DO 156 ! ! ------------------------ 157 ENDIF 158 ! !* Euphotic depth and level 159 neln (:,:) = 1 ! ------------------------ 189 190 ENDIF 191 192 ! Euphotic depth and level 193 ! Two definitions of the euphotic zone are used here. 194 ! (1) The classical definition based on the relative threshold value 195 ! (2) An alternative definition based on a absolute threshold value. 196 ! ------------------------------------------------------------------- 160 197 heup (:,:) = gdepw_n(:,:,2) 161 198 heup_01(:,:) = gdepw_n(:,:,2) … … 176 213 END DO 177 214 ! 215 ! The euphotic depth can not exceed 300 meters. 178 216 heup (:,:) = MIN( 300., heup (:,:) ) 179 217 heup_01(:,:) = MIN( 300., heup_01(:,:) ) 180 ! !* mean light over the mixed layer 181 zdepmoy(:,:) = 0.e0 ! ------------------------------- 218 219 ! Mean PAR over the mixed layer 220 ! ----------------------------- 221 zdepmoy(:,:) = 0.e0 182 222 zetmp1 (:,:) = 0.e0 183 223 zetmp2 (:,:) = 0.e0 … … 187 227 DO ji = 1, jpi 188 228 IF( gdepw_n(ji,jj,jk+1) <= hmld(ji,jj) ) THEN 189 zetmp1 (ji,jj) = zetmp1 (ji,jj) + etot (ji,jj,jk) * e3t_n(ji,jj,jk) ! remineralisation190 zetmp2 (ji,jj) = zetmp2 (ji,jj) + etot_ndcy(ji,jj,jk) * e3t_n(ji,jj,jk) ! production229 zetmp1 (ji,jj) = zetmp1 (ji,jj) + etot (ji,jj,jk) * e3t_n(ji,jj,jk) ! Actual PAR 230 zetmp2 (ji,jj) = zetmp2 (ji,jj) + etot_ndcy(ji,jj,jk) * e3t_n(ji,jj,jk) ! Par averaged over 24h 191 231 zdepmoy(ji,jj) = zdepmoy(ji,jj) + e3t_n(ji,jj,jk) 192 232 ENDIF … … 195 235 END DO 196 236 ! 197 emoy(:,:,:) = etot(:,:,:) ! remineralisation237 emoy(:,:,:) = etot(:,:,:) ! PAR 198 238 zpar(:,:,:) = etot_ndcy(:,:,:) ! diagnostic : PAR with no diurnal cycle 199 239 ! … … 209 249 END DO 210 250 END DO 211 ! 251 252 ! Computation of the mean usable light for the different phytoplankton 253 ! groups based on their absorption characteristics. 212 254 zdepmoy(:,:) = 0.e0 213 255 zetmp3 (:,:) = 0.e0 … … 218 260 DO ji = 1, jpi 219 261 IF( gdepw_n(ji,jj,jk+1) <= MIN(hmld(ji,jj), heup_01(ji,jj)) ) THEN 220 zetmp3 (ji,jj) = zetmp3 (ji,jj) + enano (ji,jj,jk) * e3t_n(ji,jj,jk) ! production221 zetmp4 (ji,jj) = zetmp4 (ji,jj) + ediat (ji,jj,jk) * e3t_n(ji,jj,jk) ! production262 zetmp3 (ji,jj) = zetmp3 (ji,jj) + enano (ji,jj,jk) * e3t_n(ji,jj,jk) ! Nanophytoplankton 263 zetmp4 (ji,jj) = zetmp4 (ji,jj) + ediat (ji,jj,jk) * e3t_n(ji,jj,jk) ! Diatoms 222 264 zdepmoy(ji,jj) = zdepmoy(ji,jj) + e3t_n(ji,jj,jk) 223 265 ENDIF … … 241 283 ! 242 284 IF( ln_p5z ) THEN 285 ! Picophytoplankton when using PISCES-QUOTA 243 286 zetmp5 (:,:) = 0.e0 244 287 DO jk = 1, nksrp … … 246 289 DO ji = 1, jpi 247 290 IF( gdepw_n(ji,jj,jk+1) <= MIN(hmld(ji,jj), heup_01(ji,jj)) ) THEN 248 zetmp5(ji,jj) = zetmp5 (ji,jj) + epico(ji,jj,jk) * e3t_n(ji,jj,jk) ! production291 zetmp5(ji,jj) = zetmp5 (ji,jj) + epico(ji,jj,jk) * e3t_n(ji,jj,jk) 249 292 ENDIF 250 293 END DO … … 265 308 END DO 266 309 ENDIF 310 311 ! Output of the diagnostics 267 312 IF( lk_iomput ) THEN 268 313 IF( knt == nrdttrc ) THEN -
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zpoc.F90
r12537 r13233 89 89 solgoc = 0.04/ 2.56 * 1./ ( 1.-50**(-0.04) ) 90 90 91 ! Initialisation of temporary arr ys91 ! Initialisation of temporary arrays 92 92 IF( ln_p4z ) THEN 93 93 zremipoc(:,:,:) = xremip … … 419 419 DO ji = 1, jpi 420 420 IF (tmask(ji,jj,jk) == 1.) THEN 421 ! POC disaggregation by bacterial activity. It is a function421 ! POC solubilisation by bacterial activity. It is a function 422 422 ! of the mean lability and of temperature 423 423 ! ---------------------------------------------------------- … … 538 538 ALLOCATE( alphan(jcpoc) , reminp(jcpoc) , alphap(jpi,jpj,jpk,jcpoc) ) 539 539 ! 540 IF (jcpoc > 1) THEN 540 IF (jcpoc > 1) THEN ! Case when more than one lability class is used 541 541 ! 542 542 remindelta = LOG(4. * 1000. ) / REAL(jcpoc-1, wp) … … 562 562 reminp(jcpoc) = reminp(jcpoc) * xremip / alphan(jcpoc) 563 563 564 ELSE 564 ELSE ! Only one lability class is used 565 565 alphan(jcpoc) = 1. 566 566 reminp(jcpoc) = xremip -
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zprod.F90
r13200 r13233 26 26 PUBLIC p4z_prod_alloc ! called in trcini_pisces.F90 27 27 28 REAL(wp), PUBLIC :: pislopen !: 29 REAL(wp), PUBLIC :: pisloped !: 30 REAL(wp), PUBLIC :: xadap !: 31 REAL(wp), PUBLIC :: excretn !: 32 REAL(wp), PUBLIC :: excretd !: 33 REAL(wp), PUBLIC :: bresp !: 34 REAL(wp), PUBLIC :: chlcnm !: 35 REAL(wp), PUBLIC :: chlcdm !: 36 REAL(wp), PUBLIC :: chlcmin !: 37 REAL(wp), PUBLIC :: fecnm !: 38 REAL(wp), PUBLIC :: fecdm !: 39 REAL(wp), PUBLIC :: grosip !: 28 REAL(wp), PUBLIC :: pislopen !: P-I slope of nanophytoplankton 29 REAL(wp), PUBLIC :: pisloped !: P-I slope of diatoms 30 REAL(wp), PUBLIC :: xadap !: Adaptation factor to low light 31 REAL(wp), PUBLIC :: excretn !: Excretion ratio of nanophyto 32 REAL(wp), PUBLIC :: excretd !: Excretion ratio of diatoms 33 REAL(wp), PUBLIC :: bresp !: Basal respiration rate 34 REAL(wp), PUBLIC :: chlcnm !: Maximum Chl/C ratio of nano 35 REAL(wp), PUBLIC :: chlcdm !: Maximum Chl/C ratio of diatoms 36 REAL(wp), PUBLIC :: chlcmin !: Minimum Chl/C ratio of phytoplankton 37 REAL(wp), PUBLIC :: fecnm !: Maximum Fe/C ratio of nano 38 REAL(wp), PUBLIC :: fecdm !: Maximum Fe/C ratio of diatoms 39 REAL(wp), PUBLIC :: grosip !: Mean Si/C ratio of diatoms 40 40 41 41 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: quotan !: proxy of N quota in Nanophyto … … 61 61 !! Computes also the uptake of Iron and Si as well 62 62 !! as the chlorophyll content of the cells 63 !! PISCES relies on a mixed Monod-Quota formalism 63 64 !!--------------------------------------------------------------------- 64 65 INTEGER, INTENT(in) :: kt, knt ! … … 94 95 zmxl_fac(:,:,:) = 0._wp ; zmxl_chl(:,:,:) = 0._wp 95 96 96 ! Computation of the maximimum production 97 ! Computation of the maximimum production. Based on a Q10 description 98 ! of the thermal dependency 97 99 ! Parameters are taken from Bissinger et al. (2008) 98 100 zprmaxn(:,:,:) = 0.8_wp * r1_rday * tgfunc(:,:,:) … … 100 102 101 103 ! compute the day length depending on latitude and the day 104 ! Astronomical parameterization taken from HAMOCC3 102 105 zrum = REAL( nday_year - 80, wp ) / REAL( nyear_len(1), wp ) 103 106 zcodel = ASIN( SIN( zrum * rpi * 2._wp ) * SIN( rad * 23.5_wp ) ) … … 115 118 ! Impact of the day duration and light intermittency on phytoplankton growth 116 119 ! Intermittency is supposed to have a similar effect on production as 117 ! day length. The correcting factor is zmxl_fac. zmxl_chl is the fractional 118 ! day length and is used to compute the mean PAR during daytime. 119 ! Formulation for the impact of day length on PP is from Thompson (1999) 120 ! day length (Shatwell et al., 2012). The correcting factor is zmxl_fac. 121 ! zmxl_chl is the fractional day length and is used to compute the mean 122 ! PAR during daytime. The effect of mixing is computed using the 123 ! absolute light level definition of the euphotic zone 120 124 ! ------------------------------------------------------------------------- 121 125 DO jk = 1, jpkm1 … … 137 141 zprdia(:,:,:) = zprmaxd(:,:,:) * zmxl_fac(:,:,:) 138 142 139 WHERE( zstrn(:,:) < 1.e0 ) zstrn(:,:) = 24.140 141 143 ! Computation of the P-I slope for nanos and diatoms 142 144 ! The formulation proposed by Geider et al. (1997) has been modified … … 155 157 ! The initial slope of the PI curve can be increased for nano 156 158 ! to account for photadaptation, for instance in the DCM 159 ! This parameterization is adhoc and should be either 160 ! improved or removed in future versions of the model 161 162 ! Nanophytoplankton 157 163 zpislopeadn(ji,jj,jk) = pislopen * ( 1.+ zadap * EXP( -0.25 * enano(ji,jj,jk) ) ) & 158 164 & * trb(ji,jj,jk,jpnch) /( trb(ji,jj,jk,jpphy) * 12. + rtrn) 159 ! 165 166 ! Diatoms 160 167 zpislopeadd(ji,jj,jk) = (pislopen * zconctemp2 + pisloped * zconctemp) / ( trb(ji,jj,jk,jpdia) + rtrn ) & 161 168 & * trb(ji,jj,jk,jpdch) /( trb(ji,jj,jk,jpdia) * 12. + rtrn) … … 170 177 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 171 178 ! Computation of production function for Carbon 172 ! --------------------------------------------- 179 ! Actual light levels are used here 180 ! ---------------------------------------------- 173 181 zpislopen = zpislopeadn(ji,jj,jk) / ( ( r1_rday + bresp * r1_rday ) & 174 182 & * zmxl_fac(ji,jj,jk) * rday + rtrn) … … 177 185 zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1.- EXP( -zpislopen * enano(ji,jj,jk) ) ) 178 186 zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediat(ji,jj,jk) ) ) 187 179 188 ! Computation of production function for Chlorophyll 180 !-------------------------------------------------- 189 ! Mean light level in the mixed layer (when appropriate) 190 ! is used here (acclimation is in general slower than 191 ! the characteristic time scales of vertical mixing) 192 ! ------------------------------------------------------ 181 193 zpislopen = zpislopeadn(ji,jj,jk) / ( zprmaxn(ji,jj,jk) * zmxl_chl(ji,jj,jk) * rday + rtrn ) 182 194 zpisloped = zpislopeadd(ji,jj,jk) / ( zprmaxd(ji,jj,jk) * zmxl_chl(ji,jj,jk) * rday + rtrn ) … … 188 200 END DO 189 201 190 ! Computation of a proxy of the N/C ratio191 ! Steady state is assumed192 ! --------------------------------------- 202 ! Computation of a proxy of the N/C quota from nutrient limitation 203 ! and light limitation. Steady state is assumed to allow the computation 204 ! ---------------------------------------------------------------------- 193 205 DO jk = 1, jpkm1 194 206 DO jj = 1, jpj … … 210 222 211 223 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 224 212 225 ! Si/C of diatoms 213 226 ! ------------------------ … … 215 228 ! Si/C is arbitrariliy increased for very high Si concentrations 216 229 ! to mimic the very high ratios observed in the Southern Ocean (zsilfac2) 230 ! A parameterization derived from Flynn (2003) is used for the control 231 ! when Si is not limiting which is similar to the parameterisation 232 ! proposed by Gurney and Davidson (1999). 217 233 ! ----------------------------------------------------------------------- 218 234 zlim = trb(ji,jj,jk,jpsil) / ( trb(ji,jj,jk,jpsil) + xksi1 ) … … 271 287 sizena(ji,jj,jk) = min(xsizern, max( sizena(ji,jj,jk), zsizetmp ) ) 272 288 273 ! Iron uptake rates of nanophytoplankton. Upregulation274 ! is parameterized at low iron concentrations. Typical275 ! formulation used in quota formulations. Uptake is downregulated276 ! when the quota is close to the maximum quota289 ! Iron uptake rates of nanophytoplankton. Upregulation is 290 ! not parameterized at low iron concentrations as observations 291 ! do not suggest it for accimated cells. Uptake is 292 ! downregulated when the quota is close to the maximum quota 277 293 zratio = 1.0 - MIN(1.0,trb(ji,jj,jk,jpnfe) / ( trb(ji,jj,jk,jpphy) * fecnm + rtrn ) ) 278 294 zmax = MAX( 0., MIN( 1.0, zratio**2/ (0.05**2+zratio**2) ) ) … … 281 297 & + xnanonh4(ji,jj,jk) ) * (1. - xnanofer(ji,jj,jk) ) ) & 282 298 & * xnanofer(ji,jj,jk) * zmax * trb(ji,jj,jk,jpphy) * rfact2 283 ! 299 ! production terms of diatoms (C) 284 300 zprorcad(ji,jj,jk) = zprdia(ji,jj,jk) * xlimdia(ji,jj,jk) * trb(ji,jj,jk,jpdia) * rfact2 285 301 … … 297 313 sizeda(ji,jj,jk) = min(xsizerd, max( sizeda(ji,jj,jk), zsizetmp ) ) 298 314 299 ! Iron uptake rates of nanophytoplankton. Upregulation300 ! is parameterized at low iron concentrations. Typical301 ! formulation used in quota formulations. Uptake is downregulated302 ! when the quota is close to the maximum quota315 ! Iron uptake rates of diatoms. Upregulation is 316 ! not parameterized at low iron concentrations as observations 317 ! do not suggest it for accimated cells. Uptake is 318 ! downregulated when the quota is close to the maximum quota 303 319 zratio = 1.0 - MIN(1.0, trb(ji,jj,jk,jpdfe) / ( trb(ji,jj,jk,jpdia) * fecdm + rtrn ) ) 304 320 zmax = MAX( 0., MIN( 1.0, zratio**2/ (0.05**2+zratio**2) ) ) … … 323 339 zprod = rday * zprorcan(ji,jj,jk) * zprchln(ji,jj,jk) * xlimphy(ji,jj,jk) 324 340 zprochln = chlcmin * 12. * zprorcan (ji,jj,jk) 341 325 342 ! The maximum reachable Chl quota is modulated by temperature 326 343 ! following Geider (1987) … … 328 345 zprochln = zprochln + (chlcnm_n-chlcmin) * 12. * zprod / & 329 346 & ( zpislopeadn(ji,jj,jk) * znanotot +rtrn) 330 ! production terms of diatoms ( chlorophyll ) 347 348 ! production terms of diatoms ( chlorophyll ) 331 349 zdiattot = ediatm(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 332 350 zprod = rday * zprorcad(ji,jj,jk) * zprchld(ji,jj,jk) * xlimdia(ji,jj,jk) 333 351 zprochld = chlcmin * 12. * zprorcad(ji,jj,jk) 352 334 353 ! The maximum reachable Chl quota is modulated by temperature 335 354 ! following Geider (1987) … … 337 356 zprochld = zprochld + (chlcdm_n-chlcmin) * 12. * zprod / & 338 357 & ( zpislopeadd(ji,jj,jk) * zdiattot +rtrn ) 339 ! Update the arrays TRA which contain the Chla sources and sinks 358 359 ! Update the arrays TRA which contain the Chla sources and sinks 340 360 tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) + zprochln * texcretn 341 361 tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) + zprochld * texcretd … … 377 397 END DO 378 398 END DO 379 ! 399 380 400 ! Production and uptake of ligands by phytoplankton. This part is activated 381 401 ! when ln_ligand is set to .true. in the namelist. Ligand uptake is small … … 403 423 404 424 425 ! Output of the diagnostics 405 426 ! Total primary production per year 406 427 IF( iom_use( "tintpp" ) .OR. ( ln_check_mass .AND. kt == nitend .AND. knt == nrdttrc ) ) & … … 423 444 CALL iom_put( "PPNEWN" , zw3d ) 424 445 ! 425 zw3d(:,:,:) = zpronewd(:,:,:) * zfact * tmask(:,:,:) ! new primary production by diatom es446 zw3d(:,:,:) = zpronewd(:,:,:) * zfact * tmask(:,:,:) ! new primary production by diatoms 426 447 CALL iom_put( "PPNEWD" , zw3d ) 427 448 ENDIF … … 434 455 CALL iom_put( "PFeN" , zw3d ) 435 456 ! 436 zw3d(:,:,:) = zprofed(:,:,:) * zfact * tmask(:,:,:) ! biogenic iron production by diatom es457 zw3d(:,:,:) = zprofed(:,:,:) * zfact * tmask(:,:,:) ! biogenic iron production by diatoms 437 458 CALL iom_put( "PFeD" , zw3d ) 438 459 ENDIF … … 546 567 INTEGER :: ios ! Local integer 547 568 ! 569 ! Namelist block 548 570 NAMELIST/namp4zprod/ pislopen, pisloped, xadap, bresp, excretn, excretd, & 549 571 & chlcnm, chlcdm, chlcmin, fecnm, fecdm, grosip -
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zrem.F90
r12682 r13233 92 92 ! Computation of the mean bacterial concentration 93 93 ! this parameterization has been deduced from a model version 94 ! that was modeling explicitely bacteria 95 ! ------------------------------------------------------- 94 ! that was modeling explicitely bacteria. This is a very old param 95 ! that will be very soon updated based on results from a much more 96 ! recent version of PISCES with bacteria. 97 ! ---------------------------------------------------------------- 96 98 DO jk = 1, jpkm1 97 99 DO jj = 1, jpj … … 111 113 END DO 112 114 113 IF( ln_p4z ) THEN 115 IF( ln_p4z ) THEN ! Standard PISCES code 114 116 DO jk = 1, jpkm1 115 117 DO jj = 1, jpj … … 152 154 END DO 153 155 END DO 154 ELSE 156 ELSE ! PISCES-QUOTA 155 157 DO jk = 1, jpkm1 156 158 DO jj = 1, jpj … … 231 233 232 234 ! Bacterial uptake of iron. No iron is available in DOC. So 233 ! Bacteri esare obliged to take up iron from the water. Some235 ! Bacteria are obliged to take up iron from the water. Some 234 236 ! studies (especially at Papa) have shown this uptake to be significant 235 237 ! --------------------------------------------------------------------- … … 262 264 DO jj = 1, jpj 263 265 DO ji = 1, jpi 264 ! Remineralization rate of BSi depedant on T and saturation 266 267 ! Remineralization rate of BSi dependent on T and saturation 265 268 ! The parameterization is taken from Ridgwell et al. (2002) 266 269 ! --------------------------------------------------------- … … 269 272 zsatur2 = ( 1. + tsn(ji,jj,jk,jp_tem) / 400.)**37 270 273 znusil = 0.225 * ( 1. + tsn(ji,jj,jk,jp_tem) / 15.) * zsatur + 0.775 * zsatur2 * zsatur**9.25 274 275 ! Two fractions of bSi are considered : a labile one and a more 276 ! refractory one based on the commonly observed two step 277 ! dissolution of bSi (initial rapid dissolution followed by 278 ! more slowly dissolution). 271 279 ! Computation of the vertical evolution of the labile fraction 272 280 ! of bSi. This is computed assuming steady state. 281 ! -------------------------------------------------------------- 273 282 IF ( gdept_n(ji,jj,jk) > zdep ) THEN 274 283 zfacsib(ji,jj,jk) = zfacsib(ji,jj,jk-1) * EXP( -0.5 * ( xsiremlab - xsirem ) & … … 280 289 zsiremin = ( xsiremlab * zfacsi(ji,jj,jk) + xsirem * ( 1. - zfacsi(ji,jj,jk) ) ) * xstep * znusil 281 290 zosil = zsiremin * trb(ji,jj,jk,jpgsi) 291 282 292 ! Update of the TRA arrays 283 293 tra(ji,jj,jk,jpgsi) = tra(ji,jj,jk,jpgsi) - zosil -
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zsed.F90
r13200 r13233 35 35 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,: ) :: sdenit !: Nitrate reduction in the sediments 36 36 REAL(wp) :: r1_rday !: inverse of rday 37 LOGICAL, SAVE :: lk_sed 37 LOGICAL, SAVE :: lk_sed !: Explicit sediment module 38 38 39 39 !!---------------------------------------------------------------------- … … 48 48 !! *** ROUTINE p4z_sed *** 49 49 !! 50 !! ** Purpose : Compute loss of biogenic matter in the sediments. This50 !! ** Purpose : Compute the loss of biogenic matter in the sediments. This 51 51 !! is by no way a real sediment model. The loss is simply 52 52 !! computed from metamodels. … … 55 55 !! N2 fixation is modeled using an implicit approach 56 56 !! 57 !! ** Method : - ??? 57 !! ** Method : - Fluxes with the sediments are mainly modeled using 58 !! statiscal metamodels. 58 59 !!--------------------------------------------------------------------- 59 60 ! … … 81 82 IF( kt == nittrc000 .AND. knt == 1 ) THEN 82 83 r1_rday = 1. / rday 84 ! Configuration with an active two-way sediment module 83 85 IF (ln_sediment .AND. ln_sed_2way) THEN 84 86 lk_sed = .TRUE. … … 109 111 ! 110 112 ALLOCATE( zironice(jpi,jpj) ) 111 ! 113 112 114 ! Compute the iron flux between sea ice and sea water 115 ! Simple parameterization assuming a fixed constant concentration in 116 ! sea-ice (icefeinput) 117 ! ------------------------------------------------------------------ 113 118 DO jj = 1, jpj 114 119 DO ji = 1, jpi … … 133 138 ! 134 139 ALLOCATE( zsidep(jpi,jpj), zpdep(jpi,jpj,jpk), zirondep(jpi,jpj,jpk) ) 140 135 141 ! Iron, P and Si deposition at the surface 136 142 ! Iron flux at the surface due to dust deposition. Solubility can be 137 143 ! be variable if ln_solub is set to true. In that case, solubility 138 144 ! has to be provided in the specific input file (read in p4zsbc) 145 ! mfrac is the mean iron relative weight content of dust 139 146 ! ------------------------------------------------------------------ 140 147 IF( ln_solub ) THEN … … 143 150 zirondep(:,:,1) = dustsolub * dust(:,:) * mfrac * rfact2 / e3t_n(:,:,1) / 55.85 + 3.e-10 * r1_ryyss 144 151 ENDIF 152 145 153 ! Si and P flux at the surface due to dust deposition. The content 146 154 ! and the solubility are hard coded … … 148 156 zsidep(:,:) = 8.8 * 0.075 * dust(:,:) * mfrac * rfact2 / e3t_n(:,:,1) / 28.1 149 157 zpdep (:,:,1) = 0.1 * 0.021 * dust(:,:) * mfrac * rfact2 / e3t_n(:,:,1) / 31. / po4r 158 150 159 ! Iron solubilization of particles in the water column 151 160 ! dust in kg/m2/s ---> 1/55.85 to put in mol/Fe ; wdust in m/d … … 159 168 DO jk = 2, jpkm1 160 169 zirondep(:,:,jk) = dust(:,:) * mfrac * zwdust * rfact2 * EXP( -gdept_n(:,:,jk) / (250. * wdust) ) 161 ! zpdep (:,:,jk) = zirondep(:,:,jk) * 0.023162 170 zpdep (:,:,jk) = zirondep(:,:,jk) * 0.38 / po4r 163 171 END DO 172 164 173 ! Solubilization of particles in the water column (Si, P, Fe) 165 174 tra(:,:,1,jpsil) = tra(:,:,1,jpsil) + zsidep (:,:) … … 197 206 ENDDO 198 207 ENDDO 208 199 209 ! When prognostic ligands are activated, ligands are supplied 200 210 ! to the ocean by rivers. We assume that the amount of ligands … … 262 272 ! ------------------------------------------------------ 263 273 IF( ln_ironsed ) THEN 264 274 tra(:,:,:,jpfer) = tra(:,:,:,jpfer) + ironsed(:,:,:) * rfact2 265 275 ! 266 276 IF( lk_iomput .AND. knt == nrdttrc .AND. iom_use( "Ironsed" ) ) & … … 434 444 xdiano3 = trb(ji,jj,jk,jpno3) / ( concnno3 + trb(ji,jj,jk,jpno3) ) * (1. - xdianh4) 435 445 zlim = ( 1.- xdiano3 - xdianh4 ) 446 ! Nitrogen fixation is almost fully halted when the N 447 ! limitation term (xdiano3+xdianh4) is > 0.9 436 448 IF( zlim <= 0.1 ) zlim = 0.01 437 449 zfact = zlim * rfact2 … … 454 466 xdiano3 = trb(ji,jj,jk,jpno3) / ( concnno3 + trb(ji,jj,jk,jpno3) ) * (1. - xdianh4) 455 467 zlim = ( 1.- xdiano3 - xdianh4 ) 468 469 ! Nitrogen fixation is almost fully halted when the N 470 ! limitation term (xdiano3+xdianh4) is > 0.9 456 471 IF( zlim <= 0.1 ) zlim = 0.01 457 472 zfact = zlim * rfact2 … … 474 489 DO ji = 1, jpi 475 490 zfact = nitrpot(ji,jj,jk) * nitrfix 491 ! 1/3 of the diazotrophs growth is supposed to be excreted 492 ! as NH4. 1/3 as DOC and the rest is routed POC and GOC as 493 ! a result of mortality by predation. Completely adhoc param 476 494 tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zfact / 3.0 477 495 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * zfact / 3.0 … … 481 499 tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) + zfact * 1.0 / 3.0 * 1.0 / 3.0 482 500 tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) + ( o2ut + o2nit ) * zfact * 2.0 / 3.0 + o2nit * zfact / 3.0 501 ! Fe/c of diazotrophs is assumed to be 30umol Fe/mol C 483 502 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - 30E-6 * zfact * 1.0 / 3.0 484 503 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + 30E-6 * zfact * 1.0 / 3.0 * 2.0 / 3.0 … … 494 513 DO ji = 1, jpi 495 514 zfact = nitrpot(ji,jj,jk) * nitrfix 515 ! 1/3 of the diazotrophs growth is supposed to be excreted 516 ! as NH4. 1/3 as DOC and the rest is routed POC and GOC as 517 ! a result of mortality by predation. Completely adhoc param 496 518 tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zfact / 3.0 497 519 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * zfact / 3.0 520 ! N/P ratio of diazotrophs is supposed to be 46 498 521 tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) - 16.0 / 46.0 * zfact * ( 1.0 - 1.0 / 3.0 ) & 499 522 & * ztrpo4(ji,jj,jk) / (ztrpo4(ji,jj,jk) + ztrdop(ji,jj,jk) + rtrn) … … 510 533 tra(ji,jj,jk,jpgop) = tra(ji,jj,jk,jpgop) + 16.0 / 46.0 * zfact * 1.0 / 3.0 * 1.0 /3.0 511 534 tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) + ( o2ut + o2nit ) * zfact * 2.0 / 3.0 + o2nit * zfact / 3.0 535 ! Fe/c of diazotrophs is assumed to be 30umol Fe/mol C 512 536 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - 30E-6 * zfact * 1.0 / 3.0 513 537 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + 30E-6 * zfact * 1.0 / 3.0 * 2.0 / 3.0 -
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zsink.F90
r12537 r13233 95 95 END DO 96 96 97 ! Sinking speed of the small particles is constant97 ! Sinking speed of the small particles is always constant 98 98 wsbio3(:,:,:) = wsbio 99 99 -
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zsms.F90
r12759 r13233 74 74 IF( .NOT. ln_rsttr ) THEN 75 75 CALL p4z_che ! initialize the chemical constants 76 CALL ahini_for_at(hi) ! 76 CALL ahini_for_at(hi) ! set PH at kt=nit000 77 77 t_oce_co2_flx_cum = 0._wp 78 78 ELSE … … 84 84 IF( ln_pisdmp .AND. MOD( kt - nn_dttrc, nn_pisdmp ) == 0 ) CALL p4z_dmp( kt ) ! Relaxation of some tracers 85 85 ! 86 rfact = r2dttrc 86 rfact = r2dttrc ! time step of PISCES 87 87 ! 88 88 IF( ( ln_top_euler .AND. kt == nittrc000 ) .OR. ( .NOT.ln_top_euler .AND. kt <= nittrc000 + nn_dttrc ) ) THEN 89 rfactr = 1. / rfact 90 rfact2 = rfact / REAL( nrdttrc, wp ) 91 rfact2r = 1. / rfact2 92 xstep = rfact2 / rday ! Time step duration for biology 89 rfactr = 1. / rfact ! inverse of the time step 90 rfact2 = rfact / REAL( nrdttrc, wp ) ! time step of the biological SMS 91 rfact2r = 1. / rfact2 ! Inverse of the biological time step 92 xstep = rfact2 / rday ! Time step duration for biology relative to a day 93 93 IF(lwp) WRITE(numout,*) 94 94 IF(lwp) WRITE(numout,*) ' Passive Tracer time step rfact = ', rfact, ' rdt = ', rdt … … 147 147 tra(:,:,:,jn) = 0._wp 148 148 END DO 149 ! 149 ! Euler-forward temporal scheme 150 150 IF( ln_top_euler ) THEN 151 151 DO jn = jp_pcs0, jp_pcs1 … … 167 167 ! 168 168 CALL sed_model( kt ) ! Main program of Sediment model 169 ! 169 ! Eulor forward temporal scheme 170 170 IF( ln_top_euler ) THEN 171 171 DO jn = jp_pcs0, jp_pcs1 -
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p5zlim.F90
r12759 r13233 59 59 60 60 !!* Allometric variations of the quotas 61 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqnnmin !: ???62 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqnnmax !: ???63 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqpnmin !: ???64 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqpnmax !: ???65 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqnpmin !: ???66 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqnpmax !: ???67 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqppmin !: ???68 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqppmax !: ???69 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqndmin !: ???70 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqndmax !: ???71 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqpdmin !: ???72 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqpdmax !: ???61 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqnnmin !: Minimum N quota of nanophyto 62 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqnnmax !: Maximum N quota of nanophyto 63 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqpnmin !: Minimum P quota of nanophyto 64 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqpnmax !: Maximum P quota of picophyto 65 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqnpmin !: Minimum N quota of picophyto 66 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqnpmax !: Maximum N quota of picophyto 67 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqppmin !: Minimum P quota of picophyto 68 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqppmax !: Maximum P quota of picophyto 69 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqndmin !: Minimum N quota of diatoms 70 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqndmax !: Maximum N quota of diatoms 71 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqpdmin !: Minimum P quota of diatoms 72 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqpdmax !: Maximum P quota of diatoms 73 73 74 74 !!* Phytoplankton nutrient limitation terms … … 521 521 !! ** Purpose : Initialization of nutrient limitation parameters 522 522 !! 523 !! ** Method : Read the namp islim and nampisquota namelists and check523 !! ** Method : Read the namp5zlim and nampisquota namelists and check 524 524 !! the parameters called at the first timestep (nittrc000) 525 525 !! 526 !! ** input : Namelist namp islim526 !! ** input : Namelist namp5zlim 527 527 !! 528 528 !!---------------------------------------------------------------------- … … 540 540 !!---------------------------------------------------------------------- 541 541 ! 542 REWIND( numnatp_ref ) ! Namelist namp islim in reference namelist : Pisces nutrient limitation parameters542 REWIND( numnatp_ref ) ! Namelist namp5zlim in reference namelist : Pisces nutrient limitation parameters 543 543 READ ( numnatp_ref, namp5zlim, IOSTAT = ios, ERR = 901) 544 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp islim in reference namelist' )545 ! 546 REWIND( numnatp_cfg ) ! Namelist namp islim in configuration namelist : Pisces nutrient limitation parameters544 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp5zlim in reference namelist' ) 545 ! 546 REWIND( numnatp_cfg ) ! Namelist namp5zlim in configuration namelist : Pisces nutrient limitation parameters 547 547 READ ( numnatp_cfg, namp5zlim, IOSTAT = ios, ERR = 902 ) 548 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namp islim in configuration namelist' )548 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namp5zlim in configuration namelist' ) 549 549 IF(lwm) WRITE ( numonp, namp5zlim ) 550 550 ! … … 614 614 ENDIF 615 615 ! 616 ! Metabolic cost of nitrate and ammonium utilisation 616 617 zpsino3 = 2.3 * rno3 617 618 zpsinh4 = 1.8 * rno3 -
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p5zmeso.F90
r12759 r13233 52 52 REAL(wp), PUBLIC :: grazflux !: mesozoo flux feeding rate 53 53 REAL(wp), PUBLIC :: xfracmig !: Fractional biomass of meso that performs DVM 54 REAL(wp), PUBLIC :: xsigma2 !: Width of the predation window 55 REAL(wp), PUBLIC :: xsigma2del !: Maximum width of the predation window at low food density 54 56 LOGICAL, PUBLIC :: bmetexc2 !: Use of excess carbon for respiration 55 57 LOGICAL , PUBLIC :: ln_dvm_meso !: Boolean to activate DVM of mesozooplankton … … 189 191 ! ---------------------------------------------------------- 190 192 zsigma = 1.0 - zdenom**2/(0.05**2+zdenom**2) 191 zsigma = 0.5 + 1.0* zsigma193 zsigma = xsigma2 + xsigma2del * zsigma 192 194 ! Nanophytoplankton and diatoms are the only preys considered 193 195 ! to be close enough to have potential interference -
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p5zmicro.F90
r12537 r13233 15 15 USE trc ! passive tracers common variables 16 16 USE sms_pisces ! PISCES Source Minus Sink variables 17 USE p4zlim 17 USE p4zlim ! PISCES nutrient limitation term of PISCES std 18 18 USE p5zlim ! Phytoplankton limitation terms 19 19 USE iom ! I/O manager … … 50 50 REAL(wp), PUBLIC :: srespir !: half sturation constant for grazing 1 51 51 REAL(wp), PUBLIC :: ssigma !: Fraction excreted as semi-labile DOM 52 REAL(wp), PUBLIC :: xsigma !: Width of the grazing window 53 REAL(wp), PUBLIC :: xsigmadel !: Maximum additional width of the grazing window at low food density 52 54 LOGICAL, PUBLIC :: bmetexc !: Use of excess carbon for respiration 53 55 … … 161 163 ! ---------------------------------------------------------- 162 164 zsigma = 1.0 - zdenom**2/(0.05**2+zdenom**2) 163 zsigma = 0.5 + 1.0*zsigma165 zsigma = xsigma + xsigmadel * zsigma 164 166 zdiffpn = exp( -ABS(log(0.5 * sizep(ji,jj,jk) / (3.0 * sizen(ji,jj,jk) + rtrn )) )**2 / zsigma**2 ) 165 167 zdiffdn = exp( -ABS(log(3.0 * sizen(ji,jj,jk) / (5.0 * sized(ji,jj,jk) + rtrn )) )**2 / zsigma**2) … … 179 181 ! Microzooplankton regular grazing on the different preys 180 182 ! ------------------------------------------------------- 181 zgraznc = zgraze * ztmp1 * zdenom 183 ! Nanophytoplankton 184 zgraznc = zgraze * ztmp1 * zdenom 182 185 zgraznn = zgraznc * trb(ji,jj,jk,jpnph) / (trb(ji,jj,jk,jpphy) + rtrn) 183 186 zgraznp = zgraznc * trb(ji,jj,jk,jppph) / (trb(ji,jj,jk,jpphy) + rtrn) 184 187 zgraznf = zgraznc * trb(ji,jj,jk,jpnfe) / (trb(ji,jj,jk,jpphy) + rtrn) 188 189 ! Picophytoplankton 185 190 zgrazpc = zgraze * ztmp2 * zdenom 186 191 zgrazpn = zgrazpc * trb(ji,jj,jk,jpnpi) / (trb(ji,jj,jk,jppic) + rtrn) 187 192 zgrazpp = zgrazpc * trb(ji,jj,jk,jpppi) / (trb(ji,jj,jk,jppic) + rtrn) 188 193 zgrazpf = zgrazpc * trb(ji,jj,jk,jppfe) / (trb(ji,jj,jk,jppic) + rtrn) 194 ! Microzooplankton 189 195 zgrazz = zgraze * ztmp5 * zdenom 196 197 ! small POC 190 198 zgrazpoc = zgraze * ztmp3 * zdenom 191 199 zgrazpon = zgrazpoc * trb(ji,jj,jk,jppon) / ( trb(ji,jj,jk,jppoc) + rtrn ) 192 200 zgrazpop = zgrazpoc * trb(ji,jj,jk,jppop) / ( trb(ji,jj,jk,jppoc) + rtrn ) 193 201 zgrazpof = zgrazpoc* trb(ji,jj,jk,jpsfe) / (trb(ji,jj,jk,jppoc) + rtrn) 202 203 ! Diatoms 194 204 zgrazdc = zgraze * ztmp4 * zdenom 195 205 zgrazdn = zgrazdc * trb(ji,jj,jk,jpndi) / (trb(ji,jj,jk,jpdia) + rtrn) … … 197 207 zgrazdf = zgrazdc * trb(ji,jj,jk,jpdfe) / (trb(ji,jj,jk,jpdia) + rtrn) 198 208 ! 209 ! Total ingestion rates in C, P, Fe, N 199 210 zgraztotc = zgraznc + zgrazpoc + zgrazdc + zgrazz + zgrazpc 200 211 zgraztotn = zgraznn + zgrazpn + zgrazpon + zgrazdn + zgrazz * no3rat3 … … 221 232 zepshert = MIN( 1., zgrasratn/ no3rat3, zgrasratp/ po4rat3, zgrasratf / ferat3) 222 233 zbeta = MAX( 0., (epsher - epshermin) ) 234 ! Food density deprivation of GGE 223 235 zepsherf = epshermin + zbeta / ( 1.0 + 0.04E6 * 12. * zfood * zbeta ) 236 ! Food quality deprivation of GGE 224 237 zepsherq = 0.5 + (1.0 - 0.5) * zepshert * ( 1.0 + 1.0 ) / ( zepshert + 1.0 ) 238 ! Actual GGE 225 239 zepsherv = zepsherf * zepshert * zepsherq 226 240 227 241 ! Respiration of microzooplankton 228 242 ! Excess carbon in the food is used preferentially 243 ! when activated by zmetexcess 229 244 ! ------------------------------------------------ 230 245 zexcess = zgraztotc * zepsherf * (1.0 - zepshert) * zmetexcess … … 380 395 & xprefp, xprefd, xprefz, xthreshdia, xthreshphy, & 381 396 & xthreshpic, xthreshpoc, xthreshzoo, xthresh, xkgraz, & 382 & epsher, epshermin, ssigma, srespir, unassc, unassn, unassp 397 & epsher, epshermin, ssigma, srespir, unassc, unassn, unassp, & 398 & xsigma, xsigmadel 383 399 !!---------------------------------------------------------------------- 384 400 ! … … 420 436 WRITE(numout,*) ' half sturation constant for grazing 1 xkgraz =', xkgraz 421 437 WRITE(numout,*) ' Use of excess carbon for respiration bmetexc =', bmetexc 438 WRITE(numout,*) ' Width of the grazing window xsigma =', xsigma 439 WRITE(numout,*) ' Maximum additional width of the grazing window xsigmadel =', xsigmadel 422 440 ENDIF 423 441 ! -
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p5zmort.F90
r12677 r13233 53 53 !!--------------------------------------------------------------------- 54 54 55 CALL p5z_ nano ! nanophytoplankton56 CALL p5z_ pico ! picophytoplankton57 CALL p5z_ diat ! diatoms55 CALL p5z_mort_nano ! nanophytoplankton 56 CALL p5z_mort_pico ! picophytoplankton 57 CALL p5z_mort_diat ! diatoms 58 58 59 59 END SUBROUTINE p5z_mort 60 60 61 61 62 SUBROUTINE p5z_ nano63 !!--------------------------------------------------------------------- 64 !! *** ROUTINE p5z_ nano ***62 SUBROUTINE p5z_mort_nano 63 !!--------------------------------------------------------------------- 64 !! *** ROUTINE p5z_mort_nano *** 65 65 !! 66 66 !! ** Purpose : Compute the mortality terms for nanophytoplankton 67 67 !! 68 !! ** Method : - ???68 !! ** Method : - Both quadratic and simili linear mortality terms 69 69 !!--------------------------------------------------------------------- 70 70 INTEGER :: ji, jj, jk … … 75 75 !!--------------------------------------------------------------------- 76 76 ! 77 IF( ln_timing ) CALL timing_start('p5z_ nano')77 IF( ln_timing ) CALL timing_start('p5z_mort_nano') 78 78 ! 79 79 prodcal(:,:,:) = 0. !: calcite production variable set to zero … … 82 82 DO ji = 1, jpi 83 83 zcompaph = MAX( ( trb(ji,jj,jk,jpphy) - 1e-9 ), 0.e0 ) 84 84 85 ! Quadratic mortality of nano due to aggregation during 85 86 ! blooms (Doney et al. 1996) … … 127 128 ENDIF 128 129 ! 129 IF( ln_timing ) CALL timing_stop('p5z_ nano')130 ! 131 END SUBROUTINE p5z_ nano132 133 134 SUBROUTINE p5z_ pico135 !!--------------------------------------------------------------------- 136 !! *** ROUTINE p5z_ pico ***130 IF( ln_timing ) CALL timing_stop('p5z_mort_nano') 131 ! 132 END SUBROUTINE p5z_mort_nano 133 134 135 SUBROUTINE p5z_mort_pico 136 !!--------------------------------------------------------------------- 137 !! *** ROUTINE p5z_mort_pico *** 137 138 !! 138 139 !! ** Purpose : Compute the mortality terms for picophytoplankton 139 140 !! 140 !! ** Method : - ???141 !! ** Method : - Both quadratic and semilininear terms are used 141 142 !!--------------------------------------------------------------------- 142 143 INTEGER :: ji, jj, jk … … 147 148 !!--------------------------------------------------------------------- 148 149 ! 149 IF( ln_timing ) CALL timing_start('p5z_ pico')150 IF( ln_timing ) CALL timing_start('p5z_mort_pico') 150 151 ! 151 152 DO jk = 1, jpkm1 … … 191 192 ENDIF 192 193 ! 193 IF( ln_timing ) CALL timing_stop('p5z_ pico')194 ! 195 END SUBROUTINE p5z_ pico196 197 198 SUBROUTINE p5z_ diat199 !!--------------------------------------------------------------------- 200 !! *** ROUTINE p5z_ diat ***194 IF( ln_timing ) CALL timing_stop('p5z_mort_pico') 195 ! 196 END SUBROUTINE p5z_mort_pico 197 198 199 SUBROUTINE p5z_mort_diat 200 !!--------------------------------------------------------------------- 201 !! *** ROUTINE p5z_mort_diat *** 201 202 !! 202 203 !! ** Purpose : Compute the mortality terms for diatoms … … 211 212 !!--------------------------------------------------------------------- 212 213 ! 213 IF( ln_timing ) CALL timing_start('p5z_ diat')214 IF( ln_timing ) CALL timing_start('p5z_mort_diat') 214 215 ! 215 216 … … 271 272 ENDIF 272 273 ! 273 IF( ln_timing ) CALL timing_stop('p5z_ diat')274 ! 275 END SUBROUTINE p5z_ diat274 IF( ln_timing ) CALL timing_stop('p5z_mort_diat') 275 ! 276 END SUBROUTINE p5z_mort_diat 276 277 277 278 -
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p5zprod.F90
r12537 r13233 2 2 !!====================================================================== 3 3 !! *** MODULE p5zprod *** 4 !! TOP : Growth Rate of the two phytoplanktons groups 4 !! TOP : Growth Rate of the three phytoplanktons groups 5 !! PISCES-QUOTA version of the module 5 6 !!====================================================================== 6 7 !! History : 1.0 ! 2004 (O. Aumont) Original code … … 29 30 30 31 !! * Shared module variables 31 REAL(wp), PUBLIC :: pislopen !: 32 REAL(wp), PUBLIC :: pislopep !: 33 REAL(wp), PUBLIC :: pisloped !: 34 REAL(wp), PUBLIC :: xadap !: 35 REAL(wp), PUBLIC :: excretn !: 36 REAL(wp), PUBLIC :: excretp !: 37 REAL(wp), PUBLIC :: excretd !: 38 REAL(wp), PUBLIC :: bresp !: 39 REAL(wp), PUBLIC :: thetanpm !: 40 REAL(wp), PUBLIC :: thetannm !: 41 REAL(wp), PUBLIC :: thetandm !: 42 REAL(wp), PUBLIC :: chlcmin !: 43 REAL(wp), PUBLIC :: grosip !: 44 45 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: zdaylen 32 REAL(wp), PUBLIC :: pislopen !: P-I slope of nanophytoplankton 33 REAL(wp), PUBLIC :: pislopep !: P-I slope of picophytoplankton 34 REAL(wp), PUBLIC :: pisloped !: P-I slope of diatoms 35 REAL(wp), PUBLIC :: xadap !: Adaptation factor to low light 36 REAL(wp), PUBLIC :: excretn !: Excretion ratio of nanophyto 37 REAL(wp), PUBLIC :: excretp !: Excretion ratio of picophyto 38 REAL(wp), PUBLIC :: excretd !: Excretion ratio of diatoms 39 REAL(wp), PUBLIC :: bresp !: Basal respiration rate 40 REAL(wp), PUBLIC :: thetanpm !: Maximum Chl/N ratio of picophyto 41 REAL(wp), PUBLIC :: thetannm !: Maximum Chl/N ratio of nanophyto 42 REAL(wp), PUBLIC :: thetandm !: Maximum Chl/N ratio of diatoms 43 REAL(wp), PUBLIC :: chlcmin !: Minimum Chl/C ratio of phytoplankton 44 REAL(wp), PUBLIC :: grosip !: Mean Si/C ratio of diatoms 45 46 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: zdaylen ! day length 46 47 47 48 REAL(wp) :: r1_rday !: 1 / rday 48 REAL(wp) :: texcretn !: 1 - excret 49 REAL(wp) :: texcretn !: 1 - excretn 49 50 REAL(wp) :: texcretp !: 1 - excretp 50 REAL(wp) :: texcretd !: 1 - excret 251 REAL(wp) :: texcretd !: 1 - excretd 51 52 52 53 !!---------------------------------------------------------------------- … … 63 64 !! ** Purpose : Compute the phytoplankton production depending on 64 65 !! light, temperature and nutrient availability 65 !! 66 !! ** Method : - ???66 !! Computes also the uptake of nutrients. PISCES-quota 67 !! relies on a full quota formalism 67 68 !!--------------------------------------------------------------------- 68 69 ! … … 99 100 ! 100 101 IF( ln_timing ) CALL timing_start('p5z_prod') 101 ! 102 103 ! Initialize the local arrays 102 104 zprorcan(:,:,:) = 0._wp ; zprorcap(:,:,:) = 0._wp ; zprorcad(:,:,:) = 0._wp 103 105 zprofed (:,:,:) = 0._wp ; zprofep (:,:,:) = 0._wp ; zprofen (:,:,:) = 0._wp … … 110 112 zrespn (:,:,:) = 0._wp ; zrespp (:,:,:) = 0._wp ; zrespd (:,:,:) = 0._wp 111 113 112 ! Computation of the optimal production 114 ! Computation of the optimal production rates and nutrient uptake 115 ! rates. Based on a Q10 description of the thermal dependency. 113 116 zprnut (:,:,:) = 0.6_wp * (1.0 + zpsino3 * qnnmax ) * r1_rday * tgfunc(:,:,:) 114 117 zprnutp(:,:,:) = 0.6_wp * (1. + zpsino3 * qnpmax ) * r1_rday * tgfunc3(:,:,:) … … 118 121 119 122 ! compute the day length depending on latitude and the day 123 ! Astronomical parameterization taken from HAMOCC3 120 124 zrum = REAL( nday_year - 80, wp ) / REAL( nyear_len(1), wp ) 121 125 zcodel = ASIN( SIN( zrum * rpi * 2._wp ) * SIN( rad * 23.5_wp ) ) … … 131 135 END DO 132 136 133 ! Impact of the day duration on phytoplankton growth 137 ! Impact of the day duration and light intermittency on phytoplankton growth 138 ! Intermittency is supposed to have a similar effect on production as 139 ! day length (Shatwell et al., 2012). The correcting factor is zmxl_fac. 140 ! zmxl_chl is the fractional day length and is used to compute the mean 141 ! PAR during daytime. The effect of mixing is computed using the 142 ! absolute light level definition of the euphotic zone 143 ! ------------------------------------------------------------------------- 134 144 DO jk = 1, jpkm1 135 145 DO jj = 1 ,jpj … … 154 164 ! Maximum light intensity 155 165 zdaylen(:,:) = MAX(1., zstrn(:,:)) / 24. 156 WHERE( zstrn(:,:) < 1.e0 ) zstrn(:,:) = 24. 157 166 167 ! Computation of the P-I slope for nanos, picos and diatoms 168 ! The formulation proposed by Geider et al. (1997) has been used. 158 169 DO jk = 1, jpkm1 159 170 DO jj = 1, jpj 160 171 DO ji = 1, jpi 161 172 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 162 ! Computation of the P-I slope for nanos and diatoms163 173 ztn = MAX( 0., tsn(ji,jj,jk,jp_tem) - 15. ) 164 174 zadap = xadap * ztn / ( 2.+ ztn ) 165 ! 175 ! Nanophytoplankton 166 176 zpislopeadn(ji,jj,jk) = pislopen * trb(ji,jj,jk,jpnch) & 167 177 & /( trb(ji,jj,jk,jpphy) * 12. + rtrn) 178 179 ! Picophytoplankton 168 180 zpislopeadp(ji,jj,jk) = pislopep * ( 1. + zadap * EXP( -0.25 * epico(ji,jj,jk) ) ) & 169 181 & * trb(ji,jj,jk,jppch) /( trb(ji,jj,jk,jppic) * 12. + rtrn) 182 183 ! Diatoms 170 184 zpislopeadd(ji,jj,jk) = pisloped * trb(ji,jj,jk,jpdch) & 171 185 & /( trb(ji,jj,jk,jpdia) * 12. + rtrn) … … 176 190 177 191 ! Computation of production function for Carbon 192 ! Actual light levels are used here 178 193 ! --------------------------------------------- 179 194 zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1.- EXP( -zpislopen * enano(ji,jj,jk) / zmxl_chl(ji,jj,jk) ) ) … … 181 196 zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediat(ji,jj,jk) / zmxl_chl(ji,jj,jk)) ) 182 197 183 ! Computation of production function for Chlorophyll 184 ! ------------------------------------------------- 198 ! Computation of production function for Chlorophyll 199 ! Mean light level in the mixed layer (when appropriate) 200 ! is used here (acclimation is in general slower than 201 ! the characteristic time scales of vertical mixing) 202 ! ------------------------------------------------------ 185 203 zpislopen = zpislopen * zmxl_fac(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 186 204 zpisloped = zpisloped * zmxl_fac(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) … … 199 217 200 218 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 201 ! Si/C of diatoms 202 ! ------------------------ 203 ! Si/C increases with iron stress and silicate availability 204 ! Si/C is arbitrariliy increased for very high Si concentrations 205 ! to mimic the very high ratios observed in the Southern Ocean (silpot2) 219 ! Si/C of diatoms 220 ! ------------------------ 221 ! Si/C increases with iron stress and silicate availability (zsilfac) 222 ! Si/C is arbitrariliy increased for very high Si concentrations 223 ! to mimic the very high ratios observed in the Southern Ocean (zsilfac2) 224 ! A parameterization derived from Flynn (2003) is used for the control 225 ! when Si is not limiting which is similar to the parameterisation 226 ! proposed by Gurney and Davidson (1999). 227 ! ----------------------------------------------------------------------- 206 228 zlim = trb(ji,jj,jk,jpsil) / ( trb(ji,jj,jk,jpsil) + xksi1 ) 207 229 zsilim = MIN( zprdia(ji,jj,jk) / ( zprmaxd(ji,jj,jk) + rtrn ), xlimsi(ji,jj,jk) ) … … 225 247 END DO 226 248 227 ! Sea-ice effect on production 249 ! Sea-ice effect on production 250 ! No production is assumed below sea ice 251 ! -------------------------------------- 228 252 DO jk = 1, jpkm1 229 253 DO jj = 1, jpj -
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/trcini_pisces.F90
r12537 r13233 74 74 USE p4zpoc ! Remineralization of organic particles 75 75 USE p4zligand ! Remineralization of organic ligands 76 USE p5zlim ! Co-limitations of differents nutrients 77 USE p5zprod ! Growth rate of the 2 phyto groups78 USE p5zmicro ! Sources and sinks of microzooplankton 79 USE p5zmeso ! Sources and sinks of mesozooplankton 80 USE p5zmort ! Mortality terms for phytoplankton 76 USE p5zlim ! Co-limitations of differents nutrients (QUOTA) 77 USE p5zprod ! Growth rate of the 3 phyto groups (QUOTA) 78 USE p5zmicro ! Sources and sinks of microzooplankton (QUOTA) 79 USE p5zmeso ! Sources and sinks of mesozooplankton (QUOTA) 80 USE p5zmort ! Mortality terms for phytoplankton (QUOTA) 81 81 ! 82 82 REAL(wp), SAVE :: sco2 = 2.312e-3_wp … … 253 253 254 254 255 ! Initialization of the different PISCES modules 256 ! Mainly corresponds to the namelist use 257 ! ---------------------------------------------- 255 258 CALL p4z_sink_init ! vertical flux of particulate organic matter 256 259 CALL p4z_opt_init ! Optic: PAR in the water column … … 271 274 & CALL p4z_ligand_init ! remineralisation of organic ligands 272 275 273 IF( ln_p4z ) THEN 276 IF( ln_p4z ) THEN ! PISCES-std 274 277 CALL p4z_mort_init ! phytoplankton mortality 275 278 CALL p4z_micro_init ! microzooplankton 276 279 CALL p4z_meso_init ! mesozooplankton 277 ELSE 280 ELSE ! PISCES-QUOTA 278 281 CALL p5z_mort_init ! phytoplankton mortality 279 282 CALL p5z_micro_init ! microzooplankton
Note: See TracChangeset
for help on using the changeset viewer.