Changeset 2823 for branches/2011/dev_r2787_PISCES_improvment/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zmicro.F90
- Timestamp:
- 2011-08-09T13:11:24+02:00 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2011/dev_r2787_PISCES_improvment/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zmicro.F90
r2528 r2823 6 6 !! History : 1.0 ! 2004 (O. Aumont) Original code 7 7 !! 2.0 ! 2007-12 (C. Ethe, G. Madec) F90 8 !! 3.4 ! 2011-06 (O. Aumont, C. Ethe) Quota model for iron 8 9 !!---------------------------------------------------------------------- 9 10 #if defined key_pisces … … 14 15 !! p4z_micro_init : Initialize and read the appropriate namelist 15 16 !!---------------------------------------------------------------------- 16 USE trc 17 USE oce_trc ! 18 USE trc ! 19 USE sms_pisces ! 20 USE prtctl_trc 21 USE p4zint 22 USE p4zsink 23 USE iom 17 USE oce_trc ! shared variables between ocean and passive tracers 18 USE trc ! passive tracers common variables 19 USE sms_pisces ! PISCES Source Minus Sink variables 20 USE p4zsink ! vertical flux of particulate matter due to sinking 21 USE p4zint ! interpolation and computation of various fields 22 USE p4zprod ! production 23 USE prtctl_trc ! print control for debugging 24 24 25 25 IMPLICIT NONE … … 30 30 31 31 !! * Shared module variables 32 REAL(wp), PUBLIC :: & 33 xpref2c = 0.0_wp , & !: 34 xpref2p = 0.5_wp , & !: 35 xpref2d = 0.5_wp , & !: 36 resrat = 0.03_wp , & !: 37 mzrat = 0.0_wp , & !: 38 grazrat = 4.0_wp , & !: 39 xkgraz = 20E-6_wp , & !: 40 unass = 0.3_wp , & !: 41 sigma1 = 0.6_wp , & !: 42 epsher = 0.33_wp 32 REAL(wp), PUBLIC :: part = 0.5_wp !: part of calcite not dissolved in microzoo guts 33 REAL(wp), PUBLIC :: xpref2c = 0.2_wp !: microzoo preference for POC 34 REAL(wp), PUBLIC :: xpref2p = 1.0_wp !: microzoo preference for nanophyto 35 REAL(wp), PUBLIC :: xpref2d = 0.6_wp !: microzoo preference for diatoms 36 REAL(wp), PUBLIC :: xthresh = 2E-7_wp !: feeding threshold for microzooplankton 37 REAL(wp), PUBLIC :: resrat = 0.03_wp !: exsudation rate of microzooplankton 38 REAL(wp), PUBLIC :: mzrat = 0.0_wp !: microzooplankton mortality rate 39 REAL(wp), PUBLIC :: grazrat = 3.0_wp !: maximal microzoo grazing rate 40 REAL(wp), PUBLIC :: xkgraz = 20E-6_wp !: non assimilated fraction of P by microzoo 41 REAL(wp), PUBLIC :: unass = 0.3_wp !: Efficicency of microzoo growth 42 REAL(wp), PUBLIC :: sigma1 = 0.6_wp !: Fraction of microzoo excretion as DOM 43 REAL(wp), PUBLIC :: epsher = 0.3_wp !: half sturation constant for grazing 1 43 44 44 45 … … 63 64 INTEGER, INTENT(in) :: kt ! ocean time step 64 65 INTEGER :: ji, jj, jk 65 REAL(wp) :: zcompadi, zcompadi2, zcompaz , zcompaph, zcompapoc 66 REAL(wp) :: zgraze , zdenom , zdenom2, zstep 67 REAL(wp) :: zfact , zinano , zidiat, zipoc 66 REAL(wp) :: zcompadi, zcompaz , zcompaph, zcompapoc 67 REAL(wp) :: zgraze , zdenom, zncratio 68 REAL(wp) :: zfact , zstep, zfood, zfoodlim 69 REAL(wp) :: zepshert, zepsherv, zgrarsig, zgraztot, zgraztotf 68 70 REAL(wp) :: zgrarem, zgrafer, zgrapoc, zprcaca, zmortz 69 REAL(wp) :: zrespz, ztortz 71 REAL(wp) :: zrespz, ztortz, zgrasrat 70 72 REAL(wp) :: zgrazp, zgrazm, zgrazsd 71 73 REAL(wp) :: zgrazmf, zgrazsf, zgrazpf … … 74 76 !!--------------------------------------------------------------------- 75 77 76 77 78 #if defined key_diatrc 78 79 grazing(:,:,:) = 0. !: Initialisation of grazing 79 80 #endif 80 81 zstep = rfact2 / rday ! Time step duration for biology82 81 83 82 DO jk = 1, jpkm1 84 83 DO jj = 1, jpj 85 84 DO ji = 1, jpi 86 zcompaz = MAX( ( trn(ji,jj,jk,jpzoo) - 1.e- 9), 0.e0 )85 zcompaz = MAX( ( trn(ji,jj,jk,jpzoo) - 1.e-8 ), 0.e0 ) 87 86 # if defined key_degrad 88 87 zstep = xstep * facvol(ji,jj,jk) … … 90 89 zstep = xstep 91 90 # endif 92 zfact = zstep * tgfunc (ji,jj,jk) * zcompaz91 zfact = zstep * tgfunc2(ji,jj,jk) * zcompaz 93 92 94 93 ! Respiration rates of both zooplankton 95 94 ! ------------------------------------- 96 zrespz = resrat * zfact * ( 1.+ 3.* nitrfac(ji,jj,jk) )&97 & * trn(ji,jj,jk,jpzoo) / ( xkmort + trn(ji,jj,jk,jpzoo))95 zrespz = resrat * zfact * trn(ji,jj,jk,jpzoo) / ( 2. * xkmort + trn(ji,jj,jk,jpzoo) ) & 96 & + resrat * zfact * 3. * nitrfac(ji,jj,jk) 98 97 99 98 ! Zooplankton mortality. A square function has been selected with … … 102 101 ztortz = mzrat * 1.e6 * zfact * trn(ji,jj,jk,jpzoo) 103 102 104 zcompadi = MAX( ( trn(ji,jj,jk,jpdia) - 1.e-8 ), 0.e0 ) 105 zcompadi2 = MIN( zcompadi, 5.e-7 ) 106 zcompaph = MAX( ( trn(ji,jj,jk,jpphy) - 2.e-7 ), 0.e0 ) 103 zcompadi = MIN( MAX( ( trn(ji,jj,jk,jpdia) - 1.e-8 ), 0.e0 ), 5.e-7 ) 104 zcompaph = MAX( ( trn(ji,jj,jk,jpphy) - 1.e-8 ), 0.e0 ) 107 105 zcompapoc = MAX( ( trn(ji,jj,jk,jppoc) - 1.e-8 ), 0.e0 ) 108 106 109 107 ! Microzooplankton grazing 110 108 ! ------------------------ 111 zdenom2 = 1./ ( xpref2p * zcompaph + xpref2c * zcompapoc + xpref2d * zcompadi2 + rtrn ) 112 113 zgraze = grazrat * zstep * tgfunc(ji,jj,jk) * trn(ji,jj,jk,jpzoo) 114 115 zinano = xpref2p * zcompaph * zdenom2 116 zipoc = xpref2c * zcompapoc * zdenom2 117 zidiat = xpref2d * zcompadi2 * zdenom2 118 119 zdenom = 1./ ( xkgraz + zinano * zcompaph + zipoc * zcompapoc + zidiat * zcompadi2 ) 120 121 zgrazp = zgraze * zinano * zcompaph * zdenom 122 zgrazm = zgraze * zipoc * zcompapoc * zdenom 123 zgrazsd = zgraze * zidiat * zcompadi2 * zdenom 124 125 zgrazpf = zgrazp * trn(ji,jj,jk,jpnfe) / (trn(ji,jj,jk,jpphy) + rtrn) 126 zgrazmf = zgrazm * trn(ji,jj,jk,jpsfe) / (trn(ji,jj,jk,jppoc) + rtrn) 127 zgrazsf = zgrazsd * trn(ji,jj,jk,jpdfe) / (trn(ji,jj,jk,jpdia) + rtrn) 109 zfood = xpref2p * zcompaph + xpref2c * zcompapoc + xpref2d * zcompadi + rtrn 110 zfoodlim = MAX( 0. , zfood - xthresh ) 111 zdenom = zfoodlim / zfood / ( xkgraz + zfoodlim ) 112 zgraze = grazrat * zstep * tgfunc2(ji,jj,jk) * trn(ji,jj,jk,jpzoo) * zdenom 113 zgrazp = zgraze * xpref2p * zcompaph 114 zgrazm = zgraze * xpref2c * zcompapoc 115 zgrazsd = zgraze * xpref2d * zcompadi 116 117 zgrazpf = zgrazp * trn(ji,jj,jk,jpnfe) / (trn(ji,jj,jk,jpphy) + rtrn) 118 zgrazmf = zgrazm * trn(ji,jj,jk,jpsfe) / (trn(ji,jj,jk,jppoc) + rtrn) 119 zgrazsf = zgrazsd * trn(ji,jj,jk,jpdfe) / (trn(ji,jj,jk,jpdia) + rtrn) 120 ! 121 zgraztot = zgrazp + zgrazm + zgrazsd 122 zgraztotf = zgrazpf + zgrazsf + zgrazmf 128 123 #if defined key_diatrc 129 124 ! Grazing by microzooplankton 130 grazing(ji,jj,jk) = grazing(ji,jj,jk) + zgraz p + zgrazm + zgrazsd125 grazing(ji,jj,jk) = grazing(ji,jj,jk) + zgraztot 131 126 #endif 132 127 133 128 ! Various remineralization and excretion terms 134 129 ! -------------------------------------------- 135 zgrarem = ( zgrazp + zgrazm + zgrazsd ) * ( 1.- epsher - unass ) 136 zgrafer = ( zgrazpf + zgrazsf + zgrazmf ) * ( 1.- epsher - unass ) & 137 & + epsher * ( zgrazm * MAX((trn(ji,jj,jk,jpsfe) / (trn(ji,jj,jk,jppoc)+ rtrn)-ferat3),0.e0) & 138 & + zgrazp * MAX((trn(ji,jj,jk,jpnfe) / (trn(ji,jj,jk,jpphy)+ rtrn)-ferat3),0.e0) & 139 & + zgrazsd * MAX((trn(ji,jj,jk,jpdfe) / (trn(ji,jj,jk,jpdia)+ rtrn)-ferat3),0.e0 ) ) 140 141 zgrapoc = ( zgrazp + zgrazm + zgrazsd ) 130 zgrasrat = zgraztotf / ( zgraztot + rtrn ) 131 zncratio = ( xpref2p * zcompaph * quotan(ji,jj,jk) & 132 & + xpref2d * zcompadi * quotad(ji,jj,jk) + xpref2c * zcompapoc ) / zfood 133 zepshert = epsher * MIN( 1., zncratio ) 134 zepsherv = zepshert * MIN( 1., zgrasrat / ferat3 ) 135 zgrafer = zgraztot * MAX( 0. , ( 1. - unass ) * zgrasrat - ferat3 * zepshert ) 136 zgrarem = zgraztot * ( 1. - zepsherv - unass ) 137 zgrapoc = zgraztot * unass 142 138 143 139 ! Update of the TRA arrays 144 140 ! ------------------------ 145 146 tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + zgrar em * sigma1147 tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zgrar em * sigma1148 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zgrarem * (1.-sigma1)149 tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2ut * zgrar em * sigma1141 zgrarsig = zgrarem * sigma1 142 tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + zgrarsig 143 tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zgrarsig 144 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zgrarem - zgrarsig 145 tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2ut * zgrarsig 150 146 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zgrafer 151 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zgrapoc * unass 152 tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zgrarem * sigma1 147 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zgrapoc 148 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zgraztotf * unass 149 tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zgrarsig 150 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * zgrarsig 153 151 #if defined key_kriest 154 tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + zgrapoc * unass * xkr_ddiat 155 #endif 156 157 ! 152 tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + zgrapoc * xkr_ddiat 153 #endif 158 154 ! Update the arrays TRA which contain the biological sources and sinks 159 155 ! -------------------------------------------------------------------- 160 161 156 zmortz = ztortz + zrespz 162 tra(ji,jj,jk,jpzoo) = tra(ji,jj,jk,jpzoo) - zmortz + epsher * zgrapoc157 tra(ji,jj,jk,jpzoo) = tra(ji,jj,jk,jpzoo) - zmortz + zepsherv * zgraztot 163 158 tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) - zgrazp 164 159 tra(ji,jj,jk,jpdia) = tra(ji,jj,jk,jpdia) - zgrazsd … … 170 165 tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) - zgrazsf 171 166 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zmortz - zgrazm 172 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + ferat3 * zmortz + unass * ( zgrazpf + zgrazsf ) - (1.-unass) *zgrazmf173 zprcaca = xfracal(ji,jj,jk) * unass *zgrazp167 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + ferat3 * zmortz - zgrazmf 168 zprcaca = xfracal(ji,jj,jk) * zgrazp 174 169 #if defined key_diatrc 170 ! calcite production 175 171 prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo) 176 172 #endif … … 209 205 !!---------------------------------------------------------------------- 210 206 211 NAMELIST/nampiszoo/ grazrat,resrat,mzrat,xpref2c, xpref2p, &212 & xpref2d, xkgraz, epsher, sigma1, unass213 214 REWIND( numnat ) ! read numnat215 READ ( numnat , nampiszoo )207 NAMELIST/nampiszoo/ part, grazrat, resrat, mzrat, xpref2c, xpref2p, & 208 & xpref2d, xthresh, xkgraz, epsher, sigma1, unass 209 210 REWIND( numnatp ) ! read numnat 211 READ ( numnatp, nampiszoo ) 216 212 217 213 IF(lwp) THEN ! control print … … 219 215 WRITE(numout,*) ' Namelist parameters for microzooplankton, nampiszoo' 220 216 WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 221 WRITE(numout,*) ' zoo preference for POC xpref2c =', xpref2c 222 WRITE(numout,*) ' zoo preference for nano xpref2p =', xpref2p 223 WRITE(numout,*) ' zoo preference for diatoms xpref2d =', xpref2d 224 WRITE(numout,*) ' exsudation rate of microzooplankton resrat =', resrat 225 WRITE(numout,*) ' microzooplankton mortality rate mzrat =', mzrat 226 WRITE(numout,*) ' maximal microzoo grazing rate grazrat =', grazrat 227 WRITE(numout,*) ' non assimilated fraction of P by microzoo unass =', unass 228 WRITE(numout,*) ' Efficicency of microzoo growth epsher =', epsher 229 WRITE(numout,*) ' Fraction of microzoo excretion as DOM sigma1 =', sigma1 230 WRITE(numout,*) ' half sturation constant for grazing 1 xkgraz =', xkgraz 217 WRITE(numout,*) ' part of calcite not dissolved in microzoo guts part =', part 218 WRITE(numout,*) ' microzoo preference for POC xpref2c =', xpref2c 219 WRITE(numout,*) ' microzoo preference for nano xpref2p =', xpref2p 220 WRITE(numout,*) ' microzoo preference for diatoms xpref2d =', xpref2d 221 WRITE(numout,*) ' feeding threshold for microzooplankton xthresh =', xthresh 222 WRITE(numout,*) ' exsudation rate of microzooplankton resrat =', resrat 223 WRITE(numout,*) ' microzooplankton mortality rate mzrat =', mzrat 224 WRITE(numout,*) ' maximal microzoo grazing rate grazrat =', grazrat 225 WRITE(numout,*) ' non assimilated fraction of P by microzoo unass =', unass 226 WRITE(numout,*) ' Efficicency of microzoo growth epsher =', epsher 227 WRITE(numout,*) ' Fraction of microzoo excretion as DOM sigma1 =', sigma1 228 WRITE(numout,*) ' half sturation constant for grazing 1 xkgraz =', xkgraz 231 229 ENDIF 232 230
Note: See TracChangeset
for help on using the changeset viewer.