Changeset 15459 for NEMO/trunk/src/TOP/PISCES/P4Z/p5zmeso.F90
- Timestamp:
- 2021-10-29T10:19:18+02:00 (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/trunk/src/TOP/PISCES/P4Z/p5zmeso.F90
r15090 r15459 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 26 PUBLIC p5z_meso_alloc ! called in trcini_pisces.F90 25 27 26 28 !! * Shared module variables … … 49 51 REAL(wp), PUBLIC :: srespir2 !: Active respiration 50 52 REAL(wp), PUBLIC :: grazflux !: mesozoo flux feeding rate 53 REAL(wp), PUBLIC :: xfracmig !: Fractional biomass of meso that performs DVM 54 REAL(wp), PUBLIC :: xsigma2 !: Width of the predation window 55 REAL(wp), PUBLIC :: xsigma2del !: Maximum width of the predation window at low food density 51 56 LOGICAL, PUBLIC :: bmetexc2 !: Use of excess carbon for respiration 57 LOGICAL , PUBLIC :: ln_dvm_meso !: Boolean to activate DVM of mesozooplankton 58 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: depmig !: DVM of mesozooplankton : migration depth 59 INTEGER , ALLOCATABLE, SAVE, DIMENSION(:,:) :: kmig !: Vertical indice of the the migration depth 52 60 53 61 !! * Substitutions 54 62 # include "do_loop_substitute.h90" 63 # include "domzgr_substitute.h90" 55 64 !!---------------------------------------------------------------------- 56 65 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 61 70 CONTAINS 62 71 63 SUBROUTINE p5z_meso( kt, knt, Kbb, K rhs )72 SUBROUTINE p5z_meso( kt, knt, Kbb, Kmm, Krhs ) 64 73 !!--------------------------------------------------------------------- 65 74 !! *** ROUTINE p5z_meso *** 66 75 !! 67 76 !! ** Purpose : Compute the sources/sinks for mesozooplankton 68 !! 69 !! ** Method : - ??? 77 !! This includes ingestion and assimilation, flux feeding 78 !! and mortality. We use an active prey switching 79 !! parameterization Morozov and Petrovskii (2013). 80 !! All living compartments and mesozooplankton 81 !! are potential preys of mesozooplankton as well as small 82 !! sinking particles 83 !! 70 84 !!--------------------------------------------------------------------- 71 85 INTEGER, INTENT(in) :: kt, knt ! ocean time step 72 INTEGER, INTENT(in) :: Kbb, Krhs ! time level indices 73 INTEGER :: ji, jj, jk 86 INTEGER, INTENT(in) :: Kbb, Kmm, Krhs ! time level indices 87 ! 88 INTEGER :: ji, jj, jk, jkt 74 89 REAL(wp) :: zcompadi, zcompaph, zcompapoc, zcompaz, zcompam, zcompames 75 REAL(wp) :: zgraze2, zdenom, zfact, zfood, zfoodlim, zproport 90 REAL(wp) :: zgraze2, zdenom, zfact, zfood, zfoodlim, zproport, zdep 76 91 REAL(wp) :: zmortzgoc, zfracc, zfracn, zfracp, zfracfe, zratio, zratio2 77 REAL(wp) :: zepsherf, zepshert, zepsher v, zrespirc, zrespirn, zrespirp, zbasresb, zbasresi92 REAL(wp) :: zepsherf, zepshert, zepsherq, zepsherv, zrespirc, zrespirn, zrespirp, zbasresb, zbasresi 78 93 REAL(wp) :: zgraztotc, zgraztotn, zgraztotp, zgraztotf, zbasresn, zbasresp, zbasresf 79 REAL(wp) :: zgradoc, zgradon, zgradop, zgratmp, zgradoct, zgradont, zgrareft, zgradopt 80 REAL(wp) :: zgrapoc, zgrapon, zgrapop, zgrapof, zprcaca, zmortz 81 REAL(wp) :: zexcess, zgrarem, zgraren, zgrarep, zgraref 94 REAL(wp) :: zgradoct, zgradont, zgrareft, zgradopt 95 REAL(wp) :: zprcaca, zmortz, zexcess 82 96 REAL(wp) :: zbeta, zrespz, ztortz, zgrasratp, zgrasratn, zgrasratf 83 97 REAL(wp) :: ztmp1, ztmp2, ztmp3, ztmp4, ztmp5, ztmptot … … 87 101 REAL(wp) :: zgrazfffp, zgrazfffg, zgrazffep, zgrazffeg 88 102 REAL(wp) :: zgrazffnp, zgrazffng, zgrazffpp, zgrazffpg 103 REAL(wp) :: zmigreltime, zrum, zcodel, zargu, zval, zmigthick 89 104 CHARACTER (len=25) :: charout 90 REAL(wp) :: zrfact2, zmetexcess 91 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrazing, zfezoo2, zz2ligprod 105 REAL(wp) :: zrfact2, zmetexcess, zsigma, zdiffdn 106 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrazing, zfezoo2 107 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrarem, zgraref, zgrapoc, zgrapof 108 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrarep, zgraren, zgrapon, zgrapop 109 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgradoc, zgradon, zgradop 110 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zgramigrem, zgramigref, zgramigpoc, zgramigpof 111 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zgramigrep, zgramigren, zgramigpop, zgramigpon 112 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zgramigdoc, zgramigdop, zgramigdon 113 92 114 93 115 !!--------------------------------------------------------------------- … … 95 117 IF( ln_timing ) CALL timing_start('p5z_meso') 96 118 ! 119 ! Initialization of local arrays 120 zgrazing(:,:,:) = 0._wp ; zfezoo2(:,:,:) = 0._wp 121 zgrarem (:,:,:) = 0._wp ; zgraren(:,:,:) = 0._wp 122 zgrarep (:,:,:) = 0._wp ; zgraref(:,:,:) = 0._wp 123 zgrapoc (:,:,:) = 0._wp ; zgrapon(:,:,:) = 0._wp 124 zgrapop (:,:,:) = 0._wp ; zgrapof(:,:,:) = 0._wp 125 zgradoc (:,:,:) = 0._wp ; zgradon(:,:,:) = 0._wp 126 zgradop (:,:,:) = 0._wp 127 ! 128 129 ! 130 ! Diurnal vertical migration of mesozooplankton 131 ! Computation of the migration depth 132 ! --------------------------------------------- 133 IF( ln_dvm_meso ) CALL p5z_meso_depmig( Kbb, Kmm ) 134 135 ! Use of excess carbon for metabolism 97 136 zmetexcess = 0.0 98 137 IF ( bmetexc2 ) zmetexcess = 1.0 … … 102 141 zfact = xstep * tgfunc2(ji,jj,jk) * zcompam 103 142 104 ! Michaelis-Menten mortality rates of mesozooplankton 105 ! --------------------------------------------------- 143 ! linear mortality of mesozooplankton 144 ! A michaelis menten modulation term is used to avoid extinction of 145 ! mesozooplankton at very low food concentrations 146 ! ----------------------------------------------------------------- 106 147 zrespz = resrat2 * zfact * ( tr(ji,jj,jk,jpmes,Kbb) / ( xkmort + tr(ji,jj,jk,jpmes,Kbb) ) & 107 148 & + 3. * nitrfac(ji,jj,jk) ) 108 149 109 ! Zooplankton mortality. A square function has been selected with 110 ! no real reason except that it seems to be more stable and may mimic predation 111 ! --------------------------------------------------------------- 150 ! Zooplankton quadratic mortality. A square function has been selected with 151 ! to mimic predation and disease (density dependent mortality). It also tends 152 ! to stabilise the model 153 ! ------------------------------------------------------------------------- 112 154 ztortz = mzrat2 * 1.e6 * zfact * tr(ji,jj,jk,jpmes,Kbb) * (1. - nitrfac(ji,jj,jk)) 113 155 … … 121 163 zcompames = MAX( ( tr(ji,jj,jk,jpmes,Kbb) - xthresh2mes ), 0.e0 ) 122 164 123 ! Mesozooplankton grazing 124 ! ------------------------ 165 ! Mesozooplankton grazing 166 ! The total amount of food is the sum of all preys accessible to mesozooplankton 167 ! multiplied by their food preference 168 ! A threshold can be specified in the namelist (xthresh2). However, when food 169 ! concentration is close to this threshold, it is decreased to avoid the 170 ! accumulation of food in the mesozoopelagic domain 171 ! ------------------------------------------------------------------------------- 125 172 zfood = xpref2d * zcompadi + xpref2z * zcompaz + xpref2n * zcompaph + xpref2c * zcompapoc & 126 173 & + xpref2m * zcompames … … 129 176 zgraze2 = grazrat2 * xstep * tgfunc2(ji,jj,jk) * tr(ji,jj,jk,jpmes,Kbb) * (1. - nitrfac(ji,jj,jk)) 130 177 131 ! An active switching parameterization is used here. 132 ! We don't use the KTW parameterization proposed by 133 ! Vallina et al. because it tends to produce to steady biomass 134 ! composition and the variance of Chl is too low as it grazes 135 ! too strongly on winning organisms. Thus, instead of a square 136 ! a 1.5 power value is used which decreases the pressure on the 137 ! most abundant species 138 ! ------------------------------------------------------------ 139 ztmp1 = xpref2n * zcompaph**1.5 140 ztmp2 = xpref2m * zcompames**1.5 141 ztmp3 = xpref2c * zcompapoc**1.5 142 ztmp4 = xpref2d * zcompadi**1.5 143 ztmp5 = xpref2z * zcompaz**1.5 178 ! An active switching parameterization is used here. 179 ! We don't use the KTW parameterization proposed by 180 ! Vallina et al. because it tends to produce too steady biomass 181 ! composition and the variance of Chl is too low as it grazes 182 ! too strongly on winning organisms. We use a generalized 183 ! switching parameterization proposed by Morozov and 184 ! Petrovskii (2013) 185 ! ------------------------------------------------------------ 186 ! The width of the selection window is increased when preys 187 ! have low abundance, .i.e. zooplankton become less specific 188 ! to avoid starvation. 189 ! ---------------------------------------------------------- 190 zsigma = 1.0 - zdenom**3/(0.1**3+zdenom**3) 191 zsigma = xsigma2 + xsigma2del * zsigma 192 ! Nanophytoplankton and diatoms are the only preys considered 193 ! to be close enough to have potential interference 194 ! ----------------------------------------------------------- 195 zdiffdn = exp( -ABS(log(3.0 * sizen(ji,jj,jk) / (5.0 * sized(ji,jj,jk) + rtrn )) )**2 / zsigma**2 ) 196 ztmp1 = xpref2n * zcompaph * ( zcompaph + zdiffdn * zcompadi ) / (1.0 + zdiffdn) 197 ztmp2 = xpref2m * zcompames**2 198 ztmp3 = xpref2c * zcompapoc**2 199 ztmp4 = xpref2d * zcompadi * ( zdiffdn * zcompadi + zcompaph ) / (1.0 + zdiffdn) 200 ztmp5 = xpref2z * zcompaz**2 144 201 ztmptot = ztmp1 + ztmp2 + ztmp3 + ztmp4 + ztmp5 + rtrn 145 202 ztmp1 = ztmp1 / ztmptot … … 166 223 zgrazpof = zgrazpoc * tr(ji,jj,jk,jpsfe,Kbb) / ( tr(ji,jj,jk,jppoc,Kbb) + rtrn) 167 224 168 ! Mesozooplankton flux feeding on GOC 169 ! ---------------------------------- 225 ! Mesozooplankton flux feeding on GOC and POC. The feeding pressure 226 ! is proportional to the flux 227 ! ------------------------------------------------------------------ 170 228 zgrazffeg = grazflux * xstep * wsbio4(ji,jj,jk) & 171 229 & * tgfunc2(ji,jj,jk) * tr(ji,jj,jk,jpgoc,Kbb) * tr(ji,jj,jk,jpmes,Kbb) & … … 183 241 zgraztotc = zgrazdc + zgrazz + zgraznc + zgrazm + zgrazpoc + zgrazffep + zgrazffeg 184 242 185 ! Compute the proportion of filter feeders 186 ! ---------------------------------------- 187 zproport = (zgrazffep + zgrazffeg)/(rtrn + zgraztotc) 243 ! Compute the proportion of filter feeders. It is assumed steady state. 244 ! --------------------------------------------------------------------- 245 zproport = 0._wp 246 IF( gdepw(ji,jj,jk+1,Kmm) > MAX(hmld(ji,jj), heup_01(ji,jj) ) ) THEN 247 zproport = (zgrazffep + zgrazffeg)/(rtrn + zgraztotc) 248 ENDIF 188 249 189 250 ! Compute fractionation of aggregates. It is assumed that … … 195 256 zfracc = zproport * grazflux * xstep * wsbio4(ji,jj,jk) & 196 257 & * tr(ji,jj,jk,jpgoc,Kbb) * tr(ji,jj,jk,jpmes,Kbb) & 197 & * ( 0. 2 + 3.8* zratio2 / ( 1.**2 + zratio2 ) )258 & * ( 0.4 + 3.6 * zratio2 / ( 1.**2 + zratio2 ) ) 198 259 zfracfe = zfracc * tr(ji,jj,jk,jpbfe,Kbb) / (tr(ji,jj,jk,jpgoc,Kbb) + rtrn) 199 260 zfracn = zfracc * tr(ji,jj,jk,jpgon,Kbb) / (tr(ji,jj,jk,jpgoc,Kbb) + rtrn) 200 261 zfracp = zfracc * tr(ji,jj,jk,jpgop,Kbb) / (tr(ji,jj,jk,jpgoc,Kbb) + rtrn) 201 262 202 zgrazffep = zproport * zgrazffep ; zgrazffeg = zproport * zgrazffeg 203 zgrazfffp = zproport * zgrazfffp ; zgrazfffg = zproport * zgrazfffg 204 zgrazffnp = zproport * zgrazffnp ; zgrazffng = zproport * zgrazffng 205 zgrazffpp = zproport * zgrazffpp ; zgrazffpg = zproport * zgrazffpg 263 ! Flux feeding is multiplied by the fractional biomass of flux feeders 264 zgrazffep = zproport * zgrazffep ; zgrazffeg = zproport * zgrazffeg 265 zgrazfffp = zproport * zgrazfffp ; zgrazfffg = zproport * zgrazfffg 266 zgrazffnp = zproport * zgrazffnp ; zgrazffng = zproport * zgrazffng 267 zgrazffpp = zproport * zgrazffpp ; zgrazffpg = zproport * zgrazffpg 268 zgrazdc = (1.0 - zproport) * zgrazdc ; zgraznc = (1.0 - zproport) * zgraznc 269 zgrazz = (1.0 - zproport) * zgrazz ; zgrazpoc = (1.0 - zproport) * zgrazpoc 270 zgrazm = (1.0 - zproport) * zgrazm 271 zgrazdn = (1.0 - zproport) * zgrazdn ; zgraznn = (1.0 - zproport) * zgraznn 272 zgrazpon = (1.0 - zproport) * zgrazpon 273 zgrazdp = (1.0 - zproport) * zgrazdp ; zgraznp = (1.0 - zproport) * zgraznp 274 zgrazpop = (1.0 - zproport) * zgrazpop 275 zgrazdf = (1.0 - zproport) * zgrazdf ; zgraznf = (1.0 - zproport) * zgraznf 276 zgrazpof = (1.0 - zproport) * zgrazpof 206 277 207 278 zgraztotc = zgrazdc + zgrazz + zgraznc + zgrazm + zgrazpoc + zgrazffep + zgrazffeg 208 zgraztotf = zgrazdf + zgraznf + ( zgrazz + zgrazm ) * ferat3+ zgrazpof &279 zgraztotf = zgrazdf + zgraznf + zgrazz * feratz + zgrazm * feratm + zgrazpof & 209 280 & + zgrazfffp + zgrazfffg 210 281 zgraztotn = zgrazdn + (zgrazm + zgrazz) * no3rat3 + zgraznn + zgrazpon & … … 213 284 & + zgrazffpp + zgrazffpg 214 285 215 216 286 ! Total grazing ( grazing by microzoo is already computed in p5zmicro ) 217 287 zgrazing(ji,jj,jk) = zgraztotc … … 223 293 zgrasratp = (zgraztotp + rtrn) / ( zgraztotc + rtrn ) 224 294 225 ! Growth efficiency is made a function of the quality 226 ! and the quantity of the preys 227 ! --------------------------------------------------- 228 zepshert = MIN( 1., zgrasratn/ no3rat3, zgrasratp/ po4rat3, zgrasratf / ferat3) 295 ! Mesozooplankton efficiency. 296 ! We adopt a formulation proposed by Mitra et al. (2007) 297 ! The gross growth efficiency is controled by the most limiting nutrient. 298 ! Growth is also further decreased when the food quality is poor. This is currently 299 ! hard coded : it can be decreased by up to 50% (zepsherq) 300 ! GGE can also be decreased when food quantity is high, zepsherf (Montagnes and 301 ! Fulton, 2012) 302 ! ----------------------------------------------------------------------------------- 303 zepshert = MIN( 1., zgrasratn/ no3rat3, zgrasratp/ po4rat3, zgrasratf / feratm) 229 304 zbeta = MAX(0., (epsher2 - epsher2min) ) 230 305 zepsherf = epsher2min + zbeta / ( 1.0 + 0.04E6 * 12. * zfood * zbeta ) 231 zepsherv = zepsherf * zepshert 306 zepsherq = 0.5 + (1.0 - 0.5) * zepshert * ( 1.0 + 1.0 ) / ( zepshert + 1.0 ) 307 zepsherv = zepsherf * zepshert * zepsherq 232 308 233 309 ! Respiration of mesozooplankton 234 310 ! Excess carbon in the food is used preferentially 235 ! ---------------- ------------------------------ 311 ! when bmetexc2 is set to .true. 312 ! ----------------------------------------------- 236 313 zexcess = zgraztotc * zepsherf * (1.0 - zepshert) * zmetexcess 237 314 zbasresb = MAX(0., zrespz - zexcess) … … 246 323 zexcess = ( zgrasratp/ po4rat3 - zepshert ) / ( 1.0 - zepshert + rtrn) 247 324 zbasresp = zbasresi * zexcess * zgrasratp 248 zexcess = ( zgrasratf/ ferat 3- zepshert ) / ( 1.0 - zepshert + rtrn)325 zexcess = ( zgrasratf/ feratm - zepshert ) / ( 1.0 - zepshert + rtrn) 249 326 zbasresf = zbasresi * zexcess * zgrasratf 250 327 … … 254 331 zgradont = (1. - unass2n) * zgraztotn - zepsherv * no3rat3 * zgraztotc - zbasresn 255 332 zgradopt = (1. - unass2p) * zgraztotp - zepsherv * po4rat3 * zgraztotc - zbasresp 256 zgrareft = (1. - unass2c) * zgraztotf - zepsherv * ferat3 * zgraztotc - zbasresf 257 ztmp1 = ( 1. - epsher2 - unass2c ) /( 1. - 0.8 * epsher2 ) * ztortz 258 zgradoc = (zgradoct + ztmp1) * ssigma2 259 zgradon = (zgradont + no3rat3 * ztmp1) * ssigma2 260 zgradop = (zgradopt + po4rat3 * ztmp1) * ssigma2 261 zgratmp = 0.2 * epsher2 /( 1. - 0.8 * epsher2 ) * ztortz 333 zgrareft = (1. - unass2c) * zgraztotf - zepsherv * feratm * zgraztotc - zbasresf 334 ztmp1 = (1. - epsher2 - unass2c) /( 1. - epsher2 ) * ztortz 335 336 zgradoc(ji,jj,jk) = (zgradoct + ztmp1) * ssigma2 337 zgradon(ji,jj,jk) = (zgradont + no3rat3 * ztmp1) * ssigma2 338 zgradop(ji,jj,jk) = (zgradopt + po4rat3 * ztmp1) * ssigma2 339 262 340 263 341 ! Since only semilabile DOM is represented in PISCES … … 265 343 ! as dissolved inorganic compounds (ssigma2) 266 344 ! -------------------------------------------------- 267 zgrarem = zgratmp +( zgradoct + ztmp1 ) * (1.0 - ssigma2)268 zgraren = no3rat3 * zgratmp +( zgradont + no3rat3 * ztmp1 ) * (1.0 - ssigma2)269 zgrarep = po4rat3 * zgratmp +( zgradopt + po4rat3 * ztmp1 ) * (1.0 - ssigma2)270 zgraref = zgrareft + ferat3 * ( ztmp1 + zgratmp )345 zgrarem(ji,jj,jk) = ( zgradoct + ztmp1 ) * (1.0 - ssigma2) 346 zgraren(ji,jj,jk) = ( zgradont + no3rat3 * ztmp1 ) * (1.0 - ssigma2) 347 zgrarep(ji,jj,jk) = ( zgradopt + po4rat3 * ztmp1 ) * (1.0 - ssigma2) 348 zgraref(ji,jj,jk) = zgrareft + feratm * ztmp1 271 349 272 350 ! Defecation as a result of non assimilated products 273 351 ! -------------------------------------------------- 274 zgrapoc = zgraztotc * unass2c + unass2c / ( 1. - 0.8 *epsher2 ) * ztortz275 zgrapon = zgraztotn * unass2n + no3rat3 * unass2n / ( 1. - 0.8 *epsher2 ) * ztortz276 zgrapop = zgraztotp * unass2p + po4rat3 * unass2p / ( 1. - 0.8 *epsher2 ) * ztortz277 zgrapof = zgraztotf * unass2c + ferat3 * unass2c / ( 1. - 0.8 *epsher2 ) * ztortz352 zgrapoc(ji,jj,jk) = zgraztotc * unass2c + unass2c / ( 1. - epsher2 ) * ztortz 353 zgrapon(ji,jj,jk) = zgraztotn * unass2n + no3rat3 * unass2n / ( 1. - epsher2 ) * ztortz 354 zgrapop(ji,jj,jk) = zgraztotp * unass2p + po4rat3 * unass2p / ( 1. - epsher2 ) * ztortz 355 zgrapof(ji,jj,jk) = zgraztotf * unass2c + feratm * unass2c / ( 1. - epsher2 ) * ztortz 278 356 279 357 ! Addition of respiration to the release of inorganic nutrients 280 358 ! ------------------------------------------------------------- 281 zgrarem = zgrarem + zbasresi + zrespirc 282 zgraren = zgraren + zbasresn + zrespirc * no3rat3 283 zgrarep = zgrarep + zbasresp + zrespirc * po4rat3 284 zgraref = zgraref + zbasresf + zrespirc * ferat3 359 zgrarem(ji,jj,jk) = zgrarem(ji,jj,jk) + zbasresi + zrespirc 360 zgraren(ji,jj,jk) = zgraren(ji,jj,jk) + zbasresn + zrespirc * no3rat3 361 zgrarep(ji,jj,jk) = zgrarep(ji,jj,jk) + zbasresp + zrespirc * po4rat3 362 zgraref(ji,jj,jk) = zgraref(ji,jj,jk) + zbasresf + zrespirc * feratm 363 285 364 286 365 ! Update the arrays TRA which contain the biological sources and 287 366 ! sinks 288 367 ! -------------------------------------------------------------- 289 tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) + zgrarep290 tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) + zgraren291 tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) + zgradoc292 !293 IF( ln_ligand ) THEN294 tr(ji,jj,jk,jplgw,Krhs) = tr(ji,jj,jk,jplgw,Krhs) + zgradoc * ldocz295 zz2ligprod(ji,jj,jk) = zgradoc * ldocz296 ENDIF297 !298 tr(ji,jj,jk,jpdon,Krhs) = tr(ji,jj,jk,jpdon,Krhs) + zgradon299 tr(ji,jj,jk,jpdop,Krhs) = tr(ji,jj,jk,jpdop,Krhs) + zgradop300 tr(ji,jj,jk,jpoxy,Krhs) = tr(ji,jj,jk,jpoxy,Krhs) - o2ut * zgrarem301 tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) + zgraref302 zfezoo2(ji,jj,jk) = zgraref303 tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) + zgrarem304 tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + rno3 * zgraren305 368 tr(ji,jj,jk,jpmes,Krhs) = tr(ji,jj,jk,jpmes,Krhs) + zepsherv * zgraztotc - zrespirc & 306 369 & - ztortz - zgrazm … … 324 387 tr(ji,jj,jk,jppon,Krhs) = tr(ji,jj,jk,jppon,Krhs) - zgrazpon - zgrazffnp + zfracn 325 388 tr(ji,jj,jk,jppop,Krhs) = tr(ji,jj,jk,jppop,Krhs) - zgrazpop - zgrazffpp + zfracp 326 tr(ji,jj,jk,jpgoc,Krhs) = tr(ji,jj,jk,jpgoc,Krhs) - zgrazffeg + zgrapoc - zfracc 327 prodgoc(ji,jj,jk) = prodgoc(ji,jj,jk) + zgrapoc 389 tr(ji,jj,jk,jpgoc,Krhs) = tr(ji,jj,jk,jpgoc,Krhs) - zgrazffeg - zfracc 328 390 consgoc(ji,jj,jk) = consgoc(ji,jj,jk) - zgrazffeg - zfracc 329 tr(ji,jj,jk,jpgon,Krhs) = tr(ji,jj,jk,jpgon,Krhs) - zgrazffng + zgrapon- zfracn330 tr(ji,jj,jk,jpgop,Krhs) = tr(ji,jj,jk,jpgop,Krhs) - zgrazffpg + zgrapop- zfracp391 tr(ji,jj,jk,jpgon,Krhs) = tr(ji,jj,jk,jpgon,Krhs) - zgrazffng - zfracn 392 tr(ji,jj,jk,jpgop,Krhs) = tr(ji,jj,jk,jpgop,Krhs) - zgrazffpg - zfracp 331 393 tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) - zgrazpof - zgrazfffp + zfracfe 332 tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) - zgrazfffg + zgrapof- zfracfe394 tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) - zgrazfffg - zfracfe 333 395 zfracal = tr(ji,jj,jk,jpcal,Kbb) / ( tr(ji,jj,jk,jpgoc,Kbb) + rtrn ) 334 396 zgrazcal = zgrazffeg * (1. - part2) * zfracal 335 397 336 ! calcite production 337 ! ------------------ 398 ! Calcite production 399 ! Calcite remineralization due to zooplankton activity 400 ! part2 of the ingested calcite is dissolving in the acidic gut 401 ! ------------------------------------------------------------- 338 402 zprcaca = xfracal(ji,jj,jk) * zgraznc 339 403 prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo) … … 343 407 tr(ji,jj,jk,jpcal,Krhs) = tr(ji,jj,jk,jpcal,Krhs) - zgrazcal + zprcaca 344 408 END_3D 409 410 411 ! Computation of the effect of DVM by mesozooplankton 412 ! This part is only activated if ln_dvm_meso is set to true 413 ! The parameterization has been published in Gorgues et al. (2019). 414 ! ----------------------------------------------------------------- 415 IF( ln_dvm_meso ) THEN 416 ALLOCATE( zgramigrem(jpi,jpj), zgramigref(jpi,jpj), zgramigpoc(jpi,jpj), zgramigpof(jpi,jpj) ) 417 ALLOCATE( zgramigrep(jpi,jpj), zgramigren(jpi,jpj), zgramigpop(jpi,jpj), zgramigpon(jpi,jpj) ) 418 ALLOCATE( zgramigdoc(jpi,jpj), zgramigdon(jpi,jpj), zgramigdop(jpi,jpj) ) 419 zgramigrem(:,:) = 0.0 ; zgramigref(:,:) = 0.0 420 zgramigrep(:,:) = 0.0 ; zgramigren(:,:) = 0.0 421 zgramigpoc(:,:) = 0.0 ; zgramigpof(:,:) = 0.0 422 zgramigpop(:,:) = 0.0 ; zgramigpon(:,:) = 0.0 423 zgramigdoc(:,:) = 0.0 ; zgramigdon(:,:) = 0.0 424 zgramigdop(:,:) = 0.0 425 426 ! Compute the amount of materials that will go into vertical migration 427 ! This fraction is sumed over the euphotic zone and is removed from 428 ! the fluxes driven by mesozooplankton in the euphotic zone. 429 ! -------------------------------------------------------------------- 430 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 431 zmigreltime = (1. - strn(ji,jj)) 432 IF( gdept(ji,jj,jk,Kmm) <= heup(ji,jj) ) THEN 433 zmigthick = e3t(ji,jj,jk,Kmm) * tmask(ji,jj,jk) * ( 1. - zmigreltime ) 434 zgramigrem(ji,jj) = zgramigrem(ji,jj) + xfracmig * zgrarem(ji,jj,jk) * zmigthick 435 zgramigrep(ji,jj) = zgramigrep(ji,jj) + xfracmig * zgrarep(ji,jj,jk) * zmigthick 436 zgramigren(ji,jj) = zgramigren(ji,jj) + xfracmig * zgraren(ji,jj,jk) * zmigthick 437 zgramigref(ji,jj) = zgramigref(ji,jj) + xfracmig * zgraref(ji,jj,jk) * zmigthick 438 zgramigpoc(ji,jj) = zgramigpoc(ji,jj) + xfracmig * zgrapoc(ji,jj,jk) * zmigthick 439 zgramigpop(ji,jj) = zgramigpop(ji,jj) + xfracmig * zgrapop(ji,jj,jk) * zmigthick 440 zgramigpon(ji,jj) = zgramigpon(ji,jj) + xfracmig * zgrapon(ji,jj,jk) * zmigthick 441 zgramigpof(ji,jj) = zgramigpof(ji,jj) + xfracmig * zgrapof(ji,jj,jk) * zmigthick 442 zgramigdoc(ji,jj) = zgramigdoc(ji,jj) + xfracmig * zgradoc(ji,jj,jk) * zmigthick 443 zgramigdop(ji,jj) = zgramigdop(ji,jj) + xfracmig * zgradop(ji,jj,jk) * zmigthick 444 zgramigdon(ji,jj) = zgramigdon(ji,jj) + xfracmig * zgradon(ji,jj,jk) * zmigthick 445 446 zgrarem(ji,jj,jk) = zgrarem(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 447 zgrarep(ji,jj,jk) = zgrarep(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 448 zgraren(ji,jj,jk) = zgraren(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 449 zgraref(ji,jj,jk) = zgraref(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 450 zgrapoc(ji,jj,jk) = zgrapoc(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 451 zgrapop(ji,jj,jk) = zgrapop(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 452 zgrapon(ji,jj,jk) = zgrapon(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 453 zgrapof(ji,jj,jk) = zgrapof(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 454 zgradoc(ji,jj,jk) = zgradoc(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 455 zgradop(ji,jj,jk) = zgradop(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 456 zgradon(ji,jj,jk) = zgradon(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 457 ENDIF 458 END_3D 459 460 ! The inorganic and organic fluxes induced by migrating organisms are added at the 461 ! the migration depth (corresponding indice is set by kmig) 462 ! -------------------------------------------------------------------------------- 463 DO_2D( nn_hls, nn_hls, nn_hls, nn_hls ) 464 IF( tmask(ji,jj,1) == 1. ) THEN 465 jkt = kmig(ji,jj) 466 zdep = 1. / e3t(ji,jj,jkt,Kmm) 467 zgrarem(ji,jj,jkt) = zgrarem(ji,jj,jkt) + zgramigrem(ji,jj) * zdep 468 zgrarep(ji,jj,jkt) = zgrarep(ji,jj,jkt) + zgramigrep(ji,jj) * zdep 469 zgraren(ji,jj,jkt) = zgraren(ji,jj,jkt) + zgramigren(ji,jj) * zdep 470 zgraref(ji,jj,jkt) = zgraref(ji,jj,jkt) + zgramigref(ji,jj) * zdep 471 zgrapoc(ji,jj,jkt) = zgrapoc(ji,jj,jkt) + zgramigpoc(ji,jj) * zdep 472 zgrapop(ji,jj,jkt) = zgrapop(ji,jj,jkt) + zgramigpop(ji,jj) * zdep 473 zgrapon(ji,jj,jkt) = zgrapon(ji,jj,jkt) + zgramigpon(ji,jj) * zdep 474 zgrapof(ji,jj,jkt) = zgrapof(ji,jj,jkt) + zgramigpof(ji,jj) * zdep 475 zgradoc(ji,jj,jkt) = zgradoc(ji,jj,jkt) + zgramigdoc(ji,jj) * zdep 476 zgradop(ji,jj,jkt) = zgradop(ji,jj,jkt) + zgramigdop(ji,jj) * zdep 477 zgradon(ji,jj,jkt) = zgradon(ji,jj,jkt) + zgramigdon(ji,jj) * zdep 478 ENDIF 479 END_2D 480 ! 481 ! Deallocate temporary variables 482 ! ------------------------------ 483 DEALLOCATE( zgramigrem, zgramigref, zgramigpoc, zgramigpof ) 484 DEALLOCATE( zgramigrep, zgramigren, zgramigpop, zgramigpon ) 485 DEALLOCATE( zgramigdoc, zgramigdon, zgramigdop ) 486 ! End of the ln_dvm_meso part 487 ENDIF 488 489 ! Update the arrays TRA which contain the biological sources and sinks 490 ! This only concerns the variables which are affected by DVM (inorganic 491 ! nutrients, DOC agands, and particulate organic carbon). 492 ! --------------------------------------------------------------------- 493 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 494 tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) + zgrarep(ji,jj,jk) 495 tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) + zgraren(ji,jj,jk) 496 tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) + zgradoc(ji,jj,jk) 497 ! 498 IF( ln_ligand ) & 499 & tr(ji,jj,jk,jplgw,Krhs) = tr(ji,jj,jk,jplgw,Krhs) + zgradoc(ji,jj,jk) * ldocz 500 ! 501 tr(ji,jj,jk,jpdon,Krhs) = tr(ji,jj,jk,jpdon,Krhs) + zgradon(ji,jj,jk) 502 tr(ji,jj,jk,jpdop,Krhs) = tr(ji,jj,jk,jpdop,Krhs) + zgradop(ji,jj,jk) 503 tr(ji,jj,jk,jpoxy,Krhs) = tr(ji,jj,jk,jpoxy,Krhs) - o2ut * zgrarem(ji,jj,jk) 504 tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) + zgraref(ji,jj,jk) 505 zfezoo2(ji,jj,jk) = zgraref(ji,jj,jk) 506 tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) + zgrarem(ji,jj,jk) 507 tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + rno3 * zgraren(ji,jj,jk) 508 tr(ji,jj,jk,jpgoc,Krhs) = tr(ji,jj,jk,jpgoc,Krhs) + zgrapoc(ji,jj,jk) 509 prodgoc(ji,jj,jk) = prodgoc(ji,jj,jk) + zgrapoc(ji,jj,jk) 510 tr(ji,jj,jk,jpgon,Krhs) = tr(ji,jj,jk,jpgon,Krhs) + zgrapon(ji,jj,jk) 511 tr(ji,jj,jk,jpgop,Krhs) = tr(ji,jj,jk,jpgop,Krhs) + zgrapop(ji,jj,jk) 512 tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) + zgrapof(ji,jj,jk) 513 END_3D 345 514 ! 346 515 IF( lk_iomput .AND. knt == nrdttrc ) THEN 347 CALL iom_put( "PCAL" , prodcal(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:) ) ! Calcite production 348 IF( iom_use("GRAZ2") ) THEN ! Total grazing of phyto by zooplankton 349 zgrazing(:,:,jpk) = 0._wp ; CALL iom_put( "GRAZ2" , zgrazing(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:) ) 350 ENDIF 351 IF( iom_use("FEZOO2") ) THEN 352 zfezoo2 (:,:,jpk) = 0._wp ; CALL iom_put( "FEZOO2", zfezoo2(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) ) 353 ENDIF 354 IF( ln_ligand ) THEN 355 zz2ligprod(:,:,jpk) = 0._wp ; CALL iom_put( "LPRODZ2", zz2ligprod(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) ) 356 ENDIF 516 CALL iom_put( "PCAL" , prodcal(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:) ) ! Calcite production 517 CALL iom_put( "GRAZ2" , zgrazing(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:) ) ! Total grazing of phyto by zoo 518 CALL iom_put( "FEZOO2", zfezoo2(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) ) 519 IF( ln_ligand ) & 520 & CALL iom_put( "LPRODZ2", zgradoc(:,:,:) * ldocz * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) ) 357 521 ENDIF 358 522 ! … … 374 538 !! ** Purpose : Initialization of mesozooplankton parameters 375 539 !! 376 !! ** Method : Read the namp ismes namelist and check the parameters540 !! ** Method : Read the namp5zmes namelist and check the parameters 377 541 !! called at the first timestep (nittrc000) 378 542 !! 379 !! ** input : Namelist namp ismes543 !! ** input : Namelist namp5zmes 380 544 !! 381 545 !!---------------------------------------------------------------------- 382 INTEGER :: ios 546 INTEGER :: ios ! Local integer output status for namelist read 383 547 !! 384 548 NAMELIST/namp5zmes/part2, bmetexc2, grazrat2, resrat2, mzrat2, xpref2c, xpref2n, xpref2z, & 385 549 & xpref2m, xpref2d, xthresh2dia, xthresh2phy, xthresh2zoo, xthresh2poc, & 386 550 & xthresh2mes, xthresh2, xkgraz2, epsher2, epsher2min, ssigma2, unass2c, & 387 & unass2n, unass2p, srespir2, grazflux551 & unass2n, unass2p, srespir2, xsigma2, xsigma2del, grazflux, ln_dvm_meso, xfracmig 388 552 !!---------------------------------------------------------------------- 389 553 ! 390 554 READ ( numnatp_ref, namp5zmes, IOSTAT = ios, ERR = 901) 391 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp ismes in reference namelist' )555 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp5zmes in reference namelist' ) 392 556 ! 393 557 READ ( numnatp_cfg, namp5zmes, IOSTAT = ios, ERR = 902 ) 394 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namp ismes in configuration namelist' )558 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namp5zmes in configuration namelist' ) 395 559 IF(lwm) WRITE ( numonp, namp5zmes ) 396 560 ! … … 424 588 WRITE(numout,*) ' half sturation constant for grazing 2 xkgraz2 = ', xkgraz2 425 589 WRITE(numout,*) ' Use excess carbon for respiration bmetexc2 = ', bmetexc2 590 WRITE(numout,*) ' Width of the grazing window xsigma2 =', xsigma2 591 WRITE(numout,*) ' Maximum additional width of the grazing window xsigma2del =', xsigma2del 592 WRITE(numout,*) ' Diurnal vertical migration of mesozoo. ln_dvm_meso =', ln_dvm_meso 593 WRITE(numout,*) ' Fractional biomass of meso that performs DVM xfracmig =', xfracmig 426 594 ENDIF 427 595 ! 428 596 END SUBROUTINE p5z_meso_init 597 598 SUBROUTINE p5z_meso_depmig( Kbb, Kmm ) 599 !!---------------------------------------------------------------------- 600 !! *** ROUTINE p4z_meso_depmig *** 601 !! 602 !! ** Purpose : Computation the migration depth of mesozooplankton 603 !! 604 !! ** Method : Computes the DVM depth of mesozooplankton from oxygen 605 !! temperature and chlorophylle following the parameterization 606 !! proposed by Bianchi et al. (2013) 607 !!---------------------------------------------------------------------- 608 INTEGER, INTENT(in) :: Kbb, kmm ! time level indices 609 ! 610 INTEGER :: ji, jj, jk 611 ! 612 REAL(wp) :: ztotchl, z1dep 613 REAL(wp), DIMENSION(jpi,jpj) :: oxymoy, tempmoy, zdepmoy 614 615 !!--------------------------------------------------------------------- 616 ! 617 IF( ln_timing == 1 ) CALL timing_start('p5z_meso_zdepmig') 618 ! 619 oxymoy(:,:) = 0. 620 tempmoy(:,:) = 0. 621 zdepmoy(:,:) = 0. 622 depmig (:,:) = 5. 623 kmig (:,:) = 1 624 ! 625 626 ! Compute the averaged values of oxygen, temperature over the domain 627 ! 150m to 500 m depth. 628 ! ------------------------------------------------------------------ 629 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpk ) 630 IF( tmask(ji,jj,jk) == 1.) THEN 631 IF( gdept(ji,jj,jk,Kmm) >= 150. .AND. gdept(ji,jj,jk,kmm) <= 500.) THEN 632 oxymoy(ji,jj) = oxymoy(ji,jj) + tr(ji,jj,jk,jpoxy,Kbb) * 1E6 * e3t(ji,jj,jk,Kmm) 633 tempmoy(ji,jj) = tempmoy(ji,jj) + ts(ji,jj,jk,jp_tem,kmm) * e3t(ji,jj,jk,kmm) 634 zdepmoy(ji,jj) = zdepmoy(ji,jj) + e3t(ji,jj,jk,Kmm) 635 ENDIF 636 ENDIF 637 END_3D 638 639 ! Compute the difference between surface values and the mean values in the mesopelagic 640 ! domain 641 ! ------------------------------------------------------------------------------------ 642 DO_2D( nn_hls, nn_hls, nn_hls, nn_hls ) 643 z1dep = 1. / ( zdepmoy(ji,jj) + rtrn ) 644 oxymoy(ji,jj) = tr(ji,jj,1,jpoxy,Kbb) * 1E6 - oxymoy(ji,jj) * z1dep 645 tempmoy(ji,jj) = ts(ji,jj,1,jp_tem,Kmm) - tempmoy(ji,jj) * z1dep 646 END_2D 647 ! 648 ! Computation of the migration depth based on the parameterization of 649 ! Bianchi et al. (2013) 650 ! ------------------------------------------------------------------- 651 DO_2D( nn_hls, nn_hls, nn_hls, nn_hls ) 652 IF( tmask(ji,jj,1) == 1. ) THEN 653 ztotchl = ( tr(ji,jj,1,jppch,Kbb) + tr(ji,jj,1,jpnch,Kbb) + tr(ji,jj,1,jpdch,Kbb) ) * 1E6 654 depmig(ji,jj) = 398. - 0.56 * oxymoy(ji,jj) -115. * log10(ztotchl) + 0.36 * hmld(ji,jj) -2.4 * tempmoy(ji,jj) 655 ENDIF 656 END_2D 657 658 ! Computation of the corresponding jk indice 659 ! ------------------------------------------ 660 DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1 ) 661 IF( depmig(ji,jj) >= gdepw(ji,jj,jk,Kmm) .AND. depmig(ji,jj) < gdepw(ji,jj,jk+1,Kmm) ) THEN 662 kmig(ji,jj) = jk 663 ENDIF 664 END_3D 665 ! 666 ! Correction of the migration depth and indice based on O2 levels 667 ! If O2 is too low, imposing a migration depth at this low O2 levels 668 ! would lead to negative O2 concentrations (respiration while O2 is close 669 ! to 0. Thus, to avoid that problem, the migration depth is adjusted so 670 ! that it falls above the OMZ 671 ! ----------------------------------------------------------------------- 672 DO_2D( nn_hls, nn_hls, nn_hls, nn_hls ) 673 IF( tr(ji,jj,kmig(ji,jj),jpoxy,Kbb) < 5E-6 ) THEN 674 DO jk = kmig(ji,jj),1,-1 675 IF( tr(ji,jj,jk,jpoxy,Kbb) >= 5E-6 .AND. tr(ji,jj,jk+1,jpoxy,Kbb) < 5E-6) THEN 676 kmig(ji,jj) = jk 677 depmig(ji,jj) = gdept(ji,jj,jk,Kmm) 678 ENDIF 679 END DO 680 ENDIF 681 END_2D 682 ! 683 IF( ln_timing ) CALL timing_stop('p5z_meso_depmig') 684 ! 685 END SUBROUTINE p5z_meso_depmig 686 687 INTEGER FUNCTION p5z_meso_alloc() 688 !!---------------------------------------------------------------------- 689 !! *** ROUTINE p5z_meso_alloc *** 690 !!---------------------------------------------------------------------- 691 ! 692 ALLOCATE( depmig(jpi,jpj), kmig(jpi,jpj), STAT= p5z_meso_alloc ) 693 ! 694 IF( p5z_meso_alloc /= 0 ) CALL ctl_stop( 'STOP', 'p5z_meso_alloc : failed to allocate arrays.' ) 695 ! 696 END FUNCTION p5z_meso_alloc 429 697 430 698 !!======================================================================
Note: See TracChangeset
for help on using the changeset viewer.