Changeset 12537
- Timestamp:
- 2020-03-11T16:02:54+01:00 (5 years ago)
- Location:
- NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP
- Files:
-
- 26 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zagg.F90
r10069 r12537 2 2 !!====================================================================== 3 3 !! *** MODULE p4zagg *** 4 !! TOP : PISCES aggregation of particles 4 !! TOP : PISCES aggregation of particles (DOC, POC, GOC) 5 !! This module is the same for both PISCES and PISCES-QUOTA 5 6 !!====================================================================== 6 7 !! History : 1.0 ! 2004 (O. Aumont) Original code … … 35 36 !! *** ROUTINE p4z_agg *** 36 37 !! 37 !! ** Purpose : Compute aggregation of particles 38 !! ** Purpose : Compute aggregation of particle. Aggregation by 39 !! brownian motion, differential settling and shear 40 !! are considered. 38 41 !! 39 !! ** Method : - ??? 42 !! ** Method : - Aggregation rates are computed assuming a fixed and 43 !! constant size spectrum in the different particulate 44 !! pools. The coagulation rates have been computed 45 !! externally using dedicated programs (O. Aumont). They 46 !! are hard-coded because they can't be changed 47 !! independently of each other. 40 48 !!--------------------------------------------------------------------- 41 49 INTEGER, INTENT(in) :: kt, knt ! … … 53 61 IF( ln_timing ) CALL timing_start('p4z_agg') 54 62 ! 55 ! Exchange between organic matter compartments due to coagulation/disaggregation 63 ! Exchange between organic matter compartments due to 64 ! coagulation/disaggregation 56 65 ! --------------------------------------------------- 66 67 ! PISCES part 57 68 IF( ln_p4z ) THEN 58 69 ! … … 62 73 ! 63 74 zfact = xstep * xdiss(ji,jj,jk) 64 ! Part I : Coagulation dependent on turbulence 75 ! Part I : Coagulation dependent on turbulence 76 ! The stickiness has been assumed to be 0.1 65 77 zagg1 = 25.9 * zfact * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jppoc) 66 78 zagg2 = 4452. * zfact * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jpgoc) 67 79 68 80 ! Part II : Differential settling 69 70 ! Aggregation of small into large particles81 ! Aggregation of small into large particles 82 ! The stickiness has been assumed to be 0.1 71 83 zagg3 = 47.1 * xstep * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jpgoc) 72 84 zagg4 = 3.3 * xstep * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jppoc) … … 79 91 ! 2nd term is shear aggregation of DOC-POC 80 92 ! 3rd term is differential settling of DOC-POC 93 ! 1/3 of DOC is supposed to experience aggregation (HMW) 81 94 zaggdoc = ( ( 0.369 * 0.3 * trb(ji,jj,jk,jpdoc) + 102.4 * trb(ji,jj,jk,jppoc) ) * zfact & 82 95 & + 2.4 * xstep * trb(ji,jj,jk,jppoc) ) * 0.3 * trb(ji,jj,jk,jpdoc) … … 84 97 ! 1st term is shear aggregation 85 98 ! 2nd term is differential settling 99 ! 1/3 of DOC is supposed to experience aggregation (HMW) 86 100 zaggdoc2 = ( 3.53E3 * zfact + 0.1 * xstep ) * trb(ji,jj,jk,jpgoc) * 0.3 * trb(ji,jj,jk,jpdoc) 87 101 ! tranfer of DOC to POC due to brownian motion … … 103 117 ELSE ! ln_p5z 104 118 ! 119 ! PISCES-QUOTA part 105 120 DO jk = 1, jpkm1 106 121 DO jj = 1, jpj … … 109 124 zfact = xstep * xdiss(ji,jj,jk) 110 125 ! Part I : Coagulation dependent on turbulence 126 ! The stickiness has been assumed to be 0.1 111 127 zaggtmp = 25.9 * zfact * trb(ji,jj,jk,jppoc) 112 128 zaggpoc1 = zaggtmp * trb(ji,jj,jk,jppoc) … … 115 131 116 132 ! Part II : Differential settling 133 ! The stickiness has been assumed to be 0.1 117 134 118 135 ! Aggregation of small into large particles … … 131 148 ! 2nd term is shear aggregation of DOC-POC 132 149 ! 3rd term is differential settling of DOC-POC 150 ! 1/3 of DOC is supposed to experience aggregation (HMW) 133 151 zaggtmp = ( ( 0.369 * 0.3 * trb(ji,jj,jk,jpdoc) + 102.4 * trb(ji,jj,jk,jppoc) ) * zfact & 134 152 & + 2.4 * xstep * trb(ji,jj,jk,jppoc) ) … … 140 158 ! 1st term is shear aggregation 141 159 ! 2nd term is differential settling 160 ! 1/3 of DOC is supposed to experience aggregation (HMW) 142 161 zaggtmp = ( 3.53E3 * zfact + 0.1 * xstep ) * trb(ji,jj,jk,jpgoc) 143 162 zaggdoc2 = zaggtmp * 0.3 * trb(ji,jj,jk,jpdoc) … … 146 165 147 166 ! tranfer of DOC to POC due to brownian motion 167 ! 1/3 of DOC is supposed to experience aggregation (HMW) 148 168 zaggtmp = ( 114. * 0.3 * trb(ji,jj,jk,jpdoc) ) * xstep 149 169 zaggdoc3 = zaggtmp * 0.3 * trb(ji,jj,jk,jpdoc) -
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zbio.F90
r12349 r12537 2 2 !!====================================================================== 3 3 !! *** MODULE p4zbio *** 4 !! TOP : PISCES bio-model 4 !! TOP : PISCES biogeochemical model 5 !! This module is for both PISCES and PISCES-QUOTA 5 6 !!====================================================================== 6 7 !! History : 1.0 ! 2004 (O. Aumont) Original code 7 8 !! 2.0 ! 2007-12 (C. Ethe, G. Madec) F90 9 !! 3.6 ! 2015 (O. Aumont) PISCES-QUOTA 8 10 !!---------------------------------------------------------------------- 9 11 !! p4z_bio : computes the interactions between the different … … 50 52 !! 51 53 !! ** Purpose : Ecosystem model in the whole ocean: computes the 52 !! different interactions between the different compartments53 !! of PISCES54 !! different interactions between the different compartments 55 !! of PISCES 54 56 !! 55 57 !! ** Method : - ??? … … 62 64 ! 63 65 IF( ln_timing ) CALL timing_start('p4z_bio') 64 !65 ! ASSIGN THE SHEAR RATE THAT IS USED FOR AGGREGATION66 ! OF PHYTOPLANKTON AND DETRITUS67 66 67 ! ASSIGN THE SHEAR RATE THAT IS USED FOR AGGREGATION 68 ! OF PHYTOPLANKTON AND DETRITUS 68 69 xdiss(:,:,:) = 1. 69 !!gm the use of nmld should be better here?70 70 DO jk = 2, jpkm1 71 71 DO jj = 1, jpj 72 72 DO ji = 1, jpi 73 !!gm : use nmln and test on jk ... less memory acces74 73 IF( gdepw_n(ji,jj,jk+1) > hmld(ji,jj) ) xdiss(ji,jj,jk) = 0.01 75 74 END DO … … 77 76 END DO 78 77 79 CALL p4z_opt ( kt, knt ) ! Optic : PAR in the water column78 CALL p4z_opt ( kt, knt ) ! Optics: PAR in the water column 80 79 CALL p4z_sink ( kt, knt ) ! vertical flux of particulate organic matter 81 80 CALL p4z_fechem ( kt, knt ) ! Iron chemistry/scavenging … … 87 86 CALL p4z_mort ( kt ) ! phytoplankton mortality 88 87 ! ! zooplankton sources/sinks routines 89 CALL p4z_micro( kt, knt ) 90 CALL p4z_meso ( kt, knt ) 88 CALL p4z_micro( kt, knt ) ! microzooplankton 89 CALL p4z_meso ( kt, knt ) ! mesozooplankton 91 90 ELSE 92 91 CALL p5z_lim ( kt, knt ) ! co-limitations by the various nutrients 93 92 CALL p5z_prod ( kt, knt ) ! phytoplankton growth rate over the global ocean. 94 ! ! (for each element : C, Si, Fe, Chl )93 ! ! (for each element : C, N, P, Si, Fe, Chl ) 95 94 CALL p5z_mort ( kt ) ! phytoplankton mortality 96 95 ! ! zooplankton sources/sinks routines 97 CALL p5z_micro( kt, knt ) 98 CALL p5z_meso ( kt, knt ) 96 CALL p5z_micro( kt, knt ) ! microzooplankton 97 CALL p5z_meso ( kt, knt ) ! mesozooplankton 99 98 ENDIF 100 99 ! … … 103 102 CALL p4z_poc ( kt, knt ) ! Remineralization of organic particles 104 103 ! 104 ! Ligand production. ln_ligand should be set .true. to activate 105 105 IF( ln_ligand ) & 106 106 & CALL p4z_ligand( kt, knt ) 107 ! Update of the size of the organisms 107 108 ! Update of the size of the different phytoplankton groups 108 109 IF (ln_p5z) THEN 109 110 sized(:,:,:) = sizeda(:,:,:) -
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zint.F90
r12349 r12537 1 1 MODULE p4zint 2 !!====================================================================== 2 !!========================================================================= 3 3 !! *** MODULE p4zint *** 4 4 !! TOP : PISCES interpolation and computation of various accessory fields 5 !!====================================================================== 5 !!========================================================================= 6 6 !! History : 1.0 ! 2004-03 (O. Aumont) Original code 7 7 !! 2.0 ! 2007-12 (C. Ethe, G. Madec) F90 … … 43 43 ! Computation of phyto and zoo metabolic rate 44 44 ! ------------------------------------------- 45 ! Generic temperature dependence (Eppley, 1972) 45 46 tgfunc (:,:,:) = EXP( 0.063913 * tsn(:,:,:,jp_tem) ) 47 ! Temperature dependence of mesozooplankton (Buitenhuis et al. (2005)) 46 48 tgfunc2(:,:,:) = EXP( 0.07608 * tsn(:,:,:,jp_tem) ) 49 ! Temperature dependence of picophytoplankton (Stawiarsky et al., 2016) 47 50 tgfunc3(:,:,:) = EXP( 0.0825 * tsn(:,:,:,jp_tem) ) 48 51 49 52 ! Computation of the silicon dependant half saturation constant for silica uptake 50 ! --------------------------------------------------- 53 ! This is based on an old study by Pondaven et al. (1998) 54 ! -------------------------------------------------------------------------------- 51 55 DO ji = 1, jpi 52 56 DO jj = 1, jpj … … 56 60 END DO 57 61 ! 62 ! At the end of each year, the half saturation constant for silica is 63 ! updated as this is based on the highest concentration reached over 64 ! the year 65 ! ------------------------------------------------------------------- 58 66 IF( nday_year == nyear_len(1) ) THEN 59 67 xksi (:,:) = xksimax(:,:) -
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zlim.F90
r11536 r12537 2 2 !!====================================================================== 3 3 !! *** MODULE p4zlim *** 4 !! TOP : PISCES4 !! TOP : Computes the nutrient limitation terms of phytoplankton 5 5 !!====================================================================== 6 6 !! History : 1.0 ! 2004 (O. Aumont) Original code … … 14 14 USE trc ! Tracers defined 15 15 USE sms_pisces ! PISCES variables 16 USE iom ! 16 USE iom ! I/O manager 17 17 18 18 IMPLICIT NONE 19 19 PRIVATE 20 20 21 PUBLIC p4z_lim 22 PUBLIC p4z_lim_init 23 PUBLIC p4z_lim_alloc 21 PUBLIC p4z_lim ! called in p4zbio.F90 22 PUBLIC p4z_lim_init ! called in trcsms_pisces.F90 23 PUBLIC p4z_lim_alloc ! called in trcini_pisces.F90 24 24 25 25 !! * Shared module variables 26 26 REAL(wp), PUBLIC :: concnno3 !: NO3, PO4 half saturation 27 27 REAL(wp), PUBLIC :: concdno3 !: Phosphate half saturation for diatoms 28 REAL(wp), PUBLIC :: concnnh4 !: NH4 half saturation for phyto28 REAL(wp), PUBLIC :: concnnh4 !: NH4 half saturation for nanophyto 29 29 REAL(wp), PUBLIC :: concdnh4 !: NH4 half saturation for diatoms 30 30 REAL(wp), PUBLIC :: concnfer !: Iron half saturation for nanophyto … … 46 46 47 47 !!* Phytoplankton limitation terms 48 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xnanono3 !: ???49 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xdiatno3 !: ???50 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xnanonh4 !: ???51 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xdiatnh4 !: ???52 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xnanopo4 !: ???53 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xdiatpo4 !: ???54 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimphy !: ???55 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimdia !: ???56 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimnfe !: ???57 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimdfe !: ???58 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimsi !: ???59 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimbac !: ??60 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimbacl !: ??61 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: concdfe !: ???62 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: concnfe !: ???63 64 ! Coefficient for iron limitation 48 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xnanono3 !: Nanophyto limitation by NO3 49 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xdiatno3 !: Diatoms limitation by NO3 50 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xnanonh4 !: Nanophyto limitation by NH4 51 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xdiatnh4 !: Diatoms limitation by NH4 52 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xnanopo4 !: Nanophyto limitation by PO4 53 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xdiatpo4 !: Diatoms limitation by PO4 54 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimphy !: Nutrient limitation term of nanophytoplankton 55 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimdia !: Nutrient limitation term of diatoms 56 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimnfe !: Nanophyto limitation by Iron 57 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimdfe !: Diatoms limitation by iron 58 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimsi !: Diatoms limitation by Si 59 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimbac !: Bacterial limitation term 60 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimbacl !: Bacterial limitation term 61 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: concdfe !: Limitation of diatoms uptake of Fe 62 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: concnfe !: Limitation of Nano uptake of Fe 63 64 ! Coefficient for iron limitation following Flynn and Hipkin (1999) 65 65 REAL(wp) :: xcoef1 = 0.0016 / 55.85 66 66 REAL(wp) :: xcoef2 = 1.21E-5 * 14. / 55.85 / 7.625 * 0.5 * 1.5 … … 79 79 !! 80 80 !! ** Purpose : Compute the co-limitations by the various nutrients 81 !! for the various phytoplankton species82 !! 83 !! ** Method : - ???81 !! for the various phytoplankton species 82 !! 83 !! ** Method : - Limitation follows the Liebieg law of the minimum 84 84 !!--------------------------------------------------------------------- 85 85 INTEGER, INTENT(in) :: kt, knt … … 99 99 DO ji = 1, jpi 100 100 101 ! Tuning of the iron concentration to a minimum level that is set to the detection limit 102 !------------------------------------- 101 ! Tuning of the iron concentration to a minimum level that 102 ! is set to the detection limit 103 ! -------------------------------------------------------- 103 104 zno3 = trb(ji,jj,jk,jpno3) / 40.e-6 104 105 zferlim = MAX( 3e-11 * zno3 * zno3, 5e-12 ) … … 106 107 trb(ji,jj,jk,jpfer) = MAX( trb(ji,jj,jk,jpfer), zferlim ) 107 108 108 ! Computation of a variable Ks for iron ondiatoms taking into account109 ! Computation of a variable Ks of diatoms taking into account 109 110 ! that increasing biomass is made of generally bigger cells 110 !------------------------------------------------ 111 !------------------------------------------------------------ 111 112 zconcd = MAX( 0.e0 , trb(ji,jj,jk,jpdia) - xsizedia ) 112 113 zconcd2 = trb(ji,jj,jk,jpdia) - zconcd … … 124 125 zconc0nnh4 = MAX( concnnh4, ( zconcn2 * concnnh4 + concnnh4 * xsizern * zconcn ) * z1_trbphy ) 125 126 126 ! Michaelis-Menten Limitation term for nutrients Small bacteria 127 ! ------------------------------------------------------------- 127 ! Michaelis-Menten Limitation term by nutrients of 128 ! heterotrophic bacteria 129 ! ------------------------------------------------- 128 130 zdenom = 1. / ( concbno3 * concbnh4 + concbnh4 * trb(ji,jj,jk,jpno3) + concbno3 * trb(ji,jj,jk,jpnh4) ) 129 131 xnanono3(ji,jj,jk) = trb(ji,jj,jk,jpno3) * concbnh4 * zdenom … … 134 136 zlim3 = trb(ji,jj,jk,jpfer) / ( concbfe + trb(ji,jj,jk,jpfer) ) 135 137 zlim4 = trb(ji,jj,jk,jpdoc) / ( xkdoc + trb(ji,jj,jk,jpdoc) ) 138 ! Xlimbac is used for DOC solubilization whereas xlimbacl 139 ! is used for all the other bacterial-dependent terms 140 ! ------------------------------------------------------- 136 141 xlimbacl(ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) 137 142 xlimbac (ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) * zlim4 138 143 139 ! Michaelis-Menten Limitation term for nutrients Small flagellates140 ! ----------------------------------------------- 144 ! Michaelis-Menten Limitation term by nutrients: Nanophyto 145 ! -------------------------------------------------------- 141 146 zdenom = 1. / ( zconc0n * zconc0nnh4 + zconc0nnh4 * trb(ji,jj,jk,jpno3) + zconc0n * trb(ji,jj,jk,jpnh4) ) 142 147 xnanono3(ji,jj,jk) = trb(ji,jj,jk,jpno3) * zconc0nnh4 * zdenom … … 146 151 zlim2 = trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + zconc0nnh4 ) 147 152 zratio = trb(ji,jj,jk,jpnfe) * z1_trbphy 153 154 ! The minimum iron quota depends on the size of PSU, respiration 155 ! and the reduction of nitrate following the parameterization 156 ! proposed by Flynn and Hipkin (1999) 148 157 zironmin = xcoef1 * trb(ji,jj,jk,jpnch) * z1_trbphy + xcoef2 * zlim1 + xcoef3 * xnanono3(ji,jj,jk) 149 158 zlim3 = MAX( 0.,( zratio - zironmin ) / qnfelim ) … … 151 160 xlimnfe (ji,jj,jk) = MIN( 1., zlim3 ) 152 161 xlimphy (ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) 153 !154 ! Michaelis-Menten Limitation term for nutrientsDiatoms155 ! ---------------------------------------------- 162 163 ! Michaelis-Menten Limitation term by nutrients : Diatoms 164 ! ------------------------------------------------------- 156 165 zdenom = 1. / ( zconc1d * zconc1dnh4 + zconc1dnh4 * trb(ji,jj,jk,jpno3) + zconc1d * trb(ji,jj,jk,jpnh4) ) 157 166 xdiatno3(ji,jj,jk) = trb(ji,jj,jk,jpno3) * zconc1dnh4 * zdenom … … 162 171 zlim3 = trb(ji,jj,jk,jpsil) / ( trb(ji,jj,jk,jpsil) + xksi(ji,jj) ) 163 172 zratio = trb(ji,jj,jk,jpdfe) * z1_trbdia 173 174 ! The minimum iron quota depends on the size of PSU, respiration 175 ! and the reduction of nitrate following the parameterization 176 ! proposed by Flynn and Hipkin (1999) 164 177 zironmin = xcoef1 * trb(ji,jj,jk,jpdch) * z1_trbdia + xcoef2 * zlim1 + xcoef3 * xdiatno3(ji,jj,jk) 165 178 zlim4 = MAX( 0., ( zratio - zironmin ) / qdfelim ) … … 173 186 174 187 ! Compute the fraction of nanophytoplankton that is made of calcifiers 188 ! This is a purely adhoc formulation described in Aumont et al. (2015) 189 ! This fraction depends on nutrient limitation, light, temperature 175 190 ! -------------------------------------------------------------------- 176 191 DO jk = 1, jpkm1 … … 206 221 nitrfac(ji,jj,jk) = MIN( 1., nitrfac(ji,jj,jk) ) 207 222 ! 208 ! denitrificationfactor computed from NO3 levels223 ! redox factor computed from NO3 levels 209 224 nitrfac2(ji,jj,jk) = MAX( 0.e0, ( 1.E-6 - trb(ji,jj,jk,jpno3) ) & 210 225 & / ( 1.E-6 + trb(ji,jj,jk,jpno3) ) ) … … 215 230 ! 216 231 IF( lk_iomput .AND. knt == nrdttrc ) THEN ! save output diagnostics 217 IF( iom_use( "xfracal" ) ) CALL iom_put( "xfracal", xfracal(:,:,:) * tmask(:,:,:) ) ! euphotic layer deptht232 IF( iom_use( "xfracal" ) ) CALL iom_put( "xfracal", xfracal(:,:,:) * tmask(:,:,:) ) ! Faction of nanophytoplankton that is calcifiers 218 233 IF( iom_use( "LNnut" ) ) CALL iom_put( "LNnut" , xlimphy(:,:,:) * tmask(:,:,:) ) ! Nutrient limitation term 219 234 IF( iom_use( "LDnut" ) ) CALL iom_put( "LDnut" , xlimdia(:,:,:) * tmask(:,:,:) ) ! Nutrient limitation term … … 231 246 !! *** ROUTINE p4z_lim_init *** 232 247 !! 233 !! ** Purpose : Initialization of nutrient limitation parameters234 !! 235 !! ** Method : Read the namp islim namelist and check the parameters248 !! ** Purpose : Initialization of the nutrient limitation parameters 249 !! 250 !! ** Method : Read the namp4zlim namelist and check the parameters 236 251 !! called at the first timestep (nittrc000) 237 252 !! 238 !! ** input : Namelist namp islim253 !! ** input : Namelist namp4zlim 239 254 !! 240 255 !!---------------------------------------------------------------------- … … 252 267 ENDIF 253 268 ! 254 REWIND( numnatp_ref ) ! Namelist namp islim in reference namelist : Pisces nutrient limitation parameters269 REWIND( numnatp_ref ) ! Namelist namp4zlim in reference namelist : Pisces nutrient limitation parameters 255 270 READ ( numnatp_ref, namp4zlim, IOSTAT = ios, ERR = 901) 256 271 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp4zlim in reference namelist' ) 257 REWIND( numnatp_cfg ) ! Namelist namp islim in configuration namelist : Pisces nutrient limitation parameters272 REWIND( numnatp_cfg ) ! Namelist namp4zlim in configuration namelist : Pisces nutrient limitation parameters 258 273 READ ( numnatp_cfg, namp4zlim, IOSTAT = ios, ERR = 902 ) 259 274 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namp4zlim in configuration namelist' ) -
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zmeso.F90
r12524 r12537 8 8 !! 3.4 ! 2011-06 (O. Aumont, C. Ethe) Quota model for iron 9 9 !!---------------------------------------------------------------------- 10 !! p4z_meso : Compute the sources/sinks for mesozooplankton 11 !! p4z_meso_init : Initialization of the parameters for mesozooplankton 10 !! p4z_meso : Compute the sources/sinks for mesozooplankton 11 !! p4z_meso_init : Initialization of the parameters for mesozooplankton 12 !! p4z_meso_alloc : Allocate variables for mesozooplankton 12 13 !!---------------------------------------------------------------------- 13 14 USE oce_trc ! shared variables between ocean and passive tracers … … 23 24 PUBLIC p4z_meso ! called in p4zbio.F90 24 25 PUBLIC p4z_meso_init ! called in trcsms_pisces.F90 25 PUBLIC p4z_meso_alloc 26 26 PUBLIC p4z_meso_alloc ! called in trcini_pisces.F90 27 28 !! * Shared module variables 27 29 REAL(wp), PUBLIC :: part2 !: part of calcite not dissolved in mesozoo guts 28 30 REAL(wp), PUBLIC :: xpref2d !: mesozoo preference for diatoms … … 46 48 REAL(wp), PUBLIC :: xfracmig !: Fractional biomass of meso that performs DVM 47 49 LOGICAL , PUBLIC :: ln_dvm_meso !: Boolean to activate DVM of mesozooplankton 48 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: depmig 49 INTEGER , ALLOCATABLE, SAVE, DIMENSION(:,:) :: kmig 50 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: depmig !: DVM of mesozooplankton : migration depth 51 INTEGER , ALLOCATABLE, SAVE, DIMENSION(:,:) :: kmig !: Vertical indice of the the migration depth 50 52 51 53 !!---------------------------------------------------------------------- … … 61 63 !! 62 64 !! ** Purpose : Compute the sources/sinks for mesozooplankton 65 !! This includes ingestion and assimilation, flux feeding 66 !! and mortality. We use a passive prey switching 67 !! parameterization. 68 !! All living compartments smaller than mesozooplankton 69 !! are potential preys of mesozooplankton as well as small 70 !! sinking particles 63 71 !! 64 72 !! ** Method : - ??? … … 68 76 INTEGER :: ji, jj, jk, jkt 69 77 REAL(wp) :: zcompadi, zcompaph, zcompapoc, zcompaz, zcompam 70 REAL(wp) :: zgraze2 , zdenom, zdenom2 71 REAL(wp) :: zfact , zfood, zfoodlim, zproport, zbeta 78 REAL(wp) :: zgraze2 , zdenom, zdenom2, zfact , zfood, zfoodlim, zproport, zbeta 72 79 REAL(wp) :: zmortzgoc, zfrac, zfracfe, zratio, zratio2, zfracal, zgrazcal 73 80 REAL(wp) :: zepsherf, zepshert, zepsherq, zepsherv, zgrarsig, zgraztotc, zgraztotn, zgraztotf 74 81 REAL(wp) :: zmigreltime, zprcaca, zmortz, zgrasrat, zgrasratn 75 REAL(wp) :: zrespz, ztortz, zgrazd, zgrazz, zgrazpof 76 REAL(wp) :: zgrazn, zgrazpoc, zgraznf, zgrazf 77 REAL(wp) :: zgrazfffp, zgrazfffg, zgrazffep, zgrazffeg 78 REAL(wp) :: zrum, zcodel, zargu, zval 82 REAL(wp) :: zrespz, ztortz, zgrazd, zgrazz, zgrazpof, zgrazn, zgrazpoc, zgraznf, zgrazf 83 REAL(wp) :: zgrazfffp, zgrazfffg, zgrazffep, zgrazffeg, zrum, zcodel, zargu, zval 79 84 CHARACTER (len=25) :: charout 80 85 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrazing, zfezoo2 … … 95 100 ! 96 101 ! Diurnal vertical migration of mesozooplankton 102 ! Computation of the migration depth 97 103 ! --------------------------------------------- 98 104 IF (ln_dvm_meso) CALL p4z_meso_depmig … … 104 110 zfact = xstep * tgfunc2(ji,jj,jk) * zcompam 105 111 106 ! Respiration rates of both zooplankton 107 ! ------------------------------------- 112 ! linear mortality of mesozooplankton 113 ! A michaelis menten modulation term is used to avoid extinction of 114 ! mesozooplankton at very low food concentration. Mortality is 115 116 ! enhanced in low O2 waters 117 ! ----------------------------------------------------------------- 108 118 zrespz = resrat2 * zfact * ( trb(ji,jj,jk,jpmes) / ( xkmort + trb(ji,jj,jk,jpmes) ) & 109 119 & + 3. * nitrfac(ji,jj,jk) ) 110 120 111 ! Zooplankton mortality. A square function has been selected with 112 ! no real reason except that it seems to be more stable and may mimic predation 113 ! --------------------------------------------------------------- 121 ! Zooplankton quadratic mortality. A square function has been selected with 122 ! to mimic predation and disease (density dependent mortality). It also tends 123 ! to stabilise the model 124 ! ------------------------------------------------------------------------- 114 125 ztortz = mzrat2 * 1.e6 * zfact * trb(ji,jj,jk,jpmes) * (1. - nitrfac(ji,jj,jk) ) 115 ! 126 127 ! Computation of the abundance of the preys 128 ! A threshold can be specified in the namelist 129 ! -------------------------------------------- 116 130 zcompadi = MAX( ( trb(ji,jj,jk,jpdia) - xthresh2dia ), 0.e0 ) 117 131 zcompaz = MAX( ( trb(ji,jj,jk,jpzoo) - xthresh2zoo ), 0.e0 ) 118 132 zcompapoc = MAX( ( trb(ji,jj,jk,jppoc) - xthresh2poc ), 0.e0 ) 119 133 ! Size effect of nanophytoplankton on grazing : the smaller it is, the less prone 120 ! it is to predation by mesozooplankton 134 ! it is to predation by mesozooplankton. We use a quota dependant parameterization 135 ! as a low quota indicates oligotrophic conditions which are charatcerized by 136 ! small cells 121 137 ! ------------------------------------------------------------------------------- 122 138 zcompaph = MAX( ( trb(ji,jj,jk,jpphy) - xthresh2phy ), 0.e0 ) & … … 124 140 125 141 ! Mesozooplankton grazing 126 ! ------------------------ 142 ! The total amount of food is the sum of all preys accessible to mesozooplankton 143 ! multiplied by their food preference 144 ! A threshold can be specified in the namelist (xthresh2). However, when food 145 ! concentration is close to this threshold, it is decreased to avoid the 146 ! accumulation of food in the mesozoopelagic domain 147 ! ------------------------------------------------------------------------------- 127 148 zfood = xpref2d * zcompadi + xpref2z * zcompaz + xpref2n * zcompaph + xpref2c * zcompapoc 128 149 zfoodlim = MAX( 0., zfood - MIN( 0.5 * zfood, xthresh2 ) ) … … 131 152 zgraze2 = grazrat2 * xstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpmes) * (1. - nitrfac(ji,jj,jk)) 132 153 154 ! The grazing pressure on each prey is computed assuming passive switching. This 155 ! is equivalent to assuming that mesozooplankton have an opportunistic feeding 156 ! behaviour. 157 ! ----------------------------------------------------------------------------- 133 158 zgrazd = zgraze2 * xpref2d * zcompadi * zdenom2 134 159 zgrazz = zgraze2 * xpref2z * zcompaz * zdenom2 … … 140 165 zgrazpof = zgrazpoc * trb(ji,jj,jk,jpsfe) / ( trb(ji,jj,jk,jppoc) + rtrn) 141 166 142 ! Mesozooplankton flux feeding on GOC 143 ! ---------------------------------- 167 ! Mesozooplankton flux feeding on GOC and POC. The feeding pressure 168 ! is proportional to the flux 169 ! ------------------------------------------------------------------ 144 170 zgrazffeg = grazflux * xstep * wsbio4(ji,jj,jk) & 145 171 & * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpgoc) * trb(ji,jj,jk,jpmes) & … … 150 176 & * (1. - nitrfac(ji,jj,jk)) 151 177 zgrazfffp = zgrazffep * trb(ji,jj,jk,jpsfe) / (trb(ji,jj,jk,jppoc) + rtrn) 152 !178 153 179 zgraztotc = zgrazd + zgrazz + zgrazn + zgrazpoc + zgrazffep + zgrazffeg 154 ! Compute the proportion of filter feeders 180 ! Compute the proportion of filter feeders. It is assumed steady state. 181 ! --------------------------------------------------------------------- 155 182 zproport = (zgrazffep + zgrazffeg)/(rtrn + zgraztotc) 183 156 184 ! Compute fractionation of aggregates. It is assumed that 157 185 ! diatoms based aggregates are more prone to fractionation 158 186 ! since they are more porous (marine snow instead of fecal pellets) 187 ! ----------------------------------------------------------------- 159 188 zratio = trb(ji,jj,jk,jpgsi) / ( trb(ji,jj,jk,jpgoc) + rtrn ) 160 189 zratio2 = zratio * zratio … … 164 193 zfracfe = zfrac * trb(ji,jj,jk,jpbfe) / (trb(ji,jj,jk,jpgoc) + rtrn) 165 194 195 ! Flux feeding is multiplied by the fractional biomass of flux feeders 166 196 zgrazffep = zproport * zgrazffep 167 197 zgrazffeg = zproport * zgrazffeg … … 176 206 zgrazing(ji,jj,jk) = zgraztotc 177 207 178 ! Mesozooplankton efficiency 179 ! -------------------------- 208 ! Mesozooplankton efficiency. 209 ! We adopt a formulation proposed by Mitra et al. (2007) 210 ! The gross growth efficiency is controled by the most limiting nutrient. 211 ! Growth is also further decreased when the food quality is poor. This is currently 212 ! hard coded : it can be decreased by up to 50% (zepsherq) 213 ! GGE can also be decreased when food quantity is high, zepsherf (Montagnes and 214 ! Fulton, 2012) 215 ! ----------------------------------------------------------------------------------- 180 216 zgrasrat = ( zgraztotf + rtrn )/ ( zgraztotc + rtrn ) 181 217 zgrasratn = ( zgraztotn + rtrn )/ ( zgraztotc + rtrn ) … … 189 225 ! --------------------------------------------- 190 226 zmortz = ztortz + zrespz 227 ! Mortality induced by the upper trophic levels, ztortz, is allocated 228 ! according to a infinite chain of predators (ANderson et al., 2013) 191 229 zmortzgoc = unass2 / ( 1. - epsher2 ) * ztortz + zrespz 192 230 tra(ji,jj,jk,jpmes) = tra(ji,jj,jk,jpmes) - zmortz + zepsherv * zgraztotc … … 208 246 tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) - zgrazfffg - zfracfe 209 247 ! Calcite remineralization due to zooplankton activity 248 ! part2 of the ingested calcite is dissolving in the acidic gut 210 249 zfracal = trb(ji,jj,jk,jpcal) / (trb(ji,jj,jk,jppoc) + trb(ji,jj,jk,jpgoc) + rtrn ) 211 250 zgrazcal = (zgrazffeg + zgrazpoc) * (1. - part2) * zfracal … … 218 257 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) - 2. * ( zgrazcal + zprcaca ) 219 258 tra(ji,jj,jk,jpcal) = tra(ji,jj,jk,jpcal) - zgrazcal + zprcaca 220 221 ! Correct the fluxes for the effect of DVM 222 ! A fixed fraction of mesozooplankton is assumed to migrate 259 260 ! Computation of total excretion and egestion by mesozoo. 223 261 ! --------------------------------------------------------- 224 262 zgrarem(ji,jj,jk) = zgraztotc * ( 1. - zepsherv - unass2 ) & … … 232 270 END DO 233 271 272 ! Computation of the effect of DVM by mesozooplankton 273 ! This part is only activated if ln_dvm_meso is set to true 274 ! The parameterization has been published in Gorgues et al. (2019). 275 ! ----------------------------------------------------------------- 234 276 IF (ln_dvm_meso) THEN 235 277 ALLOCATE( zgramigrem(jpi,jpj), zgramigref(jpi,jpj), zgramigpoc(jpi,jpj), zgramigpof(jpi,jpj) ) … … 253 295 END DO 254 296 255 297 ! Compute the amount of materials that will go into vertical migration 298 ! This fraction is sumed over the euphotic zone and is removed from 299 ! the fluxes driven by mesozooplankton in the euphotic zone. 300 ! -------------------------------------------------------------------- 256 301 DO jk = 1, jpk 257 302 DO jj = 1, jpj 258 303 DO ji = 1, jpi 259 260 ! Compute the amount of materials that will go into vertical migration261 304 zmigreltime = (1. - zstrn(ji,jj)) 262 305 IF ( gdept_n(ji,jj,jk) <= heup(ji,jj) ) THEN … … 279 322 END DO 280 323 324 ! The inorganic and organic fluxes induced by migrating organisms are added at the 325 ! the migration depth (corresponding indice is set by kmig) 326 ! -------------------------------------------------------------------------------- 281 327 DO jj = 1, jpj 282 328 DO ji = 1, jpi … … 296 342 DEALLOCATE( zstrn ) 297 343 344 ! End of the ln_dvm_meso part 298 345 ENDIF 299 346 … … 302 349 DO ji = 1, jpi 303 350 ! Update the arrays TRA which contain the biological sources and sinks 351 ! This only concerns the variables which are affected by DVM (inorganic 352 ! nutrients, DOC agands, and particulate organic carbon). 304 353 zgrarsig = zgrarem(ji,jj,jk) * sigma2 305 354 tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + zgrarsig … … 324 373 END DO 325 374 ! 375 ! Write the output 326 376 IF( lk_iomput .AND. knt == nrdttrc ) THEN 327 377 ALLOCATE( zw3d(jpi,jpj,jpk) ) … … 364 414 !! ** Purpose : Initialization of mesozooplankton parameters 365 415 !! 366 !! ** Method : Read the namp ismes namelist and check the parameters416 !! ** Method : Read the namp4zmes namelist and check the parameters 367 417 !! called at the first timestep (nittrc000) 368 418 !! … … 383 433 ENDIF 384 434 ! 385 REWIND( numnatp_ref ) ! Namelist namp ismes in reference namelist : Pisces mesozooplankton435 REWIND( numnatp_ref ) ! Namelist namp4zmes in reference namelist : Pisces mesozooplankton 386 436 READ ( numnatp_ref, namp4zmes, IOSTAT = ios, ERR = 901) 387 437 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp4zmes in reference namelist' ) 388 REWIND( numnatp_cfg ) ! Namelist namp ismes in configuration namelist : Pisces mesozooplankton438 REWIND( numnatp_cfg ) ! Namelist namp4zmes in configuration namelist : Pisces mesozooplankton 389 439 READ ( numnatp_cfg, namp4zmes, IOSTAT = ios, ERR = 902 ) 390 440 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namp4zmes in configuration namelist' ) … … 427 477 !! temperature and chlorophylle following the parameterization 428 478 !! proposed by Bianchi et al. (2013) 429 !!430 !! ** input :431 479 !!---------------------------------------------------------------------- 432 480 INTEGER :: ji, jj, jk … … 447 495 ! Compute the averaged values of oxygen, temperature over the domain 448 496 ! 150m to 500 m depth. 449 ! 497 ! ------------------------------------------------------------------ 450 498 DO jk =1, jpk 451 499 DO jj = 1, jpj … … 462 510 END DO 463 511 512 ! Compute the difference between surface values and the mean values in the mesopelagic 513 ! domain 514 ! ------------------------------------------------------------------------------------ 464 515 DO jj = 1, jpj 465 516 DO ji = 1, jpi … … 472 523 ! Bianchi et al. (2013) 473 524 ! ------------------------------------------------------------------- 474 !475 525 DO jj = 1, jpj 476 526 DO ji = 1, jpi … … 484 534 ! Computation of the corresponding jk indice 485 535 ! ------------------------------------------ 486 !487 536 DO jk = 1, jpk-1 488 537 DO jj = 1, jpj … … 501 550 ! that it falls above the OMZ 502 551 ! ----------------------------------------------------------------------- 503 !504 552 DO ji =1, jpi 505 553 DO jj = 1, jpj … … 530 578 END FUNCTION p4z_meso_alloc 531 579 532 533 580 !!====================================================================== 534 581 END MODULE p4zmeso -
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zmicro.F90
r12349 r12537 22 22 PRIVATE 23 23 24 !! * Shared module variables 24 25 PUBLIC p4z_micro ! called in p4zbio.F90 25 26 PUBLIC p4z_micro_init ! called in trcsms_pisces.F90 … … 54 55 !! 55 56 !! ** Purpose : Compute the sources/sinks for microzooplankton 57 !! This includes ingestion and assimilation, flux feeding 58 !! and mortality. We use a passive prey switching 59 !! parameterization. 60 !! All living compartments smaller than microzooplankton 61 !! are potential preys of mesozooplankton 56 62 !! 57 63 !! ** Method : - ??? … … 87 93 zfact = xstep * tgfunc2(ji,jj,jk) * zcompaz 88 94 89 ! Respiration rates of both zooplankton 90 ! ------------------------------------- 95 ! linear mortality of mesozooplankton 96 ! A michaelis menten modulation term is used to avoid extinction of 97 ! microzooplankton at very low food concentrations. Mortality is 98 ! enhanced in low O2 waters 99 ! ----------------------------------------------------------------- 91 100 zrespz = resrat * zfact * trb(ji,jj,jk,jpzoo) / ( xkmort + trb(ji,jj,jk,jpzoo) ) & 92 101 & + resrat * zfact * 3. * nitrfac(ji,jj,jk) 93 102 94 ! Zooplankton mortality. A square function has been selected with 95 ! no real reason except that it seems to be more stable and may mimic predation. 96 ! --------------------------------------------------------------- 103 ! Zooplankton quadratic mortality. A square function has been selected with 104 ! to mimic predation and disease (density dependent mortality). It also tends 105 ! to stabilise the model 106 ! ------------------------------------------------------------------------- 97 107 ztortz = mzrat * 1.e6 * zfact * trb(ji,jj,jk,jpzoo) * (1. - nitrfac(ji,jj,jk)) 98 108 109 ! Computation of the abundance of the preys 110 ! A threshold can be specified in the namelist 111 ! Diatoms have a specific treatment. WHen concentrations 112 ! exceed a certain value, diatoms are suppposed to be too 113 ! big for microzooplankton. 114 ! -------------------------------------------------------- 99 115 zcompadi = MIN( MAX( ( trb(ji,jj,jk,jpdia) - xthreshdia ), 0.e0 ), xsizedia ) 100 116 zcompaph = MAX( ( trb(ji,jj,jk,jpphy) - xthreshphy ), 0.e0 ) 101 117 zcompapoc = MAX( ( trb(ji,jj,jk,jppoc) - xthreshpoc ), 0.e0 ) 102 118 103 ! Microzooplankton grazing 104 ! ------------------------ 119 ! Microzooplankton grazing 120 ! The total amount of food is the sum of all preys accessible to mesozooplankton 121 ! multiplied by their food preference 122 ! A threshold can be specified in the namelist (xthresh). However, when food 123 ! concentration is close to this threshold, it is decreased to avoid the 124 ! accumulation of food in the mesozoopelagic domain 125 ! ------------------------------------------------------------------------------- 105 126 zfood = xprefn * zcompaph + xprefc * zcompapoc + xprefd * zcompadi 106 127 zfoodlim = MAX( 0. , zfood - min(xthresh,0.5*zfood) ) … … 109 130 zgraze = grazrat * xstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpzoo) * (1. - nitrfac(ji,jj,jk)) 110 131 132 ! The grazing pressure on each prey is computed assuming passive switching. This 133 ! is equivalent to assuming that microzooplankton have an opportunistic feeding 134 ! behaviour. 135 ! ----------------------------------------------------------------------------- 111 136 zgrazp = zgraze * xprefn * zcompaph * zdenom2 112 137 zgrazm = zgraze * xprefc * zcompapoc * zdenom2 … … 124 149 zgrazing(ji,jj,jk) = zgraztotc 125 150 126 ! Various remineralization and excretion terms 127 ! -------------------------------------------- 151 ! Microzooplankton efficiency. 152 ! We adopt a formulation proposed by Mitra et al. (2007) 153 ! The gross growth efficiency is controled by the most limiting nutrient. 154 ! Growth is also further decreased when the food quality is poor. This is currently 155 ! hard coded : it can be decreased by up to 50% (zepsherq) 156 ! GGE can also be decreased when food quantity is high, zepsherf (Montagnes and 157 ! Fulton, 2012) 158 ! ----------------------------------------------------------------------------- 128 159 zgrasrat = ( zgraztotf + rtrn ) / ( zgraztotc + rtrn ) 129 160 zgrasratn = ( zgraztotn + rtrn ) / ( zgraztotc + rtrn ) … … 157 188 tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zgrarsig 158 189 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * zgrarsig 159 ! Update the arrays TRA which contain the biological sources and sinks160 ! --------------------------------------------------------------------161 190 zmortz = ztortz + zrespz 162 191 tra(ji,jj,jk,jpzoo) = tra(ji,jj,jk,jpzoo) - zmortz + zepsherv * zgraztotc … … 174 203 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + ferat3 * zmortz - zgrazmf 175 204 ! 176 ! calcite production 205 ! Calcite remineralization due to zooplankton activity 206 ! part of the ingested calcite is dissolving in the acidic gut 177 207 zprcaca = xfracal(ji,jj,jk) * zgrazp 178 208 prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo) … … 224 254 !! ** Purpose : Initialization of microzooplankton parameters 225 255 !! 226 !! ** Method : Read the namp iszoo namelist and check the parameters256 !! ** Method : Read the namp4zzoo namelist and check the parameters 227 257 !! called at the first timestep (nittrc000) 228 258 !! 229 !! ** input : Namelist namp iszoo259 !! ** input : Namelist namp4zzoo 230 260 !! 231 261 !!---------------------------------------------------------------------- … … 243 273 ENDIF 244 274 ! 245 REWIND( numnatp_ref ) ! Namelist namp iszoo in reference namelist : Pisces microzooplankton275 REWIND( numnatp_ref ) ! Namelist namp4zzoo in reference namelist : Pisces microzooplankton 246 276 READ ( numnatp_ref, namp4zzoo, IOSTAT = ios, ERR = 901) 247 277 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp4zzoo in reference namelist' ) 248 REWIND( numnatp_cfg ) ! Namelist namp iszoo in configuration namelist : Pisces microzooplankton278 REWIND( numnatp_cfg ) ! Namelist namp4zzoo in configuration namelist : Pisces microzooplankton 249 279 READ ( numnatp_cfg, namp4zzoo, IOSTAT = ios, ERR = 902 ) 250 280 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namp4zzoo in configuration namelist' ) -
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zmort.F90
r12496 r12537 20 20 PRIVATE 21 21 22 PUBLIC p4z_mort 23 PUBLIC p4z_mort_init 24 25 REAL(wp), PUBLIC :: wchln !: 26 REAL(wp), PUBLIC :: wchld !: 27 REAL(wp), PUBLIC :: wchldm !: 28 REAL(wp), PUBLIC :: mpratn !: 29 REAL(wp), PUBLIC :: mpratd !: 22 PUBLIC p4z_mort ! Called from p4zbio.F90 23 PUBLIC p4z_mort_init ! Called from trcini_pisces.F90 24 25 REAL(wp), PUBLIC :: wchln !: Quadratic mortality rate of nanophytoplankton 26 REAL(wp), PUBLIC :: wchld !: Quadratic mortality rate of diatoms 27 REAL(wp), PUBLIC :: wchldm !: Maximum quadratic mortality rate of diatoms 28 REAL(wp), PUBLIC :: mpratn !: Linear mortality rate of nanophytoplankton 29 REAL(wp), PUBLIC :: mpratd !: Linear mortality rate of diatoms 30 30 31 31 !!---------------------------------------------------------------------- … … 40 40 !! *** ROUTINE p4z_mort *** 41 41 !! 42 !! ** Purpose : Calls the different subroutine to initialize andcompute42 !! ** Purpose : Calls the different subroutine to compute 43 43 !! the different phytoplankton mortality terms 44 44 !! … … 49 49 ! 50 50 CALL p4z_nano ! nanophytoplankton 51 !52 51 CALL p4z_diat ! diatoms 53 52 ! … … 82 81 ! to 0 83 82 zsizerat = MIN(1., MAX( 0., (quotan(ji,jj,jk) - 0.2) / 0.3) ) * trb(ji,jj,jk,jpphy) 84 ! Squared mortality of Phyto similar to a sedimentation term during 85 ! blooms (Doney et al. 1996) 83 84 ! Quadratic mortality of nano due to aggregation during 85 ! blooms (Doney et al. 1996) 86 ! ----------------------------------------------------- 86 87 zrespp = wchln * 1.e6 * xstep * xdiss(ji,jj,jk) * zcompaph * zsizerat 87 88 88 ! Phytoplankton mortality. This mortality loss is slightly 89 ! increased when nutrients are limiting phytoplankton growth 90 ! as observed for instance in case of iron limitation. 89 ! Phytoplankton linear mortality 90 ! A michaelis-menten like term is introduced to avoid 91 ! extinction of nanophyto in highly limited areas 92 ! ---------------------------------------------------- 91 93 ztortp = mpratn * xstep * zcompaph / ( xkmort + trb(ji,jj,jk,jpphy) ) * zsizerat 92 94 93 95 zmortp = zrespp + ztortp 94 96 95 ! Update the arrays TRA which contains the biological sources and sinks 96 97 ! Update the arrays TRA which contains the biological sources and sinks 97 98 zfactfe = trb(ji,jj,jk,jpnfe)/(trb(ji,jj,jk,jpphy)+rtrn) 98 99 zfactch = trb(ji,jj,jk,jpnch)/(trb(ji,jj,jk,jpphy)+rtrn) … … 100 101 tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) - zmortp * zfactch 101 102 tra(ji,jj,jk,jpnfe) = tra(ji,jj,jk,jpnfe) - zmortp * zfactfe 103 ! Production PIC particles due to mortality 102 104 zprcaca = xfracal(ji,jj,jk) * zmortp 103 !104 105 prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo) 105 !106 106 zfracal = 0.5 * xfracal(ji,jj,jk) 107 107 tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) - zprcaca … … 146 146 IF( ln_timing ) CALL timing_start('p4z_diat') 147 147 ! 148 ! 149 ! 150 ! 151 ! 148 ! Aggregation term for diatoms is increased in case of nutrient 149 ! stress as observed in reality. The stressed cells become more 150 ! sticky and coagulate to sink quickly out of the euphotic zone 151 ! ------------------------------------------------------------- 152 152 153 153 DO jk = 1, jpkm1 … … 157 157 zcompadi = MAX( ( trb(ji,jj,jk,jpdia) - 1e-9), 0. ) 158 158 159 ! Aggregation term for diatoms is increased in case of nutrient 160 ! stress as observed in reality. The stressed cells become more 161 ! sticky and coagulate to sink quickly out of the euphotic zone 162 ! ------------------------------------------------------------ 163 ! Phytoplankton respiration 164 ! ------------------------ 159 ! Aggregation term for diatoms is increased in case of nutrient 160 ! stress as observed in reality. The stressed cells become more 161 ! sticky and coagulate to sink quickly out of the euphotic zone 162 ! ------------------------------------------------------------ 165 163 zlim2 = xlimdia(ji,jj,jk) * xlimdia(ji,jj,jk) 166 164 zlim1 = 0.25 * ( 1. - zlim2 ) / ( 0.25 + zlim2 ) 167 165 zrespp2 = 1.e6 * xstep * ( wchld + wchldm * zlim1 ) * xdiss(ji,jj,jk) * zcompadi * trb(ji,jj,jk,jpdia) 168 166 169 ! Phytoplankton mortality. 170 ! ------------------------ 167 ! Phytoplankton linear mortality 168 ! A michaelis-menten like term is introduced to avoid 169 ! extinction of diatoms in highly limited areas 170 ! --------------------------------------------------- 171 171 ztortp2 = mpratd * xstep * trb(ji,jj,jk,jpdia) / ( xkmort + trb(ji,jj,jk,jpdia) ) * zcompadi 172 172 173 173 zmortp2 = zrespp2 + ztortp2 174 174 175 ! 175 ! Update the arrays tra which contains the biological sources and sinks 176 176 ! --------------------------------------------------------------------- 177 177 zfactch = trb(ji,jj,jk,jpdch) / ( trb(ji,jj,jk,jpdia) + rtrn ) … … 210 210 !! ** Purpose : Initialization of phytoplankton parameters 211 211 !! 212 !! ** Method : Read the namp ismort namelist and check the parameters212 !! ** Method : Read the namp4zmort namelist and check the parameters 213 213 !! called at the first timestep 214 214 !! 215 !! ** input : Namelist namp ismort215 !! ** input : Namelist namp4zmort 216 216 !! 217 217 !!---------------------------------------------------------------------- … … 227 227 ENDIF 228 228 ! 229 REWIND( numnatp_ref ) ! Namelist namp ismort in reference namelist : Pisces phytoplankton229 REWIND( numnatp_ref ) ! Namelist namp4zmort in reference namelist : Pisces phytoplankton 230 230 READ ( numnatp_ref, namp4zmort, IOSTAT = ios, ERR = 901) 231 231 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp4zmort in reference namelist' ) 232 REWIND( numnatp_cfg ) ! Namelist namp ismort in configuration namelist : Pisces phytoplankton232 REWIND( numnatp_cfg ) ! Namelist namp4zmort in configuration namelist : Pisces phytoplankton 233 233 READ ( numnatp_cfg, namp4zmort, IOSTAT = ios, ERR = 902 ) 234 234 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namp4zmort in configuration namelist' ) -
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zpoc.F90
r11536 r12537 3 3 !! *** MODULE p4zpoc *** 4 4 !! TOP : PISCES Compute remineralization of organic particles 5 !! Same module for both PISCES and PISCES-QUOTA 5 6 !!========================================================================= 6 7 !! History : 1.0 ! 2004 (O. Aumont) Original code … … 8 9 !! 3.4 ! 2011-06 (O. Aumont, C. Ethe) Quota model for iron 9 10 !! 3.6 ! 2016-03 (O. Aumont) Quota model and diverse 11 !! 4.0 ! 2018 (O. Aumont) Variable lability parameterization 10 12 !!---------------------------------------------------------------------- 11 13 !! p4z_poc : Compute remineralization/dissolution of organic compounds 12 14 !! p4z_poc_init : Initialisation of parameters for remineralisation 15 !! alngam and gamain : computation of the incomplete gamma function 13 16 !!---------------------------------------------------------------------- 14 17 USE oce_trc ! shared variables between ocean and passive tracers … … 22 25 23 26 PUBLIC p4z_poc ! called in p4zbio.F90 24 PUBLIC p4z_poc_init ! called in trc sms_pisces.F9025 PUBLIC alngam ! 27 PUBLIC p4z_poc_init ! called in trcini_pisces.F90 28 PUBLIC alngam ! 26 29 PUBLIC gamain ! 27 30 … … 33 36 REAL(wp), PUBLIC :: rshape !: shape factor of the gamma distribution 34 37 35 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: alphan, reminp !: 36 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: alphap !: 38 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: alphan, reminp !: variable lability of POC and initial distribution 39 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: alphap !: lability distribution of small particles 37 40 38 41 … … 49 52 !! 50 53 !! ** Purpose : Compute remineralization of organic particles 54 !! A reactivity-continuum parameterization is chosen 55 !! to describe the lability of the organic particles 56 !! As a consequence, the remineralisation rates of the 57 !! the different pools change with time as a function of 58 !! the lability distribution 51 59 !! 52 !! ** Method : - ??? 60 !! ** Method : - Computation of the remineralisation rates is performed 61 !! according to reactivity continuum formalism described 62 !! in Aumont et al. (2017). 53 63 !!--------------------------------------------------------------------- 54 64 INTEGER, INTENT(in) :: kt, knt ! ocean time step and ??? … … 79 89 solgoc = 0.04/ 2.56 * 1./ ( 1.-50**(-0.04) ) 80 90 81 ! Initialisation of temp rary arrys91 ! Initialisation of temporary arrys 82 92 IF( ln_p4z ) THEN 83 93 zremipoc(:,:,:) = xremip … … 92 102 zfolimi (:,:,:) = 0. 93 103 104 ! Initialisation of the lability distributions that are set to 105 ! the distribution of newly produced organic particles 94 106 DO jn = 1, jcpoc 95 107 alphag(:,:,:,jn) = alphan(jn) … … 97 109 END DO 98 110 99 ! -----------------------------------------------------------------------100 111 ! Lability parameterization. This is the big particles part (GOC) 101 ! This lability parameterization can be activated only with the standard 102 ! particle scheme. Does not work with Kriest parameterization. 112 ! This lability parameterization is always active. However, if only one 113 ! lability class is specified in the namelist, this is equivalent to 114 ! a standard parameterisation with a constant lability 103 115 ! ----------------------------------------------------------------------- 104 116 ztremint(:,:,:) = zremigoc(:,:,:) … … 108 120 IF (tmask(ji,jj,jk) == 1.) THEN 109 121 zdep = hmld(ji,jj) 110 ! 122 111 123 ! In the case of GOC, lability is constant in the mixed layer 112 124 ! It is computed only below the mixed layer depth 113 125 ! ------------------------------------------------------------ 114 !115 126 IF( gdept_n(ji,jj,jk) > zdep ) THEN 116 127 alphat = 0. … … 153 164 END DO 154 165 ELSE 155 ! 166 156 167 ! standard algorithm in the rest of the water column 157 168 ! See the comments in the previous block. 158 169 ! --------------------------------------------------- 159 !160 170 zpoc = trb(ji,jj,jk-1,jpgoc) + consgoc(ji,jj,jk-1) * rday / rfact2 & 161 171 & * e3t_n(ji,jj,jk-1) / 2. / (wsbio4(ji,jj,jk-1) + rtrn) + consgoc(ji,jj,jk) & … … 192 202 193 203 IF( ln_p4z ) THEN 204 ! The standard PISCES part 194 205 DO jk = 1, jpkm1 195 206 DO jj = 1, jpj 196 207 DO ji = 1, jpi 197 ! POC disaggregation by turbulence and bacterial activity. 198 ! -------------------------------------------------------- 208 ! POC degradation by bacterial activity. It is a function 209 ! of the mean lability and of temperature. This also includes 210 ! shrinking of particles due to the bacterial activity 211 ! ----------------------------------------------------------- 199 212 zremig = zremigoc(ji,jj,jk) * xstep * tgfunc(ji,jj,jk) 200 213 zorem2 = zremig * trb(ji,jj,jk,jpgoc) … … 204 217 zofer3 = zremig * solgoc * trb(ji,jj,jk,jpbfe) 205 218 206 ! -------------------------------------219 ! update of the TRA arrays 207 220 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zorem3(ji,jj,jk) 208 221 tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) - zorem2 - zorem3(ji,jj,jk) … … 216 229 END DO 217 230 ELSE 231 ! PISCES-QUOTA part 218 232 DO jk = 1, jpkm1 219 233 DO jj = 1, jpj 220 234 DO ji = 1, jpi 221 ! POC disaggregation by turbulence and bacterial activity. 222 ! -------------------------------------------------------- 235 ! POC disaggregation by bacterial activity. It is a function 236 ! of the mean lability and of temperature. Shrinking of 237 ! particles due to the bacterial activity is also included 238 ! ---------------------------------------------------------- 223 239 zremig = zremigoc(ji,jj,jk) * xstep * tgfunc(ji,jj,jk) 224 240 zopoc2 = zremig * trb(ji,jj,jk,jpgoc) … … 229 245 zofer2 = xremipn / xremipc * zremig * trb(ji,jj,jk,jpbfe) 230 246 231 ! -------------------------------------247 ! Update of the TRA arrays 232 248 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zorem3(ji,jj,jk) 233 249 tra(ji,jj,jk,jppon) = tra(ji,jj,jk,jppon) + solgoc * zopon2 … … 254 270 ENDIF 255 271 256 ! ------------------------------------------------------------------257 272 ! Lability parameterization for the small OM particles. This param 258 273 ! is based on the same theoretical background as the big particles. 259 274 ! However, because of its low sinking speed, lability is not supposed 260 275 ! to be equal to its initial value (the value of the freshly produced 261 ! organic matter). It is however uniform in the mixed layer. 262 ! ------------------------------------------------------------------- 263 ! 276 ! organic matter) in the MLD. It is however uniform in the mixed layer. 277 ! --------------------------------------------------------------------- 264 278 totprod (:,:) = 0. 265 279 totthick(:,:) = 0. 266 280 totcons (:,:) = 0. 281 267 282 ! intregrated production and consumption of POC in the mixed layer 268 283 ! ---------------------------------------------------------------- 269 !270 284 DO jk = 1, jpkm1 271 285 DO jj = 1, jpj … … 284 298 285 299 ! Computation of the lability spectrum in the mixed layer. In the mixed 286 ! layer, this spectrum is supposed to be uniform. 300 ! layer, this spectrum is supposed to be uniform as a result of intense 301 ! mixing. 287 302 ! --------------------------------------------------------------------- 288 303 ztremint(:,:,:) = zremipoc(:,:,:) … … 318 333 ENDIF 319 334 320 ! -----------------------------------------------------------------------321 335 ! The lability parameterization is used here. The code is here 322 336 ! almost identical to what is done for big particles. The only difference … … 325 339 ! should be determined before. 326 340 ! ----------------------------------------------------------------------- 327 !328 341 DO jk = 2, jpkm1 329 342 DO jj = 1, jpj … … 334 347 alphat = 0. 335 348 remint = 0. 336 !337 349 ! the scale factors are corrected with temperature 338 350 zsizek1 = e3t_n(ji,jj,jk-1) / 2. / (wsbio3(ji,jj,jk-1) + rtrn) * tgfunc(ji,jj,jk-1) 339 351 zsizek = e3t_n(ji,jj,jk) / 2. / (wsbio3(ji,jj,jk) + rtrn) * tgfunc(ji,jj,jk) 340 ! 352 341 353 ! Special treatment of the level just below the MXL 342 354 ! See the comments in the GOC section 343 355 ! --------------------------------------------------- 344 !345 356 IF ( gdept_n(ji,jj,jk-1) <= zdep ) THEN 346 357 ! … … 362 373 END DO 363 374 ELSE 364 ! 375 365 376 ! Lability parameterization for the interior of the ocean 366 377 ! This is very similar to what is done in the previous 367 378 ! block 368 379 ! -------------------------------------------------------- 369 !370 380 zpoc = trb(ji,jj,jk-1,jppoc) + conspoc(ji,jj,jk-1) * rday / rfact2 & 371 381 & * e3t_n(ji,jj,jk-1) / 2. / (wsbio3(ji,jj,jk-1) + rtrn) + conspoc(ji,jj,jk) & … … 404 414 405 415 IF( ln_p4z ) THEN 406 DO jk = 1, jpkm1 407 DO jj = 1, jpj 408 DO ji = 1, jpi 409 IF (tmask(ji,jj,jk) == 1.) THEN 410 ! POC disaggregation by turbulence and bacterial activity. 411 ! -------------------------------------------------------- 416 ! Standard PISCES part 417 DO jk = 1, jpkm1 418 DO jj = 1, jpj 419 DO ji = 1, jpi 420 IF (tmask(ji,jj,jk) == 1.) THEN 421 ! POC disaggregation by bacterial activity. It is a function 422 ! of the mean lability and of temperature 423 ! ---------------------------------------------------------- 412 424 zremip = zremipoc(ji,jj,jk) * xstep * tgfunc(ji,jj,jk) 413 425 zorem = zremip * trb(ji,jj,jk,jppoc) 414 426 zofer = zremip * trb(ji,jj,jk,jpsfe) 415 427 428 ! Update of the TRA arrays 416 429 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zorem 417 430 orem(ji,jj,jk) = orem(ji,jj,jk) + zorem … … 420 433 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) - zofer 421 434 zfolimi(ji,jj,jk) = zfolimi(ji,jj,jk) + zofer 422 423 424 425 435 ENDIF 436 END DO 437 END DO 438 END DO 426 439 ELSE 427 DO jk = 1, jpkm1 428 DO jj = 1, jpj 429 DO ji = 1, jpi 430 ! POC disaggregation by turbulence and bacterial activity. 431 ! -------------------------------------------------------- 432 zremip = zremipoc(ji,jj,jk) * xstep * tgfunc(ji,jj,jk) 433 zopoc = zremip * trb(ji,jj,jk,jppoc) 434 orem(ji,jj,jk) = orem(ji,jj,jk) + zopoc 435 zopon = xremipn / xremipc * zremip * trb(ji,jj,jk,jppon) 436 zopop = xremipp / xremipc * zremip * trb(ji,jj,jk,jppop) 437 zofer = xremipn / xremipc * zremip * trb(ji,jj,jk,jpsfe) 438 439 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) - zopoc 440 tra(ji,jj,jk,jppon) = tra(ji,jj,jk,jppon) - zopon 441 tra(ji,jj,jk,jppop) = tra(ji,jj,jk,jppop) - zopop 442 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) - zofer 443 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zopoc 444 tra(ji,jj,jk,jpdon) = tra(ji,jj,jk,jpdon) + zopon 445 tra(ji,jj,jk,jpdop) = tra(ji,jj,jk,jpdop) + zopop 446 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zofer 447 zfolimi(ji,jj,jk) = zfolimi(ji,jj,jk) + zofer 448 END DO 440 ! PISCES QUOTA part 441 DO jk = 1, jpkm1 442 DO jj = 1, jpj 443 DO ji = 1, jpi 444 ! POC disaggregation by bacterial activity. It is a function 445 ! of the mean lability and of temperature 446 ! ---------------------------------------------------------- 447 zremip = zremipoc(ji,jj,jk) * xstep * tgfunc(ji,jj,jk) 448 zopoc = zremip * trb(ji,jj,jk,jppoc) 449 orem(ji,jj,jk) = orem(ji,jj,jk) + zopoc 450 zopon = xremipn / xremipc * zremip * trb(ji,jj,jk,jppon) 451 zopop = xremipp / xremipc * zremip * trb(ji,jj,jk,jppop) 452 zofer = xremipn / xremipc * zremip * trb(ji,jj,jk,jpsfe) 453 454 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) - zopoc 455 tra(ji,jj,jk,jppon) = tra(ji,jj,jk,jppon) - zopon 456 tra(ji,jj,jk,jppop) = tra(ji,jj,jk,jppop) - zopop 457 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) - zofer 458 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zopoc 459 tra(ji,jj,jk,jpdon) = tra(ji,jj,jk,jpdon) + zopon 460 tra(ji,jj,jk,jpdop) = tra(ji,jj,jk,jpdop) + zopop 461 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zofer 462 zfolimi(ji,jj,jk) = zfolimi(ji,jj,jk) + zofer 463 END DO 449 464 END DO 450 465 END DO … … 454 469 IF( knt == nrdttrc ) THEN 455 470 zrfact2 = 1.e3 * rfact2r 456 CALL iom_put( "REMINP" , zremipoc(:,:,:) * tmask(:,:,:) ) ! Remineralisation rate 457 CALL iom_put( "REMING" , zremigoc(:,:,:) * tmask(:,:,:) ) ! Remineralisation rate 458 CALL iom_put( "REMINF" , zfolimi(:,:,:) * tmask(:,:,:) * 1.e+9 * zrfact2 ) ! Remineralisation rate471 CALL iom_put( "REMINP" , zremipoc(:,:,:) * tmask(:,:,:) ) ! Remineralisation rate of small particles 472 CALL iom_put( "REMING" , zremigoc(:,:,:) * tmask(:,:,:) ) ! Remineralisation rate of large particles 473 CALL iom_put( "REMINF" , zfolimi(:,:,:) * tmask(:,:,:) * 1.e+9 * zrfact2 ) ! Remineralisation of biogenic particulate iron 459 474 ENDIF 460 475 ENDIF -
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zprod.F90
r12496 r12537 2 2 !!====================================================================== 3 3 !! *** MODULE p4zprod *** 4 !! TOP : Growth Rate of the two phytoplankton s groups4 !! TOP : Growth Rate of the two phytoplankton groups of PISCES 5 5 !!====================================================================== 6 6 !! History : 1.0 ! 2004 (O. Aumont) Original code … … 24 24 PUBLIC p4z_prod ! called in p4zbio.F90 25 25 PUBLIC p4z_prod_init ! called in trcsms_pisces.F90 26 PUBLIC p4z_prod_alloc 26 PUBLIC p4z_prod_alloc ! called in trcini_pisces.F90 27 27 28 28 REAL(wp), PUBLIC :: pislopen !: … … 40 40 41 41 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: quotan !: proxy of N quota in Nanophyto 42 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: quotad !: proxy of N quota in diatom ee42 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: quotad !: proxy of N quota in diatoms 43 43 44 44 REAL(wp) :: r1_rday ! 1 / rday … … 57 57 !! *** ROUTINE p4z_prod *** 58 58 !! 59 !! ** Purpose : Compute thephytoplankton production depending on60 !! light, temperature and nutrient availability61 !! 62 !! ** Method : - ???59 !! ** Purpose : Computes phytoplankton production depending on 60 !! light, temperature and nutrient availability 61 !! Computes also the uptake of Iron and Si as well 62 !! as the chlorophyll content of the cells 63 63 !!--------------------------------------------------------------------- 64 64 INTEGER, INTENT(in) :: kt, knt ! … … 95 95 zmxl_fac(:,:,:) = 0._wp ; zmxl_chl(:,:,:) = 0._wp 96 96 97 ! Computation of the optimal production 97 ! Computation of the maximimum production 98 ! Parameters are taken from Bissinger et al. (2008) 98 99 zprmaxn(:,:,:) = 0.8_wp * r1_rday * tgfunc(:,:,:) 99 100 zprmaxd(:,:,:) = zprmaxn(:,:,:) … … 114 115 115 116 ! Impact of the day duration and light intermittency on phytoplankton growth 117 ! Intermittency is supposed to have a similar effect on production as 118 ! day length. The correcting factor is zmxl_fac. zmxl_chl is the fractional 119 ! day length and is used to compute the mean PAR during daytime. 120 ! Formulation for the impact of day length on PP is from Thompson (1999) 121 ! ------------------------------------------------------------------------- 116 122 DO jk = 1, jpkm1 117 123 DO jj = 1 ,jpj … … 132 138 zprdia(:,:,:) = zprmaxd(:,:,:) * zmxl_fac(:,:,:) 133 139 134 ! Maximum light intensity135 140 WHERE( zstrn(:,:) < 1.e0 ) zstrn(:,:) = 24. 136 141 137 142 ! Computation of the P-I slope for nanos and diatoms 143 ! The formulation proposed by Geider et al. (1997) has been modified 144 ! to exclude the effect of nutrient limitation and temperature in the PI 145 ! curve following Vichi et al. (2007) 146 ! ----------------------------------------------------------------------- 138 147 DO jk = 1, jpkm1 139 148 DO jj = 1, jpj … … 145 154 zconctemp2 = trb(ji,jj,jk,jpdia) - zconctemp 146 155 ! 156 ! The initial slope of the PI curve can be increased for nano 157 ! to account for photadaptation, for instance in the DCM 147 158 zpislopeadn(ji,jj,jk) = pislopen * ( 1.+ zadap * EXP( -0.25 * enano(ji,jj,jk) ) ) & 148 159 & * trb(ji,jj,jk,jpnch) /( trb(ji,jj,jk,jpphy) * 12. + rtrn) … … 179 190 180 191 ! Computation of a proxy of the N/C ratio 192 ! Steady state is assumed 181 193 ! --------------------------------------- 182 194 DO jk = 1, jpkm1 … … 199 211 200 212 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) 213 ! Si/C of diatoms 214 ! ------------------------ 215 ! Si/C increases with iron stress and silicate availability (zsilfac) 216 ! Si/C is arbitrariliy increased for very high Si concentrations 217 ! to mimic the very high ratios observed in the Southern Ocean (zsilfac2) 218 ! ----------------------------------------------------------------------- 206 219 zlim = trb(ji,jj,jk,jpsil) / ( trb(ji,jj,jk,jpsil) + xksi1 ) 207 220 zsilim = MIN( zprdia(ji,jj,jk) / ( zprmaxd(ji,jj,jk) + rtrn ), xlimsi(ji,jj,jk) ) … … 219 232 END DO 220 233 221 ! Mixed-layer effect on production222 ! Sea-ice effect on production223 234 ! Sea-ice effect on production 235 ! No production is assumed below sea ice 236 ! -------------------------------------- 224 237 DO jk = 1, jpkm1 225 238 DO jj = 1, jpj … … 231 244 END DO 232 245 233 ! Computation of the various production terms 246 ! Computation of the various production and nutrient uptake terms 247 ! --------------------------------------------------------------- 234 248 DO jk = 1, jpkm1 235 249 DO jj = 1, jpj 236 250 DO ji = 1, jpi 237 251 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 238 ! production term s fornanophyto. (C)252 ! production term of nanophyto. (C) 239 253 zprorcan(ji,jj,jk) = zprbio(ji,jj,jk) * xlimphy(ji,jj,jk) * trb(ji,jj,jk,jpphy) * rfact2 254 255 ! New production (uptake of NO3) 240 256 zpronewn(ji,jj,jk) = zprorcan(ji,jj,jk)* xnanono3(ji,jj,jk) / ( xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) + rtrn ) 241 257 ! 242 258 zratio = trb(ji,jj,jk,jpnfe) / ( trb(ji,jj,jk,jpphy) * fecnm + rtrn ) 259 260 ! Iron uptake rates of nanophytoplankton. Upregulation 261 ! is parameterized at low iron concentrations. Typical 262 ! formulation used in quota formulations. Uptake is downregulated 263 ! when the quota is close to the maximum quota 243 264 zmax = MAX( 0., ( 1. - zratio ) / ABS( 1.05 - zratio ) ) 244 265 zprofen(ji,jj,jk) = fecnm * zprmaxn(ji,jj,jk) * ( 1.0 - fr_i(ji,jj) ) & … … 246 267 & * biron(ji,jj,jk) / ( biron(ji,jj,jk) + concnfe(ji,jj,jk) ) & 247 268 & * zmax * trb(ji,jj,jk,jpphy) * rfact2 248 ! production terms fordiatoms (C)269 ! production terms of diatoms (C) 249 270 zprorcad(ji,jj,jk) = zprdia(ji,jj,jk) * xlimdia(ji,jj,jk) * trb(ji,jj,jk,jpdia) * rfact2 271 272 ! New production (uptake of NO3) 250 273 zpronewd(ji,jj,jk) = zprorcad(ji,jj,jk) * xdiatno3(ji,jj,jk) / ( xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) + rtrn ) 251 ! 274 275 ! Iron uptake rates of nanophytoplankton. Upregulation 276 ! is parameterized at low iron concentrations. Typical 277 ! formulation used in quota formulations. Uptake is downregulated 278 ! when the quota is close to the maximum quota 252 279 zratio = trb(ji,jj,jk,jpdfe) / ( trb(ji,jj,jk,jpdia) * fecdm + rtrn ) 253 280 zmax = MAX( 0., ( 1. - zratio ) / ABS( 1.05 - zratio ) ) … … 262 289 263 290 ! Computation of the chlorophyll production terms 291 ! The parameterization is taken from Geider et al. (1997) 292 ! ------------------------------------------------------- 264 293 DO jk = 1, jpkm1 265 294 DO jj = 1, jpj 266 295 DO ji = 1, jpi 267 296 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 268 ! production term sfor nanophyto. ( chlorophyll )297 ! production term for nanophyto. ( chlorophyll ) 269 298 znanotot = enanom(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 270 299 zprod = rday * zprorcan(ji,jj,jk) * zprchln(ji,jj,jk) * xlimphy(ji,jj,jk) 271 300 zprochln = chlcmin * 12. * zprorcan (ji,jj,jk) 301 ! The maximum reachable Chl quota is modulated by temperature 302 ! following Geider (1987) 272 303 chlcnm_n = MIN ( chlcnm, ( chlcnm / (1. - 1.14 / 43.4 *tsn(ji,jj,jk,jp_tem))) * (1. - 1.14 / 43.4 * 20.)) 273 304 zprochln = zprochln + (chlcnm_n-chlcmin) * 12. * zprod / & 274 305 & ( zpislopeadn(ji,jj,jk) * znanotot +rtrn) 275 ! production terms fordiatoms ( chlorophyll )306 ! production terms of diatoms ( chlorophyll ) 276 307 zdiattot = ediatm(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 277 308 zprod = rday * zprorcad(ji,jj,jk) * zprchld(ji,jj,jk) * xlimdia(ji,jj,jk) 278 309 zprochld = chlcmin * 12. * zprorcad(ji,jj,jk) 310 ! The maximum reachable Chl quota is modulated by temperature 311 ! following Geider (1987) 279 312 chlcdm_n = MIN ( chlcdm, ( chlcdm / (1. - 1.14 / 43.4 * tsn(ji,jj,jk,jp_tem))) * (1. - 1.14 / 43.4 * 20.)) 280 313 zprochld = zprochld + (chlcdm_n-chlcmin) * 12. * zprod / & … … 319 352 END DO 320 353 ! 354 ! Production and uptake of ligands by phytoplankton. This part is activated 355 ! when ln_ligand is set to .true. in the namelist. Ligand uptake is small 356 ! and based on the FeL model by Morel et al. (2008) and on the study of 357 ! Shaked and Lis (2012) 358 ! ------------------------------------------------------------------------- 321 359 IF( ln_ligand ) THEN 322 360 zpligprod1(:,:,:) = 0._wp ; zpligprod2(:,:,:) = 0._wp … … 328 366 zfeup = texcretn * zprofen(ji,jj,jk) + texcretd * zprofed(ji,jj,jk) 329 367 tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + zdocprod * ldocp & 330 & - zfeup * plig(ji,jj,jk) / ( rtrn + plig(ji,jj,jk) + 2.E3 * (1.0 - plig(ji,jj,jk) ) ) 368 & - zfeup * plig(ji,jj,jk) / ( rtrn + plig(ji,jj,jk) + 2.E3 * (1.0 - plig(ji,jj,jk) ) ) * lthet 331 369 zpligprod1(ji,jj,jk) = zdocprod * ldocp 332 zpligprod2(ji,jj,jk) = zfeup * plig(ji,jj,jk) * lthet 370 zpligprod2(ji,jj,jk) = zfeup * plig(ji,jj,jk) / ( rtrn + plig(ji,jj,jk) & 371 & + 2.E3 * (1.0 - plig(ji,jj,jk) ) ) * lthet 333 372 ENDIF 334 373 END DO … … 373 412 ENDIF 374 413 IF( iom_use( "LPRODP" ) ) THEN 375 zw3d(:,:,:) = zpligprod1(:,:,:) * 1e9 * zfact * tmask(:,:,:) 414 zw3d(:,:,:) = zpligprod1(:,:,:) * 1e9 * zfact * tmask(:,:,:) ! Ligand production by phytoplankton 376 415 CALL iom_put( "LPRODP" , zw3d ) 377 416 ENDIF 378 417 IF( iom_use( "LDETP" ) ) THEN 379 zw3d(:,:,:) = zpligprod2(:,:,:) * 1e9 * zfact * tmask(:,:,:) 418 zw3d(:,:,:) = zpligprod2(:,:,:) * 1e9 * zfact * tmask(:,:,:) ! Uptake of ligands by phytoplankton 380 419 CALL iom_put( "LDETP" , zw3d ) 381 420 ENDIF … … 392 431 ENDIF 393 432 IF( iom_use( "LNlight" ) .OR. iom_use( "LDlight" ) ) THEN 394 zw3d(:,:,:) = zprbio (:,:,:) / (zprmaxn(:,:,:) + rtrn) * tmask(:,:,:) ! light limitation term 433 zw3d(:,:,:) = zprbio (:,:,:) / (zprmaxn(:,:,:) + rtrn) * tmask(:,:,:) ! light limitation term of nanophytoplankton 395 434 CALL iom_put( "LNlight" , zw3d ) 396 435 ! 397 zw3d(:,:,:) = zprdia (:,:,:) / (zprmaxd(:,:,:) + rtrn) * tmask(:,:,:) ! light limitation term 436 zw3d(:,:,:) = zprdia (:,:,:) / (zprmaxd(:,:,:) + rtrn) * tmask(:,:,:) ! light limitation term of diatoms 398 437 CALL iom_put( "LDlight" , zw3d ) 399 438 ENDIF … … 474 513 !! ** Purpose : Initialization of phytoplankton production parameters 475 514 !! 476 !! ** Method : Read the namp isprod namelist and check the parameters515 !! ** Method : Read the namp4zprod namelist and check the parameters 477 516 !! called at the first timestep (nittrc000) 478 517 !! 479 !! ** input : Namelist namp isprod518 !! ** input : Namelist namp4zprod 480 519 !!---------------------------------------------------------------------- 481 520 INTEGER :: ios ! Local integer … … 491 530 ENDIF 492 531 ! 493 REWIND( numnatp_ref ) ! Namelist namp isprod in reference namelist : Pisces phytoplankton production532 REWIND( numnatp_ref ) ! Namelist namp4zprod in reference namelist : Pisces phytoplankton production 494 533 READ ( numnatp_ref, namp4zprod, IOSTAT = ios, ERR = 901) 495 534 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp4zprod in reference namelist' ) 496 REWIND( numnatp_cfg ) ! Namelist namp isprod in configuration namelist : Pisces phytoplankton production535 REWIND( numnatp_cfg ) ! Namelist namp4zprod in configuration namelist : Pisces phytoplankton production 497 536 READ ( numnatp_cfg, namp4zprod, IOSTAT = ios, ERR = 902 ) 498 537 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namp4zprod in configuration namelist' ) -
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zrem.F90
r12524 r12537 3 3 !! *** MODULE p4zrem *** 4 4 !! TOP : PISCES Compute remineralization/dissolution of organic compounds 5 !! except for POC which is treated in p4zpoc.F90 6 !! This module is common to both PISCES and PISCES-QUOTA 5 7 !!========================================================================= 6 8 !! History : 1.0 ! 2004 (O. Aumont) Original code … … 17 19 USE p4zche ! chemical model 18 20 USE p4zprod ! Growth rate of the 2 phyto groups 19 USE p4zlim 21 USE p4zlim ! Nutrient limitation terms 20 22 USE prtctl_trc ! print control for debugging 21 23 USE iom ! I/O manager … … 26 28 27 29 PUBLIC p4z_rem ! called in p4zbio.F90 28 PUBLIC p4z_rem_init ! called in trcsms_pisces.F90 29 PUBLIC p4z_rem_alloc 30 31 REAL(wp), PUBLIC :: xremikc !: remineralisation rate of DOC 32 REAL(wp), PUBLIC :: xremikn !: remineralisation rate of DON 33 REAL(wp), PUBLIC :: xremikp !: remineralisation rate of DOP 34 REAL(wp), PUBLIC :: xremik !: remineralisation rate of POC 30 PUBLIC p4z_rem_init ! called in trcini_pisces.F90 31 PUBLIC p4z_rem_alloc ! called in trcini_pisces.F90 32 33 !! * Shared module variables 34 REAL(wp), PUBLIC :: xremikc !: remineralisation rate of DOC (p5z) 35 REAL(wp), PUBLIC :: xremikn !: remineralisation rate of DON (p5z) 36 REAL(wp), PUBLIC :: xremikp !: remineralisation rate of DOP (p5z) 37 REAL(wp), PUBLIC :: xremik !: remineralisation rate of DOC (p4z) 35 38 REAL(wp), PUBLIC :: nitrif !: NH4 nitrification rate 36 REAL(wp), PUBLIC :: xsirem !: remineralisation rate of POC37 REAL(wp), PUBLIC :: xsiremlab !: fast remineralisation rate of POC39 REAL(wp), PUBLIC :: xsirem !: remineralisation rate of biogenic silica 40 REAL(wp), PUBLIC :: xsiremlab !: fast remineralisation rate of BSi 38 41 REAL(wp), PUBLIC :: xsilab !: fraction of labile biogenic silica 39 42 REAL(wp), PUBLIC :: feratb !: Fe/C quota in bacteria 40 REAL(wp), PUBLIC :: xkferb !: Half-saturation constant for bacteria Fe/C43 REAL(wp), PUBLIC :: xkferb !: Half-saturation constant for bacterial Fe/C 41 44 42 45 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: denitr !: denitrification array … … 53 56 !! *** ROUTINE p4z_rem *** 54 57 !! 55 !! ** Purpose : Compute remineralization/scavenging of organic compounds 56 !! 57 !! ** Method : - ??? 58 !! ** Purpose : Compute remineralization/dissolution of organic compounds 59 !! Computes also nitrification of ammonium 60 !! The solubilization/remineralization of POC is treated 61 !! in p4zpoc.F90. The dissolution of calcite is processed 62 !! in p4zlys.F90. 63 !! 64 !! ** Method : - Bacterial biomass is computed implicitely based on a 65 !! parameterization developed from an explicit modeling 66 !! of PISCES in an alternative version 58 67 !!--------------------------------------------------------------------- 59 68 INTEGER, INTENT(in) :: kt, knt ! ocean time step … … 73 82 IF( ln_timing ) CALL timing_start('p4z_rem') 74 83 ! 75 ! Initialisation of arr ys84 ! Initialisation of arrays 76 85 zdepprod(:,:,:) = 1._wp 77 86 zdepeff (:,:,:) = 0.3_wp … … 81 90 zfacsi(:,:,:) = xsilab 82 91 83 ! Computation of the mean phytoplankton concentration as 84 ! a crude estimate of the bacterial biomass 92 ! Computation of the mean bacterial concentration 85 93 ! this parameterization has been deduced from a model version 86 94 ! that was modeling explicitely bacteria … … 107 115 DO jj = 1, jpj 108 116 DO ji = 1, jpi 109 ! DOC ammonification. Depends on depth, phytoplankton biomass 110 ! and a limitation term which is supposed to be a parameterization of the bacterial activity. 117 ! DOC ammonification. Depends on a limitation term of the bacterial activity 118 ! and on the implicit bacteria concentration 119 ! -------------------------------------------------------------------------- 111 120 zremik = xremik * xstep / 1.e-6 * xlimbac(ji,jj,jk) * zdepbac(ji,jj,jk) 112 121 zremik = MAX( zremik, 2.74e-4 * xstep ) 122 113 123 ! Ammonification in oxic waters with oxygen consumption 114 124 ! ----------------------------------------------------- 115 125 zolimit = zremik * ( 1.- nitrfac(ji,jj,jk) ) * trb(ji,jj,jk,jpdoc) 116 126 zolimi(ji,jj,jk) = MIN( ( trb(ji,jj,jk,jpoxy) - rtrn ) / o2ut, zolimit ) 127 117 128 ! Ammonification in suboxic waters with denitrification 118 ! ----------------------------------------------------- --129 ! ----------------------------------------------------- 119 130 zammonic = zremik * nitrfac(ji,jj,jk) * trb(ji,jj,jk,jpdoc) 120 131 denitr(ji,jj,jk) = zammonic * ( 1. - nitrfac2(ji,jj,jk) ) 121 132 denitr(ji,jj,jk) = MIN( ( trb(ji,jj,jk,jpno3) - rtrn ) / rdenit, denitr(ji,jj,jk) ) 133 134 ! Ammonification in waters depleted in O2 and NO3 based on 135 ! other redox processes 136 ! -------------------------------------------------------- 122 137 zoxyremc = zammonic - denitr(ji,jj,jk) 123 138 ! … … 125 140 denitr (ji,jj,jk) = MAX( 0.e0, denitr (ji,jj,jk) ) 126 141 zoxyremc = MAX( 0.e0, zoxyremc ) 127 128 ! 142 ! Update of the TRA arrays 129 143 tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + zolimi (ji,jj,jk) + denitr(ji,jj,jk) + zoxyremc 130 144 tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zolimi (ji,jj,jk) + denitr(ji,jj,jk) + zoxyremc … … 142 156 DO jj = 1, jpj 143 157 DO ji = 1, jpi 144 ! DOC ammonification. Depends on depth, phytoplankton biomass 145 ! and a limitation term which is supposed to be a parameterization of the bacterial activity. 146 ! ----------------------------------------------------------------- 158 ! DOC ammonification. Depends on a limitation term of the bacterial activity 159 ! and on the implicit bacteria concentration 160 ! --------------------------------------------------------------- 161 ----------- 147 162 zremik = xstep / 1.e-6 * MAX(0.01, xlimbac(ji,jj,jk)) * zdepbac(ji,jj,jk) 148 163 zremik = MAX( zremik, 2.74e-4 * xstep / xremikc ) … … 170 185 zoxyremn = zremikn * zoxyremc * trb(ji,jj,jk,jpdon) / ( trb(ji,jj,jk,jpdoc) + rtrn ) 171 186 zoxyremp = zremikp * zoxyremc * trb(ji,jj,jk,jpdop) / ( trb(ji,jj,jk,jpdoc) + rtrn ) 172 187 ! Update of the TRA arrays 173 188 tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + zolimip + zdenitrp + zoxyremp 174 189 tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zolimin + zdenitrn + zoxyremn … … 185 200 ! 186 201 ENDIF 187 188 202 189 203 DO jk = 1, jpkm1 … … 220 234 ! Bacteries are obliged to take up iron from the water. Some 221 235 ! studies (especially at Papa) have shown this uptake to be significant 222 ! ---------------------------------------------------------- 236 ! --------------------------------------------------------------------- 223 237 zbactfer = feratb * rfact2 * 0.6_wp / rday * tgfunc(ji,jj,jk) * xlimbacl(ji,jj,jk) & 224 238 & * trb(ji,jj,jk,jpfer) / ( xkferb + trb(ji,jj,jk,jpfer) ) & 225 239 & * zdepeff(ji,jj,jk) * zdepbac(ji,jj,jk) 240 241 ! Only the transfer of iron from its dissolved form to particles 242 ! is treated here. The GGE of bacteria supposed to be equal to 243 ! 0.33. This is hard-coded. 226 244 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - zbactfer*0.33 227 245 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zbactfer*0.25 … … 242 260 ! of bSi. Set to a constant in the upper ocean 243 261 ! --------------------------------------------------------------- 244 245 262 DO jk = 1, jpkm1 246 263 DO jj = 1, jpj 247 264 DO ji = 1, jpi 265 ! Remineralization rate of BSi depedant on T and saturation 266 ! The parameterization is taken from Ridgwell et al. (2002) 267 ! --------------------------------------------------------- 248 268 zdep = MAX( hmld(ji,jj), heup_01(ji,jj) ) 249 269 zsatur = MAX( rtrn, ( sio3eq(ji,jj,jk) - trb(ji,jj,jk,jpsil) ) / ( sio3eq(ji,jj,jk) + rtrn ) ) 250 270 zsatur2 = ( 1. + tsn(ji,jj,jk,jp_tem) / 400.)**37 251 271 znusil = 0.225 * ( 1. + tsn(ji,jj,jk,jp_tem) / 15.) * zsatur + 0.775 * zsatur2 * zsatur**9.25 252 ! Remineralization rate of BSi depedant on T and saturation253 ! ---------------------------------------------------------272 ! Computation of the vertical evolution of the labile fraction 273 ! of bSi. This is computed assuming steady state. 254 274 IF ( gdept_n(ji,jj,jk) > zdep ) THEN 255 275 zfacsib(ji,jj,jk) = zfacsib(ji,jj,jk-1) * EXP( -0.5 * ( xsiremlab - xsirem ) & … … 261 281 zsiremin = ( xsiremlab * zfacsi(ji,jj,jk) + xsirem * ( 1. - zfacsi(ji,jj,jk) ) ) * xstep * znusil 262 282 zosil = zsiremin * trb(ji,jj,jk,jpgsi) 263 ! 283 ! Update of the TRA arrays 264 284 tra(ji,jj,jk,jpgsi) = tra(ji,jj,jk,jpgsi) - zosil 265 285 tra(ji,jj,jk,jpsil) = tra(ji,jj,jk,jpsil) + zosil -
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zsed.F90
r10788 r12537 2 2 !!====================================================================== 3 3 !! *** MODULE p4sed *** 4 !! TOP : PISCES Compute loss of organic matter in the sediments 4 !! TOP : PISCES Compute loss of biogenic matter in the sediments 5 !! Compute gain/loss of tracers from dust, rivers and 6 !! sediments 7 !! This module is used both by PISCES and PISCES-QUOTA 5 8 !!====================================================================== 6 9 !! History : 1.0 ! 2004-03 (O. Aumont) Original code … … 8 11 !! 3.4 ! 2011-06 (C. Ethe) USE of fldread 9 12 !! 3.5 ! 2012-07 (O. Aumont) improvment of river input of nutrients 10 !!---------------------------------------------------------------------- 13 !!----------------------------------------------------------------------- 11 14 !! p4z_sed : Compute loss of organic matter in the sediments 12 !!---------------------------------------------------------------------- 15 !! : Compute gain/loss of tracers from dust, rivers and 16 !! sediments 17 !!----------------------------------------------------------------------- 13 18 USE oce_trc ! shared variables between ocean and passive tracers 14 19 USE trc ! passive tracers common variables … … 43 48 !! *** ROUTINE p4z_sed *** 44 49 !! 45 !! ** Purpose : Compute loss of organic matter in the sediments. This 46 !! is by no way a sediment model. The loss is simply 47 !! computed to balance the inout from rivers and dust 50 !! ** Purpose : Compute loss of biogenic matter in the sediments. This 51 !! is by no way a real sediment model. The loss is simply 52 !! computed from metamodels. 53 !! Loss/gain of tracers are also computed here for 54 !! dust, rivers, sediments and hydrothermal vents (Fe) 55 !! N2 fixation is modeled using an implicit approach 48 56 !! 49 57 !! ** Method : - ??? … … 93 101 zsedc (:,:) = 0.e0 94 102 95 ! Iron input/uptake due to sea ice : Crude parameterization based on Lancelot et al. 103 ! Iron input/uptake due to sea ice : Crude parameterization based on 104 ! Lancelot et al. Iron concentration in sea-ice is constant and set 105 ! in the namelist_pisces (icefeinput). ln_ironice is forced to false 106 ! when nn_ice_tr = 1 96 107 ! ---------------------------------------------------- 97 108 IF( ln_ironice ) THEN … … 99 110 ALLOCATE( zironice(jpi,jpj) ) 100 111 ! 112 ! Compute the iron flux between sea ice and sea water 101 113 DO jj = 1, jpj 102 114 DO ji = 1, jpi … … 106 118 END DO 107 119 END DO 108 ! 120 ! Update of the TRA array 109 121 tra(:,:,1,jpfer) = tra(:,:,1,jpfer) + zironice(:,:) 110 122 ! … … 121 133 ! 122 134 ALLOCATE( zsidep(jpi,jpj), zpdep(jpi,jpj,jpk), zirondep(jpi,jpj,jpk) ) 123 ! ! Iron and Si deposition at the surface 135 ! Iron, P and Si deposition at the surface 136 ! Iron flux at the surface due to dust deposition. Solubility can be 137 ! be variable if ln_solub is set to true. In that case, solubility 138 ! has to be provided in the specific input file (read in p4zsbc) 139 ! ------------------------------------------------------------------ 124 140 IF( ln_solub ) THEN 125 141 zirondep(:,:,1) = solub(:,:) * dust(:,:) * mfrac * rfact2 / e3t_n(:,:,1) / 55.85 + 3.e-10 * r1_ryyss … … 127 143 zirondep(:,:,1) = dustsolub * dust(:,:) * mfrac * rfact2 / e3t_n(:,:,1) / 55.85 + 3.e-10 * r1_ryyss 128 144 ENDIF 145 ! Si and P flux at the surface due to dust deposition. The content 146 ! and the solubility are hard coded 147 ! ---------------------------------------------------------------- 129 148 zsidep(:,:) = 8.8 * 0.075 * dust(:,:) * mfrac * rfact2 / e3t_n(:,:,1) / 28.1 130 149 zpdep (:,:,1) = 0.1 * 0.021 * dust(:,:) * mfrac * rfact2 / e3t_n(:,:,1) / 31. / po4r 131 ! ! Iron solubilization of particles in the water column 132 ! ! dust in kg/m2/s ---> 1/55.85 to put in mol/Fe ; wdust in m/j 133 zwdust = 0.03 * rday / ( wdust * 55.85 ) / ( 270. * rday ) 150 ! Iron solubilization of particles in the water column 151 ! dust in kg/m2/s ---> 1/55.85 to put in mol/Fe ; wdust in m/d 152 ! Dust are supposed to sink at wdust sinking speed. 3% of the iron 153 ! in dust is hypothesized to be soluble at a dissolution rate set to 154 ! 1/(250 days). The vertical distribution of iron in dust is computed 155 ! from a steady state assumption. Parameters are very uncertain and 156 ! are estimated from the literature quoted in Raiswell et al. (2011) 157 ! ------------------------------------------------------------------- 158 zwdust = 0.03 * rday / ( wdust * 55.85 ) / ( 250. * rday ) 134 159 DO jk = 2, jpkm1 135 zirondep(:,:,jk) = dust(:,:) * mfrac * zwdust * rfact2 * EXP( -gdept_n(:,:,jk) / 540.)160 zirondep(:,:,jk) = dust(:,:) * mfrac * zwdust * rfact2 * EXP( -gdept_n(:,:,jk) / (250. * wdust) ) 136 161 zpdep (:,:,jk) = zirondep(:,:,jk) * 0.023 137 162 END DO 138 ! ! Iron solubilization of particles in the water column163 ! Solubilization of particles in the water column (Si, P, Fe) 139 164 tra(:,:,1,jpsil) = tra(:,:,1,jpsil) + zsidep (:,:) 140 165 DO jk = 1, jpkm1 … … 156 181 157 182 ! Add the external input of nutrients from river 158 ! ---------------------------------------------- ------------183 ! ---------------------------------------------- 159 184 IF( ln_river ) THEN 160 185 DO jj = 1, jpj … … 171 196 ENDDO 172 197 ENDDO 198 ! When prognostic ligands are activated, ligands are supplied 199 ! to the ocean by rivers. We assume that the amount of ligands 200 ! is equal to that of iron (iron is completely complexed) 201 ! ------------------------------------------------------------ 173 202 IF (ln_ligand) THEN 174 203 DO jj = 1, jpj … … 180 209 ENDDO 181 210 ENDIF 211 ! PISCES-QUOTA part 182 212 IF( ln_p5z ) THEN 183 213 DO jj = 1, jpj … … 200 230 201 231 ! Add the external input of iron from hydrothermal vents 202 ! ------------------------------------------------------ 232 ! Please refer to Tagliabue et al. (2010) for more information 233 ! ------------------------------------------------------------ 203 234 IF( ln_hydrofe ) THEN 204 235 tra(:,:,:,jpfer) = tra(:,:,:,jpfer) + hydrofe(:,:,:) * rfact2 … … 211 242 ENDIF 212 243 213 ! OA: Warning, the following part is necessary to avoid CFL problems above the sediments 244 ! OA: Warning, the following part is necessary to avoid CFL problems 245 ! above the sediments. Vertical sinking speed is limited using the 246 ! typical CFL criterion 214 247 ! -------------------------------------------------------------------- 215 248 DO jj = 1, jpj … … 222 255 END DO 223 256 ! 257 ! No sediment module activated 224 258 IF( .NOT.lk_sed ) THEN 225 259 ! … … 233 267 ENDIF 234 268 235 ! Computation of the sediment denitrification proportion: The metamodel from midlleburg (2006) is being used 236 ! Computation of the fraction of organic matter that is permanently buried from Dunne's model 269 ! Computation of the sediment denitrification proportion: The metamodel 270 ! from Middleburg (2006) is used 271 ! Computation of the fraction of organic matter that is permanently 272 ! buried from Dunne's model (2007) 237 273 ! ------------------------------------------------------- 238 274 DO jj = 1, jpj … … 259 295 ENDIF 260 296 261 ! This loss is scaled at each bottom grid cell for equilibrating the total budget of silica in the ocean. 262 ! Thus, the amount of silica lost in the sediments equal the supply at the surface (dust+rivers) 263 ! ------------------------------------------------------ 297 ! Fraction of dSi that is remineralized in the sediments. This is 298 ! set so that the burial in sediments equals the total input of Si 299 ! by rivers and dust (sedsilfrac) 300 ! ---------------------------------------------------------------- 264 301 IF( .NOT.lk_sed ) zrivsil = 1._wp - sedsilfrac 265 302 303 ! Loss of bSi and CaCO3 to the sediments 266 304 DO jj = 1, jpj 267 305 DO ji = 1, jpi … … 278 316 ! 279 317 IF( .NOT.lk_sed ) THEN 318 ! Dissolution of CaCO3 and bSi in the sediments. This is 319 ! instantaneous since here sediments are not explicitly 320 ! modeled. The amount of CaCO3 that dissolves in the sediments 321 ! is computed using a metamodel constructed from Archer (1996) 322 ! ------------------------------------------------------------ 280 323 DO jj = 1, jpj 281 324 DO ji = 1, jpi … … 298 341 ENDIF 299 342 ! 343 ! Loss of particulate organic carbon and Fe to the sediments 300 344 DO jj = 1, jpj 301 345 DO ji = 1, jpi … … 311 355 END DO 312 356 ! 357 ! Loss of particulate organic N and P to the sediments (p5z) 313 358 IF( ln_p5z ) THEN 314 359 DO jj = 1, jpj … … 327 372 328 373 IF( .NOT.lk_sed ) THEN 374 ! Degradation of organic matter in the sediments. The metamodel of 375 ! Middleburg (2006) is used here to mimic the diagenetic reactions. 329 376 ! The 0.5 factor in zpdenit is to avoid negative NO3 concentration after 330 377 ! denitrification in the sediments. Not very clever, but simpliest option. 378 ! ------------------------------------------------------------------------ 331 379 DO jj = 1, jpj 332 380 DO ji = 1, jpi … … 360 408 361 409 362 ! Nitrogen fixation process 363 ! Small source iron from particulate inorganic iron364 !----------------------------------- 410 ! Nitrogen fixation process : light limitation of diazotrophy 411 ! Small source of iron from particulate inorganic iron (photochemistry) 412 !---------------------------------------------------------------------- 365 413 DO jk = 1, jpkm1 366 414 zlight (:,:,jk) = ( 1.- EXP( -etot_ndcy(:,:,jk) / diazolight ) ) * ( 1. - fr_i(:,:) ) 367 415 zsoufer(:,:,jk) = zlight(:,:,jk) * 2E-11 / ( 2E-11 + biron(:,:,jk) ) 368 416 ENDDO 417 418 ! Diazotrophy (nitrogen fixation) is modeled according to an empirical 419 ! formulation. This is described in Aumont et al. (2015). Limitation 420 ! by P and Fe is computed. Inhibition by high N concentrations is imposed. 421 ! Diazotrophy sensitivity to temperature is parameterized as in 422 ! Ye et al. (2012) 423 ! ------------------------------------------------------------------------ 369 424 IF( ln_p4z ) THEN 425 ! PISCES part 370 426 DO jk = 1, jpkm1 371 427 DO jj = 1, jpj 372 428 DO ji = 1, jpi 373 ! !Potential nitrogen fixation dependant on temperature and iron429 ! Potential nitrogen fixation dependant on temperature and iron 374 430 ztemp = tsn(ji,jj,jk,jp_tem) 375 431 zmudia = MAX( 0.,-0.001096*ztemp**2 + 0.057*ztemp -0.637 ) * 7.625 376 ! Potential nitrogen fixation dependant on temperature and iron377 432 xdianh4 = trb(ji,jj,jk,jpnh4) / ( concnnh4 + trb(ji,jj,jk,jpnh4) ) 378 433 xdiano3 = trb(ji,jj,jk,jpno3) / ( concnno3 + trb(ji,jj,jk,jpno3) ) * (1. - xdianh4) … … 388 443 END DO 389 444 ELSE ! p5z 445 ! PISCES-QUOTA part 390 446 DO jk = 1, jpkm1 391 447 DO jj = 1, jpj 392 448 DO ji = 1, jpi 393 ! !Potential nitrogen fixation dependant on temperature and iron449 ! Potential nitrogen fixation dependant on temperature and iron 394 450 ztemp = tsn(ji,jj,jk,jp_tem) 395 451 zmudia = MAX( 0.,-0.001096*ztemp**2 + 0.057*ztemp -0.637 ) * 7.625 396 ! Potential nitrogen fixation dependant on temperature and iron397 452 xdianh4 = trb(ji,jj,jk,jpnh4) / ( concnnh4 + trb(ji,jj,jk,jpnh4) ) 398 453 xdiano3 = trb(ji,jj,jk,jpno3) / ( concnno3 + trb(ji,jj,jk,jpno3) ) * (1. - xdianh4) … … 410 465 ENDIF 411 466 412 ! Nitrogen changedue to nitrogen fixation413 ! ---------------------------------------- 467 ! Update of the TRA arrays due to nitrogen fixation 468 ! ------------------------------------------------- 414 469 IF( ln_p4z ) THEN 470 ! PISCES part 415 471 DO jk = 1, jpkm1 416 472 DO jj = 1, jpj … … 428 484 tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + 30E-6 * zfact * 1.0 / 3.0 * 1.0 / 3.0 429 485 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + 0.002 * 4E-10 * zsoufer(ji,jj,jk) * rfact2 / rday 430 tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + concdnh4 / ( concdnh4 + trb(ji,jj,jk,jppo4) ) &431 & * 0.001 * trb(ji,jj,jk,jpdoc) * xstep432 486 END DO 433 487 END DO 434 488 END DO 435 489 ELSE ! p5z 490 ! PISCES-QUOTA part 436 491 DO jk = 1, jpkm1 437 492 DO jj = 1, jpj … … 475 530 CALL iom_put( "INTNFIX" , zwork ) 476 531 ENDIF 477 IF( iom_use("SedCal" ) ) CALL iom_put( "SedCal", zsedcal(:,:) * zfact ) 478 IF( iom_use("SedSi" ) ) CALL iom_put( "SedSi", zsedsi (:,:) * zfact ) 479 IF( iom_use("SedC" ) ) CALL iom_put( "SedC", zsedc (:,:) * zfact ) 480 IF( iom_use("Sdenit" ) ) CALL iom_put( "Sdenit", sdenit (:,:) * zfact * rno3 ) 532 IF( iom_use("SedCal" ) ) CALL iom_put( "SedCal", zsedcal(:,:) * zfact ) ! Permanent burial of CaCO3 in sediments 533 IF( iom_use("SedSi" ) ) CALL iom_put( "SedSi", zsedsi (:,:) * zfact ) ! Permanent burial of bSi in sediments 534 IF( iom_use("SedC" ) ) CALL iom_put( "SedC", zsedc (:,:) * zfact ) ! Permanent burial of OC in sediments 535 IF( iom_use("Sdenit" ) ) CALL iom_put( "Sdenit", sdenit (:,:) * zfact * rno3 ) ! Denitrification in the sediments 481 536 ENDIF 482 537 ENDIF -
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zsink.F90
r10425 r12537 2 2 !!====================================================================== 3 3 !! *** MODULE p4zsink *** 4 !! TOP : PISCES vertical flux of particulate matter due to gravitational sinking 4 !! TOP : PISCES vertical flux of particulate matter due to 5 !! gravitational sinking 6 !! This module is the same for both PISCES and PISCES-QUOTA 5 7 !!====================================================================== 6 8 !! History : 1.0 ! 2004 (O. Aumont) Original code … … 8 10 !! 3.4 ! 2011-06 (O. Aumont, C. Ethe) Change aggregation formula 9 11 !! 3.5 ! 2012-07 (O. Aumont) Introduce potential time-splitting 12 !! 4.0 ! 2019 (O. Aumont) an external subroutine is called 13 !! to compute the impact of sinking 10 14 !!---------------------------------------------------------------------- 11 15 !! p4z_sink : Compute vertical flux of particulate matter due to gravitational sinking … … 25 29 26 30 PUBLIC p4z_sink ! called in p4zbio.F90 27 PUBLIC p4z_sink_init ! called in trc sms_pisces.F9028 PUBLIC p4z_sink_alloc 31 PUBLIC p4z_sink_init ! called in trcini_pisces.F90 32 PUBLIC p4z_sink_alloc ! called in trcini_pisces.F90 29 33 30 34 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sinking, sinking2 !: POC sinking fluxes 31 35 ! ! (different meanings depending on the parameterization) 32 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sinkingn, sinking2n !: PO Csinking fluxes33 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sinkingp, sinking2p !: PO Csinking fluxes36 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sinkingn, sinking2n !: PON sinking fluxes 37 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sinkingp, sinking2p !: POP sinking fluxes 34 38 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sinkcal, sinksil !: CaCO3 and BSi sinking fluxes 35 39 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sinkfer !: Small BFe sinking fluxes … … 45 49 CONTAINS 46 50 47 !!----------------------------------------------------------------------48 !! 'standard sinking parameterisation' ???49 !!----------------------------------------------------------------------50 51 51 SUBROUTINE p4z_sink ( kt, knt ) 52 52 !!--------------------------------------------------------------------- … … 54 54 !! 55 55 !! ** Purpose : Compute vertical flux of particulate matter due to 56 !! gravitational sinking 57 !! 58 !! ** Method : - ??? 56 !! gravitational sinking. 57 !! 58 !! ** Method : - An external advection subroutine is called to compute 59 !! the impact of sinking on the particles. The tracers 60 !! concentrations are updated in this subroutine which 61 !! is mandatory to deal with negative concentrations 59 62 !!--------------------------------------------------------------------- 60 63 INTEGER, INTENT(in) :: kt, knt … … 75 78 consgoc(:,:,:) = 0. 76 79 77 ! 78 ! Sinking speeds of detritus is increased with depth as shown 79 ! by data and from the coagulation theory 80 ! ----------------------------------------------------------- 80 ! Sinking speeds of big detritus is increased with depth as shown 81 ! by data and from the coagulation theory. This is controled by 82 ! wsbio2max and wsbio2scale. If wsbio2max is set to wsbio2, then 83 ! sinking speed is constant with depth. 84 ! CaCO3 and bSi are supposed to sink at the big particles speed 85 ! due to their high density 86 ! --------------------------------------------------------------- 81 87 DO jk = 1, jpkm1 82 88 DO jj = 1, jpj … … 89 95 END DO 90 96 91 ! limit the values of the sinking speeds to avoid numerical instabilities97 ! Sinking speed of the small particles is constant 92 98 wsbio3(:,:,:) = wsbio 93 99 94 ! 95 ! Initializa to zero all the sinking arrays 96 ! ----------------------------------------- 100 ! Initialize to zero all the sinking arrays 101 ! ----------------------------------------- 97 102 sinking (:,:,:) = 0.e0 98 103 sinking2(:,:,:) = 0.e0 … … 102 107 sinkfer2(:,:,:) = 0.e0 103 108 104 ! Compute the sedimentation term using p4zsink2for all the sinking particles105 ! 109 ! Compute the sedimentation term using trc_sink for all the sinking particles 110 ! --------------------------------------------------------------------------- 106 111 CALL trc_sink( kt, wsbio3, sinking , jppoc, rfact2 ) 107 112 CALL trc_sink( kt, wsbio3, sinkfer , jpsfe, rfact2 ) … … 111 116 CALL trc_sink( kt, wsbio4, sinkcal , jpcal, rfact2 ) 112 117 118 ! PISCES-QUOTA part 113 119 IF( ln_p5z ) THEN 114 120 sinkingn (:,:,:) = 0.e0 … … 117 123 sinking2p(:,:,:) = 0.e0 118 124 119 ! Compute the sedimentation term using p4zsink2for all the sinking particles120 ! 125 ! Compute the sedimentation term using trc_sink for all the sinking particles 126 ! --------------------------------------------------------------------------- 121 127 CALL trc_sink( kt, wsbio3, sinkingn , jppon, rfact2 ) 122 128 CALL trc_sink( kt, wsbio3, sinkingp , jppop, rfact2 ) … … 186 192 !!---------------------------------------------------------------------- 187 193 !! *** ROUTINE p4z_sink_init *** 194 !! 195 !! ** Purpose : Initialization of sinking parameters 196 !! 197 !! ** Method : 198 !! 199 !! ** input : 188 200 !!---------------------------------------------------------------------- 189 201 INTEGER :: jk -
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zsms.F90
r11536 r12537 30 30 PRIVATE 31 31 32 PUBLIC p4z_sms_init ! called in p4zsms.F9033 PUBLIC p4z_sms ! called in p4zsms.F9032 PUBLIC p4z_sms_init ! called in trcini_pisces.F90 33 PUBLIC p4z_sms ! called in trcsms_pisces.F90 34 34 35 35 INTEGER :: numco2, numnut, numnit ! logical unit for co2 budget 36 REAL(wp) :: alkbudget, no3budget, silbudget, ferbudget, po4budget 36 REAL(wp) :: alkbudget, no3budget, silbudget, ferbudget, po4budget ! total budget of the different conservative elements 37 37 REAL(wp) :: xfact1, xfact2, xfact3 38 38 … … 53 53 !! routines of PISCES bio-model 54 54 !! 55 !! ** Method : - at each new day ... 56 !! - several calls of bio and sed ??? 57 !! - ... 55 !! ** Method : - calls the various SMS subroutines 56 !! - calls the sediment module (if ln_sediment) 57 !! - several calls of bio and sed (possible time-splitting) 58 !! - handles the potential negative concentrations (xnegtr) 58 59 !!--------------------------------------------------------------------- 59 60 ! … … 72 73 ! 73 74 IF( .NOT. ln_rsttr ) THEN 74 CALL p4z_che 75 CALL p4z_che ! initialize the chemical constants 75 76 CALL ahini_for_at(hi) ! set PH at kt=nit000 76 77 t_oce_co2_flx_cum = 0._wp … … 110 111 DO jnt = 1, nrdttrc ! Potential time splitting if requested 111 112 ! 112 CALL p4z_bio( kt, jnt ) ! Biolog y113 CALL p4z_lys( kt, jnt ) ! Compute CaCO3 saturation 113 CALL p4z_bio( kt, jnt ) ! Biological SMS 114 CALL p4z_lys( kt, jnt ) ! Compute CaCO3 saturation and dissolution 114 115 CALL p4z_sed( kt, jnt ) ! Surface and Bottom boundary conditions 115 CALL p4z_flx( kt, jnt ) ! Compute surface fluxes 116 ! 116 CALL p4z_flx( kt, jnt ) ! Compute surface air-sea fluxes 117 ! 118 ! Handling of the negative concentrations 119 ! The biological SMS may generate negative concentrations 120 ! Trends are tested at each grid cell. If a negative concentrations 121 ! is created at a grid cell, all the sources and sinks at that grid 122 ! cell are scale to avoid that negative concentration. This approach 123 ! is quite simplistic but it conserves mass. 124 ! ------------------------------------------------------------------ 117 125 xnegtr(:,:,:) = 1.e0 118 126 DO jn = jp_pcs0, jp_pcs1 … … 130 138 ! ! where at least 1 tracer concentration becomes negative 131 139 ! ! 140 ! Concentrations are updated 132 141 DO jn = jp_pcs0, jp_pcs1 133 142 trb(:,:,:,jn) = trb(:,:,:,jn) + xnegtr(:,:,:) * tra(:,:,:,jn) 134 143 END DO 135 144 ! 145 ! Trends are are reset to 0 136 146 DO jn = jp_pcs0, jp_pcs1 137 147 tra(:,:,:,jn) = 0._wp … … 153 163 #endif 154 164 ! 165 ! If ln_sediment is set to .true. then the sediment module is called 155 166 IF( ln_sediment ) THEN 156 167 ! … … 181 192 !! *** p4z_sms_init *** 182 193 !! 183 !! ** Purpose : read PISCES namelist184 !! 185 !! ** input : file 'namelist .trc.s' containing the following186 !! namelist: natext, natbio, natsms194 !! ** Purpose : read the general PISCES namelist 195 !! 196 !! ** input : file 'namelist_pisces' containing the following 197 !! namelist: nampisbio, nampisdmp, nampismass 187 198 !!---------------------------------------------------------------------- 188 199 INTEGER :: ios ! Local integer output status for namelist read … … 268 279 !! *** ROUTINE p4z_rst *** 269 280 !! 270 !! ** Purpose : Read or write variables in restart file:281 !! ** Purpose : Read or write specific PISCES variables in restart file: 271 282 !! 272 283 !! WRITE(READ) mode: … … 280 291 IF( TRIM(cdrw) == 'READ' ) THEN 281 292 ! 293 ! Read the specific variable of PISCES 282 294 IF(lwp) WRITE(numout,*) 283 295 IF(lwp) WRITE(numout,*) ' p4z_rst : Read specific variables from pisces model ' 284 296 IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~' 285 297 ! 298 ! Read the pH. If not in the restart file, then it is initialized from 299 ! the initial conditions 286 300 IF( iom_varid( numrtr, 'PH', ldstop = .FALSE. ) > 0 ) THEN 287 301 CALL iom_get( numrtr, jpdom_autoglo, 'PH' , hi(:,:,:) ) … … 290 304 CALL ahini_for_at(hi) 291 305 ENDIF 306 307 ! Read the Si half saturation constant and the maximum Silica concentration 292 308 CALL iom_get( numrtr, jpdom_autoglo, 'Silicalim', xksi(:,:) ) 293 309 IF( iom_varid( numrtr, 'Silicamax', ldstop = .FALSE. ) > 0 ) THEN … … 296 312 xksimax(:,:) = xksi(:,:) 297 313 ENDIF 298 ! 314 315 ! Read the cumulative total flux. If not in the restart file, it is set to 0 299 316 IF( iom_varid( numrtr, 'tcflxcum', ldstop = .FALSE. ) > 0 ) THEN ! cumulative total flux of carbon 300 317 CALL iom_get( numrtr, 'tcflxcum' , t_oce_co2_flx_cum ) … … 303 320 ENDIF 304 321 ! 322 ! PISCES-QUOTA specific part 305 323 IF( ln_p5z ) THEN 324 ! Read the size of the different phytoplankton groups 325 ! If not in the restart file, they are set to 1 306 326 IF( iom_varid( numrtr, 'sized', ldstop = .FALSE. ) > 0 ) THEN 307 327 CALL iom_get( numrtr, jpdom_autoglo, 'sizep' , sizep(:,:,:) ) … … 316 336 ! 317 337 ELSEIF( TRIM(cdrw) == 'WRITE' ) THEN 338 ! write the specific variables of PISCES 318 339 IF( kt == nitrst ) THEN 319 340 IF(lwp) WRITE(numout,*) … … 321 342 IF(lwp) WRITE(numout,*) '~~~~~~~' 322 343 ENDIF 323 CALL iom_rstput( kt, nitrst, numrtw, 'PH', hi(:,:,:) ) 324 CALL iom_rstput( kt, nitrst, numrtw, 'Silicalim', xksi(:,:) ) 325 CALL iom_rstput( kt, nitrst, numrtw, 'Silicamax', xksimax(:,:) ) 326 CALL iom_rstput( kt, nitrst, numrtw, 'tcflxcum', t_oce_co2_flx_cum ) 344 CALL iom_rstput( kt, nitrst, numrtw, 'PH', hi(:,:,:) ) ! pH 345 CALL iom_rstput( kt, nitrst, numrtw, 'Silicalim', xksi(:,:) ) ! Si 1/2 saturation constant 346 CALL iom_rstput( kt, nitrst, numrtw, 'Silicamax', xksimax(:,:) ) ! Si max concentration 347 CALL iom_rstput( kt, nitrst, numrtw, 'tcflxcum', t_oce_co2_flx_cum ) ! Cumulative CO2 flux 327 348 IF( ln_p5z ) THEN 328 CALL iom_rstput( kt, nitrst, numrtw, 'sizep', sizep(:,:,:) ) 329 CALL iom_rstput( kt, nitrst, numrtw, 'sizen', sizen(:,:,:) ) 330 CALL iom_rstput( kt, nitrst, numrtw, 'sized', sized(:,:,:) ) 349 CALL iom_rstput( kt, nitrst, numrtw, 'sizep', sizep(:,:,:) ) ! Size of picophytoplankton 350 CALL iom_rstput( kt, nitrst, numrtw, 'sizen', sizen(:,:,:) ) ! Size of nanophytoplankton 351 CALL iom_rstput( kt, nitrst, numrtw, 'sized', sized(:,:,:) ) ! Size of diatoms 331 352 ENDIF 332 353 ENDIF … … 339 360 !! *** p4z_dmp *** 340 361 !! 341 !! ** purpose : Relaxation of some tracers 362 !! ** purpose : Relaxation of the total budget of some elements 363 !! This routine avoids the model to drift far from the 364 !! observed content in various elements 365 !! Elements that may be relaxed : Alk, P, N, Si 342 366 !!---------------------------------------------------------------------- 343 367 ! … … 345 369 ! 346 370 REAL(wp) :: alkmean = 2426. ! mean value of alkalinity ( Glodap ; for Goyet 2391. ) 347 REAL(wp) :: po4mean = 2.165 ! mean value of phosphate s371 REAL(wp) :: po4mean = 2.165 ! mean value of phosphate 348 372 REAL(wp) :: no3mean = 30.90 ! mean value of nitrate 349 373 REAL(wp) :: silmean = 91.51 ! mean value of silicate … … 368 392 zsilsumn = glob_sum( 'p4zsms', trn(:,:,:,jpsil) * cvol(:,:,:) ) * zarea 369 393 394 ! Correct the trn mean content of alkalinity 370 395 IF(lwp) WRITE(numout,*) ' TALKN mean : ', zalksumn 371 396 trn(:,:,:,jptal) = trn(:,:,:,jptal) * alkmean / zalksumn 372 397 398 ! Correct the trn mean content of PO4 373 399 IF(lwp) WRITE(numout,*) ' PO4N mean : ', zpo4sumn 374 400 trn(:,:,:,jppo4) = trn(:,:,:,jppo4) * po4mean / zpo4sumn 375 401 402 ! Correct the trn mean content of NO3 376 403 IF(lwp) WRITE(numout,*) ' NO3N mean : ', zno3sumn 377 404 trn(:,:,:,jpno3) = trn(:,:,:,jpno3) * no3mean / zno3sumn 378 405 406 ! Correct the trn mean content of SiO3 379 407 IF(lwp) WRITE(numout,*) ' SiO3N mean : ', zsilsumn 380 408 trn(:,:,:,jpsil) = MIN( 400.e-6,trn(:,:,:,jpsil) * silmean / zsilsumn ) … … 388 416 389 417 IF(lwp) WRITE(numout,*) ' ' 418 ! Correct the trb mean content of alkalinity 390 419 IF(lwp) WRITE(numout,*) ' TALKB mean : ', zalksumb 391 420 trb(:,:,:,jptal) = trb(:,:,:,jptal) * alkmean / zalksumb 392 421 422 ! Correct the trb mean content of PO4 393 423 IF(lwp) WRITE(numout,*) ' PO4B mean : ', zpo4sumb 394 424 trb(:,:,:,jppo4) = trb(:,:,:,jppo4) * po4mean / zpo4sumb 395 425 426 ! Correct the trb mean content of NO3 396 427 IF(lwp) WRITE(numout,*) ' NO3B mean : ', zno3sumb 397 428 trb(:,:,:,jpno3) = trb(:,:,:,jpno3) * no3mean / zno3sumb 398 429 430 ! Correct the trb mean content of SiO3 399 431 IF(lwp) WRITE(numout,*) ' SiO3B mean : ', zsilsumb 400 432 trb(:,:,:,jpsil) = MIN( 400.e-6,trb(:,:,:,jpsil) * silmean / zsilsumb ) … … 435 467 ENDIF 436 468 469 ! Compute the budget of NO3 437 470 IF( iom_use( "pno3tot" ) .OR. ( ln_check_mass .AND. kt == nitend ) ) THEN 438 ! Compute the budget of NO3, ALK, Si, Fer439 471 IF( ln_p4z ) THEN 440 472 zwork(:,:,:) = trn(:,:,:,jpno3) + trn(:,:,:,jpnh4) & … … 454 486 ENDIF 455 487 ! 488 ! Compute the budget of PO4 456 489 IF( iom_use( "ppo4tot" ) .OR. ( ln_check_mass .AND. kt == nitend ) ) THEN 457 490 IF( ln_p4z ) THEN … … 472 505 ENDIF 473 506 ! 507 ! Compute the budget of SiO3 474 508 IF( iom_use( "psiltot" ) .OR. ( ln_check_mass .AND. kt == nitend ) ) THEN 475 509 zwork(:,:,:) = trn(:,:,:,jpsil) + trn(:,:,:,jpgsi) + trn(:,:,:,jpdsi) … … 488 522 ENDIF 489 523 ! 524 ! Compute the budget of Iron 490 525 IF( iom_use( "pfertot" ) .OR. ( ln_check_mass .AND. kt == nitend ) ) THEN 491 526 zwork(:,:,:) = trn(:,:,:,jpfer) + trn(:,:,:,jpnfe) + trn(:,:,:,jpdfe) & -
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p5zlim.F90
r12349 r12537 2 2 !!====================================================================== 3 3 !! *** MODULE p5zlim *** 4 !! TOP : PISCES with variable stoichiometry 4 !! TOP : PISCES-QUOTA : Computes the various nutrient limitation terms 5 !! of phytoplankton 5 6 !!====================================================================== 6 7 !! History : 1.0 ! 2004 (O. Aumont) Original code … … 14 15 USE oce_trc ! Shared ocean-passive tracers variables 15 16 USE trc ! Tracers defined 16 USE p4zlim 17 USE p4zlim ! Nutrient limitation 17 18 USE sms_pisces ! PISCES variables 18 19 USE iom ! I/O manager … … 21 22 PRIVATE 22 23 23 PUBLIC p5z_lim 24 PUBLIC p5z_lim_init 25 PUBLIC p5z_lim_alloc 24 PUBLIC p5z_lim ! called in p4zbio.F90 25 PUBLIC p5z_lim_init ! called in trcsms_pisces.F90 26 PUBLIC p5z_lim_alloc ! called in trcini_pisces.F90 26 27 27 28 !! * Shared module variables … … 72 73 73 74 !!* Phytoplankton nutrient limitation terms 74 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xpicono3 !: ???75 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xpiconh4 !: ???76 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xpicopo4 !: ???77 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xnanodop !: ???78 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xpicodop !: ???79 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xdiatdop !: ???80 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xnanofer !: ???81 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xpicofer !: ???82 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xdiatfer !: ???83 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimpic !: ???84 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimpics !: ???85 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimphys !: ???86 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimdias !: ???87 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimpfe !: ???88 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: fvnuptk 89 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: fvpuptk 90 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: fvduptk 91 92 ! Coefficient for iron limitation 75 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xpicono3 !: Limitation of NO3 uptake by picophyto 76 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xpiconh4 !: Limitation of NH4 uptake by picophyto 77 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xpicopo4 !: Limitation of PO4 uptake by picophyto 78 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xnanodop !: Limitation of DOP uptake by nanophyto 79 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xpicodop !: Limitation of DOP uptake by picophyto 80 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xdiatdop !: Limitation of DOP uptake by diatoms 81 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xnanofer !: Limitation of Fe uptake by nanophyto 82 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xpicofer !: Limitation of Fe uptake by picophyto 83 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xdiatfer !: Limitation of Fe uptake by diatoms 84 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimpic !: Limitation of picophyto PP by nutrients 85 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimpics !: Limitation of picophyto PP by nutrients 86 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimphys !: Limitation of nanophyto PP by nutrients 87 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimdias !: Limitation of diatoms PP by nutrients 88 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimpfe !: Limitation of picophyto PP by Fe 89 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: fvnuptk !: Maximum potential uptake rate of nanophyto 90 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: fvpuptk !: Maximum potential uptake rate of picophyto 91 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: fvduptk !: Maximum potential uptake rate of diatoms 92 93 ! Coefficient for iron limitation following Flynn and Hipkin (1999) 93 94 REAL(wp) :: xcoef1 = 0.00167 / 55.85 94 95 REAL(wp) :: xcoef2 = 1.21E-5 * 14. / 55.85 / 7.625 * 0.5 * 1.5 … … 110 111 !! approach. The quota model is derived from theoretical 111 112 !! models proposed by Pahlow and Oschlies (2009) and 112 !! Flynn (2001). Various adaptations from several publications113 !! by these authors have been also adopted.113 !! Flynn (2001). Various adaptations from several 114 !! publications by these authors have been also adopted. 114 115 !! 115 116 !! ** Method : Quota based approach. The quota model is derived from … … 145 146 DO ji = 1, jpi 146 147 ! 147 ! Tuning of the iron concentration to a minimum level that is set to the detection limit 148 !------------------------------------- 148 ! Tuning of the iron concentration to a minimum level that 149 ! is set to the detection limit 150 ! -------------------------------------------------------- 149 151 zno3 = trb(ji,jj,jk,jpno3) / 40.e-6 150 152 zferlim = MAX( 3e-11 * zno3 * zno3, 5e-12 ) … … 152 154 trb(ji,jj,jk,jpfer) = MAX( trb(ji,jj,jk,jpfer), zferlim ) 153 155 154 ! Computation of the mean relative size of each community155 ! ------------------------------------------------------- 156 ! Computation of the Chl/C ratio of each phytoplankton group 157 ! ---------------------------------------------------------- 156 158 z1_trnphy = 1. / ( trb(ji,jj,jk,jpphy) + rtrn ) 157 159 z1_trnpic = 1. / ( trb(ji,jj,jk,jppic) + rtrn ) … … 161 163 zdiatchl = trb(ji,jj,jk,jpdch) * z1_trndia 162 164 163 ! Computation of a variable Ks for iron on diatoms taking into account 164 ! that increasing biomass is made of generally bigger cells 165 !------------------------------------------------ 165 ! Computation of a variable Ks for the different phytoplankton 166 ! group as a function of their relative size. Allometry 167 ! from Edwards et al. (2012) 168 ! ------------------------------------------------------------ 169 170 ! diatoms 166 171 zsized = sized(ji,jj,jk)**0.81 167 172 zconcdfe = concdfer * zsized … … 170 175 zconc0dpo4 = concdpo4 * zsized 171 176 177 ! picophytoplankton 172 178 zsizep = sizep(ji,jj,jk)**0.81 173 179 zconcpfe = concpfer * zsizep … … 176 182 zconc0ppo4 = concppo4 * zsizep 177 183 184 ! nanophytoplankton 178 185 zsizen = sizen(ji,jj,jk)**0.81 179 186 zconcnfe = concnfer * zsizen … … 193 200 194 201 ! Computation of the optimal allocation parameters 195 ! Based on the different papers by Pahlow et al., and Smith et al. 196 ! ----------------------------------------------------------------- 202 ! Based on the different papers by Pahlow et al., and 203 ! Smith et al. 204 ! --------------------------------------------------- 205 206 ! Nanophytoplankton 197 207 znutlim = MAX( trb(ji,jj,jk,jpnh4) / zconc0nnh4, & 198 208 & trb(ji,jj,jk,jpno3) / zconc0n) … … 202 212 znutlim = biron(ji,jj,jk) / zconcnfe 203 213 fananof = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 214 215 ! Picophytoplankton 204 216 znutlim = MAX( trb(ji,jj,jk,jpnh4) / zconc0pnh4, & 205 217 & trb(ji,jj,jk,jpno3) / zconc0p) … … 209 221 znutlim = biron(ji,jj,jk) / zconcpfe 210 222 fapicof = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 223 224 ! Diatoms 211 225 znutlim = MAX( trb(ji,jj,jk,jpnh4) / zconc1dnh4, & 212 226 & trb(ji,jj,jk,jpno3) / zconc1d ) … … 216 230 znutlim = biron(ji,jj,jk) / zconcdfe 217 231 fadiatf = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 218 ! 219 ! Michaelis-Menten Limitation term for nutrients Small bacteria 220 ! ------------------------------------------------------------- 232 233 ! Michaelis-Menten Limitation term by nutrients of 234 ! heterotrophic bacteria 235 ! ------------------------------------------------- 221 236 zbactnh4 = trb(ji,jj,jk,jpnh4) / ( concbnh4 + trb(ji,jj,jk,jpnh4) ) 222 237 zbactno3 = trb(ji,jj,jk,jpno3) / ( concbno3 + trb(ji,jj,jk,jpno3) ) * (1. - zbactnh4) … … 226 241 zlim3 = biron(ji,jj,jk) / ( concbfe + biron(ji,jj,jk) ) 227 242 zlim4 = trb(ji,jj,jk,jpdoc) / ( xkdoc + trb(ji,jj,jk,jpdoc) ) 243 ! Xlimbac is used for DOC solubilization whereas xlimbacl 244 ! is used for all the other bacterial-dependent terms 245 ! ------------------------------------------------------- 228 246 xlimbacl(ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) 229 247 xlimbac (ji,jj,jk) = xlimbacl(ji,jj,jk) * zlim4 230 ! 231 ! Michaelis-Menten Limitation term for nutrients Small flagellates 232 ! ----------------------------------------------- 248 249 ! Michaelis-Menten Limitation term by nutrients: Nanophyto 250 ! -------------------------------------------------------- 251 ! 252 ! Limitation of N based nutrients uptake (NO3 and NH4) 233 253 zfalim = (1.-fanano) / fanano 234 254 xnanonh4(ji,jj,jk) = (1. - fanano) * trb(ji,jj,jk,jpnh4) / ( zfalim * zconc0nnh4 + trb(ji,jj,jk,jpnh4) ) … … 236 256 & * (1. - xnanonh4(ji,jj,jk)) 237 257 ! 258 ! Limitation of P based nutrients (PO4 and DOP) 238 259 zfalim = (1.-fananop) / fananop 239 260 xnanopo4(ji,jj,jk) = (1. - fananop) * trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + zfalim * zconc0npo4 ) … … 242 263 xnanodop(ji,jj,jk) = 0. 243 264 ! 265 ! Limitation of Fe uptake 244 266 zfalim = (1.-fananof) / fananof 245 267 xnanofer(ji,jj,jk) = (1. - fananof) * biron(ji,jj,jk) / ( biron(ji,jj,jk) + zfalim * zconcnfe ) 246 268 ! 269 ! The minimum iron quota depends on the size of PSU, respiration 270 ! and the reduction of nitrate following the parameterization 271 ! proposed by Flynn and Hipkin (1999) 247 272 zratiof = trb(ji,jj,jk,jpnfe) * z1_trnphy 248 273 zqfemn = xcoef1 * znanochl + xcoef2 + xcoef3 * xnanono3(ji,jj,jk) … … 257 282 & / (xqnnmax(ji,jj,jk) - xqnnmin(ji,jj,jk) ) ) * xqnnmax(ji,jj,jk) & 258 283 & / (zration + rtrn) 259 ! 260 ! 284 ! The value of the optimal quota in the formulation below 285 ! has been found by solving a non linear equation 261 286 zlim1f = max(0., ( 1.086 - xqnnmin(ji,jj,jk) ) & 262 287 & / (xqnnmax(ji,jj,jk) - xqnnmin(ji,jj,jk) ) ) * xqnnmax(ji,jj,jk) 263 288 zlim3 = MAX( 0.,( zratiof - zqfemn ) / qfnopt ) 289 ! computation of the various limitation terms of nanophyto 290 ! growth and PP 264 291 xlimnfe (ji,jj,jk) = MIN( 1., zlim3 ) 265 292 xlimphy (ji,jj,jk) = MIN( 1., zlim1, zlim3 ) 266 293 xlimphys(ji,jj,jk) = MIN( 1., zlim1/( zlim1f + rtrn ), zlim3 ) 267 294 xlimnpn (ji,jj,jk) = MIN( 1., zlim1) 268 ! 269 ! Michaelis-Menten Limitation term for nutrients picophytoplankton 270 ! ---------------------------------------------------------------- 295 296 ! Michaelis-Menten Limitation term by nutrients: Picophyto 297 ! -------------------------------------------------------- 298 ! 299 ! Limitation of N based nutrients uptake (NO3 and NH4) 271 300 zfalim = (1.-fapico) / fapico 272 301 xpiconh4(ji,jj,jk) = (1. - fapico) * trb(ji,jj,jk,jpnh4) / ( zfalim * zconc0pnh4 + trb(ji,jj,jk,jpnh4) ) … … 274 303 & * (1. - xpiconh4(ji,jj,jk)) 275 304 ! 305 ! Limitation of P based nutrients uptake (PO4 and DOP) 276 306 zfalim = (1.-fapicop) / fapicop 277 307 xpicopo4(ji,jj,jk) = (1. - fapicop) * trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + zfalim * zconc0ppo4 ) … … 283 313 xpicofer(ji,jj,jk) = (1. - fapicof) * biron(ji,jj,jk) / ( biron(ji,jj,jk) + zfalim * zconcpfe ) 284 314 ! 315 ! The minimum iron quota depends on the size of PSU, respiration 316 ! and the reduction of nitrate following the parameterization 317 ! proposed by Flynn and Hipkin (1999) 285 318 zratiof = trb(ji,jj,jk,jppfe) * z1_trnpic 286 319 zqfemp = xcoef1 * zpicochl + xcoef2 + xcoef3 * xpicono3(ji,jj,jk) … … 295 328 & / (xqnpmax(ji,jj,jk) - xqnpmin(ji,jj,jk) ) ) * xqnpmax(ji,jj,jk) & 296 329 & / (zration + rtrn) 297 ! 298 ! 330 ! The value of the optimal quota in the formulation below 331 ! has been found by solving a non linear equation 299 332 zlim1f = max(0., (1.367 - xqnpmin(ji,jj,jk) ) & 300 333 & / (xqnpmax(ji,jj,jk) - xqnpmin(ji,jj,jk) ) ) * xqnpmax(ji,jj,jk) 301 334 zlim3 = MAX( 0.,( zratiof - zqfemp ) / qfpopt ) 335 336 ! computation of the various limitation terms of picophyto 337 ! growth and PP 302 338 xlimpfe (ji,jj,jk) = MIN( 1., zlim3 ) 303 339 xlimpic (ji,jj,jk) = MIN( 1., zlim1, zlim3 ) 304 340 xlimnpp (ji,jj,jk) = MIN( 1., zlim1 ) 305 341 xlimpics(ji,jj,jk) = MIN( 1., zlim1/( zlim1f + rtrn ), zlim3 ) 306 ! 307 ! Michaelis-Menten Limitation term for nutrients Diatoms 308 ! ------------------------------------------------------ 342 343 ! Michaelis-Menten Limitation term by nutrients : Diatoms 344 ! ------------------------------------------------------- 345 ! 346 ! Limitation of N based nutrients uptake (NO3 and NH4) 309 347 zfalim = (1.-fadiat) / fadiat 310 348 xdiatnh4(ji,jj,jk) = (1. - fadiat) * trb(ji,jj,jk,jpnh4) / ( zfalim * zconc1dnh4 + trb(ji,jj,jk,jpnh4) ) … … 312 350 & * (1. - xdiatnh4(ji,jj,jk)) 313 351 ! 352 ! Limitation of P based nutrients uptake (PO4 and DOP) 314 353 zfalim = (1.-fadiatp) / fadiatp 315 354 xdiatpo4(ji,jj,jk) = (1. - fadiatp) * trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + zfalim * zconc0dpo4 ) … … 318 357 xdiatdop(ji,jj,jk) = 0. 319 358 ! 359 ! Limitation of Fe uptake 320 360 zfalim = (1.-fadiatf) / fadiatf 321 361 xdiatfer(ji,jj,jk) = (1. - fadiatf) * biron(ji,jj,jk) / ( biron(ji,jj,jk) + zfalim * zconcdfe ) 322 362 ! 363 ! The minimum iron quota depends on the size of PSU, respiration 364 ! and the reduction of nitrate following the parameterization 365 ! proposed by Flynn and Hipkin (1999) 323 366 zratiof = trb(ji,jj,jk,jpdfe) * z1_trndia 324 367 zqfemd = xcoef1 * zdiatchl + xcoef2 + xcoef3 * xdiatno3(ji,jj,jk) … … 333 376 & / (xqndmax(ji,jj,jk) - xqndmin(ji,jj,jk) ) ) & 334 377 & * xqndmax(ji,jj,jk) / (zration + rtrn) 335 ! 336 ! 378 ! The value of the optimal quota in the formulation below 379 ! has been found by solving a non linear equation 337 380 zlim1f = max(0., (1.077 - xqndmin(ji,jj,jk) ) & 338 381 & / (xqndmax(ji,jj,jk) - xqndmin(ji,jj,jk) ) ) & … … 340 383 zlim3 = trb(ji,jj,jk,jpsil) / ( trb(ji,jj,jk,jpsil) + xksi(ji,jj) ) 341 384 zlim4 = MAX( 0., ( zratiof - zqfemd ) / qfdopt ) 385 ! computation of the various limitation terms of diatoms 386 ! growth and PP 342 387 xlimdfe(ji,jj,jk) = MIN( 1., zlim4 ) 343 388 xlimdia(ji,jj,jk) = MIN( 1., zlim1, zlim3, zlim4 ) … … 357 402 DO jj = 1, jpj 358 403 DO ji = 1, jpi 359 ! Size estimation of nanophytoplankton 360 ! ------------------------------------ 404 ! Size estimation of nanophytoplankton based on total biomass 405 ! Assumes that larger biomass implies addition of larger cells 406 ! ------------------------------------------------------------ 361 407 zcoef = trb(ji,jj,jk,jpphy) - MIN(xsizephy, trb(ji,jj,jk,jpphy) ) 362 408 sizena(ji,jj,jk) = 1. + ( xsizern -1.0 ) * zcoef / ( xsizephy + zcoef ) … … 373 419 374 420 375 ! Size estimation of picophytoplankton 376 ! ------------------------------------ 421 ! Size estimation of picophytoplankton based on total biomass 422 ! Assumes that larger biomass implies addition of larger cells 423 ! ------------------------------------------------------------ 377 424 zcoef = trb(ji,jj,jk,jppic) - MIN(xsizepic, trb(ji,jj,jk,jppic) ) 378 425 sizepa(ji,jj,jk) = 1. + ( xsizerp -1.0 ) * zcoef / ( xsizepic + zcoef ) … … 389 436 xqppmax(ji,jj,jk) = MIN( qppmax, xqppmax(ji,jj,jk) ) 390 437 391 ! Size estimation of diatoms 392 ! -------------------------- 438 ! Size estimation of diatoms based on total biomass 439 ! Assumes that larger biomass implies addition of larger cells 440 ! ------------------------------------------------------------ 393 441 zcoef = trb(ji,jj,jk,jpdia) - MIN(xsizedia, trb(ji,jj,jk,jpdia) ) 394 442 sized(ji,jj,jk) = 1. + ( xsizerd - 1.0 ) * zcoef / ( xsizedia + zcoef ) … … 412 460 413 461 ! Compute the fraction of nanophytoplankton that is made of calcifiers 462 ! This is a purely adhoc formulation described in Aumont et al. (2015) 463 ! This fraction depends on nutrient limitation, light, temperature 414 464 ! -------------------------------------------------------------------- 415 465 DO jk = 1, jpkm1 … … 441 491 & / ( oxymin + trb(ji,jj,jk,jpoxy) ) ) 442 492 nitrfac(ji,jj,jk) = MIN( 1., nitrfac(ji,jj,jk) ) 493 ! 494 ! redox factor computed from NO3 levels 495 nitrfac2(ji,jj,jk) = MAX( 0.e0, ( 1.E-6 - trb(ji,jj,jk,jpno3) ) & 496 & / ( 1.E-6 + trb(ji,jj,jk,jpno3) ) ) 497 nitrfac2(ji,jj,jk) = MIN( 1., nitrfac2(ji,jj,jk) ) 443 498 END DO 444 499 END DO -
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p5zmeso.F90
r12524 r12537 2 2 !!====================================================================== 3 3 !! *** MODULE p5zmeso *** 4 !! TOP : PISCES Compute the sources/sinks for mesozooplankton4 !! TOP : PISCES-QUOTA Compute the sources/sinks for mesozooplankton 5 5 !!====================================================================== 6 6 !! History : 1.0 ! 2002 (O. Aumont) Original code … … 9 9 !! 3.6 ! 2015-05 (O. Aumont) PISCES quota 10 10 !!---------------------------------------------------------------------- 11 !! p5z_meso : Compute the sources/sinks for mesozooplankton 12 !! p5z_meso_init : Initialization of the parameters for mesozooplankton 11 !! p5z_meso : Compute the sources/sinks for mesozooplankton 12 !! p5z_meso_init : Initialization of the parameters for mesozooplankton 13 !! p5z_meso_alloc : Allocate variables for mesozooplankton 13 14 !!---------------------------------------------------------------------- 14 15 USE oce_trc ! shared variables between ocean and passive tracers … … 23 24 PUBLIC p5z_meso ! called in p5zbio.F90 24 25 PUBLIC p5z_meso_init ! called in trcsms_pisces.F90 25 PUBLIC p5z_meso_alloc 26 PUBLIC p5z_meso_alloc ! called in trcini_pisces.F90 26 27 27 28 !! * Shared module variables … … 53 54 LOGICAL, PUBLIC :: bmetexc2 !: Use of excess carbon for respiration 54 55 LOGICAL , PUBLIC :: ln_dvm_meso !: Boolean to activate DVM of mesozooplankton 55 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: depmig 56 INTEGER , ALLOCATABLE, SAVE, DIMENSION(:,:) :: kmig 57 56 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: depmig !: DVM of mesozooplankton : migration depth 57 INTEGER , ALLOCATABLE, SAVE, DIMENSION(:,:) :: kmig !: Vertical indice of the the migration depth 58 58 59 59 !!---------------------------------------------------------------------- … … 70 70 !! 71 71 !! ** Purpose : Compute the sources/sinks for mesozooplankton 72 !! 73 !! ** Method : - ??? 72 !! This includes ingestion and assimilation, flux feeding 73 !! and mortality. We use an active prey switching 74 !! parameterization Morozov and Petrovskii (2013). 75 !! All living compartments and mesozooplankton 76 !! are potential preys of mesozooplankton as well as small 77 !! sinking particles 78 !! 74 79 !!--------------------------------------------------------------------- 75 80 INTEGER, INTENT(in) :: kt, knt ! ocean time step 81 ! 76 82 INTEGER :: ji, jj, jk, jkt 77 83 REAL(wp) :: zcompadi, zcompaph, zcompapoc, zcompaz, zcompam, zcompames … … 115 121 ! 116 122 ! Diurnal vertical migration of mesozooplankton 123 ! Computation of the migration depth 117 124 ! --------------------------------------------- 118 125 IF (ln_dvm_meso) CALL p5z_meso_depmig 119 126 127 ! Use of excess carbon for metabolism 120 128 zmetexcess = 0.0 121 129 IF ( bmetexc2 ) zmetexcess = 1.0 … … 127 135 zfact = xstep * tgfunc2(ji,jj,jk) * zcompam 128 136 129 ! Michaelis-Menten mortality rates of mesozooplankton 130 ! --------------------------------------------------- 137 ! linear mortality of mesozooplankton 138 ! A michaelis menten modulation term is used to avoid extinction of 139 ! mesozooplankton at very low food concentrations 140 ! ----------------------------------------------------------------- 131 141 zrespz = resrat2 * zfact * ( trb(ji,jj,jk,jpmes) / ( xkmort + trb(ji,jj,jk,jpmes) ) & 132 142 & + 3. * nitrfac(ji,jj,jk) ) 133 143 134 ! Zooplankton mortality. A square function has been selected with 135 ! no real reason except that it seems to be more stable and may mimic predation 136 ! --------------------------------------------------------------- 144 ! Zooplankton quadratic mortality. A square function has been selected with 145 ! to mimic predation and disease (density dependent mortality). It also tends 146 ! to stabilise the model 147 ! ------------------------------------------------------------------------- 137 148 ztortz = mzrat2 * 1.e6 * zfact * trb(ji,jj,jk,jpmes) * (1. - nitrfac(ji,jj,jk)) 138 149 … … 147 158 148 159 ! Mesozooplankton grazing 149 ! ------------------------ 160 ! The total amount of food is the sum of all preys accessible to mesozooplankton 161 ! multiplied by their food preference 162 ! A threshold can be specified in the namelist (xthresh2). However, when food 163 ! concentration is close to this threshold, it is decreased to avoid the 164 ! accumulation of food in the mesozoopelagic domain 165 ! ------------------------------------------------------------------------------- 150 166 zfood = xpref2d * zcompadi + xpref2z * zcompaz + xpref2n * zcompaph + xpref2c * zcompapoc & 151 167 & + xpref2m * zcompames … … 154 170 zgraze2 = grazrat2 * xstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpmes) * (1. - nitrfac(ji,jj,jk)) 155 171 156 ! An active switching parameterization is used here. 157 ! We don't use the KTW parameterization proposed by 158 ! Vallina et al. because it tends to produce too steady biomass 159 ! composition and the variance of Chl is too low as it grazes 160 ! too strongly on winning organisms. We use a generalized 161 ! switching parameterization proposed by Morozov and 162 ! Petrovskii (2013) 163 ! ------------------------------------------------------------ 172 ! An active switching parameterization is used here. 173 ! We don't use the KTW parameterization proposed by 174 ! Vallina et al. because it tends to produce too steady biomass 175 ! composition and the variance of Chl is too low as it grazes 176 ! too strongly on winning organisms. We use a generalized 177 ! switching parameterization proposed by Morozov and 178 ! Petrovskii (2013) 179 ! ------------------------------------------------------------ 180 ! The width of the selection window is increased when preys 181 ! have low abundance, .i.e. zooplankton become less specific 182 ! to avoid starvation. 183 ! ---------------------------------------------------------- 164 184 zsigma = 1.0 - zdenom**2/(0.05**2+zdenom**2) 165 185 zsigma = 0.5 + 1.0 * zsigma 186 ! Nanophytoplankton and diatoms are the only preys considered 187 ! to be close enough to have potential interference 188 ! ----------------------------------------------------------- 166 189 zdiffdn = exp( -ABS(log(3.0 * sizen(ji,jj,jk) / (5.0 * sized(ji,jj,jk) + rtrn )) )**2 / zsigma**2 ) 167 190 ztmp1 = xpref2n * zcompaph * ( zcompaph + zdiffdn * zcompadi ) … … 194 217 zgrazpof = zgrazpoc * trb(ji,jj,jk,jpsfe) / ( trb(ji,jj,jk,jppoc) + rtrn) 195 218 196 ! Mesozooplankton flux feeding on GOC 197 ! ---------------------------------- 219 ! Mesozooplankton flux feeding on GOC and POC. The feeding pressure 220 ! is proportional to the flux 221 ! ------------------------------------------------------------------ 198 222 zgrazffeg = grazflux * xstep * wsbio4(ji,jj,jk) & 199 223 & * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpgoc) * trb(ji,jj,jk,jpmes) & … … 211 235 zgraztotc = zgrazdc + zgrazz + zgraznc + zgrazm + zgrazpoc + zgrazffep + zgrazffeg 212 236 213 ! Compute the proportion of filter feeders214 ! 237 ! Compute the proportion of filter feeders. It is assumed steady state. 238 ! --------------------------------------------------------------------- 215 239 zproport = (zgrazffep + zgrazffeg)/(rtrn + zgraztotc) 216 240 … … 228 252 zfracp = zfracc * trb(ji,jj,jk,jpgop) / (trb(ji,jj,jk,jpgoc) + rtrn) 229 253 254 ! Flux feeding is multiplied by the fractional biomass of flux feeders 230 255 zgrazffep = zproport * zgrazffep ; zgrazffeg = zproport * zgrazffeg 231 256 zgrazfffp = zproport * zgrazfffp ; zgrazfffg = zproport * zgrazfffg … … 241 266 & + zgrazffpp + zgrazffpg 242 267 243 244 268 ! Total grazing ( grazing by microzoo is already computed in p5zmicro ) 245 269 zgrazing(ji,jj,jk) = zgraztotc … … 251 275 zgrasratp = (zgraztotp + rtrn) / ( zgraztotc + rtrn ) 252 276 253 ! Growth efficiency is made a function of the quality 254 ! and the quantity of the preys 255 ! --------------------------------------------------- 277 ! Mesozooplankton efficiency. 278 ! We adopt a formulation proposed by Mitra et al. (2007) 279 ! The gross growth efficiency is controled by the most limiting nutrient. 280 ! Growth is also further decreased when the food quality is poor. This is currently 281 ! hard coded : it can be decreased by up to 50% (zepsherq) 282 ! GGE can also be decreased when food quantity is high, zepsherf (Montagnes and 283 ! Fulton, 2012) 284 ! ----------------------------------------------------------------------------------- 256 285 zepshert = MIN( 1., zgrasratn/ no3rat3, zgrasratp/ po4rat3, zgrasratf / ferat3) 257 286 zbeta = MAX(0., (epsher2 - epsher2min) ) … … 261 290 ! Respiration of mesozooplankton 262 291 ! Excess carbon in the food is used preferentially 263 ! ---------------- ------------------------------ 292 ! when bmetexc2 is set to .true. 293 ! ----------------------------------------------- 264 294 zexcess = zgraztotc * zepsherf * (1.0 - zepshert) * zmetexcess 265 295 zbasresb = MAX(0., zrespz - zexcess) … … 344 374 zfracal = trb(ji,jj,jk,jpcal) / ( trb(ji,jj,jk,jpgoc) + rtrn ) 345 375 zgrazcal = zgrazffeg * (1. - part2) * zfracal 346 ! calcite production 347 ! ------------------ 376 ! Calcite production 377 ! Calcite remineralization due to zooplankton activity 378 ! part2 of the ingested calcite is dissolving in the acidic gut 379 ! ------------------------------------------------------------- 348 380 zprcaca = xfracal(ji,jj,jk) * zgraznc 349 381 prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo) … … 356 388 END DO 357 389 390 ! Computation of the effect of DVM by mesozooplankton 391 ! This part is only activated if ln_dvm_meso is set to true 392 ! The parameterization has been published in Gorgues et al. (2019). 393 ! ----------------------------------------------------------------- 358 394 IF (ln_dvm_meso) THEN 359 395 ALLOCATE( zgramigrem(jpi,jpj), zgramigref(jpi,jpj), zgramigpoc(jpi,jpj), zgramigpof(jpi,jpj) ) 360 396 ALLOCATE( zgramigrep(jpi,jpj), zgramigren(jpi,jpj), zgramigpop(jpi,jpj), zgramigpon(jpi,jpj) ) 361 397 ALLOCATE( zgramigdoc(jpi,jpj), zgramigdon(jpi,jpj), zgramigdop(jpi,jpj) ) 362 363 398 ALLOCATE( zstrn(jpi,jpj) ) 364 399 zgramigrem(:,:) = 0.0 ; zgramigref(:,:) = 0.0 … … 385 420 386 421 422 ! Compute the amount of materials that will go into vertical migration 423 ! This fraction is sumed over the euphotic zone and is removed from 424 ! the fluxes driven by mesozooplankton in the euphotic zone. 425 ! -------------------------------------------------------------------- 387 426 DO jk = 1, jpk 388 427 DO jj = 1, jpj 389 428 DO ji = 1, jpi 390 391 ! Compute the amount of materials that will go into vertical migration392 429 zmigreltime = (1. - zstrn(ji,jj)) 393 430 IF ( gdept_n(ji,jj,jk) <= heup(ji,jj) ) THEN … … 431 468 END DO 432 469 470 ! The inorganic and organic fluxes induced by migrating organisms are added at the 471 ! the migration depth (corresponding indice is set by kmig) 472 ! -------------------------------------------------------------------------------- 433 473 DO jj = 1, jpj 434 474 DO ji = 1, jpi … … 456 496 DEALLOCATE( zgramigdoc, zgramigdon, zgramigdop ) 457 497 DEALLOCATE( zstrn ) 458 498 ! End of the ln_dvm_meso part 459 499 ENDIF 460 500 501 ! Update the arrays TRA which contain the biological sources and sinks 502 ! This only concerns the variables which are affected by DVM (inorganic 503 ! nutrients, DOC agands, and particulate organic carbon). 504 ! --------------------------------------------------------------------- 461 505 DO jk = 1, jpk 462 506 DO jj = 1, jpj 463 507 DO ji = 1, jpi 464 ! Update the arrays TRA which contain the biological sources and sinks465 508 tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + zgrarep(ji,jj,jk) 466 509 tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zgraren(ji,jj,jk) … … 526 569 !! ** Purpose : Initialization of mesozooplankton parameters 527 570 !! 528 !! ** Method : Read the namp ismes namelist and check the parameters571 !! ** Method : Read the namp5zmes namelist and check the parameters 529 572 !! called at the first timestep (nittrc000) 530 573 !! 531 !! ** input : Namelist namp ismes574 !! ** input : Namelist namp5zmes 532 575 !! 533 576 !!---------------------------------------------------------------------- 534 INTEGER :: ios 577 INTEGER :: ios ! Local integer output status for namelist read 535 578 !! 536 579 NAMELIST/namp5zmes/part2, bmetexc2, grazrat2, resrat2, mzrat2, xpref2c, xpref2n, xpref2z, & … … 540 583 !!---------------------------------------------------------------------- 541 584 ! 542 REWIND( numnatp_ref ) ! Namelist namp ismes in reference namelist : Pisces mesozooplankton585 REWIND( numnatp_ref ) ! Namelist namp5zmes in reference namelist : Pisces mesozooplankton 543 586 READ ( numnatp_ref, namp5zmes, IOSTAT = ios, ERR = 901) 544 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp ismes in reference namelist' )545 ! 546 REWIND( numnatp_cfg ) ! Namelist namp ismes in configuration namelist : Pisces mesozooplankton587 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp5zmes in reference namelist' ) 588 ! 589 REWIND( numnatp_cfg ) ! Namelist namp5zmes in configuration namelist : Pisces mesozooplankton 547 590 READ ( numnatp_cfg, namp5zmes, IOSTAT = ios, ERR = 902 ) 548 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namp ismes in configuration namelist' )591 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namp5zmes in configuration namelist' ) 549 592 IF(lwm) WRITE ( numonp, namp5zmes ) 550 593 ! … … 628 671 END DO 629 672 673 ! Compute the difference between surface values and the mean values in the mesopelagic 674 ! domain 675 ! ------------------------------------------------------------------------------------ 630 676 DO jj = 1, jpj 631 677 DO ji = 1, jpi … … 634 680 END DO 635 681 END DO 636 ! 682 637 683 ! Computation of the migration depth based on the parameterization of 638 ! 684 ! Bianchi et al. (2013) 685 ! ------------------------------------------------------------------- 639 686 DO jj = 1, jpj 640 687 DO ji = 1, jpi … … 648 695 ! Computation of the corresponding jk indice 649 696 ! ------------------------------------------ 650 !651 697 DO jk = 1, jpk-1 652 698 DO jj = 1, jpj … … 665 711 ! that it falls above the OMZ 666 712 ! ----------------------------------------------------------------------- 667 !668 713 DO ji =1, jpi 669 714 DO jj = 1, jpj … … 685 730 INTEGER FUNCTION p5z_meso_alloc() 686 731 !!---------------------------------------------------------------------- 687 !! *** ROUTINE p 4z_meso_alloc ***732 !! *** ROUTINE p5z_meso_alloc *** 688 733 !!---------------------------------------------------------------------- 689 734 ! -
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p5zmicro.F90
r12349 r12537 97 97 ENDIF 98 98 ! 99 ! Use of excess carbon for metabolism 99 100 zmetexcess = 0.0 100 101 IF ( bmetexc ) zmetexcess = 1.0 … … 109 110 zproport = min(1.0, exp(-1.1 * MAX(0., ( sized(ji,jj,jk) - 1.8 ))**0.8 )) 110 111 zproport2 = sizen(ji,jj,jk)**(-0.54) 111 ! Michaelis-Menten mortality rates of microzooplankton 112 ! ----------------------------------------------------- 112 ! linear mortality of mesozooplankton 113 ! A michaelis menten modulation term is used to avoid extinction of 114 ! microzooplankton at very low food concentrations. Mortality is 115 ! enhanced in low O2 waters 116 ! ----------------------------------------------------------------- 113 117 zrespz = resrat * zfact * ( trb(ji,jj,jk,jpzoo) / ( xkmort + trb(ji,jj,jk,jpzoo) ) & 114 118 & + 3. * nitrfac(ji,jj,jk) ) 115 119 116 ! Zooplankton mortality. A square function has been selected with 117 ! no real reason except that it seems to be more stable and may mimic predation. 118 ! ------------------------------------------------------------------------------ 120 ! Zooplankton quadratic mortality. A square function has been selected with 121 ! to mimic predation and disease (density dependent mortality). It also tends 122 ! to stabilise the model 123 ! ------------------------------------------------------------------------- 119 124 ztortz = mzrat * 1.e6 * zfact * trb(ji,jj,jk,jpzoo) * (1. - nitrfac(ji,jj,jk)) 120 125 121 126 ! Computation of the abundance of the preys 122 127 ! A threshold can be specified in the namelist 123 ! -------------------------------------------- 128 ! Nanophyto and diatoms have a specific treatment with 129 ! teir preference decreasing with size. 130 ! -------------------------------------------------------- 124 131 zcompadi = zproport * MAX( ( trb(ji,jj,jk,jpdia) - xthreshdia ), 0.e0 ) 125 132 zcompaph = zproport2 * MAX( ( trb(ji,jj,jk,jpphy) - xthreshphy ), 0.e0 ) … … 128 135 zcompapoc = MAX( ( trb(ji,jj,jk,jppoc) - xthreshpoc ), 0.e0 ) 129 136 130 ! Microzooplankton grazing 131 ! ------------------------ 137 ! Microzooplankton grazing 138 ! The total amount of food is the sum of all preys accessible to mesozooplankton 139 ! multiplied by their food preference 140 ! A threshold can be specified in the namelist (xthresh). However, when food 141 ! concentration is close to this threshold, it is decreased to avoid the 142 ! accumulation of food in the mesozoopelagic domain 143 ! ------------------------------------------------------------------------------- 132 144 zfood = xprefn * zcompaph + xprefc * zcompapoc + xprefd * zcompadi & 133 145 & + xprefz * zcompaz + xprefp * zcompapi … … 136 148 zgraze = grazrat * xstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpzoo) * (1. - nitrfac(ji,jj,jk)) 137 149 138 ! An active switching parameterization is used here. 139 ! We don't use the KTW parameterization proposed by 140 ! Vallina et al. because it tends to produce to steady biomass 141 ! composition and the variance of Chl is too low as it grazes 142 ! too strongly on winning organisms. Thus, instead of a square 143 ! a 1.5 power value is used which decreases the pressure on the 144 ! most abundant species 145 ! ------------------------------------------------------------ 150 ! An active switching parameterization is used here. 151 ! We don't use the KTW parameterization proposed by 152 ! Vallina et al. because it tends to produce too steady biomass 153 ! composition and the variance of Chl is too low as it grazes 154 ! too strongly on winning organisms. We use a generalized 155 ! switching parameterization proposed by Morozov and 156 ! Petrovskii (2013) 157 ! ------------------------------------------------------------ 158 ! The width of the selection window is increased when preys 159 ! have low abundance, .i.e. zooplankton become less specific 160 ! to avoid starvation. 161 ! ---------------------------------------------------------- 146 162 zsigma = 1.0 - zdenom**2/(0.05**2+zdenom**2) 147 163 zsigma = 0.5 + 1.0*zsigma … … 189 205 zgrazing(ji,jj,jk) = zgraztotc 190 206 191 ! 192 ! 207 ! Stoichiometruc ratios of the food ingested by zooplanton 208 ! -------------------------------------------------------- 193 209 zgrasratf = (zgraztotf + rtrn) / ( zgraztotc + rtrn ) 194 210 zgrasratn = (zgraztotn + rtrn) / ( zgraztotc + rtrn ) 195 211 zgrasratp = (zgraztotp + rtrn) / ( zgraztotc + rtrn ) 196 212 197 ! Growth efficiency is made a function of the quality 198 ! and the quantity of the preys 199 ! --------------------------------------------------- 213 ! Mesozooplankton efficiency. 214 ! We adopt a formulation proposed by Mitra et al. (2007) 215 ! The gross growth efficiency is controled by the most limiting nutrient. 216 ! Growth is also further decreased when the food quality is poor. This is currently 217 ! hard coded : it can be decreased by up to 50% (zepsherq) 218 ! GGE can also be decreased when food quantity is high, zepsherf (Montagnes and 219 ! Fulton, 2012) 220 ! ----------------------------------------------------------------------------------- 200 221 zepshert = MIN( 1., zgrasratn/ no3rat3, zgrasratp/ po4rat3, zgrasratf / ferat3) 201 222 zbeta = MAX( 0., (epsher - epshermin) ) … … 204 225 zepsherv = zepsherf * zepshert * zepsherq 205 226 206 ! 207 ! 208 ! 227 ! Respiration of microzooplankton 228 ! Excess carbon in the food is used preferentially 229 ! ------------------------------------------------ 209 230 zexcess = zgraztotc * zepsherf * (1.0 - zepshert) * zmetexcess 210 231 zbasresb = MAX(0., zrespz - zexcess) … … 212 233 zrespirc = srespir * zepsherv * zgraztotc + zbasresb 213 234 214 ! 215 ! 216 ! 235 ! When excess carbon is used, the other elements in excess 236 ! are also used proportionally to their abundance 237 ! -------------------------------------------------------- 217 238 zexcess = ( zgrasratn/ no3rat3 - zepshert ) / ( 1.0 - zepshert + rtrn) 218 239 zbasresn = zbasresi * zexcess * zgrasratn … … 222 243 zbasresf = zbasresi * zexcess * zgrasratf 223 244 224 ! 225 ! 245 ! Voiding of the excessive elements as DOM 246 ! ---------------------------------------- 226 247 zgradoct = (1. - unassc - zepsherv) * zgraztotc - zbasresi 227 248 zgradont = (1. - unassn) * zgraztotn - zepsherv * no3rat3 * zgraztotc - zbasresn … … 229 250 zgrareft = (1. - unassc) * zgraztotf - zepsherv * ferat3 * zgraztotc - zbasresf 230 251 231 ! 232 ! 233 ! 234 ! 252 ! Since only semilabile DOM is represented in PISCES 253 ! part of DOM is in fact labile and is then released 254 ! as dissolved inorganic compounds (ssigma) 255 ! -------------------------------------------------- 235 256 zgradoc = zgradoct * ssigma 236 257 zgradon = zgradont * ssigma … … 241 262 zgraref = zgrareft 242 263 243 ! 244 ! 264 ! Defecation as a result of non assimilated products 265 ! -------------------------------------------------- 245 266 zgrapoc = zgraztotc * unassc 246 267 zgrapon = zgraztotn * unassn … … 248 269 zgrapof = zgraztotf * unassc 249 270 250 ! 251 ! 271 ! Addition of respiration to the release of inorganic nutrients 272 ! ------------------------------------------------------------- 252 273 zgrarem = zgrarem + zbasresi + zrespirc 253 274 zgraren = zgraren + zbasresn + zrespirc * no3rat3 … … 255 276 zgraref = zgraref + zbasresf + zrespirc * ferat3 256 277 257 ! 258 ! 278 ! Update of the TRA arrays 279 ! ------------------------ 259 280 tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + zgrarep 260 281 tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zgraren … … 296 317 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + ferat3 * ztortz + zgrapof - zgrazpof 297 318 ! 298 ! calcite production 319 ! Calcite production 320 ! Calcite remineralization due to zooplankton activity 321 ! part of the ingested calcite is dissolving in the acidic gut 322 ! ------------------------------------------------------------- 299 323 zprcaca = xfracal(ji,jj,jk) * zgraznc 300 324 prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo) … … 345 369 !! ** Purpose : Initialization of microzooplankton parameters 346 370 !! 347 !! ** Method : Read the namp iszoo namelist and check the parameters371 !! ** Method : Read the namp5zzoo namelist and check the parameters 348 372 !! called at the first timestep (nittrc000) 349 373 !! 350 !! ** input : Namelist namp iszoo374 !! ** input : Namelist namp5zzoo 351 375 !! 352 376 !!---------------------------------------------------------------------- … … 359 383 !!---------------------------------------------------------------------- 360 384 ! 361 REWIND( numnatp_ref ) ! Namelist namp iszoo in reference namelist : Pisces microzooplankton385 REWIND( numnatp_ref ) ! Namelist namp5zzoo in reference namelist : Pisces microzooplankton 362 386 READ ( numnatp_ref, namp5zzoo, IOSTAT = ios, ERR = 901) 363 387 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp5zzoo in reference namelist' ) 364 388 ! 365 REWIND( numnatp_cfg ) ! Namelist namp iszoo in configuration namelist : Pisces microzooplankton389 REWIND( numnatp_cfg ) ! Namelist namp5zzoo in configuration namelist : Pisces microzooplankton 366 390 READ ( numnatp_cfg, namp5zzoo, IOSTAT = ios, ERR = 902 ) 367 391 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namp5zzoo in configuration namelist' ) -
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p5zmort.F90
r11536 r12537 2 2 !!====================================================================== 3 3 !! *** MODULE p5zmort *** 4 !! TOP : PISCES Compute the mortality terms for phytoplankton4 !! TOP : PISCES-QUOTA Compute the mortality terms for phytoplankton 5 5 !!====================================================================== 6 6 !! History : 1.0 ! 2002 (O. Aumont) Original code … … 14 14 USE trc ! passive tracers common variables 15 15 USE sms_pisces ! PISCES Source Minus Sink variables 16 USE p4zlim 17 USE p5zlim ! Phytoplankton limitation terms 16 USE p4zlim ! Phytoplankton limitation terms (p4z) 17 USE p5zlim ! Phytoplankton limitation terms (p5z) 18 18 USE prtctl_trc ! print control for debugging 19 19 … … 21 21 PRIVATE 22 22 23 PUBLIC p5z_mort 24 PUBLIC p5z_mort_init 23 PUBLIC p5z_mort ! Called from p4zbio.F90 24 PUBLIC p5z_mort_init ! Called from trcini_pisces.F90 25 25 26 26 !! * Shared module variables 27 REAL(wp), PUBLIC :: wchln !:28 REAL(wp), PUBLIC :: wchlp !: 29 REAL(wp), PUBLIC :: wchld !: 30 REAL(wp), PUBLIC :: wchldm !: 31 REAL(wp), PUBLIC :: mpratn !:32 REAL(wp), PUBLIC :: mpratp !: 33 REAL(wp), PUBLIC :: mpratd !: 27 REAL(wp), PUBLIC :: wchln !! Quadratic mortality rate of nanophytoplankton 28 REAL(wp), PUBLIC :: wchlp !: Quadratic mortality rate of picophytoplankton 29 REAL(wp), PUBLIC :: wchld !: Quadratic mortality rate of diatoms 30 REAL(wp), PUBLIC :: wchldm !: Maximum quadratic mortality rate of diatoms 31 REAL(wp), PUBLIC :: mpratn !: Linear mortality rate of nanophytoplankton 32 REAL(wp), PUBLIC :: mpratp !: Linear mortality rate of picophytoplankton 33 REAL(wp), PUBLIC :: mpratd !: Linear mortality rate of diatoms 34 34 35 35 !!---------------------------------------------------------------------- … … 45 45 !! *** ROUTINE p5z_mort *** 46 46 !! 47 !! ** Purpose : Calls the different subroutine to initialize andcompute47 !! ** Purpose : Calls the different subroutine to compute 48 48 !! the different phytoplankton mortality terms 49 49 !! … … 82 82 DO ji = 1, jpi 83 83 zcompaph = MAX( ( trb(ji,jj,jk,jpphy) - 1e-9 ), 0.e0 ) 84 ! Squared mortality of Phyto similar to a sedimentation termduring85 ! 86 ! -----------------------------------------------------------------84 ! Quadratic mortality of nano due to aggregation during 85 ! blooms (Doney et al. 1996) 86 ! ----------------------------------------------------- 87 87 zrespp = wchln * 1.e6 * xstep * xdiss(ji,jj,jk) * zcompaph * trb(ji,jj,jk,jpphy) 88 88 89 ! Phytoplankton linear mortality 90 ! ------------------------------ 91 ztortp = mpratn * xstep * zcompaph 89 ! Phytoplankton linear mortality 90 ! A michaelis-menten like term is introduced to avoid 91 ! extinction of nanophyto in highly limited areas 92 ! ---------------------------------------------------- 93 ztortp = mpratn * xstep * zcompaphi * trb(ji,jj,jk,jpphy) / ( xkmort + trb(ji,jj,jk,jpphy) ) 92 94 zmortp = zrespp + ztortp 93 95 94 ! 96 ! Update the arrays TRA which contains the biological sources and sinks 95 97 96 98 zfactn = trb(ji,jj,jk,jpnph)/(trb(ji,jj,jk,jpphy)+rtrn) … … 103 105 tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) - zmortp * zfactch 104 106 tra(ji,jj,jk,jpnfe) = tra(ji,jj,jk,jpnfe) - zmortp * zfactfe 107 ! Production PIC particles due to mortality 105 108 zprcaca = xfracal(ji,jj,jk) * zmortp 106 !107 109 prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo) 108 110 ! … … 151 153 DO ji = 1, jpi 152 154 zcompaph = MAX( ( trb(ji,jj,jk,jppic) - 1e-9 ), 0.e0 ) 153 ! Squared mortality of Phyto similar to a sedimentation term during 154 ! blooms (Doney et al. 1996) 155 ! ----------------------------------------------------------------- 155 156 ! Quadratic mortality of pico due to aggregation during 157 ! blooms (Doney et al. 1996) 158 ! ----------------------------------------------------- 156 159 zrespp = wchlp * 1.e6 * xstep * xdiss(ji,jj,jk) * zcompaph * trb(ji,jj,jk,jppic) 157 160 158 ! Phytoplankton mortality 159 ztortp = mpratp * xstep * zcompaph 161 ! Phytoplankton linear mortality 162 ! A michaelis-menten like term is introduced to avoid 163 ! extinction of picophyto in highly limited areas 164 ! ---------------------------------------------------- 165 ztortp = mpratp * xstep * zcompaph * trb(ji,jj,jk,jppic) / ( xkmort + trb(ji,jj,jk,jppic) ) 160 166 zmortp = zrespp + ztortp 161 167 162 168 ! Update the arrays TRA which contains the biological sources and sinks 163 164 169 zfactn = trb(ji,jj,jk,jpnpi)/(trb(ji,jj,jk,jppic)+rtrn) 165 170 zfactp = trb(ji,jj,jk,jpppi)/(trb(ji,jj,jk,jppic)+rtrn) … … 225 230 zrespp2 = 1.e6 * xstep * ( wchld + wchldm * zlim1 ) * xdiss(ji,jj,jk) * zcompadi * trb(ji,jj,jk,jpdia) 226 231 227 ! Phytoplankton linear mortality 228 ! ------------------------------ 229 ztortp2 = mpratd * xstep * zcompadi 232 ! Phytoplankton linear mortality 233 ! A michaelis-menten like term is introduced to avoid 234 ! extinction of diatoms in highly limited areas 235 ! --------------------------------------------------- 236 ztortp2 = mpratd * xstep * zcompadi * trb(ji,jj,jk,jpdia) / ( xkmort + trb(ji,jj,jk,jpdia) ) 230 237 zmortp2 = zrespp2 + ztortp2 231 238 … … 273 280 !! *** ROUTINE p5z_mort_init *** 274 281 !! 275 !! ** Purpose : Initialization of phytoplankton parameters276 !! 277 !! ** Method : Read the namp ismort namelist and check the parameters282 !! ** Purpose : Initialization of phytoplankton mortality parameters 283 !! 284 !! ** Method : Read the namp5zmort namelist and check the parameters 278 285 !! called at the first timestep 279 286 !! 280 !! ** input : Namelist namp ismort287 !! ** input : Namelist namp5zmort 281 288 !! 282 289 !!---------------------------------------------------------------------- 283 INTEGER :: ios 290 INTEGER :: ios ! Local integer output status for namelist read 284 291 !! 285 292 NAMELIST/namp5zmort/ wchln, wchlp, wchld, wchldm, mpratn, mpratp, mpratd 286 293 !!---------------------------------------------------------------------- 287 294 288 REWIND( numnatp_ref ) ! Namelist namp ismort in reference namelist : Pisces phytoplankton295 REWIND( numnatp_ref ) ! Namelist namp5zmort in reference namelist : Pisces phytoplankton 289 296 READ ( numnatp_ref, namp5zmort, IOSTAT = ios, ERR = 901) 290 297 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp5zmort in reference namelist' ) 291 298 292 REWIND( numnatp_cfg ) ! Namelist namp ismort in configuration namelist : Pisces phytoplankton299 REWIND( numnatp_cfg ) ! Namelist namp5zmort in configuration namelist : Pisces phytoplankton 293 300 READ ( numnatp_cfg, namp5zmort, IOSTAT = ios, ERR = 902 ) 294 301 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namp5zmort in configuration namelist' ) -
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p5zprod.F90
r12496 r12537 238 238 END DO 239 239 240 ! Computation of the various production terms of nanophytoplankton 240 ! Computation of the various production and uptake terms of nanophytoplankton 241 ! Interactions between N and P are modeled according to the Chain Model 242 ! of Pahlow et al. (2009). Iron uptake is modeled following traditional 243 ! Droop kinetics. When the quota is approaching the maximum achievable 244 ! quota, uptake is downregulated according to a sigmoidal function 245 ! (power 2), as proposed by Flynn (2003) 246 ! --------------------------------------------------------------------------- 241 247 DO jk = 1, jpkm1 242 248 DO jj = 1, jpj … … 245 251 ! production terms for nanophyto. 246 252 zprorcan(ji,jj,jk) = zprbio(ji,jj,jk) * xlimphy(ji,jj,jk) * trb(ji,jj,jk,jpphy) * rfact2 247 ! size computation 253 254 ! Size computation 255 ! Size is made a function of the limitation of of phytoplankton growth 256 ! Strongly limited cells are supposed to be smaller. sizena is the 257 ! size at time step t+1 and is thus updated at the end of the 258 ! current time step 259 ! -------------------------------------------------------------------- 248 260 zlimfac = xlimphys(ji,jj,jk) * zprchln(ji,jj,jk) / ( zprmaxn(ji,jj,jk) + rtrn ) 249 261 zsizetmp = 1.0 + 1.3 * ( xsizern - 1.0 ) * zlimfac**3/(0.3 + zlimfac**3) 250 262 sizena(ji,jj,jk) = min(xsizern, max( sizena(ji,jj,jk), zsizetmp ) ) 251 ! Nutrient uptake terms263 ! Maximum potential uptake rate 252 264 zration = trb(ji,jj,jk,jpnph) / ( trb(ji,jj,jk,jpphy) + rtrn ) 253 265 zratiop = trb(ji,jj,jk,jppph) / ( trb(ji,jj,jk,jpphy) + rtrn ) … … 261 273 zpronewn(ji,jj,jk) = zpronmax * xnanono3(ji,jj,jk) 262 274 zproregn(ji,jj,jk) = zpronmax * xnanonh4(ji,jj,jk) 263 ! Uptake of phosphorus 275 ! Uptake of phosphorus and DOP 264 276 zrat = 1.0 - MIN( 1., zratiop / (xqpnmax(ji,jj,jk) + rtrn) ) 265 277 zmax = MAX(0., MIN(1., zrat**2 / (0.05**2 + zrat**2) ) ) … … 279 291 END DO 280 292 281 ! Computation of the various production terms of picophytoplankton 293 ! Computation of the various production and uptake terms of picophytoplankton 294 ! Interactions between N and P are modeled according to the Chain Model 295 ! of Pahlow et al. (2009). Iron uptake is modeled following traditional 296 ! Droop kinetics. When the quota is approaching the maximum achievable 297 ! quota, uptake is downregulated according to a sigmoidal function 298 ! (power 2), as proposed by Flynn (2003) 299 ! --------------------------------------------------------------------------- 282 300 DO jk = 1, jpkm1 283 301 DO jj = 1, jpj … … 287 305 zprorcap(ji,jj,jk) = zprpic(ji,jj,jk) * xlimpic(ji,jj,jk) * trb(ji,jj,jk,jppic) * rfact2 288 306 ! Size computation 307 ! Size is made a function of the limitation of of phytoplankton growth 308 ! Strongly limited cells are supposed to be smaller. sizepa is 309 ! size at time step t+1 and is thus updated at the end of the 310 ! current time step 311 ! -------------------------------------------------------------------- 289 312 zlimfac = zprchlp(ji,jj,jk) * xlimpics(ji,jj,jk) / ( zprmaxp(ji,jj,jk) + rtrn ) 290 313 zsizetmp = 1.0 + 1.3 * ( xsizerp - 1.0 ) * zlimfac**3/(0.3 + zlimfac**3) 291 314 sizepa(ji,jj,jk) = min(xsizerp, max( sizepa(ji,jj,jk), zsizetmp ) ) 292 ! Nutrient uptake315 ! Maximum potential uptake rate of nutrients 293 316 zration = trb(ji,jj,jk,jpnpi) / ( trb(ji,jj,jk,jppic) + rtrn ) 294 317 zratiop = trb(ji,jj,jk,jpppi) / ( trb(ji,jj,jk,jppic) + rtrn ) … … 320 343 END DO 321 344 322 ! Computation of the various production terms of diatoms 345 ! Computation of the various production and uptake terms of diatoms 346 ! Interactions between N and P are modeled according to the Chain Model 347 ! of Pahlow et al. (2009). Iron uptake is modeled following traditional 348 ! Droop kinetics. When the quota is approaching the maximum achievable 349 ! quota, uptake is downregulated according to a sigmoidal function 350 ! (power 2), as proposed by Flynn (2003) 351 ! --------------------------------------------------------------------------- 323 352 DO jk = 1, jpkm1 324 353 DO jj = 1, jpj … … 327 356 ! production terms for diatomees 328 357 zprorcad(ji,jj,jk) = zprdia(ji,jj,jk) * xlimdia(ji,jj,jk) * trb(ji,jj,jk,jpdia) * rfact2 329 ! size computation 358 ! Size computation 359 ! Size is made a function of the limitation of of phytoplankton growth 360 ! Strongly limited cells are supposed to be smaller. sizeda is 361 ! size at time step t+1 and is thus updated at the end of the 362 ! current time step. 363 ! -------------------------------------------------------------------- 330 364 zlimfac = zprchld(ji,jj,jk) * xlimdias(ji,jj,jk) / ( zprmaxd(ji,jj,jk) + rtrn ) 331 365 zsizetmp = 1.0 + 1.3 * ( xsizerd - 1.0 ) * zlimfac**3/(0.3 + zlimfac**3) 332 366 sizeda(ji,jj,jk) = min(xsizerd, max( sizeda(ji,jj,jk), zsizetmp ) ) 333 ! Nutrient uptake367 ! Maximum potential uptake rate of nutrients 334 368 zration = trb(ji,jj,jk,jpndi) / ( trb(ji,jj,jk,jpdia) + rtrn ) 335 369 zratiop = trb(ji,jj,jk,jppdi) / ( trb(ji,jj,jk,jpdia) + rtrn ) … … 361 395 END DO 362 396 397 ! Production of Chlorophyll. The formulation proposed by Geider et al. 398 ! is adopted here. 399 ! -------------------------------------------------------------------- 363 400 DO jk = 1, jpkm1 364 401 DO jj = 1, jpj … … 375 412 zprochlp = thetanpm * zprod / ( zpislopeadp(ji,jj,jk) * zpicotot + rtrn ) 376 413 zprochlp = MAX(zprochlp, chlcmin * 12. * zprorcap(ji,jj,jk) ) 377 ! production terms for diatom ees ( chlorophyll )414 ! production terms for diatoms ( chlorophyll ) 378 415 zdiattot = ediatm(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 379 416 zprod = rday * (zpronewd(ji,jj,jk) + zproregd(ji,jj,jk)) * zprchld(ji,jj,jk) * xlimdia(ji,jj,jk) … … 454 491 END DO 455 492 END DO 456 ! 493 494 ! Production and uptake of ligands by phytoplankton. This part is activated 495 ! when ln_ligand is set to .true. in the namelist. Ligand uptake is small 496 ! and based on the FeL model by Morel et al. (2008) and on the study of 497 ! Shaked and Lis (2012) 498 ! ------------------------------------------------------------------------- 457 499 IF( ln_ligand ) THEN 458 500 zpligprod1(:,:,:) = 0._wp ; zpligprod2(:,:,:) = 0._wp … … 463 505 zfeup = texcretn * zprofen(ji,jj,jk) + texcretd * zprofed(ji,jj,jk) + texcretp * zprofep(ji,jj,jk) 464 506 tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + zdocprod * ldocp & 465 & - zfeup * plig(ji,jj,jk) / ( rtrn + plig(ji,jj,jk) + 2.E3 * (1.0 - plig(ji,jj,jk) ) ) 507 & - zfeup * plig(ji,jj,jk) / ( rtrn + plig(ji,jj,jk) + 2.E3 * (1.0 - plig(ji,jj,jk) ) ) * lthet 466 508 zpligprod1(ji,jj,jk) = zdocprod * ldocp 467 zpligprod2(ji,jj,jk) = zfeup * plig(ji,jj,jk) * lthet 509 zpligprod2(ji,jj,jk) = zfeup * plig(ji,jj,jk) / ( rtrn + plig(ji,jj,jk) & 510 & + 2.E3 * (1.0 - plig(ji,jj,jk) ) ) * lthet 468 511 END DO 469 512 END DO 470 513 END DO 471 514 ENDIF 472 473 474 ! Total primary production per year475 515 476 516 ! Total primary production per year … … 490 530 CALL iom_put( "PPPHYP" , zw3d ) 491 531 ! 492 zw3d(:,:,:) = zprorcad(:,:,:) * zfact * tmask(:,:,:) ! primary production by diatom es532 zw3d(:,:,:) = zprorcad(:,:,:) * zfact * tmask(:,:,:) ! primary production by diatoms 493 533 CALL iom_put( "PPPHYD" , zw3d ) 494 534 ENDIF … … 500 540 CALL iom_put( "PPNEWP" , zw3d ) 501 541 ! 502 zw3d(:,:,:) = zpronewd(:,:,:) * zfact * tmask(:,:,:) ! new primary production by diatom es542 zw3d(:,:,:) = zpronewd(:,:,:) * zfact * tmask(:,:,:) ! new primary production by diatoms 503 543 CALL iom_put( "PPNEWD" , zw3d ) 504 544 ENDIF … … 508 548 ENDIF 509 549 IF( iom_use( "PFeN" ) .OR. iom_use( "PFeD" ) .OR. iom_use( "PFeP" ) ) THEN 510 zw3d(:,:,:) = zprofen(:,:,:) * zfact * tmask(:,:,:) ! biogenic iron productionby nanophyto550 zw3d(:,:,:) = zprofen(:,:,:) * zfact * tmask(:,:,:) ! biogenic iron uptake by nanophyto 511 551 CALL iom_put( "PFeN" , zw3d ) 512 552 ! 513 zw3d(:,:,:) = zprofep(:,:,:) * zfact * tmask(:,:,:) ! biogenic iron productionby picophyto553 zw3d(:,:,:) = zprofep(:,:,:) * zfact * tmask(:,:,:) ! biogenic iron uptake by picophyto 514 554 CALL iom_put( "PFeP" , zw3d ) 515 555 ! 516 zw3d(:,:,:) = zprofed(:,:,:) * zfact * tmask(:,:,:) ! biogenic iron production by diatomes556 zw3d(:,:,:) = zprofed(:,:,:) * zfact * tmask(:,:,:) ! biogenic iron uptake by diatoms 517 557 CALL iom_put( "PFeD" , zw3d ) 518 558 ENDIF 519 559 IF( iom_use( "LPRODP" ) ) THEN 520 560 zw3d(:,:,:) = zpligprod1(:,:,:) * 1e9 * zfact * tmask(:,:,:) 521 CALL iom_put( "LPRODP" , zw3d ) 561 CALL iom_put( "LPRODP" , zw3d ) ! Ligand production by phytoplankton 522 562 ENDIF 523 563 IF( iom_use( "LDETP" ) ) THEN 524 564 zw3d(:,:,:) = zpligprod2(:,:,:) * 1e9 * zfact * tmask(:,:,:) 525 CALL iom_put( "LDETP" , zw3d ) 565 CALL iom_put( "LDETP" , zw3d ) ! Uptake of ligands by phytoplankton 526 566 ENDIF 527 567 IF( iom_use( "Mumax" ) ) THEN … … 540 580 ENDIF 541 581 IF( iom_use( "LNlight" ) .OR. iom_use( "LDlight" ) .OR. iom_use( "LPlight" ) ) THEN 542 zw3d(:,:,:) = zprbio (:,:,:) / (zprmaxn(:,:,:) + rtrn) * tmask(:,:,:) ! light limitation term 582 zw3d(:,:,:) = zprbio (:,:,:) / (zprmaxn(:,:,:) + rtrn) * tmask(:,:,:) ! light limitation term of nanophytoplankton 543 583 CALL iom_put( "LNlight" , zw3d ) 544 584 ! 545 zw3d(:,:,:) = zprpic (:,:,:) / (zprmaxp(:,:,:) + rtrn) * tmask(:,:,:) ! light limitation term 585 zw3d(:,:,:) = zprpic (:,:,:) / (zprmaxp(:,:,:) + rtrn) * tmask(:,:,:) ! light limitation term of picophytoplankton 546 586 CALL iom_put( "LPlight" , zw3d ) 547 587 ! 548 zw3d(:,:,:) = zprdia (:,:,:) / (zprmaxd(:,:,:) + rtrn) * tmask(:,:,:) ! light limitation term 588 zw3d(:,:,:) = zprdia (:,:,:) / (zprmaxd(:,:,:) + rtrn) * tmask(:,:,:) ! light limitation term of diatoms 549 589 CALL iom_put( "LDlight" , zw3d ) 550 590 ENDIF … … 556 596 CALL iom_put( "MunetP" , zw3d ) 557 597 ! 558 zw3d(:,:,:) = zcroissd(:,:,:) * tmask(:,:,:) ! ! Realized growth rate for diatom es598 zw3d(:,:,:) = zcroissd(:,:,:) * tmask(:,:,:) ! ! Realized growth rate for diatoms 559 599 CALL iom_put( "MunetD" , zw3d ) 560 600 ! … … 584 624 !! ** Purpose : Initialization of phytoplankton production parameters 585 625 !! 586 !! ** Method : Read the namp isprod namelist and check the parameters626 !! ** Method : Read the namp5zprod namelist and check the parameters 587 627 !! called at the first timestep (nittrc000) 588 628 !! 589 !! ** input : Namelist namp isprod629 !! ** input : Namelist namp5zprod 590 630 !!---------------------------------------------------------------------- 591 INTEGER :: ios 631 INTEGER :: ios ! Local integer output status for namelist read 592 632 !! 593 633 NAMELIST/namp5zprod/ pislopen, pislopep, pisloped, excretn, excretp, excretd, & … … 595 635 !!---------------------------------------------------------------------- 596 636 597 REWIND( numnatp_ref ) ! Namelist namp isprod in reference namelist : Pisces phytoplankton production637 REWIND( numnatp_ref ) ! Namelist namp5zprod in reference namelist : Pisces phytoplankton production 598 638 READ ( numnatp_ref, namp5zprod, IOSTAT = ios, ERR = 901) 599 639 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp5zprod in reference namelist' ) 600 640 601 REWIND( numnatp_cfg ) ! Namelist namp isprod in configuration namelist : Pisces phytoplankton production641 REWIND( numnatp_cfg ) ! Namelist namp5zprod in configuration namelist : Pisces phytoplankton production 602 642 READ ( numnatp_cfg, namp5zprod, IOSTAT = ios, ERR = 902 ) 603 643 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namp5zprod in configuration namelist' ) -
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/par_pisces.F90
r10416 r12537 10 10 11 11 ! productive layer depth 12 INTEGER, PUBLIC :: jpkb 13 INTEGER, PUBLIC :: jpkbm1 12 INTEGER, PUBLIC :: jpkb !: first vertical layers where biology is active 13 INTEGER, PUBLIC :: jpkbm1 !: first vertical layers where biology is active 14 14 15 15 ! assign an index in trc arrays for each LOBSTER prognostic variables -
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/sms_pisces.F90
r12349 r12537 2 2 !!---------------------------------------------------------------------- 3 3 !! *** sms_pisces.F90 *** 4 !! TOP : PISCES Source Minus Sink variables 4 !! TOP : PISCES Source Minus Sink variables are declared and allocated 5 5 !!---------------------------------------------------------------------- 6 6 !! History : 1.0 ! 2000-02 (O. Aumont) original code … … 13 13 PUBLIC 14 14 15 INTEGER :: numnatp_ref = -1 !! Logical units for namelist pisces 16 INTEGER :: numnatp_cfg = -1 !! Logical units for namelist pisces 17 INTEGER :: numonp = -1 !! Logical unit for namelist pisces output 18 19 ! !: PISCES : silicon dependant half saturation 15 INTEGER :: numnatp_ref = -1 !: Logical units for namelist pisces 16 INTEGER :: numnatp_cfg = -1 !: Logical units for namelist pisces 17 INTEGER :: numonp = -1 !: Logical unit for namelist pisces output 20 18 21 19 !!* Model used … … 27 25 28 26 !!* Time variables 29 INTEGER :: nrdttrc !: ??? 30 REAL(wp) :: rfact , rfactr !: ??? 31 REAL(wp) :: rfact2, rfact2r !: ??? 32 REAL(wp) :: xstep !: Time step duration for biology 33 REAL(wp) :: ryyss !: number of seconds per year 34 REAL(wp) :: r1_ryyss !: inverse number of seconds per year 35 27 INTEGER :: nrdttrc !: ??? 28 REAL(wp) :: rfact , rfactr !: time step duration (in seconds) 29 REAL(wp) :: rfact2, rfact2r !: time step duration (in seconds) when timesplitting is activated for PISCES 30 REAL(wp) :: xstep !: Time step duration for biology 31 REAL(wp) :: ryyss !: number of seconds per year 32 REAL(wp) :: r1_ryyss !: inverse number of seconds per year 36 33 37 34 !!* Biological parameters 38 REAL(wp) :: rno3 !: ??? 39 REAL(wp) :: o2ut !: ??? 40 REAL(wp) :: po4r !: ??? 41 REAL(wp) :: rdenit !: ??? 42 REAL(wp) :: rdenita !: ??? 43 REAL(wp) :: o2nit !: ??? 44 REAL(wp) :: wsbio, wsbio2 !: ??? 45 REAL(wp) :: wsbio2max !: ??? 46 REAL(wp) :: wsbio2scale !: ??? 47 REAL(wp) :: xkmort !: ??? 48 REAL(wp) :: ferat3 !: ??? 49 REAL(wp) :: ldocp !: ??? 50 REAL(wp) :: ldocz !: ??? 51 REAL(wp) :: lthet !: ??? 52 REAL(wp) :: no3rat3 !: ??? 53 REAL(wp) :: po4rat3 !: ??? 54 35 REAL(wp) :: rno3 !: C/N stoichiometric ratio 36 REAL(wp) :: o2ut !: O2/N stoichiometric ratio for ammonification 37 REAL(wp) :: po4r !: C/P stoichiometric ratio 38 REAL(wp) :: rdenit !: C/N ratio for denitrification 39 REAL(wp) :: rdenita !: C/N ratio for denitrification 40 REAL(wp) :: o2nit !: O2/N ratio for nitrification 41 REAL(wp) :: wsbio, wsbio2 !: Sinking speeds of particles 42 REAL(wp) :: wsbio2max !: Maximum sinking speed of the largest particles 43 REAL(wp) :: wsbio2scale !: Length scale for the variations of wsbio2 44 REAL(wp) :: xkmort !: Mortality half-saturation constant 45 REAL(wp) :: ferat3 !: Fe/C in heterotrophic organisms 46 REAL(wp) :: ldocp !: Ligand production ratio during PP 47 REAL(wp) :: ldocz !: Ligand production ratio by grazing 48 REAL(wp) :: lthet !: Uptake of ligand by phytoplankton 49 REAL(wp) :: no3rat3 !: C/N ratio of zooplankton 50 REAL(wp) :: po4rat3 !: C/P ratio of zooplankton 55 51 56 52 !!* diagnostic parameters 57 REAL(wp) :: tpp 58 REAL(wp) :: t_oce_co2_exp 59 REAL(wp) :: t_oce_co2_flx 60 REAL(wp) :: t_oce_co2_flx_cum 61 REAL(wp) :: t_atm_co2_flx 53 REAL(wp) :: tpp !: total primary production 54 REAL(wp) :: t_oce_co2_exp !: total carbon export 55 REAL(wp) :: t_oce_co2_flx !: Total ocean carbon flux 56 REAL(wp) :: t_oce_co2_flx_cum !: Cumulative Total ocean carbon flux 57 REAL(wp) :: t_atm_co2_flx !: global mean of atmospheric pco2 62 58 63 59 !!* restoring 64 LOGICAL :: ln_pisdmp 65 INTEGER :: nn_pisdmp 60 LOGICAL :: ln_pisdmp !: restoring or not of nutrients to a mean value 61 INTEGER :: nn_pisdmp !: frequency of relaxation or not of nutrients to a mean value 66 62 67 63 !!* Mass conservation 68 LOGICAL :: ln_check_mass 69 LOGICAL 64 LOGICAL :: ln_check_mass !: Flag to check mass conservation 65 LOGICAL, PUBLIC :: ln_ironice !: boolean for Fe input from sea ice 70 66 71 67 !!* Biological fluxes for light : variables shared by pisces & lobster … … 75 71 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: etot_ndcy !: PAR over 24h in case of diurnal cycle 76 72 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: enano, ediat !: PAR for phyto, nano and diat 77 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: enanom, ediatm !: PAR for phyto, nano and diat73 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: enanom, ediatm !: mean PAR for phyto, nano and diat 78 74 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: epico !: PAR for pico 79 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: epicom !: PAR for pico75 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: epicom !: mean PAR for pico 80 76 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: emoy !: averaged PAR in the mixed layer 81 77 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: heup_01 !: Absolute euphotic layer depth 82 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: xksi !: LOBSTER : zooplakton closure78 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: xksi !: Half-saturation con,stant for diatoms 83 79 84 80 !!* Biological fluxes for primary production 85 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: xksimax !: ???81 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: xksimax !: Maximum half-saturation constant over the year (Si) 86 82 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: biron !: bioavailable fraction of iron 87 83 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: plig !: proportion of iron organically complexed … … 92 88 93 89 !!* SMS for the organic matter 94 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xfracal !: ??95 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: nitrfac !: ??96 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: nitrfac2 !: ??97 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: orem !: ??98 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xdiss !: ??90 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xfracal !: Fraction of nanophytoplankton that are calcifying organisms 91 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: nitrfac !: OMZ 92 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: nitrfac2 !: N depleted indice 93 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: orem !: oxic remineralisation 94 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xdiss !: Shear rate 99 95 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: prodcal !: Calcite production 100 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: prodpoc !: Calciteproduction101 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: conspoc !: Calcite production102 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: prodgoc !: Calciteproduction103 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: consgoc !: Calcite production96 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: prodpoc !: POC production 97 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: conspoc !: POC consumption 98 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: prodgoc !: GOC production 99 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: consgoc !: GOC consumption 104 100 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: blim !: bacterial production factor 105 101 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sizen !: size of nanophyto … … 111 107 112 108 !!* Variable for chemistry of the CO2 cycle 113 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ak13 !: ???114 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ak23 !: ???115 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: aksp !: ???116 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: hi !: ???117 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: excess !: ???109 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ak13 !: Carbonate chemistry constant 110 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ak23 !: Carbonate chemistry constant 111 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: aksp !: Solubility product of CaCO3 112 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: hi !: Proton concentration 113 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: excess !: CO3 saturation 118 114 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: aphscale !: 119 115 … … 139 135 !!---------------------------------------------------------------------- 140 136 ierr(:) = 0 141 !* Biological fluxes for light : shared variables for pisces & lobster142 137 ALLOCATE( etot(jpi,jpj,jpk), neln(jpi,jpj), heup(jpi,jpj), & 143 138 & heup_01(jpi,jpj) , xksi(jpi,jpj) , STAT=ierr(1) ) … … 145 140 146 141 IF( ln_p4z .OR. ln_p5z ) THEN 147 !* Biological fluxes for light 142 143 !* Optics 148 144 ALLOCATE( enano(jpi,jpj,jpk) , ediat(jpi,jpj,jpk) , & 149 145 & enanom(jpi,jpj,jpk) , ediatm(jpi,jpj,jpk), & 150 146 & etot_ndcy(jpi,jpj,jpk), emoy(jpi,jpj,jpk) , STAT=ierr(2) ) 151 147 152 !* Biological fluxes for primary production148 !* Biological SMS 153 149 ALLOCATE( xksimax(jpi,jpj) , biron(jpi,jpj,jpk) , STAT=ierr(3) ) 154 ! 155 ! * SMS for the organic matter150 151 ! Biological SMS 156 152 ALLOCATE( xfracal (jpi,jpj,jpk), orem(jpi,jpj,jpk) , & 157 & nitrfac(jpi,jpj,jpk) , nitrfac2(jpi,jpj,jpk), &153 & nitrfac(jpi,jpj,jpk) , nitrfac2(jpi,jpj,jpk), & 158 154 & prodcal(jpi,jpj,jpk) , xdiss (jpi,jpj,jpk), & 159 155 & prodpoc(jpi,jpj,jpk) , conspoc(jpi,jpj,jpk) , & … … 161 157 & blim (jpi,jpj,jpk) , STAT=ierr(4) ) 162 158 163 !* Variable for chemistry of the CO2 cycle164 ALLOCATE( ak13 (jpi,jpj,jpk) ,&159 !* Carbonate chemistry 160 ALLOCATE( ak13 (jpi,jpj,jpk) , & 165 161 & ak23(jpi,jpj,jpk) , aksp (jpi,jpj,jpk) , & 166 162 & hi (jpi,jpj,jpk) , excess(jpi,jpj,jpk) , & 167 163 & aphscale(jpi,jpj,jpk), STAT=ierr(5) ) 168 164 ! 169 !* Temperature depend ancy of SMS terms165 !* Temperature dependency of SMS terms 170 166 ALLOCATE( tgfunc (jpi,jpj,jpk) , tgfunc2(jpi,jpj,jpk), & 171 167 & tgfunc3(jpi,jpj,jpk) , STAT=ierr(6) ) 172 168 ! 173 !* Sink ong speed169 !* Sinking speed 174 170 ALLOCATE( wsbio3 (jpi,jpj,jpk) , wsbio4 (jpi,jpj,jpk), & 175 171 & STAT=ierr(7) ) 176 172 ! 173 !* Prognostic ligand 177 174 IF( ln_ligand ) THEN 178 175 ALLOCATE( plig(jpi,jpj,jpk) , STAT=ierr(8) ) … … 181 178 ! 182 179 IF( ln_p5z ) THEN 183 ! 180 ! PISCES-QUOTA specific part 184 181 ALLOCATE( epico(jpi,jpj,jpk) , epicom(jpi,jpj,jpk) , STAT=ierr(9) ) 185 182 -
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/trcini_pisces.F90
r12524 r12537 3 3 !! *** MODULE trcini_pisces *** 4 4 !! TOP : initialisation of the PISCES biochemical model 5 !! This module is for LOBSTER, PISCES and PISCES-QUOTA 5 6 !!====================================================================== 6 7 !! History : - ! 1988-07 (E. Maier-Reiner) Original code … … 37 38 !! 38 39 !! ** Purpose : Initialisation of the PISCES biochemical model 39 !!---------------------------------------------------------------------- 40 ! 40 !! Allocation of the dynamic arrays 41 !!---------------------------------------------------------------------- 42 ! 43 ! Read the PISCES namelist 41 44 CALL trc_nam_pisces 42 45 ! … … 54 57 !! ** Purpose : Initialisation of the PISCES biochemical model 55 58 !!---------------------------------------------------------------------- 56 USE p4zsms ! Main P4Z routine59 USE p4zsms ! Main P4Z routine 57 60 USE p4zche ! Chemical model 58 61 USE p4zsink ! vertical flux of particulate matter due to sinking … … 111 114 ierr = ierr + p4z_lim_alloc() 112 115 IF( ln_p4z ) THEN 116 ! PISCES part 113 117 ierr = ierr + p4z_prod_alloc() 114 118 ierr = ierr + p4z_meso_alloc() 115 119 ELSE 120 ! PISCES-QUOTA part 116 121 ierr = ierr + p5z_lim_alloc() 117 122 ierr = ierr + p5z_prod_alloc() … … 128 133 129 134 ! assign an index in trc arrays for each prognostic variables 135 ! This is based on the information read in the namelist_top 130 136 DO jn = 1, jptra 131 137 cltra = ctrcnm(jn) … … 177 183 ! Set biological ratios 178 184 ! --------------------- 179 rno3 = 16._wp / 122._wp 180 po4r = 1._wp / 122._wp 181 o2nit = 32._wp / 122._wp 182 o2ut = 133._wp / 122._wp 183 rdenit = ( ( o2ut + o2nit ) * 0.80 - rno3 - rno3 * 0.60 ) / rno3 184 rdenita = 3._wp / 5._wp 185 rno3 = 16._wp / 122._wp ! C/N 186 po4r = 1._wp / 122._wp ! C/P 187 o2nit = 32._wp / 122._wp ! O2/C for nitrification 188 o2ut = 133._wp / 122._wp ! O2/C for ammonification 189 rdenit = ( ( o2ut + o2nit ) * 0.80 - rno3 - rno3 * 0.60 ) / rno3 ! Denitrification 190 rdenita = 3._wp / 5._wp ! Denitrification 185 191 IF( ln_p5z ) THEN 186 no3rat3 = no3rat3 / rno3 187 po4rat3 = po4rat3 / po4r 192 no3rat3 = no3rat3 / rno3 ! C/N ratio in zooplankton 193 po4rat3 = po4rat3 / po4r ! C/P ratio in zooplankton 188 194 ENDIF 189 195 … … 250 256 CALL p4z_opt_init ! Optic: PAR in the water column 251 257 IF( ln_p4z ) THEN 258 ! PISCES part 252 259 CALL p4z_lim_init ! co-limitations by the various nutrients 253 260 CALL p4z_prod_init ! phytoplankton growth rate over the global ocean. 254 261 ELSE 262 ! PISCES-QUOTA part 255 263 CALL p5z_lim_init ! co-limitations by the various nutrients 256 264 CALL p5z_prod_init ! phytoplankton growth rate over the global ocean. -
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/trcnam_pisces.F90
r11536 r12537 34 34 !! *** trc_nam_pisces *** 35 35 !! 36 !! ** Purpose : read PISCES namelist 36 !! ** Purpose : read PISCES namelist. The parameters read here activate 37 !! different functionalities of PISCES : PISCES, PISCES-QUOTA 38 !! LOBSTER, variable ligands, sediment module 37 39 !! 38 !! ** input : file 'namelist.trc.sms' containing the following39 !! namelist: na text, natbio, natsms40 !! ** input : file 'namelist_pisces' containing the following 41 !! namelist: nampismod 40 42 !!---------------------------------------------------------------------- 41 43 INTEGER :: jl, jn … … 55 57 IF(lwm) CALL ctl_opn( numonp , 'output.namelist.pis' , 'UNKNOWN', 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE. ) 56 58 ! 57 REWIND( numnatp_ref ) ! Namelist nampis bioin reference namelist : Pisces variables59 REWIND( numnatp_ref ) ! Namelist nampismod in reference namelist : Pisces variables 58 60 READ ( numnatp_ref, nampismod, IOSTAT = ios, ERR = 901) 59 61 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampismod in reference namelist' ) 60 REWIND( numnatp_cfg ) ! Namelist nampis bioin configuration namelist : Pisces variables62 REWIND( numnatp_cfg ) ! Namelist nampismod in configuration namelist : Pisces variables 61 63 READ ( numnatp_cfg, nampismod, IOSTAT = ios, ERR = 902 ) 62 64 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'nampismod in configuration namelist' ) -
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/trcsms_pisces.F90
r10068 r12537 3 3 !! *** MODULE trcsms_pisces *** 4 4 !! TOP : PISCES Source Minus Sink manager 5 !! This module is for LOBSTER, PISCES and PISCES-QUOTA 5 6 !!====================================================================== 6 7 !! History : 1.0 ! 2004-03 (O. Aumont) Original code … … 30 31 !! 31 32 !! ** Purpose : Managment of the call to Biological sources and sinks 32 !! routines of PISCES or LOBSTER bio-model33 !! routines of PISCES/PISCES-QUOTA or LOBSTER bio-model 33 34 !! 34 35 !!--------------------------------------------------------------------- -
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/trcbc.F90
r11536 r12537 153 153 IF(trcdta_bdy(jn,ib)%cn_obc == 'frs' .AND. nn_trcdmp_bdy(ib) /= 0 ) & 154 154 & CALL ctl_stop( 'trc_bc_ini: Use FRS OR relaxation' ) 155 IF( .NOT.( 0 < nn_trcdmp_bdy(ib) .AND. nn_trcdmp_bdy(ib) <= 2 ) )&155 IF( .NOT.( 0 <= nn_trcdmp_bdy(ib) .AND. nn_trcdmp_bdy(ib) <= 2 ) ) & 156 156 & CALL ctl_stop( 'trc_bc_ini: Not a valid option for nn_trcdmp_bdy. Allowed: 0,1,2.' ) 157 157 END DO -
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/trcini.F90
r10817 r12537 235 235 IF( ln_trcdta ) CALL trc_dta_ini( jptra ) ! set initial tracers values 236 236 ! 237 IF( ln_my_trc )CALL trc_bc_ini ( jptra ) ! set tracers Boundary Conditions237 CALL trc_bc_ini ( jptra ) ! set tracers Boundary Conditions 238 238 ! 239 239 ! -
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/trcsms.F90
r10068 r12537 21 21 USE trcsms_my_trc ! MY_TRC tracers 22 22 USE prtctl_trc ! Print control for debbuging 23 USE trcbc , only : trc_bc 24 USE bdy_oce, only : ln_bdy 23 25 24 26 IMPLICIT NONE … … 55 57 IF( ln_my_trc ) CALL trc_sms_my_trc ( kt ) ! MY_TRC tracers 56 58 59 IF( ln_bdy ) CALL trc_bc ( kt ) 60 57 61 IF(ln_ctl) THEN ! print mean trends (used for debugging) 58 62 WRITE(charout, FMT="('sms ')")
Note: See TracChangeset
for help on using the changeset viewer.