- Timestamp:
- 2020-01-27T15:31:53+01:00 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r11943_MERGE_2019/src/TOP/PISCES/P4Z/p4zfechem.F90
r12258 r12340 31 31 REAL(wp), PUBLIC :: kfep !: rate constant for nanoparticle formation 32 32 33 !! * Substitutions 34 # include "do_loop_substitute.h90" 33 35 !!---------------------------------------------------------------------- 34 36 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 89 91 ! Chemistry is supposed to be fast enough to be at equilibrium 90 92 ! ------------------------------------------------------------ 91 DO jk = 1, jpkm1 92 DO jj = 1, jpj 93 DO ji = 1, jpi 94 zTL1(ji,jj,jk) = ztotlig(ji,jj,jk) 95 zkeq = fekeq(ji,jj,jk) 96 zfesatur = zTL1(ji,jj,jk) * 1E-9 97 ztfe = tr(ji,jj,jk,jpfer,Kbb) 98 ! Fe' is the root of a 2nd order polynom 99 zFe3 (ji,jj,jk) = ( -( 1. + zfesatur * zkeq - zkeq * ztfe ) & 100 & + SQRT( ( 1. + zfesatur * zkeq - zkeq * ztfe )**2 & 101 & + 4. * ztfe * zkeq) ) / ( 2. * zkeq ) 102 zFe3 (ji,jj,jk) = zFe3(ji,jj,jk) * 1E9 103 zFeL1(ji,jj,jk) = MAX( 0., tr(ji,jj,jk,jpfer,Kbb) * 1E9 - zFe3(ji,jj,jk) ) 104 END DO 105 END DO 106 END DO 93 DO_3D_11_11( 1, jpkm1 ) 94 zTL1(ji,jj,jk) = ztotlig(ji,jj,jk) 95 zkeq = fekeq(ji,jj,jk) 96 zfesatur = zTL1(ji,jj,jk) * 1E-9 97 ztfe = tr(ji,jj,jk,jpfer,Kbb) 98 ! Fe' is the root of a 2nd order polynom 99 zFe3 (ji,jj,jk) = ( -( 1. + zfesatur * zkeq - zkeq * ztfe ) & 100 & + SQRT( ( 1. + zfesatur * zkeq - zkeq * ztfe )**2 & 101 & + 4. * ztfe * zkeq) ) / ( 2. * zkeq ) 102 zFe3 (ji,jj,jk) = zFe3(ji,jj,jk) * 1E9 103 zFeL1(ji,jj,jk) = MAX( 0., tr(ji,jj,jk,jpfer,Kbb) * 1E9 - zFe3(ji,jj,jk) ) 104 END_3D 107 105 ! 108 106 109 107 zdust = 0. ! if no dust available 110 DO jk = 1, jpkm1 111 DO jj = 1, jpj 112 DO ji = 1, jpi 113 ! Scavenging rate of iron. This scavenging rate depends on the load of particles of sea water. 114 ! This parameterization assumes a simple second order kinetics (k[Particles][Fe]). 115 ! Scavenging onto dust is also included as evidenced from the DUNE experiments. 116 ! -------------------------------------------------------------------------------------- 117 zhplus = max( rtrn, hi(ji,jj,jk) ) 118 fe3sol = fesol(ji,jj,jk,1) * ( zhplus**3 + fesol(ji,jj,jk,2) * zhplus**2 & 119 & + fesol(ji,jj,jk,3) * zhplus + fesol(ji,jj,jk,4) & 120 & + fesol(ji,jj,jk,5) / zhplus ) 121 ! 122 zfeequi = zFe3(ji,jj,jk) * 1E-9 123 zhplus = max( rtrn, hi(ji,jj,jk) ) 124 fe3sol = fesol(ji,jj,jk,1) * ( zhplus**3 + fesol(ji,jj,jk,2) * zhplus**2 & 125 & + fesol(ji,jj,jk,3) * zhplus + fesol(ji,jj,jk,4) & 126 & + fesol(ji,jj,jk,5) / zhplus ) 127 zfecoll = 0.5 * zFeL1(ji,jj,jk) * 1E-9 128 ! precipitation of Fe3+, creation of nanoparticles 129 precip(ji,jj,jk) = MAX( 0., ( zFe3(ji,jj,jk) * 1E-9 - fe3sol ) ) * kfep * xstep 130 ! 131 ztrc = ( tr(ji,jj,jk,jppoc,Kbb) + tr(ji,jj,jk,jpgoc,Kbb) + tr(ji,jj,jk,jpcal,Kbb) + tr(ji,jj,jk,jpgsi,Kbb) ) * 1.e6 132 IF( ll_dust ) zdust = dust(ji,jj) / ( wdust / rday ) * tmask(ji,jj,jk) & 133 & * EXP( -gdept(ji,jj,jk,Kmm) / 540. ) 134 IF (ln_ligand) THEN 135 zxlam = xlam1 * MAX( 1.E-3, EXP(-2 * etot(ji,jj,jk) / 10. ) * (1. - EXP(-2 * tr(ji,jj,jk,jpoxy,Kbb) / 100.E-6 ) )) 136 ELSE 137 zxlam = xlam1 * 1.0 138 ENDIF 139 zlam1b = 3.e-5 + xlamdust * zdust + zxlam * ztrc 140 zscave = zfeequi * zlam1b * xstep 141 142 ! Compute the different ratios for scavenging of iron 143 ! to later allocate scavenged iron to the different organic pools 144 ! --------------------------------------------------------- 145 zdenom1 = zxlam * tr(ji,jj,jk,jppoc,Kbb) / zlam1b 146 zdenom2 = zxlam * tr(ji,jj,jk,jpgoc,Kbb) / zlam1b 147 148 ! Increased scavenging for very high iron concentrations found near the coasts 149 ! due to increased lithogenic particles and let say it is unknown processes (precipitation, ...) 150 ! ----------------------------------------------------------- 151 zlamfac = MAX( 0.e0, ( gphit(ji,jj) + 55.) / 30. ) 152 zlamfac = MIN( 1. , zlamfac ) 153 zdep = MIN( 1., 1000. / gdept(ji,jj,jk,Kmm) ) 154 zcoag = 1E-4 * ( 1. - zlamfac ) * zdep * xstep * tr(ji,jj,jk,jpfer,Kbb) 155 156 ! Compute the coagulation of colloidal iron. This parameterization 157 ! could be thought as an equivalent of colloidal pumping. 158 ! It requires certainly some more work as it is very poorly constrained. 159 ! ---------------------------------------------------------------- 160 zlam1a = ( 0.369 * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) + 102.4 * tr(ji,jj,jk,jppoc,Kbb) ) * xdiss(ji,jj,jk) & 161 & + ( 114. * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) ) 162 zaggdfea = zlam1a * xstep * zfecoll 163 ! 164 zlam1b = 3.53E3 * tr(ji,jj,jk,jpgoc,Kbb) * xdiss(ji,jj,jk) 165 zaggdfeb = zlam1b * xstep * zfecoll 166 ! 167 tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) - zscave - zaggdfea - zaggdfeb & 168 & - zcoag - precip(ji,jj,jk) 169 tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + zscave * zdenom1 + zaggdfea 170 tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) + zscave * zdenom2 + zaggdfeb 171 zscav3d(ji,jj,jk) = zscave 172 zcoll3d(ji,jj,jk) = zaggdfea + zaggdfeb 173 ! 174 END DO 175 END DO 176 END DO 108 DO_3D_11_11( 1, jpkm1 ) 109 ! Scavenging rate of iron. This scavenging rate depends on the load of particles of sea water. 110 ! This parameterization assumes a simple second order kinetics (k[Particles][Fe]). 111 ! Scavenging onto dust is also included as evidenced from the DUNE experiments. 112 ! -------------------------------------------------------------------------------------- 113 zhplus = max( rtrn, hi(ji,jj,jk) ) 114 fe3sol = fesol(ji,jj,jk,1) * ( zhplus**3 + fesol(ji,jj,jk,2) * zhplus**2 & 115 & + fesol(ji,jj,jk,3) * zhplus + fesol(ji,jj,jk,4) & 116 & + fesol(ji,jj,jk,5) / zhplus ) 117 ! 118 zfeequi = zFe3(ji,jj,jk) * 1E-9 119 zhplus = max( rtrn, hi(ji,jj,jk) ) 120 fe3sol = fesol(ji,jj,jk,1) * ( zhplus**3 + fesol(ji,jj,jk,2) * zhplus**2 & 121 & + fesol(ji,jj,jk,3) * zhplus + fesol(ji,jj,jk,4) & 122 & + fesol(ji,jj,jk,5) / zhplus ) 123 zfecoll = 0.5 * zFeL1(ji,jj,jk) * 1E-9 124 ! precipitation of Fe3+, creation of nanoparticles 125 precip(ji,jj,jk) = MAX( 0., ( zFe3(ji,jj,jk) * 1E-9 - fe3sol ) ) * kfep * xstep 126 ! 127 ztrc = ( tr(ji,jj,jk,jppoc,Kbb) + tr(ji,jj,jk,jpgoc,Kbb) + tr(ji,jj,jk,jpcal,Kbb) + tr(ji,jj,jk,jpgsi,Kbb) ) * 1.e6 128 IF( ll_dust ) zdust = dust(ji,jj) / ( wdust / rday ) * tmask(ji,jj,jk) & 129 & * EXP( -gdept(ji,jj,jk,Kmm) / 540. ) 130 IF (ln_ligand) THEN 131 zxlam = xlam1 * MAX( 1.E-3, EXP(-2 * etot(ji,jj,jk) / 10. ) * (1. - EXP(-2 * tr(ji,jj,jk,jpoxy,Kbb) / 100.E-6 ) )) 132 ELSE 133 zxlam = xlam1 * 1.0 134 ENDIF 135 zlam1b = 3.e-5 + xlamdust * zdust + zxlam * ztrc 136 zscave = zfeequi * zlam1b * xstep 137 138 ! Compute the different ratios for scavenging of iron 139 ! to later allocate scavenged iron to the different organic pools 140 ! --------------------------------------------------------- 141 zdenom1 = zxlam * tr(ji,jj,jk,jppoc,Kbb) / zlam1b 142 zdenom2 = zxlam * tr(ji,jj,jk,jpgoc,Kbb) / zlam1b 143 144 ! Increased scavenging for very high iron concentrations found near the coasts 145 ! due to increased lithogenic particles and let say it is unknown processes (precipitation, ...) 146 ! ----------------------------------------------------------- 147 zlamfac = MAX( 0.e0, ( gphit(ji,jj) + 55.) / 30. ) 148 zlamfac = MIN( 1. , zlamfac ) 149 zdep = MIN( 1., 1000. / gdept(ji,jj,jk,Kmm) ) 150 zcoag = 1E-4 * ( 1. - zlamfac ) * zdep * xstep * tr(ji,jj,jk,jpfer,Kbb) 151 152 ! Compute the coagulation of colloidal iron. This parameterization 153 ! could be thought as an equivalent of colloidal pumping. 154 ! It requires certainly some more work as it is very poorly constrained. 155 ! ---------------------------------------------------------------- 156 zlam1a = ( 0.369 * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) + 102.4 * tr(ji,jj,jk,jppoc,Kbb) ) * xdiss(ji,jj,jk) & 157 & + ( 114. * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) ) 158 zaggdfea = zlam1a * xstep * zfecoll 159 ! 160 zlam1b = 3.53E3 * tr(ji,jj,jk,jpgoc,Kbb) * xdiss(ji,jj,jk) 161 zaggdfeb = zlam1b * xstep * zfecoll 162 ! 163 tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) - zscave - zaggdfea - zaggdfeb & 164 & - zcoag - precip(ji,jj,jk) 165 tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + zscave * zdenom1 + zaggdfea 166 tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) + zscave * zdenom2 + zaggdfeb 167 zscav3d(ji,jj,jk) = zscave 168 zcoll3d(ji,jj,jk) = zaggdfea + zaggdfeb 169 ! 170 END_3D 177 171 ! 178 172 ! Define the bioavailable fraction of iron … … 182 176 IF( ln_ligand ) THEN 183 177 ! 184 DO jk = 1, jpkm1 185 DO jj = 1, jpj 186 DO ji = 1, jpi 187 zlam1a = ( 0.369 * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) + 102.4 * tr(ji,jj,jk,jppoc,Kbb) ) * xdiss(ji,jj,jk) & 188 & + ( 114. * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) ) 189 ! 190 zlam1b = 3.53E3 * tr(ji,jj,jk,jpgoc,Kbb) * xdiss(ji,jj,jk) 191 zligco = 0.5 * tr(ji,jj,jk,jplgw,Kmm) 192 zaggliga = zlam1a * xstep * zligco 193 zaggligb = zlam1b * xstep * zligco 194 tr(ji,jj,jk,jplgw,Krhs) = tr(ji,jj,jk,jplgw,Krhs) - zaggliga - zaggligb 195 zlcoll3d(ji,jj,jk) = zaggliga + zaggligb 196 END DO 197 END DO 198 END DO 178 DO_3D_11_11( 1, jpkm1 ) 179 zlam1a = ( 0.369 * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) + 102.4 * tr(ji,jj,jk,jppoc,Kbb) ) * xdiss(ji,jj,jk) & 180 & + ( 114. * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) ) 181 ! 182 zlam1b = 3.53E3 * tr(ji,jj,jk,jpgoc,Kbb) * xdiss(ji,jj,jk) 183 zligco = 0.5 * tr(ji,jj,jk,jplgw,Kmm) 184 zaggliga = zlam1a * xstep * zligco 185 zaggligb = zlam1b * xstep * zligco 186 tr(ji,jj,jk,jplgw,Krhs) = tr(ji,jj,jk,jplgw,Krhs) - zaggliga - zaggligb 187 zlcoll3d(ji,jj,jk) = zaggliga + zaggligb 188 END_3D 199 189 ! 200 190 plig(:,:,:) = MAX( 0., ( ( zFeL1(:,:,:) * 1E-9 ) / ( tr(:,:,:,jpfer,Kbb) +rtrn ) ) )
Note: See TracChangeset
for help on using the changeset viewer.