- Timestamp:
- 2018-12-19T20:46:30+01:00 (5 years ago)
- Location:
- NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/TOP/PISCES
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/TOP/PISCES/P4Z/p4zfechem.F90
r10368 r10419 25 25 PUBLIC p4z_fechem_init ! called in trcsms_pisces.F90 26 26 27 LOGICAL :: ln_fechem !: boolean for complex iron chemistry following Tagliabue and voelker28 27 LOGICAL :: ln_ligvar !: boolean for variable ligand concentration following Tagliabue and voelker 29 28 REAL(wp), PUBLIC :: xlam1 !: scavenging rate of Iron … … 32 31 REAL(wp), PUBLIC :: kfep !: rate constant for nanoparticle formation 33 32 34 REAL(wp) :: kl1, kl2, kb1, kb2, ks, kpr, spd, con, kth !!gm <<<== DOCTOR names SVP !!!35 36 33 !!---------------------------------------------------------------------- 37 34 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 47 44 !! ** Purpose : Compute remineralization/scavenging of iron 48 45 !! 49 !! ** Method : 2 different chemistry models are available for iron 50 !! (1) The simple chemistry model of Aumont and Bopp (2006) 51 !! based on one ligand and one inorganic form 52 !! (2) The complex chemistry model of Tagliabue and 53 !! Voelker (2009) based on 2 ligands, 2 inorganic forms 54 !! and one particulate form (ln_fechem) 46 !! ** Method : A simple chemistry model of iron from Aumont and Bopp (2006) 47 !! based on one ligand and one inorganic form 55 48 !!--------------------------------------------------------------------- 56 49 INTEGER, INTENT(in) :: kt, knt ! ocean time step … … 74 67 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zTL1, zFe3, ztotlig, precip, zFeL1 75 68 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zcoll3d, zscav3d, zlcoll3d 76 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zFeL2, zTL2, zFe2, zFeP77 REAL(wp), ALLOCATABLE, DIMENSION(:,: ) :: zstrn, zstrn278 69 !!--------------------------------------------------------------------- 79 70 ! … … 83 74 zFeL1(:,:,:) = 0. 84 75 zTL1 (:,:,:) = 0. 85 IF( ln_fechem ) THEN86 ALLOCATE( zstrn(jpi,jpj), zstrn2(jpi,jpj) )87 ALLOCATE( zFe2(jpi,jpj,jpk), zFeL2(jpi,jpj,jpk), zTL2(jpi,jpj,jpk), zFeP(jpi,jpj,jpk) )88 zFe2 (:,:,:) = 0.89 zFeL2(:,:,:) = 0.90 zTL2 (:,:,:) = 0.91 zFeP (:,:,:) = 0.92 ENDIF93 76 94 77 ! Total ligand concentration : Ligands can be chosen to be constant or variable … … 104 87 ENDIF 105 88 106 IF( ln_fechem ) THEN 107 ! compute the day length depending on latitude and the day 108 zrum = REAL( nday_year - 80, wp ) / REAL( nyear_len(1), wp ) 109 zcodel = ASIN( SIN( zrum * rpi * 2._wp ) * SIN( rad * 23.5_wp ) ) 110 111 ! day length in hours 112 zstrn(:,:) = 0. 89 ! ------------------------------------------------------------ 90 ! from Aumont and Bopp (2006) 91 ! This model is based on one ligand and Fe' 92 ! Chemistry is supposed to be fast enough to be at equilibrium 93 ! ------------------------------------------------------------ 94 DO jk = 1, jpkm1 113 95 DO jj = 1, jpj 114 96 DO ji = 1, jpi 115 zargu = TAN( zcodel ) * TAN( gphit(ji,jj) * rad ) 116 zargu = MAX( -1., MIN( 1., zargu ) ) 117 zstrn(ji,jj) = MAX( 0.0, 24. - 2. * ACOS( zargu ) / rad / 15. ) 118 END DO 97 zTL1(ji,jj,jk) = ztotlig(ji,jj,jk) 98 zkeq = fekeq(ji,jj,jk) 99 zfesatur = zTL1(ji,jj,jk) * 1E-9 100 ztfe = trb(ji,jj,jk,jpfer) 101 ! Fe' is the root of a 2nd order polynom 102 zFe3 (ji,jj,jk) = ( -( 1. + zfesatur * zkeq - zkeq * ztfe ) & 103 & + SQRT( ( 1. + zfesatur * zkeq - zkeq * ztfe )**2 & 104 & + 4. * ztfe * zkeq) ) / ( 2. * zkeq ) 105 zFe3 (ji,jj,jk) = zFe3(ji,jj,jk) * 1E9 106 zFeL1(ji,jj,jk) = MAX( 0., trb(ji,jj,jk,jpfer) * 1E9 - zFe3(ji,jj,jk) ) 107 END DO 119 108 END DO 120 121 ! Maximum light intensity 122 zstrn2(:,:) = zstrn(:,:) / 24. 123 WHERE( zstrn(:,:) < 1.e0 ) zstrn(:,:) = 24. 124 zstrn(:,:) = 24. / zstrn(:,:) 125 126 ! ------------------------------------------------------------ 127 ! NEW FE CHEMISTRY ROUTINE from Tagliabue and Volker (2009) 128 ! This model is based on two ligands, Fe2+, Fe3+ and Fep 129 ! Chemistry is supposed to be fast enough to be at equilibrium 130 ! ------------------------------------------------------------ 131 DO jn = 1, 2 132 DO jk = 1, jpkm1 133 DO jj = 1, jpj 134 DO ji = 1, jpi 135 zlight = etot(ji,jj,jk) * zstrn(ji,jj) * REAL( 2-jn, wp ) 136 zzstrn2 = zstrn2(ji,jj) * REAL( 2-jn, wp ) + (1. - zstrn2(ji,jj) ) * REAL( jn-1, wp ) 137 ! Calculate ligand concentrations : assume 2/3rd of excess goes to 138 ! strong ligands (L1) and 1/3rd to weak ligands (L2) 139 ztligand = ztotlig(ji,jj,jk) - ligand * 1E9 140 zTL1(ji,jj,jk) = 0.000001 + 0.67 * ztligand 141 zTL2(ji,jj,jk) = ligand * 1E9 - 0.000001 + 0.33 * ztligand 142 ! ionic strength from Millero et al. 1987 143 zph = -LOG10( MAX( hi(ji,jj,jk), rtrn) ) 144 zoxy = trb(ji,jj,jk,jpoxy) 145 ! Fe2+ oxydation rate from Santana-Casiano et al. (2005) 146 zkox = 35.407 - 6.7109 * zph + 0.5342 * zph * zph - 5362.6 / ( tempis(ji,jj,jk) + 273.15 ) & 147 & - 0.04406 * SQRT( salinprac(ji,jj,jk) ) - 0.002847 * salinprac(ji,jj,jk) 148 zkox = ( 10.** zkox ) * spd 149 zkox = zkox * MAX( 1.e-6, zoxy) / ( chemo2(ji,jj,jk) + rtrn ) 150 ! PHOTOREDUCTION of complexed iron : Tagliabue and Arrigo (2006) 151 zkph2 = MAX( 0., 15. * zlight / ( zlight + 2. ) ) * (1. - fr_i(ji,jj)) 152 zkph1 = zkph2 / 5. 153 ! pass the dfe concentration from PISCES 154 ztfe = trb(ji,jj,jk,jpfer) * 1e9 155 ! ---------------------------------------------------------- 156 ! ANALYTICAL SOLUTION OF ROOTS OF THE FE3+ EQUATION 157 ! As shown in Tagliabue and Voelker (2009), Fe3+ is the root of a 3rd order polynom. 158 ! ---------------------------------------------------------- 159 ! calculate some parameters 160 za = 1.0 + ks / kpr 161 zb = 1.0 + zkph2 / ( zkox ) 162 zc = 1.0 + ( zkph1 + kth ) / ( zkox ) 163 zkappa1 = ( kb1 + zkph1 + kth ) / kl1 164 zkappa2 = ( kb2 + zkph2 ) / kl2 165 za2 = zTL2(ji,jj,jk) * zb / za + zTL2(ji,jj,jk) * zc / za + zkappa1 + zkappa2 - ztfe / za 166 za1 = zkappa1 * zTL2(ji,jj,jk) * zb / za + zkappa2 * zTL1(ji,jj,jk) * zc / za & 167 & + zkappa1 * zkappa2 - ( zkappa1 + zkappa2 ) * ztfe / za 168 za0 = -zkappa1 * zkappa2 * ztfe / za 169 zp = za1 - za2 * za2 / 3. 170 zq = za2 * za2 * za2 * 2. / 27. - za2 * za1 / 3. + za0 171 zp3 = zp / 3. 172 zq2 = zq / 2. 173 zd = zp3 * zp3 * zp3 + zq2 * zq2 174 zr = zq / ABS( zq ) * SQRT( ABS( zp ) / 3. ) 175 ! compute the roots 176 IF( zp > 0.) THEN 177 ! zphi = ASINH( zq / ( 2. * zr * zr * zr ) ) 178 zphi = zq / ( 2. * zr * zr * zr ) 179 zphi = LOG( zphi + SQRT( zphi * zphi + 1 ) ) ! asinh(x) = log(x + sqrt(x^2+1)) 180 zxs = -2. * zr * SINH( zphi / 3. ) - za1 / 3. 181 ELSE 182 IF( zd > 0. ) THEN 183 zfff = MAX( 1., zq / ( 2. * zr * zr * zr ) ) 184 ! zphi = ACOSH( zfff ) 185 zphi = LOG( zfff + SQRT( zfff * zfff - 1 ) ) ! acosh(x) = log(x + sqrt(x^2-1)) 186 zxs = -2. * zr * COSH( zphi / 3. ) - za1 / 3. 187 ELSE 188 zfff = MIN( 1., zq / ( 2. * zr * zr * zr ) ) 189 zphi = ACOS( zfff ) 190 DO jic = 1, 3 191 zfunc = -2 * zr * COS( zphi / 3. + 2. * REAL( jic - 1, wp ) * rpi / 3. ) - za2 / 3. 192 IF( zfunc > 0. .AND. zfunc <= ztfe) zxs = zfunc 193 END DO 194 ENDIF 195 ENDIF 196 ! solve for the other Fe species 197 zzFe3 = MAX( 0., zxs ) 198 zzFep = MAX( 0., ( ks * zzFe3 / kpr ) ) 199 zzFeL1 = MAX( 0., ( zzFe3 * zTL1(ji,jj,jk) ) / ( zkappa1 + zzFe3 ) ) 200 zzFeL2 = (ztfe - za * zzFe3 - zc * zzFeL1 ) / zb 201 zzFe2 = MAX( 0., ( ( ( zkph1 + kth ) * zzFeL1 + zkph2 * zzFeL2 ) / zkox ) ) 202 zzFep = ztfe - zzFe3 - zzFe2 - zzFeL1 - zzFeL2 203 zFe3(ji,jj,jk) = zFe3(ji,jj,jk) + zzFe3 * zzstrn2 204 zFe2(ji,jj,jk) = zFe2(ji,jj,jk) + zzFe2 * zzstrn2 205 zFeL2(ji,jj,jk) = zFeL2(ji,jj,jk) + zzFeL2 * zzstrn2 206 zFeL1(ji,jj,jk) = zFeL1(ji,jj,jk) + zzFeL1 * zzstrn2 207 zFeP(ji,jj,jk) = zFeP(ji,jj,jk) + zzFeP * zzstrn2 208 END DO 209 END DO 210 END DO 211 END DO 212 ELSE 213 ! ------------------------------------------------------------ 214 ! OLD FE CHEMISTRY ROUTINE from Aumont and Bopp (2006) 215 ! This model is based on one ligand and Fe' 216 ! Chemistry is supposed to be fast enough to be at equilibrium 217 ! ------------------------------------------------------------ 218 DO jk = 1, jpkm1 219 DO jj = 1, jpj 220 DO ji = 1, jpi 221 zTL1(ji,jj,jk) = ztotlig(ji,jj,jk) 222 zkeq = fekeq(ji,jj,jk) 223 zfesatur = zTL1(ji,jj,jk) * 1E-9 224 ztfe = trb(ji,jj,jk,jpfer) 225 ! Fe' is the root of a 2nd order polynom 226 zFe3 (ji,jj,jk) = ( -( 1. + zfesatur * zkeq - zkeq * ztfe ) & 227 & + SQRT( ( 1. + zfesatur * zkeq - zkeq * ztfe )**2 & 228 & + 4. * ztfe * zkeq) ) / ( 2. * zkeq ) 229 zFe3 (ji,jj,jk) = zFe3(ji,jj,jk) * 1E9 230 zFeL1(ji,jj,jk) = MAX( 0., trb(ji,jj,jk,jpfer) * 1E9 - zFe3(ji,jj,jk) ) 231 END DO 232 END DO 233 END DO 234 ! 235 ENDIF 109 END DO 110 ! 236 111 237 112 zdust = 0. ! if no dust available … … 247 122 & + fesol(ji,jj,jk,3) * zhplus + fesol(ji,jj,jk,4) & 248 123 & + fesol(ji,jj,jk,5) / zhplus ) 249 IF( ln_fechem ) THEN 250 zfeequi = ( zFe3(ji,jj,jk) + zFe2(ji,jj,jk) + zFeP(ji,jj,jk) ) * 1E-9 251 zfecoll = ( 0.3 * zFeL1(ji,jj,jk) + 0.5 * zFeL2(ji,jj,jk) ) * 1E-9 252 precip(ji,jj,jk) = 0.0 253 ELSE 254 zfeequi = zFe3(ji,jj,jk) * 1E-9 255 zhplus = max( rtrn, hi(ji,jj,jk) ) 256 fe3sol = fesol(ji,jj,jk,1) * ( zhplus**3 + fesol(ji,jj,jk,2) * zhplus**2 & 124 ! 125 zfeequi = zFe3(ji,jj,jk) * 1E-9 126 zhplus = max( rtrn, hi(ji,jj,jk) ) 127 fe3sol = fesol(ji,jj,jk,1) * ( zhplus**3 + fesol(ji,jj,jk,2) * zhplus**2 & 257 128 & + fesol(ji,jj,jk,3) * zhplus + fesol(ji,jj,jk,4) & 258 129 & + fesol(ji,jj,jk,5) / zhplus ) 259 zfecoll = 0.5 * zFeL1(ji,jj,jk) * 1E-9 260 ! precipitation of Fe3+, creation of nanoparticles 261 precip(ji,jj,jk) = MAX( 0., ( zFe3(ji,jj,jk) * 1E-9 - fe3sol ) ) * kfep * xstep 262 ENDIF 130 zfecoll = 0.5 * zFeL1(ji,jj,jk) * 1E-9 131 ! precipitation of Fe3+, creation of nanoparticles 132 precip(ji,jj,jk) = MAX( 0., ( zFe3(ji,jj,jk) * 1E-9 - fe3sol ) ) * kfep * xstep 263 133 ! 264 134 ztrc = ( trb(ji,jj,jk,jppoc) + trb(ji,jj,jk,jpgoc) + trb(ji,jj,jk,jpcal) + trb(ji,jj,jk,jpgsi) ) * 1.e6 … … 311 181 ! Define the bioavailable fraction of iron 312 182 ! ---------------------------------------- 313 IF( ln_fechem ) THEN ; biron(:,:,:) = MAX( 0., trb(:,:,:,jpfer) - zFeP(:,:,:) * 1E-9 ) 314 ELSE ; biron(:,:,:) = trb(:,:,:,jpfer) 315 ENDIF 183 biron(:,:,:) = trb(:,:,:,jpfer) 316 184 ! 317 185 IF( ln_ligand ) THEN … … 327 195 zaggliga = zlam1a * xstep * zligco 328 196 zaggligb = zlam1b * xstep * zligco 329 tra(ji,jj,jk,jpfep) = tra(ji,jj,jk,jpfep) + precip(ji,jj,jk)330 197 tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) - zaggliga - zaggligb 331 198 zlcoll3d(ji,jj,jk) = zaggliga + zaggligb … … 334 201 END DO 335 202 ! 336 IF( .NOT.ln_fechem) THEN 337 plig(:,:,:) = MAX( 0., ( ( zFeL1(:,:,:) * 1E-9 ) / ( trb(:,:,:,jpfer) +rtrn ) ) ) 338 ENDIF 203 plig(:,:,:) = MAX( 0., ( ( zFeL1(:,:,:) * 1E-9 ) / ( trb(:,:,:,jpfer) +rtrn ) ) ) 339 204 ! 340 205 ENDIF … … 343 208 IF( lk_iomput ) THEN 344 209 IF( knt == nrdttrc ) THEN 345 zrfact2 = 1.e3 * rfact2r ! conversion from mol/L/timestep into mol/m3/s 346 IF( iom_use("Fe3") ) CALL iom_put("Fe3" , zFe3 (:,:,:) * tmask(:,:,:) ) ! Fe3+ 347 IF( iom_use("FeL1") ) CALL iom_put("FeL1" , zFeL1 (:,:,:) * tmask(:,:,:) ) ! FeL1 348 IF( iom_use("TL1") ) CALL iom_put("TL1" , zTL1 (:,:,:) * tmask(:,:,:) ) ! TL1 349 IF( iom_use("Totlig") ) CALL iom_put("Totlig" , ztotlig(:,:,:) * tmask(:,:,:) ) ! TL 350 IF( iom_use("Biron") ) CALL iom_put("Biron" , biron (:,:,:) * 1e9 * tmask(:,:,:) ) ! biron 351 IF( iom_use("FESCAV") ) CALL iom_put("FESCAV" , zscav3d(:,:,:) * 1e9 * tmask(:,:,:) * zrfact2 ) 352 IF( iom_use("FECOLL") ) CALL iom_put("FECOLL" , zcoll3d(:,:,:) * 1e9 * tmask(:,:,:) * zrfact2 ) 353 IF( iom_use("LGWCOLL")) CALL iom_put("LGWCOLL", zlcoll3d(:,:,:) * 1e9 * tmask(:,:,:) * zrfact2 ) 354 IF( ln_fechem ) THEN 355 IF( iom_use("Fe2") ) CALL iom_put("Fe2" , zFe2 (:,:,:) * tmask(:,:,:) ) ! Fe2+ 356 IF( iom_use("FeL2") ) CALL iom_put("FeL2" , zFeL2 (:,:,:) * tmask(:,:,:) ) ! FeL2 357 IF( iom_use("FeP") ) CALL iom_put("FeP" , zFeP (:,:,:) * tmask(:,:,:) ) ! FeP 358 IF( iom_use("TL2") ) CALL iom_put("TL2" , zTL2 (:,:,:) * tmask(:,:,:) ) ! TL2 359 ENDIF 210 zrfact2 = 1.e3 * rfact2r ! conversion from mol/L/timestep into mol/m3/s 211 IF( iom_use("Fe3") ) CALL iom_put("Fe3" , zFe3 (:,:,:) * tmask(:,:,:) ) ! Fe3+ 212 IF( iom_use("FeL1") ) CALL iom_put("FeL1" , zFeL1 (:,:,:) * tmask(:,:,:) ) ! FeL1 213 IF( iom_use("TL1") ) CALL iom_put("TL1" , zTL1 (:,:,:) * tmask(:,:,:) ) ! TL1 214 IF( iom_use("Totlig") ) CALL iom_put("Totlig" , ztotlig(:,:,:) * tmask(:,:,:) ) ! TL 215 IF( iom_use("Biron") ) CALL iom_put("Biron" , biron (:,:,:) * 1e9 * tmask(:,:,:) ) ! biron 216 IF( iom_use("FESCAV") ) CALL iom_put("FESCAV" , zscav3d(:,:,:) * 1e9 * tmask(:,:,:) * zrfact2 ) 217 IF( iom_use("FECOLL") ) CALL iom_put("FECOLL" , zcoll3d(:,:,:) * 1e9 * tmask(:,:,:) * zrfact2 ) 218 IF( iom_use("LGWCOLL")) CALL iom_put("LGWCOLL", zlcoll3d(:,:,:) * 1e9 * tmask(:,:,:) * zrfact2 ) 360 219 ENDIF 361 220 ENDIF … … 367 226 ENDIF 368 227 ! 369 IF( ln_fechem ) THEN370 DEALLOCATE( zstrn, zstrn2 )371 DEALLOCATE( zFe2, zFeL2, zTL2, zFeP )372 ENDIF373 !374 228 IF( ln_timing ) CALL timing_stop('p4z_fechem') 375 229 ! … … 391 245 INTEGER :: ios ! Local integer 392 246 !! 393 NAMELIST/nampisfer/ ln_ fechem, ln_ligvar, xlam1, xlamdust, ligand, kfep247 NAMELIST/nampisfer/ ln_ligvar, xlam1, xlamdust, ligand, kfep 394 248 !!---------------------------------------------------------------------- 395 249 ! … … 410 264 IF(lwp) THEN ! control print 411 265 WRITE(numout,*) ' Namelist : nampisfer' 412 WRITE(numout,*) ' enable complex iron chemistry scheme ln_fechem =', ln_fechem413 266 WRITE(numout,*) ' variable concentration of ligand ln_ligvar =', ln_ligvar 414 267 WRITE(numout,*) ' scavenging rate of Iron xlam1 =', xlam1 … … 418 271 ENDIF 419 272 ! 420 IF (ln_ligand .AND. ln_fechem) CALL ctl_stop( 'STOP', 'p4z_fechem_init: ln_ligand and ln_fechem are incompatible')421 !422 IF( ln_fechem ) THEN ! set some constants used by the complexe chemistry scheme423 !424 spd = 3600. * 24.425 con = 1.E9426 ! LIGAND KINETICS (values from Witter et al. 2000)427 ! Weak (L2) ligands428 ! Phaeophytin429 kl2 = 12.2E5 * spd / con430 kb2 = 12.3E-6 * spd431 ! Strong (L1) ligands432 ! Saccharides433 ! kl1 = 12.2E5 * spd / con434 ! kb1 = 12.3E-6 * spd435 ! DFOB-436 kl1 = 19.6e5 * spd / con437 kb1 = 1.5e-6 * spd438 ! pcp and remin of Fe3p439 ks = 0.075440 kpr = 0.05441 ! thermal reduction of Fe3442 kth = 0.0048 * 24.443 !444 ENDIF445 !446 273 END SUBROUTINE p4z_fechem_init 447 274 -
NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/TOP/PISCES/P4Z/p4zligand.F90
r10368 r10419 25 25 REAL(wp), PUBLIC :: rlig !: Remin ligand production 26 26 REAL(wp), PUBLIC :: prlgw !: Photochemical of weak ligand 27 REAL(wp), PUBLIC :: rfep !: Dissolution rate of FeP28 27 29 28 !!---------------------------------------------------------------------- … … 43 42 ! 44 43 INTEGER :: ji, jj, jk 45 REAL(wp) :: zlgwp, zlgwpr, zlgwr, zlablgw , zrfepa, zfepr44 REAL(wp) :: zlgwp, zlgwpr, zlgwr, zlablgw 46 45 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zligrem, zligpr, zrligprod 47 46 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zw3d … … 71 70 zligpr(ji,jj,jk) = zlgwpr 72 71 zrligprod(ji,jj,jk) = zlgwp 73 !74 ! ----------------------------------------------------------75 ! Dissolution of nanoparticle Fe76 ! ----------------------------------------------------------77 ! dissolution rate is maximal in the presence of light and78 ! lower in the aphotici zone79 ! ! 25 Wm-2 constant80 zrfepa = rfep * ( 1. - EXP( -1. * etot(ji,jj,jk) / 25. ) ) * (1.- fr_i(ji,jj))81 zrfepa = MAX( (zrfepa / 10.0), zrfepa ) ! min of 10 days lifetime82 zfepr = rfep * xstep * trb(ji,jj,jk,jpfep)83 tra(ji,jj,jk,jpfep) = tra(ji,jj,jk,jpfep) - zfepr84 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zfepr85 72 ! 86 73 END DO … … 130 117 INTEGER :: ios ! Local integer 131 118 ! 132 NAMELIST/nampislig/ rlgw, prlgw, rlgs, r fep, rlig119 NAMELIST/nampislig/ rlgw, prlgw, rlgs, rlig 133 120 !!---------------------------------------------------------------------- 134 121 ! … … 148 135 IF(lwp) THEN ! control print 149 136 WRITE(numout,*) ' Namelist : nampislig' 150 WRITE(numout,*) ' Dissolution rate of FeP rfep =', rfep151 137 WRITE(numout,*) ' Lifetime (years) of weak ligands rlgw =', rlgw 152 138 WRITE(numout,*) ' Remin ligand production per unit C rlig =', rlig -
NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/TOP/PISCES/P4Z/p4zprod.F90
r10368 r10419 26 26 PUBLIC p4z_prod_alloc 27 27 28 LOGICAL , PUBLIC :: ln_newprod !:29 28 REAL(wp), PUBLIC :: pislopen !: 30 29 REAL(wp), PUBLIC :: pisloped !: … … 156 155 END DO 157 156 158 IF( ln_newprod ) THEN 159 DO jk = 1, jpkm1 160 DO jj = 1, jpj 161 DO ji = 1, jpi 162 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 163 ! Computation of production function for Carbon 164 ! --------------------------------------------- 165 zpislopen = zpislopeadn(ji,jj,jk) / ( ( r1_rday + bresp * r1_rday ) & 166 & * zmxl_fac(ji,jj,jk) * rday + rtrn) 167 zpisloped = zpislopeadd(ji,jj,jk) / ( ( r1_rday + bresp * r1_rday ) & 168 & * zmxl_fac(ji,jj,jk) * rday + rtrn) 169 zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1.- EXP( -zpislopen * enano(ji,jj,jk) ) ) 170 zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediat(ji,jj,jk) ) ) 171 ! Computation of production function for Chlorophyll 172 !-------------------------------------------------- 173 zpislopen = zpislopeadn(ji,jj,jk) / ( zprmaxn(ji,jj,jk) * zmxl_chl(ji,jj,jk) * rday + rtrn ) 174 zpisloped = zpislopeadd(ji,jj,jk) / ( zprmaxd(ji,jj,jk) * zmxl_chl(ji,jj,jk) * rday + rtrn ) 175 zprnch(ji,jj,jk) = zprmaxn(ji,jj,jk) * ( 1.- EXP( -zpislopen * enanom(ji,jj,jk) ) ) 176 zprdch(ji,jj,jk) = zprmaxd(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediatm(ji,jj,jk) ) ) 177 ENDIF 178 END DO 179 END DO 180 END DO 181 ELSE 182 DO jk = 1, jpkm1 183 DO jj = 1, jpj 184 DO ji = 1, jpi 185 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 186 ! Computation of production function for Carbon 187 ! --------------------------------------------- 188 zpislopen = zpislopeadn(ji,jj,jk) / ( zprbio(ji,jj,jk) * rday * xlimphy(ji,jj,jk) + rtrn ) 189 zpisloped = zpislopeadd(ji,jj,jk) / ( zprdia(ji,jj,jk) * rday * xlimdia(ji,jj,jk) + rtrn ) 190 zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1.- EXP( -zpislopen * enano(ji,jj,jk) ) ) 191 zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediat(ji,jj,jk) ) ) 192 ! Computation of production function for Chlorophyll 193 !-------------------------------------------------- 194 zpislopen = zpislopen * zmxl_fac(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 195 zpisloped = zpisloped * zmxl_fac(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 196 zprnch(ji,jj,jk) = zprmaxn(ji,jj,jk) * ( 1.- EXP( -zpislopen * enanom(ji,jj,jk) ) ) 197 zprdch(ji,jj,jk) = zprmaxd(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediatm(ji,jj,jk) ) ) 198 ENDIF 199 END DO 200 END DO 201 END DO 202 ENDIF 157 DO jk = 1, jpkm1 158 DO jj = 1, jpj 159 DO ji = 1, jpi 160 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 161 ! Computation of production function for Carbon 162 ! --------------------------------------------- 163 zpislopen = zpislopeadn(ji,jj,jk) / ( ( r1_rday + bresp * r1_rday ) & 164 & * zmxl_fac(ji,jj,jk) * rday + rtrn) 165 zpisloped = zpislopeadd(ji,jj,jk) / ( ( r1_rday + bresp * r1_rday ) & 166 & * zmxl_fac(ji,jj,jk) * rday + rtrn) 167 zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1.- EXP( -zpislopen * enano(ji,jj,jk) ) ) 168 zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediat(ji,jj,jk) ) ) 169 ! Computation of production function for Chlorophyll 170 !-------------------------------------------------- 171 zpislopen = zpislopeadn(ji,jj,jk) / ( zprmaxn(ji,jj,jk) * zmxl_chl(ji,jj,jk) * rday + rtrn ) 172 zpisloped = zpislopeadd(ji,jj,jk) / ( zprmaxd(ji,jj,jk) * zmxl_chl(ji,jj,jk) * rday + rtrn ) 173 zprnch(ji,jj,jk) = zprmaxn(ji,jj,jk) * ( 1.- EXP( -zpislopen * enanom(ji,jj,jk) ) ) 174 zprdch(ji,jj,jk) = zprmaxd(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediatm(ji,jj,jk) ) ) 175 ENDIF 176 END DO 177 END DO 178 END DO 203 179 204 180 ! Computation of a proxy of the N/C ratio … … 505 481 INTEGER :: ios ! Local integer 506 482 ! 507 NAMELIST/namp4zprod/ pislopen, pisloped, xadap, ln_newprod,bresp, excretn, excretd, &483 NAMELIST/namp4zprod/ pislopen, pisloped, xadap, bresp, excretn, excretd, & 508 484 & chlcnm, chlcdm, chlcmin, fecnm, fecdm, grosip 509 485 !!---------------------------------------------------------------------- … … 525 501 IF(lwp) THEN ! control print 526 502 WRITE(numout,*) ' Namelist : namp4zprod' 527 WRITE(numout,*) ' Enable new parame. of production (T/F) ln_newprod =', ln_newprod528 503 WRITE(numout,*) ' mean Si/C ratio grosip =', grosip 529 504 WRITE(numout,*) ' P-I slope pislopen =', pislopen … … 531 506 WRITE(numout,*) ' excretion ratio of nanophytoplankton excretn =', excretn 532 507 WRITE(numout,*) ' excretion ratio of diatoms excretd =', excretd 533 IF( ln_newprod ) THEN 534 WRITE(numout,*) ' basal respiration in phytoplankton bresp =', bresp 535 WRITE(numout,*) ' Maximum Chl/C in phytoplankton chlcmin =', chlcmin 536 ENDIF 508 WRITE(numout,*) ' basal respiration in phytoplankton bresp =', bresp 509 WRITE(numout,*) ' Maximum Chl/C in phytoplankton chlcmin =', chlcmin 537 510 WRITE(numout,*) ' P-I slope for diatoms pisloped =', pisloped 538 511 WRITE(numout,*) ' Minimum Chl/C in nanophytoplankton chlcnm =', chlcnm -
NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/TOP/PISCES/P4Z/p4zsbc.F90
r10368 r10419 31 31 REAL(wp), PUBLIC :: dustsolub !: Solubility of the dust 32 32 REAL(wp), PUBLIC :: mfrac !: Mineral Content of the dust 33 REAL(wp), PUBLIC :: rdustfep !: Fraction of dust that is dissolvable34 33 REAL(wp), PUBLIC :: icefeinput !: Iron concentration in sea ice 35 34 REAL(wp), PUBLIC :: wdust !: Sinking speed of the dust … … 39 38 REAL(wp) :: hratio !: Fe:3He ratio assumed for vent iron supply 40 39 REAL(wp) :: distcoast !: Distance off the coast for Iron from sediments 41 REAL(wp), PUBLIC :: fep_rats !: Fep/Fer ratio from sed sources42 REAL(wp), PUBLIC :: fep_rath !: Fep/Fer ratio from hydro sources43 40 REAL(wp), PUBLIC :: lgw_rath !: Weak ligand ratio from hydro sources 44 41 … … 228 225 & ln_dust, ln_solub, ln_river, ln_ndepo, ln_ironsed, ln_ironice, ln_hydrofe, & 229 226 & sedfeinput, distcoast, dustsolub, icefeinput, wdust, mfrac, nitrfix, diazolight, concfediaz, & 230 & hratio, fep_rats, fep_rath, rdustfep,lgw_rath227 & hratio, lgw_rath 231 228 !!---------------------------------------------------------------------- 232 229 ! … … 265 262 WRITE(numout,*) ' Fe to 3He ratio assumed for vent iron supply hratio = ', hratio 266 263 IF( ln_ligand ) THEN 267 WRITE(numout,*) ' Fep/Fer ratio from sed sources fep_rats = ', fep_rats268 WRITE(numout,*) ' Fep/Fer ratio from sed hydro sources fep_rath = ', fep_rath269 WRITE(numout,*) ' Fraction of dust that is dissolvable rdustfep = ', rdustfep270 264 WRITE(numout,*) ' Weak ligand ratio from sed hydro sources lgw_rath = ', lgw_rath 271 265 ENDIF -
NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/TOP/PISCES/P4Z/p4zsed.F90
r10368 r10419 60 60 REAL(wp) :: ztrfer, ztrpo4s, ztrdp, zwdust, zmudia, ztemp 61 61 REAL(wp) :: xdiano3, xdianh4 62 REAL(wp) :: zwssfep63 62 ! 64 63 CHARACTER (len=25) :: charout … … 68 67 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zsoufer, zlight 69 68 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: ztrpo4, ztrdop, zirondep, zpdep 70 REAL(wp), ALLOCATABLE, DIMENSION(:,: ) :: zsidep, z wsfep, zironice69 REAL(wp), ALLOCATABLE, DIMENSION(:,: ) :: zsidep, zironice 71 70 !!--------------------------------------------------------------------- 72 71 ! … … 87 86 ALLOCATE( ztrpo4(jpi,jpj,jpk) ) 88 87 IF( ln_p5z ) ALLOCATE( ztrdop(jpi,jpj,jpk) ) 89 IF( ln_ligand ) ALLOCATE( zwsfep(jpi,jpj) )90 88 91 89 zdenit2d(:,:) = 0.e0 … … 131 129 ELSE 132 130 zirondep(:,:,1) = dustsolub * dust(:,:) * mfrac * rfact2 / e3t_n(:,:,1) / 55.85 + 3.e-10 * r1_ryyss 133 ENDIF134 IF ( ln_ligand ) THEN135 IF( ln_solub ) THEN136 tra(:,:,1,jpfep) = tra(:,:,1,jpfep) + rdustfep * (1.0 - solub(:,:)) * dust(:,:) * mfrac * rfact2 / e3t_n(:,:,1) / 55.85137 ELSE138 tra(:,:,1,jpfep) = tra(:,:,1,jpfep) + rdustfep * (1.0 - dustsolub) * dust(:,:) * mfrac * rfact2 / e3t_n(:,:,1) / 55.85139 ENDIF140 131 ENDIF 141 132 zsidep(:,:) = 8.8 * 0.075 * dust(:,:) * mfrac * rfact2 / e3t_n(:,:,1) / 28.1 … … 216 207 tra(:,:,:,jpfer) = tra(:,:,:,jpfer) + hydrofe(:,:,:) * rfact2 217 208 IF( ln_ligand ) THEN 218 tra(:,:,:,jpfep) = tra(:,:,:,jpfep) + ( hydrofe(:,:,:) * fep_rath ) * rfact2219 209 tra(:,:,:,jplgw) = tra(:,:,:,jplgw) + ( hydrofe(:,:,:) * lgw_rath ) * rfact2 220 210 ENDIF … … 235 225 END DO 236 226 ! 237 IF( ln_ligand ) THEN238 DO jj = 1, jpj239 DO ji = 1, jpi240 ikt = mbkt(ji,jj)241 zdep = e3t_n(ji,jj,ikt) / xstep242 zwsfep(ji,jj) = MIN( 0.99 * zdep, wsfep(ji,jj,ikt) )243 END DO244 ENDDO245 ENDIF246 247 227 IF( .NOT.lk_sed ) THEN 248 228 ! … … 251 231 IF( ln_ironsed ) THEN 252 232 tra(:,:,:,jpfer) = tra(:,:,:,jpfer) + ironsed(:,:,:) * rfact2 253 IF( ln_ligand ) tra(:,:,:,jpfep) = tra(:,:,:,jpfep) + ( ironsed(:,:,:) * fep_rats ) * rfact2254 233 ! 255 234 IF( lk_iomput .AND. knt == nrdttrc .AND. iom_use( "Ironsed" ) ) & … … 334 313 END DO 335 314 END DO 336 !337 IF( ln_ligand ) THEN338 DO jj = 1, jpj339 DO ji = 1, jpi340 ikt = mbkt(ji,jj)341 zdep = xstep / e3t_n(ji,jj,ikt)342 zwssfep = zwsfep(ji,jj) * zdep343 tra(ji,jj,ikt,jpfep) = tra(ji,jj,ikt,jpfep) - trb(ji,jj,ikt,jpfep) * zwssfep344 END DO345 END DO346 ENDIF347 315 ! 348 316 IF( ln_p5z ) THEN … … 524 492 ! 525 493 IF( ln_p5z ) DEALLOCATE( ztrpo4, ztrdop ) 526 IF( ln_ligand ) DEALLOCATE( zwsfep )527 494 ! 528 495 IF( ln_timing ) CALL timing_stop('p4z_sed') -
NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/TOP/PISCES/P4Z/p4zsink.F90
r10377 r10419 35 35 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sinkfer !: Small BFe sinking fluxes 36 36 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sinkfer2 !: Big iron sinking fluxes 37 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sinkfep !: Fep sinking fluxes38 37 39 38 INTEGER :: ik100 … … 126 125 ENDIF 127 126 128 IF( ln_ligand ) THEN129 wsfep (:,:,:) = wfep130 !131 sinkfep(:,:,:) = 0.e0132 CALL trc_sink( kt, wsfep, sinkfep , jpfep, rfact2 )133 ENDIF134 135 127 ! Total carbon export per year 136 128 IF( iom_use( "tcexp" ) .OR. ( ln_check_mass .AND. kt == nitend .AND. knt == nrdttrc ) ) & … … 214 206 !! *** ROUTINE p4z_sink_alloc *** 215 207 !!---------------------------------------------------------------------- 216 INTEGER :: ierr( 3)208 INTEGER :: ierr(2) 217 209 !!---------------------------------------------------------------------- 218 210 ! … … 224 216 & sinkfer(jpi,jpj,jpk) , STAT=ierr(1) ) 225 217 ! 226 IF( ln_ligand ) ALLOCATE( sinkfep(jpi,jpj,jpk) , STAT=ierr(2) )227 228 218 IF( ln_p5z ) ALLOCATE( sinkingn(jpi,jpj,jpk), sinking2n(jpi,jpj,jpk) , & 229 & sinkingp(jpi,jpj,jpk), sinking2p(jpi,jpj,jpk) , STAT=ierr( 3) )219 & sinkingp(jpi,jpj,jpk), sinking2p(jpi,jpj,jpk) , STAT=ierr(2) ) 230 220 ! 231 221 p4z_sink_alloc = MAXVAL( ierr ) -
NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/TOP/PISCES/P4Z/p4zsms.F90
r10377 r10419 74 74 CALL p4z_che ! initialize the chemical constants 75 75 CALL ahini_for_at(hi) ! set PH at kt=nit000 76 t_oce_co2_flx_cum = 0._wp 76 77 ELSE 77 78 CALL p4z_rst( nittrc000, 'READ' ) !* read or initialize all required fields … … 188 189 !! 189 190 NAMELIST/nampisbio/ nrdttrc, wsbio, xkmort, ferat3, wsbio2, wsbio2max, wsbio2scale, & 190 & wfep, ldocp, ldocz, lthet, & 191 & no3rat3, po4rat3 191 & ldocp, ldocz, lthet, no3rat3, po4rat3 192 192 ! 193 193 NAMELIST/nampisdmp/ ln_pisdmp, nn_pisdmp … … 223 223 WRITE(numout,*) ' Big particles sinking speed length scale wsbio2scale =', wsbio2scale 224 224 IF( ln_ligand ) THEN 225 WRITE(numout,*) ' FeP sinking speed wfep =', wfep226 225 IF( ln_p4z ) THEN 227 226 WRITE(numout,*) ' Phyto ligand production per unit doc ldocp =', ldocp … … 493 492 & + trn(:,:,:,jpbfe) + trn(:,:,:,jpsfe) & 494 493 & + ( trn(:,:,:,jpzoo) + trn(:,:,:,jpmes) ) * ferat3 495 IF( ln_ligand) zwork(:,:,:) = zwork(:,:,:) + trn(:,:,:,jpfep)496 494 ! 497 495 ferbudget = glob_sum( 'p4zsms', zwork(:,:,:) * cvol(:,:,:) ) -
NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/TOP/PISCES/par_pisces.F90
r10068 r10419 56 56 INTEGER, PUBLIC :: jpgop !: Big phosphorus particles Concentration 57 57 INTEGER, PUBLIC :: jplgw !: Weak Ligands 58 INTEGER, PUBLIC :: jpfep !: Fe nanoparticle59 58 60 59 !!--------------------------------------------------------------------- -
NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/TOP/PISCES/sms_pisces.F90
r10377 r10419 47 47 REAL(wp) :: xkmort !: ??? 48 48 REAL(wp) :: ferat3 !: ??? 49 REAL(wp) :: wfep !: ???50 49 REAL(wp) :: ldocp !: ??? 51 50 REAL(wp) :: ldocz !: ??? … … 90 89 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: wsbio3 !: POC sinking speed 91 90 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: wsbio4 !: GOC sinking speed 92 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: wsfep93 94 95 91 96 92 !!* SMS for the organic matter … … 175 171 ! 176 172 IF( ln_ligand ) THEN 177 ALLOCATE( plig(jpi,jpj,jpk) , wsfep(jpi,jpj,jpk) ,STAT=ierr(8) )173 ALLOCATE( plig(jpi,jpj,jpk) , STAT=ierr(8) ) 178 174 ENDIF 179 !180 175 ENDIF 181 176 ! -
NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/TOP/PISCES/trcini_pisces.F90
r10402 r10419 168 168 IF( cltra == 'PFe' ) jppfe = jn !: Picophytoplankton Fe biomass 169 169 IF( cltra == 'LGW' ) jplgw = jn !: Weak ligands 170 IF( cltra == 'LFe' ) jpfep = jn !: Fe nanoparticle171 170 END DO 172 171 … … 216 215 IF( ln_ligand) THEN 217 216 trn(:,:,:,jplgw) = 0.6E-9 218 trn(:,:,:,jpfep) = 0. * 5.e-6219 217 ENDIF 220 218 IF( ln_p5z ) THEN
Note: See TracChangeset
for help on using the changeset viewer.