p4zfechem.F90 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403
  1. MODULE p4zfechem
  2. !!======================================================================
  3. !! *** MODULE p4zfechem ***
  4. !! TOP : PISCES Compute iron chemistry and scavenging
  5. !!======================================================================
  6. !! History : 3.5 ! 2012-07 (O. Aumont, A. Tagliabue, C. Ethe) Original code
  7. !!----------------------------------------------------------------------
  8. #if defined key_pisces
  9. !!----------------------------------------------------------------------
  10. !! 'key_top' and TOP models
  11. !! 'key_pisces' PISCES bio-model
  12. !!----------------------------------------------------------------------
  13. !! p4z_fechem : Compute remineralization/scavenging of iron
  14. !! p4z_fechem_init : Initialisation of parameters for remineralisation
  15. !! p4z_fechem_alloc : Allocate remineralisation variables
  16. !!----------------------------------------------------------------------
  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 p4zopt ! optical model
  21. USE p4zche ! chemical model
  22. USE p4zsbc ! Boundary conditions from sediments
  23. USE prtctl_trc ! print control for debugging
  24. USE iom ! I/O manager
  25. IMPLICIT NONE
  26. PRIVATE
  27. PUBLIC p4z_fechem ! called in p4zbio.F90
  28. PUBLIC p4z_fechem_init ! called in trcsms_pisces.F90
  29. !! * Shared module variables
  30. LOGICAL :: ln_fechem !: boolean for complex iron chemistry following Tagliabue and voelker
  31. LOGICAL :: ln_ligvar !: boolean for variable ligand concentration following Tagliabue and voelker
  32. REAL(wp), PUBLIC :: xlam1 !: scavenging rate of Iron
  33. REAL(wp), PUBLIC :: xlamdust !: scavenging rate of Iron by dust
  34. REAL(wp), PUBLIC :: ligand !: ligand concentration in the ocean
  35. REAL(wp) :: kl1, kl2, kb1, kb2, ks, kpr, spd, con, kth
  36. !!* Substitution
  37. # include "top_substitute.h90"
  38. !!----------------------------------------------------------------------
  39. !! NEMO/TOP 3.3 , NEMO Consortium (2010)
  40. !! $Id: p4zrem.F90 3160 2011-11-20 14:27:18Z cetlod $
  41. !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
  42. !!----------------------------------------------------------------------
  43. CONTAINS
  44. SUBROUTINE p4z_fechem( kt, knt )
  45. !!---------------------------------------------------------------------
  46. !! *** ROUTINE p4z_fechem ***
  47. !!
  48. !! ** Purpose : Compute remineralization/scavenging of iron
  49. !!
  50. !! ** Method : 2 different chemistry models are available for iron
  51. !! (1) The simple chemistry model of Aumont and Bopp (2006)
  52. !! based on one ligand and one inorganic form
  53. !! (2) The complex chemistry model of Tagliabue and
  54. !! Voelker (2009) based on 2 ligands, 2 inorganic forms
  55. !! and one particulate form (ln_fechem)
  56. !!---------------------------------------------------------------------
  57. !
  58. INTEGER, INTENT(in) :: kt, knt ! ocean time step
  59. !
  60. INTEGER :: ji, jj, jk, jic
  61. REAL(wp) :: zdep, zlam1a, zlam1b, zlamfac
  62. REAL(wp) :: zkeq, zfeequi, zfesatur, zfecoll
  63. REAL(wp) :: zdenom1, zscave, zaggdfea, zaggdfeb, zcoag
  64. REAL(wp) :: ztrc, zdust
  65. #if ! defined key_kriest
  66. REAL(wp) :: zdenom, zdenom2
  67. #endif
  68. REAL(wp), POINTER, DIMENSION(:,:,:) :: zTL1, zFe3, ztotlig
  69. REAL(wp), POINTER, DIMENSION(:,:,:) :: zFeL1, zFeL2, zTL2, zFe2, zFeP
  70. REAL(wp) :: zkox, zkph1, zkph2, zph, zionic, ztligand
  71. REAL(wp) :: za, zb, zc, zkappa1, zkappa2, za0, za1, za2
  72. REAL(wp) :: zxs, zfunc, zp, zq, zd, zr, zphi, zfff, zp3, zq2
  73. REAL(wp) :: ztfe, zoxy
  74. REAL(wp) :: zstep
  75. CHARACTER (len=25) :: charout
  76. !!---------------------------------------------------------------------
  77. !
  78. IF( nn_timing == 1 ) CALL timing_start('p4z_fechem')
  79. !
  80. ! Allocate temporary workspace
  81. CALL wrk_alloc( jpi, jpj, jpk, zFe3, zFeL1, zTL1, ztotlig )
  82. zFe3 (:,:,:) = 0.
  83. zFeL1(:,:,:) = 0.
  84. zTL1 (:,:,:) = 0.
  85. IF( ln_fechem ) THEN
  86. CALL wrk_alloc( jpi, jpj, jpk, zFe2, zFeL2, zTL2, zFeP )
  87. zFe2 (:,:,:) = 0.
  88. zFeL2(:,:,:) = 0.
  89. zTL2 (:,:,:) = 0.
  90. zFeP (:,:,:) = 0.
  91. ENDIF
  92. !Initialization of zxs to zero to avoid SEG FAULT if it's not assigned any value at first time step - Raffa July 2018
  93. zxs = 0.
  94. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  95. ! Total ligand concentration : Ligands can be chosen to be constant or variable
  96. ! Parameterization from Tagliabue and Voelker (2011)
  97. ! -------------------------------------------------
  98. IF( ln_ligvar ) THEN
  99. ztotlig(:,:,:) = 0.09 * trb(:,:,:,jpdoc) * 1E6 + ligand * 1E9
  100. ztotlig(:,:,:) = MIN( ztotlig(:,:,:), 10. )
  101. ELSE
  102. ztotlig(:,:,:) = ligand * 1E9
  103. ENDIF
  104. IF( ln_fechem ) THEN
  105. ! ------------------------------------------------------------
  106. ! NEW FE CHEMISTRY ROUTINE from Tagliabue and Volker (2009)
  107. ! This model is based on two ligands, Fe2+, Fe3+ and Fep
  108. ! Chemistry is supposed to be fast enough to be at equilibrium
  109. ! ------------------------------------------------------------
  110. !CDIR NOVERRCHK
  111. DO jk = 1, jpkm1
  112. !CDIR NOVERRCHK
  113. DO jj = 1, jpj
  114. !CDIR NOVERRCHK
  115. DO ji = 1, jpi
  116. ! Calculate ligand concentrations : assume 2/3rd of excess goes to
  117. ! strong ligands (L1) and 1/3rd to weak ligands (L2)
  118. ztligand = ztotlig(ji,jj,jk) - ligand * 1E9
  119. zTL1(ji,jj,jk) = 0.000001 + 0.67 * ztligand
  120. zTL2(ji,jj,jk) = ligand * 1E9 - 0.000001 + 0.33 * ztligand
  121. ! ionic strength from Millero et al. 1987
  122. zionic = 19.9201 * tsn(ji,jj,jk,jp_sal) / ( 1000. - 1.00488 * tsn(ji,jj,jk,jp_sal) + rtrn )
  123. zph = -LOG10( MAX( hi(ji,jj,jk), rtrn) )
  124. zoxy = trb(ji,jj,jk,jpoxy) * ( rhop(ji,jj,jk) / 1.e3 )
  125. ! Fe2+ oxydation rate from Santana-Casiano et al. (2005)
  126. zkox = 35.407 - 6.7109 * zph + 0.5342 * zph * zph - 5362.6 / ( tsn(ji,jj,jk,jp_tem) + 273.15 ) &
  127. & - 0.04406 * SQRT( tsn(ji,jj,jk,jp_sal) ) - 0.002847 * tsn(ji,jj,jk,jp_sal)
  128. zkox = ( 10.** zkox ) * spd
  129. zkox = zkox * MAX( 1.e-6, zoxy) / ( chemo2(ji,jj,jk) + rtrn )
  130. ! PHOTOREDUCTION of complexed iron : Tagliabue and Arrigo (2006)
  131. zkph2 = MAX( 0., 15. * etot(ji,jj,jk) / ( etot(ji,jj,jk) + 2. ) )
  132. zkph1 = zkph2 / 5.
  133. ! pass the dfe concentration from PISCES
  134. ztfe = trb(ji,jj,jk,jpfer) * 1e9
  135. ! ----------------------------------------------------------
  136. ! ANALYTICAL SOLUTION OF ROOTS OF THE FE3+ EQUATION
  137. ! As shown in Tagliabue and Voelker (2009), Fe3+ is the root of a 3rd order polynom.
  138. ! ----------------------------------------------------------
  139. ! calculate some parameters
  140. za = 1 + ks / kpr
  141. zb = 1 + ( zkph1 + kth ) / ( zkox + rtrn )
  142. zc = 1 + zkph2 / ( zkox + rtrn )
  143. zkappa1 = ( kb1 + zkph1 + kth ) / kl1
  144. zkappa2 = ( kb2 + zkph2 ) / kl2
  145. za2 = zTL1(ji,jj,jk) * zb / za + zTL2(ji,jj,jk) * zc / za + zkappa1 + zkappa2 - ztfe / za
  146. za1 = zkappa2 * zTL1(ji,jj,jk) * zb / za + zkappa1 * zTL2(ji,jj,jk) * zc / za &
  147. & + zkappa1 * zkappa2 - ( zkappa1 + zkappa2 ) * ztfe / za
  148. za0 = -zkappa1 * zkappa2 * ztfe / za
  149. zp = za1 - za2 * za2 / 3.
  150. zq = za2 * za2 * za2 * 2. / 27. - za2 * za1 / 3. + za0
  151. zp3 = zp / 3.
  152. zq2 = zq / 2.
  153. zd = zp3 * zp3 * zp3 + zq2 * zq2
  154. zr = zq / ABS( zq ) * SQRT( ABS( zp ) / 3. )
  155. ! compute the roots
  156. IF( zp > 0.) THEN
  157. ! zphi = ASINH( zq / ( 2. * zr * zr * zr ) )
  158. zphi = zq / ( 2. * zr * zr * zr )
  159. zphi = LOG( zphi + SQRT( zphi * zphi + 1 ) ) ! asinh(x) = log(x + sqrt(x^2+1))
  160. zxs = -2. * zr * SINH( zphi / 3. ) - za1 / 3.
  161. ELSE
  162. IF( zd > 0. ) THEN
  163. zfff = MAX( 1., zq / ( 2. * zr * zr * zr ) )
  164. ! zphi = ACOSH( zfff )
  165. zphi = LOG( zfff + SQRT( zfff * zfff - 1 ) ) ! acosh(x) = log(x + sqrt(x^2-1))
  166. zxs = -2. * zr * COSH( zphi / 3. ) - za1 / 3.
  167. ELSE
  168. zfff = MIN( 1., zq / ( 2. * zr * zr * zr ) )
  169. zphi = ACOS( zfff )
  170. DO jic = 1, 3
  171. zfunc = -2 * zr * COS( zphi / 3. + 2. * FLOAT( jic - 1 ) * rpi / 3. ) - za2 / 3.
  172. IF( zfunc > 0. .AND. zfunc <= ztfe) zxs = zfunc
  173. END DO
  174. ENDIF
  175. ENDIF
  176. ! solve for the other Fe species
  177. zFe3(ji,jj,jk) = MAX( 0., zxs )
  178. zFep(ji,jj,jk) = MAX( 0., ( ks * zFe3(ji,jj,jk) / kpr ) )
  179. zkappa2 = ( kb2 + zkph2 ) / kl2
  180. zFeL2(ji,jj,jk) = MAX( 0., ( zFe3(ji,jj,jk) * zTL2(ji,jj,jk) ) / ( zkappa2 + zFe3(ji,jj,jk) ) )
  181. zFeL1(ji,jj,jk) = MAX( 0., ( ztfe / zb - za / zb * zFe3(ji,jj,jk) - zc / zb * zFeL2(ji,jj,jk) ) )
  182. zFe2 (ji,jj,jk) = MAX( 0., ( ( zkph1 * zFeL1(ji,jj,jk) + zkph2 * zFeL2(ji,jj,jk) ) / zkox ) )
  183. END DO
  184. END DO
  185. END DO
  186. ELSE
  187. ! ------------------------------------------------------------
  188. ! OLD FE CHEMISTRY ROUTINE from Aumont and Bopp (2006)
  189. ! This model is based on one ligand and Fe'
  190. ! Chemistry is supposed to be fast enough to be at equilibrium
  191. ! ------------------------------------------------------------
  192. !CDIR NOVERRCHK
  193. DO jk = 1, jpkm1
  194. !CDIR NOVERRCHK
  195. DO jj = 1, jpj
  196. !CDIR NOVERRCHK
  197. DO ji = 1, jpi
  198. zTL1(ji,jj,jk) = ztotlig(ji,jj,jk)
  199. zkeq = fekeq(ji,jj,jk)
  200. zfesatur = zTL1(ji,jj,jk) * 1E-9
  201. ztfe = trb(ji,jj,jk,jpfer)
  202. ! Fe' is the root of a 2nd order polynom
  203. zFe3 (ji,jj,jk) = ( -( 1. + zfesatur * zkeq - zkeq * ztfe ) &
  204. & + SQRT( ( 1. + zfesatur * zkeq - zkeq * ztfe )**2 &
  205. & + 4. * ztfe * zkeq) ) / ( 2. * zkeq )
  206. zFe3 (ji,jj,jk) = zFe3(ji,jj,jk) * 1E9
  207. zFeL1(ji,jj,jk) = MAX( 0., trb(ji,jj,jk,jpfer) * 1E9 - zFe3(ji,jj,jk) )
  208. END DO
  209. END DO
  210. END DO
  211. !
  212. ENDIF
  213. zdust = 0. ! if no dust available
  214. !CDIR NOVERRCHK
  215. DO jk = 1, jpkm1
  216. !CDIR NOVERRCHK
  217. DO jj = 1, jpj
  218. !CDIR NOVERRCHK
  219. DO ji = 1, jpi
  220. zstep = xstep
  221. # if defined key_degrad
  222. zstep = zstep * facvol(ji,jj,jk)
  223. # endif
  224. ! Scavenging rate of iron. This scavenging rate depends on the load of particles of sea water.
  225. ! This parameterization assumes a simple second order kinetics (k[Particles][Fe]).
  226. ! Scavenging onto dust is also included as evidenced from the DUNE experiments.
  227. ! --------------------------------------------------------------------------------------
  228. IF( ln_fechem ) THEN
  229. zfeequi = ( zFe3(ji,jj,jk) + zFe2(ji,jj,jk) + zFeP(ji,jj,jk) ) * 1E-9
  230. zfecoll = ( 0.3 * zFeL1(ji,jj,jk) + 0.5 * zFeL2(ji,jj,jk) ) * 1E-9
  231. ELSE
  232. zfeequi = zFe3(ji,jj,jk) * 1E-9
  233. zfecoll = 0.5 * zFeL1(ji,jj,jk) * 1E-9
  234. ENDIF
  235. #if defined key_kriest
  236. ztrc = ( trb(ji,jj,jk,jppoc) + trb(ji,jj,jk,jpcal) + trb(ji,jj,jk,jpgsi) ) * 1.e6
  237. #else
  238. ztrc = ( trb(ji,jj,jk,jppoc) + trb(ji,jj,jk,jpgoc) + trb(ji,jj,jk,jpcal) + trb(ji,jj,jk,jpgsi) ) * 1.e6
  239. #endif
  240. IF( ln_dust ) zdust = dust(ji,jj) / ( wdust / rday ) * tmask(ji,jj,jk) ! dust in kg/m2/s
  241. zlam1b = 3.e-5 + xlamdust * zdust + xlam1 * ztrc
  242. zscave = zfeequi * zlam1b * zstep
  243. ! Compute the different ratios for scavenging of iron
  244. ! to later allocate scavenged iron to the different organic pools
  245. ! ---------------------------------------------------------
  246. zdenom1 = xlam1 * trb(ji,jj,jk,jppoc) / zlam1b
  247. #if ! defined key_kriest
  248. zdenom2 = xlam1 * trb(ji,jj,jk,jpgoc) / zlam1b
  249. #endif
  250. ! Increased scavenging for very high iron concentrations found near the coasts
  251. ! due to increased lithogenic particles and let say it is unknown processes (precipitation, ...)
  252. ! -----------------------------------------------------------
  253. zlamfac = MAX( 0.e0, ( gphit(ji,jj) + 55.) / 30. )
  254. zlamfac = MIN( 1. , zlamfac )
  255. zdep = MIN( 1., 1000. / fsdept(ji,jj,jk) )
  256. zlam1b = xlam1 * MAX( 0.e0, ( trb(ji,jj,jk,jpfer) * 1.e9 - ztotlig(ji,jj,jk) ) )
  257. zcoag = zfeequi * zlam1b * zstep + 1E-4 * ( 1. - zlamfac ) * zdep * zstep * trb(ji,jj,jk,jpfer)
  258. ! Compute the coagulation of colloidal iron. This parameterization
  259. ! could be thought as an equivalent of colloidal pumping.
  260. ! It requires certainly some more work as it is very poorly constrained.
  261. ! ----------------------------------------------------------------
  262. zlam1a = ( 0.369 * 0.3 * trb(ji,jj,jk,jpdoc) + 102.4 * trb(ji,jj,jk,jppoc) ) * xdiss(ji,jj,jk) &
  263. & + ( 114. * 0.3 * trb(ji,jj,jk,jpdoc) + 5.09E3 * trb(ji,jj,jk,jppoc) )
  264. zaggdfea = zlam1a * zstep * zfecoll
  265. #if defined key_kriest
  266. zaggdfeb = 0.
  267. !
  268. tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - zscave - zaggdfea - zaggdfeb - zcoag
  269. tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zscave * zdenom1 + zaggdfea + zaggdfeb
  270. #else
  271. zlam1b = 3.53E3 * trb(ji,jj,jk,jpgoc) * xdiss(ji,jj,jk)
  272. zaggdfeb = zlam1b * zstep * zfecoll
  273. !
  274. tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - zscave - zaggdfea - zaggdfeb - zcoag
  275. tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zscave * zdenom1 + zaggdfea
  276. tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zscave * zdenom2 + zaggdfeb
  277. #endif
  278. END DO
  279. END DO
  280. END DO
  281. !
  282. ! Define the bioavailable fraction of iron
  283. ! ----------------------------------------
  284. IF( ln_fechem ) THEN
  285. biron(:,:,:) = MAX( 0., trb(:,:,:,jpfer) - zFeP(:,:,:) * 1E-9 )
  286. ELSE
  287. biron(:,:,:) = trb(:,:,:,jpfer)
  288. ENDIF
  289. ! Output of some diagnostics variables
  290. ! ---------------------------------
  291. IF( lk_iomput .AND. knt == nrdttrc ) THEN
  292. IF( iom_use("Fe3") ) CALL iom_put("Fe3" , zFe3 (:,:,:) * tmask(:,:,:) ) ! Fe3+
  293. IF( iom_use("FeL1") ) CALL iom_put("FeL1" , zFeL1 (:,:,:) * tmask(:,:,:) ) ! FeL1
  294. IF( iom_use("TL1") ) CALL iom_put("TL1" , zTL1 (:,:,:) * tmask(:,:,:) ) ! TL1
  295. IF( iom_use("Totlig") ) CALL iom_put("Totlig" , ztotlig(:,:,:) * tmask(:,:,:) ) ! TL
  296. IF( iom_use("Biron") ) CALL iom_put("Biron" , biron (:,:,:) * 1e9 * tmask(:,:,:) ) ! biron
  297. IF( ln_fechem ) THEN
  298. IF( iom_use("Fe2") ) CALL iom_put("Fe2" , zFe2 (:,:,:) * tmask(:,:,:) ) ! Fe2+
  299. IF( iom_use("FeL2") ) CALL iom_put("FeL2" , zFeL2 (:,:,:) * tmask(:,:,:) ) ! FeL2
  300. IF( iom_use("FeP") ) CALL iom_put("FeP" , zFeP (:,:,:) * tmask(:,:,:) ) ! FeP
  301. IF( iom_use("TL2") ) CALL iom_put("TL2" , zTL2 (:,:,:) * tmask(:,:,:) ) ! TL2
  302. ENDIF
  303. ENDIF
  304. IF(ln_ctl) THEN ! print mean trends (used for debugging)
  305. WRITE(charout, FMT="('fechem')")
  306. CALL prt_ctl_trc_info(charout)
  307. CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm)
  308. ENDIF
  309. !
  310. CALL wrk_dealloc( jpi, jpj, jpk, zFe3, zFeL1, zTL1, ztotlig )
  311. IF( ln_fechem ) CALL wrk_dealloc( jpi, jpj, jpk, zFe2, zFeL2, zTL2, zFeP )
  312. !
  313. IF( nn_timing == 1 ) CALL timing_stop('p4z_fechem')
  314. !
  315. END SUBROUTINE p4z_fechem
  316. SUBROUTINE p4z_fechem_init
  317. !!----------------------------------------------------------------------
  318. !! *** ROUTINE p4z_fechem_init ***
  319. !!
  320. !! ** Purpose : Initialization of iron chemistry parameters
  321. !!
  322. !! ** Method : Read the nampisfer namelist and check the parameters
  323. !! called at the first timestep
  324. !!
  325. !! ** input : Namelist nampisfer
  326. !!
  327. !!----------------------------------------------------------------------
  328. NAMELIST/nampisfer/ ln_fechem, ln_ligvar, xlam1, xlamdust, ligand
  329. INTEGER :: ios ! Local integer output status for namelist read
  330. REWIND( numnatp_ref ) ! Namelist nampisfer in reference namelist : Pisces iron chemistry
  331. READ ( numnatp_ref, nampisfer, IOSTAT = ios, ERR = 901)
  332. 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisfer in reference namelist', lwp )
  333. REWIND( numnatp_cfg ) ! Namelist nampisfer in configuration namelist : Pisces iron chemistry
  334. READ ( numnatp_cfg, nampisfer, IOSTAT = ios, ERR = 902 )
  335. 902 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisfer in configuration namelist', lwp )
  336. IF(lwm) WRITE ( numonp, nampisfer )
  337. IF(lwp) THEN ! control print
  338. WRITE(numout,*) ' '
  339. WRITE(numout,*) ' Namelist parameters for Iron chemistry, nampisfer'
  340. WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
  341. WRITE(numout,*) ' enable complex iron chemistry scheme ln_fechem =', ln_fechem
  342. WRITE(numout,*) ' variable concentration of ligand ln_ligvar =', ln_ligvar
  343. WRITE(numout,*) ' scavenging rate of Iron xlam1 =', xlam1
  344. WRITE(numout,*) ' scavenging rate of Iron by dust xlamdust =', xlamdust
  345. WRITE(numout,*) ' ligand concentration in the ocean ligand =', ligand
  346. ENDIF
  347. !
  348. IF( ln_fechem ) THEN
  349. ! initialization of some constants used by the complexe chemistry scheme
  350. ! ----------------------------------------------------------------------
  351. spd = 3600. * 24.
  352. con = 1.E9
  353. ! LIGAND KINETICS (values from Witter et al. 2000)
  354. ! Weak (L2) ligands
  355. ! Phaeophytin
  356. kl2 = 12.2E5 * spd / con
  357. kb2 = 12.3E-6 * spd
  358. ! Strong (L1) ligands
  359. ! Saccharides
  360. ! kl1 = 12.2E5 * spd / con
  361. ! kb1 = 12.3E-6 * spd
  362. ! DFOB-
  363. kl1 = 19.6e5 * spd / con
  364. kb1 = 1.5e-6 * spd
  365. ! pcp and remin of Fe3p
  366. ks = 0.075
  367. kpr = 0.05
  368. ! thermal reduction of Fe3
  369. kth = 0.0048 * 24.
  370. !
  371. ENDIF
  372. !
  373. END SUBROUTINE p4z_fechem_init
  374. #else
  375. !!======================================================================
  376. !! Dummy module : No PISCES bio-model
  377. !!======================================================================
  378. CONTAINS
  379. SUBROUTINE p4z_fechem ! Empty routine
  380. END SUBROUTINE p4z_fechem
  381. #endif
  382. !!======================================================================
  383. END MODULE p4zfechem