- Timestamp:
- 2020-09-14T17:40:34+02:00 (4 years ago)
- Location:
- NEMO/branches/2019/dev_r11351_fldread_with_XIOS
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r11351_fldread_with_XIOS
- Property svn:externals
-
old new 3 3 ^/utils/build/mk@HEAD mk 4 4 ^/utils/tools@HEAD tools 5 ^/vendors/AGRIF/dev @HEADext/AGRIF5 ^/vendors/AGRIF/dev_r12970_AGRIF_CMEMS ext/AGRIF 6 6 ^/vendors/FCM@HEAD ext/FCM 7 7 ^/vendors/IOIPSL@HEAD ext/IOIPSL 8 9 # SETTE 10 ^/utils/CI/sette@13382 sette
-
- Property svn:externals
-
NEMO/branches/2019/dev_r11351_fldread_with_XIOS/src/TOP/PISCES/P4Z/p5zmicro.F90
r10362 r13463 18 18 USE p5zlim ! Phytoplankton limitation terms 19 19 USE iom ! I/O manager 20 USE prtctl _trc! print control for debugging20 USE prtctl ! print control for debugging 21 21 22 22 IMPLICIT NONE … … 52 52 LOGICAL, PUBLIC :: bmetexc !: Use of excess carbon for respiration 53 53 54 !! * Substitutions 55 # include "do_loop_substitute.h90" 54 56 !!---------------------------------------------------------------------- 55 57 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 60 62 CONTAINS 61 63 62 SUBROUTINE p5z_micro( kt, knt )64 SUBROUTINE p5z_micro( kt, knt, Kbb, Krhs ) 63 65 !!--------------------------------------------------------------------- 64 66 !! *** ROUTINE p5z_micro *** … … 70 72 INTEGER, INTENT(in) :: kt ! ocean time step 71 73 INTEGER, INTENT(in) :: knt 74 INTEGER, INTENT(in) :: Kbb, Krhs ! time level indices 72 75 ! 73 76 INTEGER :: ji, jj, jk … … 84 87 REAL(wp) :: zgrazdc, zgrazdn, zgrazdp, zgrazdf, zgraznf, zgrazz 85 88 REAL(wp) :: zgrazpc, zgrazpn, zgrazpp, zgrazpf, zbeta, zrfact2, zmetexcess 86 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrazing, zfezoo 87 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zw3d, zzligprod 89 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrazing, zfezoo, zzligprod 88 90 CHARACTER (len=25) :: charout 89 91 !!--------------------------------------------------------------------- … … 91 93 IF( ln_timing ) CALL timing_start('p5z_micro') 92 94 ! 93 IF (ln_ligand) THEN94 ALLOCATE( zzligprod(jpi,jpj,jpk) )95 zzligprod(:,:,:) = 0._wp96 ENDIF97 !98 95 zmetexcess = 0.0 99 96 IF ( bmetexc ) zmetexcess = 1.0 100 97 ! 101 DO jk = 1, jpkm1 102 DO jj = 1, jpj 103 DO ji = 1, jpi 104 zcompaz = MAX( ( trb(ji,jj,jk,jpzoo) - 1.e-9 ), 0.e0 ) 105 zfact = xstep * tgfunc2(ji,jj,jk) * zcompaz 106 107 ! Michaelis-Menten mortality rates of microzooplankton 108 ! ----------------------------------------------------- 109 zrespz = resrat * zfact * ( trb(ji,jj,jk,jpzoo) / ( xkmort + trb(ji,jj,jk,jpzoo) ) & 110 & + 3. * nitrfac(ji,jj,jk) ) 111 112 ! Zooplankton mortality. A square function has been selected with 113 ! no real reason except that it seems to be more stable and may mimic predation. 114 ! ------------------------------------------------------------------------------ 115 ztortz = mzrat * 1.e6 * zfact * trb(ji,jj,jk,jpzoo) * (1. - nitrfac(ji,jj,jk)) 116 117 ! Computation of the abundance of the preys 118 ! A threshold can be specified in the namelist 119 ! -------------------------------------------- 120 zcompadi = MIN( MAX( ( trb(ji,jj,jk,jpdia) - xthreshdia ), 0.e0 ), xsizedia ) 121 zcompaph = MAX( ( trb(ji,jj,jk,jpphy) - xthreshphy ), 0.e0 ) 122 zcompaz = MAX( ( trb(ji,jj,jk,jpzoo) - xthreshzoo ), 0.e0 ) 123 zcompapi = MAX( ( trb(ji,jj,jk,jppic) - xthreshpic ), 0.e0 ) 124 zcompapoc = MAX( ( trb(ji,jj,jk,jppoc) - xthreshpoc ), 0.e0 ) 125 126 ! Microzooplankton grazing 127 ! ------------------------ 128 zfood = xprefn * zcompaph + xprefc * zcompapoc + xprefd * zcompadi & 129 & + xprefz * zcompaz + xprefp * zcompapi 130 zfoodlim = MAX( 0. , zfood - min(xthresh,0.5*zfood) ) 131 zdenom = zfoodlim / ( xkgraz + zfoodlim ) 132 zgraze = grazrat * xstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpzoo) * (1. - nitrfac(ji,jj,jk)) 133 134 ! An active switching parameterization is used here. 135 ! We don't use the KTW parameterization proposed by 136 ! Vallina et al. because it tends to produce to steady biomass 137 ! composition and the variance of Chl is too low as it grazes 138 ! too strongly on winning organisms. Thus, instead of a square 139 ! a 1.5 power value is used which decreases the pressure on the 140 ! most abundant species 141 ! ------------------------------------------------------------ 142 ztmp1 = xprefn * zcompaph**1.5 143 ztmp2 = xprefp * zcompapi**1.5 144 ztmp3 = xprefc * zcompapoc**1.5 145 ztmp4 = xprefd * zcompadi**1.5 146 ztmp5 = xprefz * zcompaz**1.5 147 ztmptot = ztmp1 + ztmp2 + ztmp3 + ztmp4 + ztmp5 + rtrn 148 ztmp1 = ztmp1 / ztmptot 149 ztmp2 = ztmp2 / ztmptot 150 ztmp3 = ztmp3 / ztmptot 151 ztmp4 = ztmp4 / ztmptot 152 ztmp5 = ztmp5 / ztmptot 153 154 ! Microzooplankton regular grazing on the different preys 155 ! ------------------------------------------------------- 156 zgraznc = zgraze * ztmp1 * zdenom 157 zgraznn = zgraznc * trb(ji,jj,jk,jpnph) / (trb(ji,jj,jk,jpphy) + rtrn) 158 zgraznp = zgraznc * trb(ji,jj,jk,jppph) / (trb(ji,jj,jk,jpphy) + rtrn) 159 zgraznf = zgraznc * trb(ji,jj,jk,jpnfe) / (trb(ji,jj,jk,jpphy) + rtrn) 160 zgrazpc = zgraze * ztmp2 * zdenom 161 zgrazpn = zgrazpc * trb(ji,jj,jk,jpnpi) / (trb(ji,jj,jk,jppic) + rtrn) 162 zgrazpp = zgrazpc * trb(ji,jj,jk,jpppi) / (trb(ji,jj,jk,jppic) + rtrn) 163 zgrazpf = zgrazpc * trb(ji,jj,jk,jppfe) / (trb(ji,jj,jk,jppic) + rtrn) 164 zgrazz = zgraze * ztmp5 * zdenom 165 zgrazpoc = zgraze * ztmp3 * zdenom 166 zgrazpon = zgrazpoc * trb(ji,jj,jk,jppon) / ( trb(ji,jj,jk,jppoc) + rtrn ) 167 zgrazpop = zgrazpoc * trb(ji,jj,jk,jppop) / ( trb(ji,jj,jk,jppoc) + rtrn ) 168 zgrazpof = zgrazpoc* trb(ji,jj,jk,jpsfe) / (trb(ji,jj,jk,jppoc) + rtrn) 169 zgrazdc = zgraze * ztmp4 * zdenom 170 zgrazdn = zgrazdc * trb(ji,jj,jk,jpndi) / (trb(ji,jj,jk,jpdia) + rtrn) 171 zgrazdp = zgrazdc * trb(ji,jj,jk,jppdi) / (trb(ji,jj,jk,jpdia) + rtrn) 172 zgrazdf = zgrazdc * trb(ji,jj,jk,jpdfe) / (trb(ji,jj,jk,jpdia) + rtrn) 173 ! 174 zgraztotc = zgraznc + zgrazpoc + zgrazdc + zgrazz + zgrazpc 175 zgraztotn = zgraznn + zgrazpn + zgrazpon + zgrazdn + zgrazz * no3rat3 176 zgraztotp = zgraznp + zgrazpp + zgrazpop + zgrazdp + zgrazz * po4rat3 177 zgraztotf = zgraznf + zgrazpf + zgrazpof + zgrazdf + zgrazz * ferat3 178 ! 179 ! Grazing by microzooplankton 180 zgrazing(ji,jj,jk) = zgraztotc 181 182 ! Stoichiometruc ratios of the food ingested by zooplanton 183 ! -------------------------------------------------------- 184 zgrasratf = (zgraztotf + rtrn) / ( zgraztotc + rtrn ) 185 zgrasratn = (zgraztotn + rtrn) / ( zgraztotc + rtrn ) 186 zgrasratp = (zgraztotp + rtrn) / ( zgraztotc + rtrn ) 187 188 ! Growth efficiency is made a function of the quality 189 ! and the quantity of the preys 190 ! --------------------------------------------------- 191 zepshert = MIN( 1., zgrasratn/ no3rat3, zgrasratp/ po4rat3, zgrasratf / ferat3) 192 zbeta = MAX( 0., (epsher - epshermin) ) 193 zepsherf = epshermin + zbeta / ( 1.0 + 0.04E6 * 12. * zfood * zbeta ) 194 zepsherv = zepsherf * zepshert 195 196 ! Respiration of microzooplankton 197 ! Excess carbon in the food is used preferentially 198 ! ------------------------------------------------ 199 zexcess = zgraztotc * zepsherf * (1.0 - zepshert) * zmetexcess 200 zbasresb = MAX(0., zrespz - zexcess) 201 zbasresi = zexcess + MIN(0., zrespz - zexcess) 202 zrespirc = srespir * zepsherv * zgraztotc + zbasresb 203 204 ! When excess carbon is used, the other elements in excess 205 ! are also used proportionally to their abundance 206 ! -------------------------------------------------------- 207 zexcess = ( zgrasratn/ no3rat3 - zepshert ) / ( 1.0 - zepshert + rtrn) 208 zbasresn = zbasresi * zexcess * zgrasratn 209 zexcess = ( zgrasratp/ po4rat3 - zepshert ) / ( 1.0 - zepshert + rtrn) 210 zbasresp = zbasresi * zexcess * zgrasratp 211 zexcess = ( zgrasratf/ ferat3 - zepshert ) / ( 1.0 - zepshert + rtrn) 212 zbasresf = zbasresi * zexcess * zgrasratf 213 214 ! Voiding of the excessive elements as DOM 215 ! ---------------------------------------- 216 zgradoct = (1. - unassc - zepsherv) * zgraztotc - zbasresi 217 zgradont = (1. - unassn) * zgraztotn - zepsherv * no3rat3 * zgraztotc - zbasresn 218 zgradopt = (1. - unassp) * zgraztotp - zepsherv * po4rat3 * zgraztotc - zbasresp 219 zgrareft = (1. - unassc) * zgraztotf - zepsherv * ferat3 * zgraztotc - zbasresf 220 221 ! Since only semilabile DOM is represented in PISCES 222 ! part of DOM is in fact labile and is then released 223 ! as dissolved inorganic compounds (ssigma) 224 ! -------------------------------------------------- 225 zgradoc = zgradoct * ssigma 226 zgradon = zgradont * ssigma 227 zgradop = zgradopt * ssigma 228 zgrarem = (1.0 - ssigma) * zgradoct 229 zgraren = (1.0 - ssigma) * zgradont 230 zgrarep = (1.0 - ssigma) * zgradopt 231 zgraref = zgrareft 232 233 ! Defecation as a result of non assimilated products 234 ! -------------------------------------------------- 235 zgrapoc = zgraztotc * unassc 236 zgrapon = zgraztotn * unassn 237 zgrapop = zgraztotp * unassp 238 zgrapof = zgraztotf * unassc 239 240 ! Addition of respiration to the release of inorganic nutrients 241 ! ------------------------------------------------------------- 242 zgrarem = zgrarem + zbasresi + zrespirc 243 zgraren = zgraren + zbasresn + zrespirc * no3rat3 244 zgrarep = zgrarep + zbasresp + zrespirc * po4rat3 245 zgraref = zgraref + zbasresf + zrespirc * ferat3 246 247 ! Update of the TRA arrays 248 ! ------------------------ 249 tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + zgrarep 250 tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zgraren 251 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zgradoc 252 ! 253 IF( ln_ligand ) THEN 254 tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + zgradoc * ldocz 255 zzligprod(ji,jj,jk) = zgradoc * ldocz 256 ENDIF 257 ! 258 tra(ji,jj,jk,jpdon) = tra(ji,jj,jk,jpdon) + zgradon 259 tra(ji,jj,jk,jpdop) = tra(ji,jj,jk,jpdop) + zgradop 260 tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2ut * zgrarem 261 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zgraref 262 zfezoo(ji,jj,jk) = zgraref 263 tra(ji,jj,jk,jpzoo) = tra(ji,jj,jk,jpzoo) + zepsherv * zgraztotc - zrespirc - ztortz - zgrazz 264 tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) - zgraznc 265 tra(ji,jj,jk,jpnph) = tra(ji,jj,jk,jpnph) - zgraznn 266 tra(ji,jj,jk,jppph) = tra(ji,jj,jk,jppph) - zgraznp 267 tra(ji,jj,jk,jppic) = tra(ji,jj,jk,jppic) - zgrazpc 268 tra(ji,jj,jk,jpnpi) = tra(ji,jj,jk,jpnpi) - zgrazpn 269 tra(ji,jj,jk,jpppi) = tra(ji,jj,jk,jpppi) - zgrazpp 270 tra(ji,jj,jk,jpdia) = tra(ji,jj,jk,jpdia) - zgrazdc 271 tra(ji,jj,jk,jpndi) = tra(ji,jj,jk,jpndi) - zgrazdn 272 tra(ji,jj,jk,jppdi) = tra(ji,jj,jk,jppdi) - zgrazdp 273 tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) - zgraznc * trb(ji,jj,jk,jpnch)/(trb(ji,jj,jk,jpphy)+rtrn) 274 tra(ji,jj,jk,jppch) = tra(ji,jj,jk,jppch) - zgrazpc * trb(ji,jj,jk,jppch)/(trb(ji,jj,jk,jppic)+rtrn) 275 tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) - zgrazdc * trb(ji,jj,jk,jpdch)/(trb(ji,jj,jk,jpdia)+rtrn) 276 tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) - zgrazdc * trb(ji,jj,jk,jpdsi)/(trb(ji,jj,jk,jpdia)+rtrn) 277 tra(ji,jj,jk,jpgsi) = tra(ji,jj,jk,jpgsi) + zgrazdc * trb(ji,jj,jk,jpdsi)/(trb(ji,jj,jk,jpdia)+rtrn) 278 tra(ji,jj,jk,jpnfe) = tra(ji,jj,jk,jpnfe) - zgraznf 279 tra(ji,jj,jk,jppfe) = tra(ji,jj,jk,jppfe) - zgrazpf 280 tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) - zgrazdf 281 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + ztortz + zgrapoc - zgrazpoc 282 prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + ztortz + zgrapoc 283 conspoc(ji,jj,jk) = conspoc(ji,jj,jk) - zgrazpoc 284 tra(ji,jj,jk,jppon) = tra(ji,jj,jk,jppon) + no3rat3 * ztortz + zgrapon - zgrazpon 285 tra(ji,jj,jk,jppop) = tra(ji,jj,jk,jppop) + po4rat3 * ztortz + zgrapop - zgrazpop 286 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + ferat3 * ztortz + zgrapof - zgrazpof 287 ! 288 ! calcite production 289 zprcaca = xfracal(ji,jj,jk) * zgraznc 290 prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo) 291 ! 292 zprcaca = part * zprcaca 293 tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zgrarem - zprcaca 294 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) - 2. * zprcaca & 295 & + rno3 * zgraren 296 tra(ji,jj,jk,jpcal) = tra(ji,jj,jk,jpcal) + zprcaca 297 END DO 298 END DO 299 END DO 300 ! 301 IF( lk_iomput ) THEN 302 IF( knt == nrdttrc ) THEN 303 ALLOCATE( zw3d(jpi,jpj,jpk) ) 304 IF( iom_use( "GRAZ1" ) ) THEN 305 zw3d(:,:,:) = zgrazing(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:) ! Total grazing of phyto by zooplankton 306 CALL iom_put( "GRAZ1", zw3d ) 307 ENDIF 308 IF( iom_use( "FEZOO" ) ) THEN 309 zw3d(:,:,:) = zfezoo(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) ! 310 CALL iom_put( "FEZOO", zw3d ) 311 ENDIF 312 IF( iom_use( "LPRODZ" ) .AND. ln_ligand ) THEN 313 zw3d(:,:,:) = zzligprod(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) 314 CALL iom_put( "LPRODZ" , zw3d ) 315 ENDIF 316 DEALLOCATE( zw3d ) 98 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 99 zcompaz = MAX( ( tr(ji,jj,jk,jpzoo,Kbb) - 1.e-9 ), 0.e0 ) 100 zfact = xstep * tgfunc2(ji,jj,jk) * zcompaz 101 102 ! Michaelis-Menten mortality rates of microzooplankton 103 ! ----------------------------------------------------- 104 zrespz = resrat * zfact * ( tr(ji,jj,jk,jpzoo,Kbb) / ( xkmort + tr(ji,jj,jk,jpzoo,Kbb) ) & 105 & + 3. * nitrfac(ji,jj,jk) ) 106 107 ! Zooplankton mortality. A square function has been selected with 108 ! no real reason except that it seems to be more stable and may mimic predation. 109 ! ------------------------------------------------------------------------------ 110 ztortz = mzrat * 1.e6 * zfact * tr(ji,jj,jk,jpzoo,Kbb) * (1. - nitrfac(ji,jj,jk)) 111 112 ! Computation of the abundance of the preys 113 ! A threshold can be specified in the namelist 114 ! -------------------------------------------- 115 zcompadi = MIN( MAX( ( tr(ji,jj,jk,jpdia,Kbb) - xthreshdia ), 0.e0 ), xsizedia ) 116 zcompaph = MAX( ( tr(ji,jj,jk,jpphy,Kbb) - xthreshphy ), 0.e0 ) 117 zcompaz = MAX( ( tr(ji,jj,jk,jpzoo,Kbb) - xthreshzoo ), 0.e0 ) 118 zcompapi = MAX( ( tr(ji,jj,jk,jppic,Kbb) - xthreshpic ), 0.e0 ) 119 zcompapoc = MAX( ( tr(ji,jj,jk,jppoc,Kbb) - xthreshpoc ), 0.e0 ) 120 121 ! Microzooplankton grazing 122 ! ------------------------ 123 zfood = xprefn * zcompaph + xprefc * zcompapoc + xprefd * zcompadi & 124 & + xprefz * zcompaz + xprefp * zcompapi 125 zfoodlim = MAX( 0. , zfood - min(xthresh,0.5*zfood) ) 126 zdenom = zfoodlim / ( xkgraz + zfoodlim ) 127 zgraze = grazrat * xstep * tgfunc2(ji,jj,jk) * tr(ji,jj,jk,jpzoo,Kbb) * (1. - nitrfac(ji,jj,jk)) 128 129 ! An active switching parameterization is used here. 130 ! We don't use the KTW parameterization proposed by 131 ! Vallina et al. because it tends to produce to steady biomass 132 ! composition and the variance of Chl is too low as it grazes 133 ! too strongly on winning organisms. Thus, instead of a square 134 ! a 1.5 power value is used which decreases the pressure on the 135 ! most abundant species 136 ! ------------------------------------------------------------ 137 ztmp1 = xprefn * zcompaph**1.5 138 ztmp2 = xprefp * zcompapi**1.5 139 ztmp3 = xprefc * zcompapoc**1.5 140 ztmp4 = xprefd * zcompadi**1.5 141 ztmp5 = xprefz * zcompaz**1.5 142 ztmptot = ztmp1 + ztmp2 + ztmp3 + ztmp4 + ztmp5 + rtrn 143 ztmp1 = ztmp1 / ztmptot 144 ztmp2 = ztmp2 / ztmptot 145 ztmp3 = ztmp3 / ztmptot 146 ztmp4 = ztmp4 / ztmptot 147 ztmp5 = ztmp5 / ztmptot 148 149 ! Microzooplankton regular grazing on the different preys 150 ! ------------------------------------------------------- 151 zgraznc = zgraze * ztmp1 * zdenom 152 zgraznn = zgraznc * tr(ji,jj,jk,jpnph,Kbb) / (tr(ji,jj,jk,jpphy,Kbb) + rtrn) 153 zgraznp = zgraznc * tr(ji,jj,jk,jppph,Kbb) / (tr(ji,jj,jk,jpphy,Kbb) + rtrn) 154 zgraznf = zgraznc * tr(ji,jj,jk,jpnfe,Kbb) / (tr(ji,jj,jk,jpphy,Kbb) + rtrn) 155 zgrazpc = zgraze * ztmp2 * zdenom 156 zgrazpn = zgrazpc * tr(ji,jj,jk,jpnpi,Kbb) / (tr(ji,jj,jk,jppic,Kbb) + rtrn) 157 zgrazpp = zgrazpc * tr(ji,jj,jk,jpppi,Kbb) / (tr(ji,jj,jk,jppic,Kbb) + rtrn) 158 zgrazpf = zgrazpc * tr(ji,jj,jk,jppfe,Kbb) / (tr(ji,jj,jk,jppic,Kbb) + rtrn) 159 zgrazz = zgraze * ztmp5 * zdenom 160 zgrazpoc = zgraze * ztmp3 * zdenom 161 zgrazpon = zgrazpoc * tr(ji,jj,jk,jppon,Kbb) / ( tr(ji,jj,jk,jppoc,Kbb) + rtrn ) 162 zgrazpop = zgrazpoc * tr(ji,jj,jk,jppop,Kbb) / ( tr(ji,jj,jk,jppoc,Kbb) + rtrn ) 163 zgrazpof = zgrazpoc* tr(ji,jj,jk,jpsfe,Kbb) / (tr(ji,jj,jk,jppoc,Kbb) + rtrn) 164 zgrazdc = zgraze * ztmp4 * zdenom 165 zgrazdn = zgrazdc * tr(ji,jj,jk,jpndi,Kbb) / (tr(ji,jj,jk,jpdia,Kbb) + rtrn) 166 zgrazdp = zgrazdc * tr(ji,jj,jk,jppdi,Kbb) / (tr(ji,jj,jk,jpdia,Kbb) + rtrn) 167 zgrazdf = zgrazdc * tr(ji,jj,jk,jpdfe,Kbb) / (tr(ji,jj,jk,jpdia,Kbb) + rtrn) 168 ! 169 zgraztotc = zgraznc + zgrazpoc + zgrazdc + zgrazz + zgrazpc 170 zgraztotn = zgraznn + zgrazpn + zgrazpon + zgrazdn + zgrazz * no3rat3 171 zgraztotp = zgraznp + zgrazpp + zgrazpop + zgrazdp + zgrazz * po4rat3 172 zgraztotf = zgraznf + zgrazpf + zgrazpof + zgrazdf + zgrazz * ferat3 173 ! 174 ! Grazing by microzooplankton 175 zgrazing(ji,jj,jk) = zgraztotc 176 177 ! Stoichiometruc ratios of the food ingested by zooplanton 178 ! -------------------------------------------------------- 179 zgrasratf = (zgraztotf + rtrn) / ( zgraztotc + rtrn ) 180 zgrasratn = (zgraztotn + rtrn) / ( zgraztotc + rtrn ) 181 zgrasratp = (zgraztotp + rtrn) / ( zgraztotc + rtrn ) 182 183 ! Growth efficiency is made a function of the quality 184 ! and the quantity of the preys 185 ! --------------------------------------------------- 186 zepshert = MIN( 1., zgrasratn/ no3rat3, zgrasratp/ po4rat3, zgrasratf / ferat3) 187 zbeta = MAX( 0., (epsher - epshermin) ) 188 zepsherf = epshermin + zbeta / ( 1.0 + 0.04E6 * 12. * zfood * zbeta ) 189 zepsherv = zepsherf * zepshert 190 191 ! Respiration of microzooplankton 192 ! Excess carbon in the food is used preferentially 193 ! ------------------------------------------------ 194 zexcess = zgraztotc * zepsherf * (1.0 - zepshert) * zmetexcess 195 zbasresb = MAX(0., zrespz - zexcess) 196 zbasresi = zexcess + MIN(0., zrespz - zexcess) 197 zrespirc = srespir * zepsherv * zgraztotc + zbasresb 198 199 ! When excess carbon is used, the other elements in excess 200 ! are also used proportionally to their abundance 201 ! -------------------------------------------------------- 202 zexcess = ( zgrasratn/ no3rat3 - zepshert ) / ( 1.0 - zepshert + rtrn) 203 zbasresn = zbasresi * zexcess * zgrasratn 204 zexcess = ( zgrasratp/ po4rat3 - zepshert ) / ( 1.0 - zepshert + rtrn) 205 zbasresp = zbasresi * zexcess * zgrasratp 206 zexcess = ( zgrasratf/ ferat3 - zepshert ) / ( 1.0 - zepshert + rtrn) 207 zbasresf = zbasresi * zexcess * zgrasratf 208 209 ! Voiding of the excessive elements as DOM 210 ! ---------------------------------------- 211 zgradoct = (1. - unassc - zepsherv) * zgraztotc - zbasresi 212 zgradont = (1. - unassn) * zgraztotn - zepsherv * no3rat3 * zgraztotc - zbasresn 213 zgradopt = (1. - unassp) * zgraztotp - zepsherv * po4rat3 * zgraztotc - zbasresp 214 zgrareft = (1. - unassc) * zgraztotf - zepsherv * ferat3 * zgraztotc - zbasresf 215 216 ! Since only semilabile DOM is represented in PISCES 217 ! part of DOM is in fact labile and is then released 218 ! as dissolved inorganic compounds (ssigma) 219 ! -------------------------------------------------- 220 zgradoc = zgradoct * ssigma 221 zgradon = zgradont * ssigma 222 zgradop = zgradopt * ssigma 223 zgrarem = (1.0 - ssigma) * zgradoct 224 zgraren = (1.0 - ssigma) * zgradont 225 zgrarep = (1.0 - ssigma) * zgradopt 226 zgraref = zgrareft 227 228 ! Defecation as a result of non assimilated products 229 ! -------------------------------------------------- 230 zgrapoc = zgraztotc * unassc 231 zgrapon = zgraztotn * unassn 232 zgrapop = zgraztotp * unassp 233 zgrapof = zgraztotf * unassc 234 235 ! Addition of respiration to the release of inorganic nutrients 236 ! ------------------------------------------------------------- 237 zgrarem = zgrarem + zbasresi + zrespirc 238 zgraren = zgraren + zbasresn + zrespirc * no3rat3 239 zgrarep = zgrarep + zbasresp + zrespirc * po4rat3 240 zgraref = zgraref + zbasresf + zrespirc * ferat3 241 242 ! Update of the TRA arrays 243 ! ------------------------ 244 tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) + zgrarep 245 tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) + zgraren 246 tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) + zgradoc 247 ! 248 IF( ln_ligand ) THEN 249 tr(ji,jj,jk,jplgw,Krhs) = tr(ji,jj,jk,jplgw,Krhs) + zgradoc * ldocz 250 zzligprod(ji,jj,jk) = zgradoc * ldocz 251 ENDIF 252 ! 253 tr(ji,jj,jk,jpdon,Krhs) = tr(ji,jj,jk,jpdon,Krhs) + zgradon 254 tr(ji,jj,jk,jpdop,Krhs) = tr(ji,jj,jk,jpdop,Krhs) + zgradop 255 tr(ji,jj,jk,jpoxy,Krhs) = tr(ji,jj,jk,jpoxy,Krhs) - o2ut * zgrarem 256 tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) + zgraref 257 zfezoo(ji,jj,jk) = zgraref 258 tr(ji,jj,jk,jpzoo,Krhs) = tr(ji,jj,jk,jpzoo,Krhs) + zepsherv * zgraztotc - zrespirc - ztortz - zgrazz 259 tr(ji,jj,jk,jpphy,Krhs) = tr(ji,jj,jk,jpphy,Krhs) - zgraznc 260 tr(ji,jj,jk,jpnph,Krhs) = tr(ji,jj,jk,jpnph,Krhs) - zgraznn 261 tr(ji,jj,jk,jppph,Krhs) = tr(ji,jj,jk,jppph,Krhs) - zgraznp 262 tr(ji,jj,jk,jppic,Krhs) = tr(ji,jj,jk,jppic,Krhs) - zgrazpc 263 tr(ji,jj,jk,jpnpi,Krhs) = tr(ji,jj,jk,jpnpi,Krhs) - zgrazpn 264 tr(ji,jj,jk,jpppi,Krhs) = tr(ji,jj,jk,jpppi,Krhs) - zgrazpp 265 tr(ji,jj,jk,jpdia,Krhs) = tr(ji,jj,jk,jpdia,Krhs) - zgrazdc 266 tr(ji,jj,jk,jpndi,Krhs) = tr(ji,jj,jk,jpndi,Krhs) - zgrazdn 267 tr(ji,jj,jk,jppdi,Krhs) = tr(ji,jj,jk,jppdi,Krhs) - zgrazdp 268 tr(ji,jj,jk,jpnch,Krhs) = tr(ji,jj,jk,jpnch,Krhs) - zgraznc * tr(ji,jj,jk,jpnch,Kbb)/(tr(ji,jj,jk,jpphy,Kbb)+rtrn) 269 tr(ji,jj,jk,jppch,Krhs) = tr(ji,jj,jk,jppch,Krhs) - zgrazpc * tr(ji,jj,jk,jppch,Kbb)/(tr(ji,jj,jk,jppic,Kbb)+rtrn) 270 tr(ji,jj,jk,jpdch,Krhs) = tr(ji,jj,jk,jpdch,Krhs) - zgrazdc * tr(ji,jj,jk,jpdch,Kbb)/(tr(ji,jj,jk,jpdia,Kbb)+rtrn) 271 tr(ji,jj,jk,jpdsi,Krhs) = tr(ji,jj,jk,jpdsi,Krhs) - zgrazdc * tr(ji,jj,jk,jpdsi,Kbb)/(tr(ji,jj,jk,jpdia,Kbb)+rtrn) 272 tr(ji,jj,jk,jpgsi,Krhs) = tr(ji,jj,jk,jpgsi,Krhs) + zgrazdc * tr(ji,jj,jk,jpdsi,Kbb)/(tr(ji,jj,jk,jpdia,Kbb)+rtrn) 273 tr(ji,jj,jk,jpnfe,Krhs) = tr(ji,jj,jk,jpnfe,Krhs) - zgraznf 274 tr(ji,jj,jk,jppfe,Krhs) = tr(ji,jj,jk,jppfe,Krhs) - zgrazpf 275 tr(ji,jj,jk,jpdfe,Krhs) = tr(ji,jj,jk,jpdfe,Krhs) - zgrazdf 276 tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) + ztortz + zgrapoc - zgrazpoc 277 prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + ztortz + zgrapoc 278 conspoc(ji,jj,jk) = conspoc(ji,jj,jk) - zgrazpoc 279 tr(ji,jj,jk,jppon,Krhs) = tr(ji,jj,jk,jppon,Krhs) + no3rat3 * ztortz + zgrapon - zgrazpon 280 tr(ji,jj,jk,jppop,Krhs) = tr(ji,jj,jk,jppop,Krhs) + po4rat3 * ztortz + zgrapop - zgrazpop 281 tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + ferat3 * ztortz + zgrapof - zgrazpof 282 ! 283 ! calcite production 284 zprcaca = xfracal(ji,jj,jk) * zgraznc 285 prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo) 286 ! 287 zprcaca = part * zprcaca 288 tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) + zgrarem - zprcaca 289 tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) - 2. * zprcaca & 290 & + rno3 * zgraren 291 tr(ji,jj,jk,jpcal,Krhs) = tr(ji,jj,jk,jpcal,Krhs) + zprcaca 292 END_3D 293 ! 294 IF( lk_iomput .AND. knt == nrdttrc ) THEN 295 IF( iom_use("GRAZ1") ) THEN ! Total grazing of phyto by zooplankton 296 zgrazing(:,:,jpk) = 0._wp ; CALL iom_put( "GRAZ1" , zgrazing(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:) ) 297 ENDIF 298 IF( iom_use("FEZOO") ) THEN 299 zfezoo (:,:,jpk) = 0._wp ; CALL iom_put( "FEZOO" , zfezoo(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) ) 300 ENDIF 301 IF( ln_ligand ) THEN 302 zzligprod(:,:,jpk) = 0._wp ; CALL iom_put( "LPRODZ", zzligprod(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:)) 317 303 ENDIF 318 304 ENDIF 319 305 ! 320 IF( ln_ctl) THEN ! print mean trends (used for debugging)306 IF(sn_cfctl%l_prttrc) THEN ! print mean trends (used for debugging) 321 307 WRITE(charout, FMT="('micro')") 322 CALL prt_ctl_ trc_info(charout)323 CALL prt_ctl _trc(tab4d=tra, mask=tmask, clinfo=ctrcnm)308 CALL prt_ctl_info( charout, cdcomp = 'top' ) 309 CALL prt_ctl(tab4d_1=tr(:,:,:,:,Krhs), mask1=tmask, clinfo=ctrcnm) 324 310 ENDIF 325 311 ! … … 349 335 !!---------------------------------------------------------------------- 350 336 ! 351 REWIND( numnatp_ref ) ! Namelist nampiszoo in reference namelist : Pisces microzooplankton352 337 READ ( numnatp_ref, namp5zzoo, IOSTAT = ios, ERR = 901) 353 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp5zzoo in reference namelist', lwp ) 354 ! 355 REWIND( numnatp_cfg ) ! Namelist nampiszoo in configuration namelist : Pisces microzooplankton 338 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp5zzoo in reference namelist' ) 339 ! 356 340 READ ( numnatp_cfg, namp5zzoo, IOSTAT = ios, ERR = 902 ) 357 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namp5zzoo in configuration namelist' , lwp)341 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namp5zzoo in configuration namelist' ) 358 342 IF(lwm) WRITE ( numonp, namp5zzoo ) 359 343 !
Note: See TracChangeset
for help on using the changeset viewer.