Changeset 5989 for branches/2014/dev_r4650_UKMO10_Tidally_Meaned_Diagnostics/NEMOGCM/NEMO/TOP_SRC/PISCES
- Timestamp:
- 2015-12-03T09:10:32+01:00 (8 years ago)
- Location:
- branches/2014/dev_r4650_UKMO10_Tidally_Meaned_Diagnostics/NEMOGCM/NEMO/TOP_SRC/PISCES
- Files:
-
- 26 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
branches/2014/dev_r4650_UKMO10_Tidally_Meaned_Diagnostics/NEMOGCM/NEMO/TOP_SRC/PISCES/P2Z/p2zbio.F90
r5260 r5989 59 59 REAL(wp) :: fdbod ! zooplankton mortality fraction that goes to detritus 60 60 61 !!* Substitution 62 # include "top_substitute.h90" 61 !! * Substitutions 62 # include "domzgr_substitute.h90" 63 # include "vectopt_loop_substitute.h90" 63 64 !!---------------------------------------------------------------------- 64 65 !! NEMO/TOP 3.3 , NEMO Consortium (2010) … … 599 600 600 601 !!====================================================================== 601 END MODULE 602 END MODULE p2zbio -
branches/2014/dev_r4650_UKMO10_Tidally_Meaned_Diagnostics/NEMOGCM/NEMO/TOP_SRC/PISCES/P2Z/p2zexp.F90
r5260 r5989 41 41 REAL(wp) :: areacot !: surface coastal area 42 42 43 !!* Substitution 44 # include "top_substitute.h90" 43 !! * Substitutions 44 # include "domzgr_substitute.h90" 45 # include "vectopt_loop_substitute.h90" 45 46 !!---------------------------------------------------------------------- 46 47 !! NEMO/TOP 3.3 , NEMO Consortium (2010) -
branches/2014/dev_r4650_UKMO10_Tidally_Meaned_Diagnostics/NEMOGCM/NEMO/TOP_SRC/PISCES/P2Z/p2zopt.F90
r5260 r5989 40 40 REAL(wp), PUBLIC :: reddom ! redfield ratio (C:N) for DOM 41 41 42 !! * Substitution43 # include " top_substitute.h90"42 !! * Substitutions 43 # include "domzgr_substitute.h90" 44 44 !!---------------------------------------------------------------------- 45 45 !! NEMO/TOP 3.3 , NEMO Consortium (2010) … … 89 89 90 90 ! ! surface irradiance 91 zpar0m (:,:) = qsr (:,:) * 0.43 ! ------------------ 91 ! ! ------------------ 92 IF( ln_dm2dc ) THEN ; zpar0m(:,:) = qsr_mean(:,:) * 0.43 93 ELSE ; zpar0m(:,:) = qsr (:,:) * 0.43 94 ENDIF 92 95 zpar100(:,:) = zpar0m(:,:) * 0.01 93 96 zparr (:,:,1) = zpar0m(:,:) * 0.5 -
branches/2014/dev_r4650_UKMO10_Tidally_Meaned_Diagnostics/NEMOGCM/NEMO/TOP_SRC/PISCES/P2Z/p2zsed.F90
r5260 r5989 34 34 REAL(wp), PUBLIC :: xhr ! coeff for martin''s remineralisation profile 35 35 36 !! * Substitution37 # include " top_substitute.h90"36 !! * Substitutions 37 # include "domzgr_substitute.h90" 38 38 !!---------------------------------------------------------------------- 39 39 !! NEMO/TOP 3.3 , NEMO Consortium (2010) -
branches/2014/dev_r4650_UKMO10_Tidally_Meaned_Diagnostics/NEMOGCM/NEMO/TOP_SRC/PISCES/P2Z/p2zsms.F90
r5260 r5989 84 84 85 85 !!====================================================================== 86 END MODULE 86 END MODULE p2zsms -
branches/2014/dev_r4650_UKMO10_Tidally_Meaned_Diagnostics/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zbio.F90
r4529 r5989 34 34 PUBLIC p4z_bio 35 35 36 !! * Substitution37 # include " top_substitute.h90"36 !! * Substitutions 37 # include "domzgr_substitute.h90" 38 38 !!---------------------------------------------------------------------- 39 39 !! NEMO/TOP 3.3 , NEMO Consortium (2010) … … 44 44 CONTAINS 45 45 46 SUBROUTINE p4z_bio ( kt, jnt )46 SUBROUTINE p4z_bio ( kt, knt ) 47 47 !!--------------------------------------------------------------------- 48 48 !! *** ROUTINE p4z_bio *** … … 54 54 !! ** Method : - ??? 55 55 !!--------------------------------------------------------------------- 56 INTEGER, INTENT(in) :: kt, jnt 57 INTEGER :: ji, jj, jk, jn 58 REAL(wp) :: ztra 59 #if defined key_kriest 60 REAL(wp) :: zcoef1, zcoef2 61 #endif 56 INTEGER, INTENT(in) :: kt, knt 57 INTEGER :: ji, jj, jk, jn 62 58 CHARACTER (len=25) :: charout 63 59 … … 80 76 81 77 82 CALL p4z_opt ( kt, jnt ) ! Optic: PAR in the water column83 CALL p4z_sink ( kt, jnt ) ! vertical flux of particulate organic matter84 CALL p4z_fechem(kt, jnt ) ! Iron chemistry/scavenging85 CALL p4z_lim ( kt, jnt ) ! co-limitations by the various nutrients86 CALL p4z_prod ( kt, jnt ) ! phytoplankton growth rate over the global ocean.78 CALL p4z_opt ( kt, knt ) ! Optic: PAR in the water column 79 CALL p4z_sink ( kt, knt ) ! vertical flux of particulate organic matter 80 CALL p4z_fechem(kt, knt ) ! Iron chemistry/scavenging 81 CALL p4z_lim ( kt, knt ) ! co-limitations by the various nutrients 82 CALL p4z_prod ( kt, knt ) ! phytoplankton growth rate over the global ocean. 87 83 ! ! (for each element : C, Si, Fe, Chl ) 88 84 CALL p4z_mort ( kt ) ! phytoplankton mortality 89 90 CALL p4z_micro( kt, jnt ) ! microzooplankton91 CALL p4z_meso ( kt, jnt ) ! mesozooplankton92 CALL p4z_rem ( kt, jnt ) ! remineralization terms of organic matter+scavenging of Fe85 ! ! zooplankton sources/sinks routines 86 CALL p4z_micro( kt, knt ) ! microzooplankton 87 CALL p4z_meso ( kt, knt ) ! mesozooplankton 88 CALL p4z_rem ( kt, knt ) ! remineralization terms of organic matter+scavenging of Fe 93 89 ! ! test if tracers concentrations fall below 0. 94 xnegtr(:,:,:) = 1.e0 95 DO jn = jp_pcs0, jp_pcs1 96 DO jk = 1, jpk 97 DO jj = 1, jpj 98 DO ji = 1, jpi 99 IF( ( trn(ji,jj,jk,jn) + tra(ji,jj,jk,jn) ) < 0.e0 ) THEN 100 ztra = ABS( trn(ji,jj,jk,jn) ) / ( ABS( tra(ji,jj,jk,jn) ) + rtrn ) 101 102 xnegtr(ji,jj,jk) = MIN( xnegtr(ji,jj,jk), ztra ) 103 ENDIF 104 END DO 105 END DO 106 END DO 107 END DO 108 ! ! where at least 1 tracer concentration becomes negative 109 ! ! 110 DO jn = jp_pcs0, jp_pcs1 111 trn(:,:,:,jn) = trn(:,:,:,jn) + xnegtr(:,:,:) * tra(:,:,:,jn) 112 END DO 113 114 115 tra(:,:,:,:) = 0.e0 116 117 #if defined key_kriest 118 ! 119 zcoef1 = 1.e0 / xkr_massp 120 zcoef2 = 1.e0 / xkr_massp / 1.1 121 DO jk = 1,jpkm1 122 trn(:,:,jk,jpnum) = MAX( trn(:,:,jk,jpnum), trn(:,:,jk,jppoc) * zcoef1 / xnumm(jk) ) 123 trn(:,:,jk,jpnum) = MIN( trn(:,:,jk,jpnum), trn(:,:,jk,jppoc) * zcoef2 ) 124 END DO 125 #endif 126 127 ! 90 ! ! 128 91 IF(ln_ctl) THEN ! print mean trends (used for debugging) 129 92 WRITE(charout, FMT="('bio ')") 130 93 CALL prt_ctl_trc_info(charout) 131 CALL prt_ctl_trc(tab4d=tr n, mask=tmask, clinfo=ctrcnm)94 CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm) 132 95 ENDIF 133 96 ! … … 146 109 147 110 !!====================================================================== 148 END MODULE p4zbio 149 111 END MODULE p4zbio -
branches/2014/dev_r4650_UKMO10_Tidally_Meaned_Diagnostics/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zche.F90
r5260 r5989 164 164 REAL(wp) :: devk55 = 0.3692E-3 165 165 166 !! * Substitution167 # include "top_substitute.h90"166 !! * Substitutions 167 # include "domzgr_substitute.h90" 168 168 !!---------------------------------------------------------------------- 169 169 !! NEMO/TOP 3.3 , NEMO Consortium (2010) … … 195 195 ! CHEMICAL CONSTANTS - SURFACE LAYER 196 196 ! ---------------------------------- 197 !CDIR NOVERRCHK198 197 DO jj = 1, jpj 199 !CDIR NOVERRCHK200 198 DO ji = 1, jpi 201 199 ! ! SET ABSOLUTE TEMPERATURE … … 227 225 ! OXYGEN SOLUBILITY - DEEP OCEAN 228 226 ! ------------------------------- 229 !CDIR NOVERRCHK230 227 DO jk = 1, jpk 231 !CDIR NOVERRCHK232 228 DO jj = 1, jpj 233 !CDIR NOVERRCHK234 229 DO ji = 1, jpi 235 230 ztkel = tsn(ji,jj,jk,jp_tem) + 273.16 … … 252 247 ! CHEMICAL CONSTANTS - DEEP OCEAN 253 248 ! ------------------------------- 254 !CDIR NOVERRCHK255 249 DO jk = 1, jpk 256 !CDIR NOVERRCHK257 250 DO jj = 1, jpj 258 !CDIR NOVERRCHK259 251 DO ji = 1, jpi 260 252 … … 396 388 397 389 !!====================================================================== 398 END MODULE 390 END MODULE p4zche -
branches/2014/dev_r4650_UKMO10_Tidally_Meaned_Diagnostics/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zfechem.F90
r5260 r5989 39 39 REAL(wp) :: kl1, kl2, kb1, kb2, ks, kpr, spd, con, kth 40 40 41 !! * Substitution42 # include " top_substitute.h90"41 !! * Substitutions 42 # include "domzgr_substitute.h90" 43 43 !!---------------------------------------------------------------------- 44 44 !! NEMO/TOP 3.3 , NEMO Consortium (2010) … … 48 48 CONTAINS 49 49 50 SUBROUTINE p4z_fechem( kt, jnt )50 SUBROUTINE p4z_fechem( kt, knt ) 51 51 !!--------------------------------------------------------------------- 52 52 !! *** ROUTINE p4z_fechem *** … … 62 62 !!--------------------------------------------------------------------- 63 63 ! 64 INTEGER, INTENT(in) :: kt, jnt ! ocean time step64 INTEGER, INTENT(in) :: kt, knt ! ocean time step 65 65 ! 66 66 INTEGER :: ji, jj, jk, jic … … 101 101 ! ------------------------------------------------- 102 102 IF( ln_ligvar ) THEN 103 ztotlig(:,:,:) = 0.09 * tr n(:,:,:,jpdoc) * 1E6 + ligand * 1E9103 ztotlig(:,:,:) = 0.09 * trb(:,:,:,jpdoc) * 1E6 + ligand * 1E9 104 104 ztotlig(:,:,:) = MIN( ztotlig(:,:,:), 10. ) 105 105 ELSE … … 113 113 ! Chemistry is supposed to be fast enough to be at equilibrium 114 114 ! ------------------------------------------------------------ 115 !CDIR NOVERRCHK116 115 DO jk = 1, jpkm1 117 !CDIR NOVERRCHK118 116 DO jj = 1, jpj 119 !CDIR NOVERRCHK120 117 DO ji = 1, jpi 121 118 ! Calculate ligand concentrations : assume 2/3rd of excess goes to … … 127 124 zionic = 19.9201 * tsn(ji,jj,jk,jp_sal) / ( 1000. - 1.00488 * tsn(ji,jj,jk,jp_sal) + rtrn ) 128 125 zph = -LOG10( MAX( hi(ji,jj,jk), rtrn) ) 129 zoxy = tr n(ji,jj,jk,jpoxy) * ( rhop(ji,jj,jk) / 1.e3 )126 zoxy = trb(ji,jj,jk,jpoxy) * ( rhop(ji,jj,jk) / 1.e3 ) 130 127 ! Fe2+ oxydation rate from Santana-Casiano et al. (2005) 131 128 zkox = 35.407 - 6.7109 * zph + 0.5342 * zph * zph - 5362.6 / ( tsn(ji,jj,jk,jp_tem) + 273.15 ) & … … 137 134 zkph1 = zkph2 / 5. 138 135 ! pass the dfe concentration from PISCES 139 ztfe = tr n(ji,jj,jk,jpfer) * 1e9136 ztfe = trb(ji,jj,jk,jpfer) * 1e9 140 137 ! ---------------------------------------------------------- 141 138 ! ANALYTICAL SOLUTION OF ROOTS OF THE FE3+ EQUATION … … 195 192 ! Chemistry is supposed to be fast enough to be at equilibrium 196 193 ! ------------------------------------------------------------ 197 !CDIR NOVERRCHK198 194 DO jk = 1, jpkm1 199 !CDIR NOVERRCHK200 195 DO jj = 1, jpj 201 !CDIR NOVERRCHK202 196 DO ji = 1, jpi 203 197 zTL1(ji,jj,jk) = ztotlig(ji,jj,jk) 204 198 zkeq = fekeq(ji,jj,jk) 205 199 zfesatur = zTL1(ji,jj,jk) * 1E-9 206 ztfe = tr n(ji,jj,jk,jpfer)200 ztfe = trb(ji,jj,jk,jpfer) 207 201 ! Fe' is the root of a 2nd order polynom 208 202 zFe3 (ji,jj,jk) = ( -( 1. + zfesatur * zkeq - zkeq * ztfe ) & … … 210 204 & + 4. * ztfe * zkeq) ) / ( 2. * zkeq ) 211 205 zFe3 (ji,jj,jk) = zFe3(ji,jj,jk) * 1E9 212 zFeL1(ji,jj,jk) = MAX( 0., tr n(ji,jj,jk,jpfer) * 1E9 - zFe3(ji,jj,jk) )206 zFeL1(ji,jj,jk) = MAX( 0., trb(ji,jj,jk,jpfer) * 1E9 - zFe3(ji,jj,jk) ) 213 207 END DO 214 208 END DO … … 216 210 ! 217 211 ENDIF 218 212 ! 219 213 zdust = 0. ! if no dust available 220 !CDIR NOVERRCHK 214 ! 221 215 DO jk = 1, jpkm1 222 !CDIR NOVERRCHK223 216 DO jj = 1, jpj 224 !CDIR NOVERRCHK225 217 DO ji = 1, jpi 226 218 zstep = xstep … … 240 232 ENDIF 241 233 #if defined key_kriest 242 ztrc = ( tr n(ji,jj,jk,jppoc) + trn(ji,jj,jk,jpcal) + trn(ji,jj,jk,jpgsi) ) * 1.e6234 ztrc = ( trb(ji,jj,jk,jppoc) + trb(ji,jj,jk,jpcal) + trb(ji,jj,jk,jpgsi) ) * 1.e6 243 235 #else 244 ztrc = ( tr n(ji,jj,jk,jppoc) + trn(ji,jj,jk,jpgoc) + trn(ji,jj,jk,jpcal) + trn(ji,jj,jk,jpgsi) ) * 1.e6236 ztrc = ( trb(ji,jj,jk,jppoc) + trb(ji,jj,jk,jpgoc) + trb(ji,jj,jk,jpcal) + trb(ji,jj,jk,jpgsi) ) * 1.e6 245 237 #endif 246 238 IF( ln_dust ) zdust = dust(ji,jj) / ( wdust / rday ) * tmask(ji,jj,jk) ! dust in kg/m2/s … … 251 243 ! to later allocate scavenged iron to the different organic pools 252 244 ! --------------------------------------------------------- 253 zdenom1 = xlam1 * tr n(ji,jj,jk,jppoc) / zlam1b245 zdenom1 = xlam1 * trb(ji,jj,jk,jppoc) / zlam1b 254 246 #if ! defined key_kriest 255 zdenom2 = xlam1 * tr n(ji,jj,jk,jpgoc) / zlam1b247 zdenom2 = xlam1 * trb(ji,jj,jk,jpgoc) / zlam1b 256 248 #endif 257 249 … … 262 254 zlamfac = MIN( 1. , zlamfac ) 263 255 zdep = MIN( 1., 1000. / fsdept(ji,jj,jk) ) 264 zlam1b = xlam1 * MAX( 0.e0, ( tr n(ji,jj,jk,jpfer) * 1.e9 - ztotlig(ji,jj,jk) ) )265 zcoag = zfeequi * zlam1b * zstep + 1E-4 * ( 1. - zlamfac ) * zdep * zstep * tr n(ji,jj,jk,jpfer)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) 266 258 267 259 ! Compute the coagulation of colloidal iron. This parameterization … … 269 261 ! It requires certainly some more work as it is very poorly constrained. 270 262 ! ---------------------------------------------------------------- 271 zlam1a = ( 0.369 * 0.3 * tr n(ji,jj,jk,jpdoc) + 102.4 * trn(ji,jj,jk,jppoc) ) * xdiss(ji,jj,jk) &272 & + ( 114. * 0.3 * tr n(ji,jj,jk,jpdoc) + 5.09E3 * trn(ji,jj,jk,jppoc) )263 zlam1a = ( 0.369 * 0.3 * trb(ji,jj,jk,jpdoc) + 102.4 * trb(ji,jj,jk,jppoc) ) * xdiss(ji,jj,jk) & 264 & + ( 114. * 0.3 * trb(ji,jj,jk,jpdoc) + 5.09E3 * trb(ji,jj,jk,jppoc) ) 273 265 zaggdfea = zlam1a * zstep * zfecoll 274 266 #if defined key_kriest … … 278 270 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zscave * zdenom1 + zaggdfea + zaggdfeb 279 271 #else 280 zlam1b = 3.53E3 * tr n(ji,jj,jk,jpgoc) * xdiss(ji,jj,jk)272 zlam1b = 3.53E3 * trb(ji,jj,jk,jpgoc) * xdiss(ji,jj,jk) 281 273 zaggdfeb = zlam1b * zstep * zfecoll 282 274 ! … … 292 284 ! ---------------------------------------- 293 285 IF( ln_fechem ) THEN 294 biron(:,:,:) = MAX( 0., tr n(:,:,:,jpfer) - zFeP(:,:,:) * 1E-9 )286 biron(:,:,:) = MAX( 0., trb(:,:,:,jpfer) - zFeP(:,:,:) * 1E-9 ) 295 287 ELSE 296 biron(:,:,:) = tr n(:,:,:,jpfer)288 biron(:,:,:) = trb(:,:,:,jpfer) 297 289 ENDIF 298 290 299 291 ! Output of some diagnostics variables 300 292 ! --------------------------------- 301 IF( lk_iomput .AND. jnt == nrdttrc ) THEN293 IF( lk_iomput .AND. knt == nrdttrc ) THEN 302 294 IF( iom_use("Fe3") ) CALL iom_put("Fe3" , zFe3 (:,:,:) * tmask(:,:,:) ) ! Fe3+ 303 295 IF( iom_use("FeL1") ) CALL iom_put("FeL1" , zFeL1 (:,:,:) * tmask(:,:,:) ) ! FeL1 -
branches/2014/dev_r4650_UKMO10_Tidally_Meaned_Diagnostics/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zflx.F90
r5260 r5989 59 59 REAL(wp) :: xconv = 0.01_wp / 3600._wp !: coefficients for conversion 60 60 61 !! * Substitution62 # include " top_substitute.h90"61 !! * Substitutions 62 # include "domzgr_substitute.h90" 63 63 !!---------------------------------------------------------------------- 64 64 !! NEMO/TOP 3.3 , NEMO Consortium (2010) … … 68 68 CONTAINS 69 69 70 SUBROUTINE p4z_flx ( kt )70 SUBROUTINE p4z_flx ( kt, knt ) 71 71 !!--------------------------------------------------------------------- 72 72 !! *** ROUTINE p4z_flx *** … … 81 81 !!--------------------------------------------------------------------- 82 82 ! 83 INTEGER, INTENT(in) :: kt !83 INTEGER, INTENT(in) :: kt, knt ! 84 84 ! 85 85 INTEGER :: ji, jj, jm, iind, iindm1 … … 101 101 ! IS USED TO COMPUTE AIR-SEA FLUX OF CO2 102 102 103 IF( kt /= nit000 ) CALL p4z_patm( kt ) ! Get sea-level pressure (E&K [1981] climatology) for use in flux calcs103 IF( kt /= nit000 .AND. knt == 1 ) CALL p4z_patm( kt ) ! Get sea-level pressure (E&K [1981] climatology) for use in flux calcs 104 104 105 105 IF( ln_co2int ) THEN … … 122 122 123 123 DO jm = 1, 10 124 !CDIR NOVERRCHK125 124 DO jj = 1, jpj 126 !CDIR NOVERRCHK127 125 DO ji = 1, jpi 128 126 … … 130 128 zbot = borat(ji,jj,1) 131 129 zfact = rhop(ji,jj,1) / 1000. + rtrn 132 zdic = tr n(ji,jj,1,jpdic) / zfact130 zdic = trb(ji,jj,1,jpdic) / zfact 133 131 zph = MAX( hi(ji,jj,1), 1.e-10 ) / zfact 134 zalka = tr n(ji,jj,1,jptal) / zfact132 zalka = trb(ji,jj,1,jptal) / zfact 135 133 136 134 ! CALCULATE [ALK]([CO3--], [HCO3-]) … … 155 153 ! ------------------------------------------- 156 154 157 !CDIR NOVERRCHK158 155 DO jj = 1, jpj 159 !CDIR NOVERRCHK160 156 DO ji = 1, jpi 161 157 ztc = MIN( 35., tsn(ji,jj,1,jp_tem) ) … … 184 180 zfld = satmco2(ji,jj) * patm(ji,jj) * tmask(ji,jj,1) * chemc(ji,jj,1) * zkgco2(ji,jj) ! (mol/L) * (m/s) 185 181 zflu = zh2co3(ji,jj) * tmask(ji,jj,1) * zkgco2(ji,jj) ! (mol/L) (m/s) ? 186 oce_co2(ji,jj) = ( zfld - zflu ) * rfact * e1e2t(ji,jj) * tmask(ji,jj,1) * 1000.182 oce_co2(ji,jj) = ( zfld - zflu ) * rfact2 * e1e2t(ji,jj) * tmask(ji,jj,1) * 1000. 187 183 ! compute the trend 188 tra(ji,jj,1,jpdic) = tra(ji,jj,1,jpdic) + ( zfld - zflu ) / fse3t(ji,jj,1)184 tra(ji,jj,1,jpdic) = tra(ji,jj,1,jpdic) + ( zfld - zflu ) * rfact2 / fse3t(ji,jj,1) 189 185 190 186 ! Compute O2 flux 191 187 zfld16 = atcox * patm(ji,jj) * chemc(ji,jj,2) * tmask(ji,jj,1) * zkgo2(ji,jj) ! (mol/L) * (m/s) 192 zflu16 = tr n(ji,jj,1,jpoxy) * tmask(ji,jj,1) * zkgo2(ji,jj)188 zflu16 = trb(ji,jj,1,jpoxy) * tmask(ji,jj,1) * zkgo2(ji,jj) 193 189 zoflx(ji,jj) = zfld16 - zflu16 194 tra(ji,jj,1,jpoxy) = tra(ji,jj,1,jpoxy) + zoflx(ji,jj) / fse3t(ji,jj,1)190 tra(ji,jj,1,jpoxy) = tra(ji,jj,1,jpoxy) + zoflx(ji,jj) * rfact2 / fse3t(ji,jj,1) 195 191 END DO 196 192 END DO … … 207 203 ENDIF 208 204 209 IF( lk_iomput ) THEN205 IF( lk_iomput .AND. knt == nrdttrc ) THEN 210 206 CALL wrk_alloc( jpi, jpj, zw2d ) 211 207 IF( iom_use( "Cflx" ) ) THEN 212 zw2d(:,:) = oce_co2(:,:) / e1e2t(:,:) / rfact208 zw2d(:,:) = oce_co2(:,:) / e1e2t(:,:) * rfact2r 213 209 CALL iom_put( "Cflx" , zw2d ) 214 210 ENDIF … … 226 222 ENDIF 227 223 IF( iom_use( "Dpo2" ) ) THEN 228 zw2d(:,:) = ( atcox * patm(:,:) - tr n(:,:,1,jpoxy) / ( chemc(:,:,2) + rtrn ) ) * tmask(:,:,1)224 zw2d(:,:) = ( atcox * patm(:,:) - trb(:,:,1,jpoxy) / ( chemc(:,:,2) + rtrn ) ) * tmask(:,:,1) 229 225 CALL iom_put( "Dpo2" , zw2d ) 230 226 ENDIF … … 235 231 ELSE 236 232 IF( ln_diatrc ) THEN 237 trc2d(:,:,jp_pcs0_2d ) = oce_co2(:,:) / e1e2t(:,:) / rfact233 trc2d(:,:,jp_pcs0_2d ) = oce_co2(:,:) / e1e2t(:,:) * rfact2r 238 234 trc2d(:,:,jp_pcs0_2d + 1) = zoflx(:,:) * 1000 * tmask(:,:,1) 239 235 trc2d(:,:,jp_pcs0_2d + 2) = zkgco2(:,:) * tmask(:,:,1) … … 400 396 401 397 !!====================================================================== 402 END MODULE 398 END MODULE p4zflx -
branches/2014/dev_r4650_UKMO10_Tidally_Meaned_Diagnostics/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zint.F90
r5260 r5989 56 56 DO ji = 1, jpi 57 57 DO jj = 1, jpj 58 zvar = tr n(ji,jj,1,jpsil) * trn(ji,jj,1,jpsil)58 zvar = trb(ji,jj,1,jpsil) * trb(ji,jj,1,jpsil) 59 59 xksimax(ji,jj) = MAX( xksimax(ji,jj), ( 1.+ 7.* zvar / ( xksilim * xksilim + zvar ) ) * 1e-6 ) 60 60 END DO … … 81 81 82 82 !!====================================================================== 83 END MODULE 83 END MODULE p4zint -
branches/2014/dev_r4650_UKMO10_Tidally_Meaned_Diagnostics/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zlim.F90
r5260 r5989 52 52 REAL(wp) :: xcoef2 = 1.21E-5 * 14. / 55.85 / 7.625 * 0.5 * 1.5 53 53 REAL(wp) :: xcoef3 = 1.15E-4 * 14. / 55.85 / 7.625 * 0.5 54 !!* Substitution 55 # include "top_substitute.h90" 54 56 55 !!---------------------------------------------------------------------- 57 56 !! NEMO/TOP 3.3 , NEMO Consortium (2010) … … 62 61 CONTAINS 63 62 64 SUBROUTINE p4z_lim( kt, jnt )63 SUBROUTINE p4z_lim( kt, knt ) 65 64 !!--------------------------------------------------------------------- 66 65 !! *** ROUTINE p4z_lim *** … … 72 71 !!--------------------------------------------------------------------- 73 72 ! 74 INTEGER, INTENT(in) :: kt, jnt73 INTEGER, INTENT(in) :: kt, knt 75 74 ! 76 75 INTEGER :: ji, jj, jk 77 76 REAL(wp) :: zlim1, zlim2, zlim3, zlim4, zno3, zferlim 78 77 REAL(wp) :: zconcd, zconcd2, zconcn, zconcn2 79 REAL(wp) :: z1_tr ndia, z1_trnphy, ztem1, ztem2, zetot1, zetot278 REAL(wp) :: z1_trbdia, z1_trbphy, ztem1, ztem2, zetot1, zetot2 80 79 REAL(wp) :: zdenom, zratio, zironmin 81 80 REAL(wp) :: zconc1d, zconc1dnh4, zconc0n, zconc0nnh4 … … 90 89 ! Tuning of the iron concentration to a minimum level that is set to the detection limit 91 90 !------------------------------------- 92 zno3 = tr n(ji,jj,jk,jpno3) / 40.e-691 zno3 = trb(ji,jj,jk,jpno3) / 40.e-6 93 92 zferlim = MAX( 3e-11 * zno3 * zno3, 5e-12 ) 94 93 zferlim = MIN( zferlim, 7e-11 ) 95 tr n(ji,jj,jk,jpfer) = MAX( trn(ji,jj,jk,jpfer), zferlim )94 trb(ji,jj,jk,jpfer) = MAX( trb(ji,jj,jk,jpfer), zferlim ) 96 95 97 96 ! Computation of a variable Ks for iron on diatoms taking into account 98 97 ! that increasing biomass is made of generally bigger cells 99 98 !------------------------------------------------ 100 zconcd = MAX( 0.e0 , tr n(ji,jj,jk,jpdia) - xsizedia )101 zconcd2 = tr n(ji,jj,jk,jpdia) - zconcd102 zconcn = MAX( 0.e0 , tr n(ji,jj,jk,jpphy) - xsizephy )103 zconcn2 = tr n(ji,jj,jk,jpphy) - zconcn104 z1_tr nphy = 1. / ( trn(ji,jj,jk,jpphy) + rtrn )105 z1_tr ndia = 1. / ( trn(ji,jj,jk,jpdia) + rtrn )106 107 concdfe(ji,jj,jk) = MAX( concdfer, ( zconcd2 * concdfer + concdfer * xsizerd * zconcd ) * z1_tr ndia )108 zconc1d = MAX( concdno3, ( zconcd2 * concdno3 + concdno3 * xsizerd * zconcd ) * z1_tr ndia )109 zconc1dnh4 = MAX( concdnh4, ( zconcd2 * concdnh4 + concdnh4 * xsizerd * zconcd ) * z1_tr ndia )110 111 concnfe(ji,jj,jk) = MAX( concnfer, ( zconcn2 * concnfer + concnfer * xsizern * zconcn ) * z1_tr nphy )112 zconc0n = MAX( concnno3, ( zconcn2 * concnno3 + concnno3 * xsizern * zconcn ) * z1_tr nphy )113 zconc0nnh4 = MAX( concnnh4, ( zconcn2 * concnnh4 + concnnh4 * xsizern * zconcn ) * z1_tr nphy )99 zconcd = MAX( 0.e0 , trb(ji,jj,jk,jpdia) - xsizedia ) 100 zconcd2 = trb(ji,jj,jk,jpdia) - zconcd 101 zconcn = MAX( 0.e0 , trb(ji,jj,jk,jpphy) - xsizephy ) 102 zconcn2 = trb(ji,jj,jk,jpphy) - zconcn 103 z1_trbphy = 1. / ( trb(ji,jj,jk,jpphy) + rtrn ) 104 z1_trbdia = 1. / ( trb(ji,jj,jk,jpdia) + rtrn ) 105 106 concdfe(ji,jj,jk) = MAX( concdfer, ( zconcd2 * concdfer + concdfer * xsizerd * zconcd ) * z1_trbdia ) 107 zconc1d = MAX( concdno3, ( zconcd2 * concdno3 + concdno3 * xsizerd * zconcd ) * z1_trbdia ) 108 zconc1dnh4 = MAX( concdnh4, ( zconcd2 * concdnh4 + concdnh4 * xsizerd * zconcd ) * z1_trbdia ) 109 110 concnfe(ji,jj,jk) = MAX( concnfer, ( zconcn2 * concnfer + concnfer * xsizern * zconcn ) * z1_trbphy ) 111 zconc0n = MAX( concnno3, ( zconcn2 * concnno3 + concnno3 * xsizern * zconcn ) * z1_trbphy ) 112 zconc0nnh4 = MAX( concnnh4, ( zconcn2 * concnnh4 + concnnh4 * xsizern * zconcn ) * z1_trbphy ) 114 113 115 114 ! Michaelis-Menten Limitation term for nutrients Small bacteria 116 115 ! ------------------------------------------------------------- 117 zdenom = 1. / ( concbno3 * concbnh4 + concbnh4 * tr n(ji,jj,jk,jpno3) + concbno3 * trn(ji,jj,jk,jpnh4) )118 xnanono3(ji,jj,jk) = tr n(ji,jj,jk,jpno3) * concbnh4 * zdenom119 xnanonh4(ji,jj,jk) = tr n(ji,jj,jk,jpnh4) * concbno3 * zdenom116 zdenom = 1. / ( concbno3 * concbnh4 + concbnh4 * trb(ji,jj,jk,jpno3) + concbno3 * trb(ji,jj,jk,jpnh4) ) 117 xnanono3(ji,jj,jk) = trb(ji,jj,jk,jpno3) * concbnh4 * zdenom 118 xnanonh4(ji,jj,jk) = trb(ji,jj,jk,jpnh4) * concbno3 * zdenom 120 119 ! 121 120 zlim1 = xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) 122 zlim2 = tr n(ji,jj,jk,jppo4) / ( trn(ji,jj,jk,jppo4) + concbnh4 )123 zlim3 = tr n(ji,jj,jk,jpfer) / ( concbfe + trn(ji,jj,jk,jpfer) )124 zlim4 = tr n(ji,jj,jk,jpdoc) / ( xkdoc + trn(ji,jj,jk,jpdoc) )121 zlim2 = trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + concbnh4 ) 122 zlim3 = trb(ji,jj,jk,jpfer) / ( concbfe + trb(ji,jj,jk,jpfer) ) 123 zlim4 = trb(ji,jj,jk,jpdoc) / ( xkdoc + trb(ji,jj,jk,jpdoc) ) 125 124 xlimbacl(ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) 126 125 xlimbac (ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) * zlim4 … … 128 127 ! Michaelis-Menten Limitation term for nutrients Small flagellates 129 128 ! ----------------------------------------------- 130 zdenom = 1. / ( zconc0n * zconc0nnh4 + zconc0nnh4 * tr n(ji,jj,jk,jpno3) + zconc0n * trn(ji,jj,jk,jpnh4) )131 xnanono3(ji,jj,jk) = tr n(ji,jj,jk,jpno3) * zconc0nnh4 * zdenom132 xnanonh4(ji,jj,jk) = tr n(ji,jj,jk,jpnh4) * zconc0n * zdenom129 zdenom = 1. / ( zconc0n * zconc0nnh4 + zconc0nnh4 * trb(ji,jj,jk,jpno3) + zconc0n * trb(ji,jj,jk,jpnh4) ) 130 xnanono3(ji,jj,jk) = trb(ji,jj,jk,jpno3) * zconc0nnh4 * zdenom 131 xnanonh4(ji,jj,jk) = trb(ji,jj,jk,jpnh4) * zconc0n * zdenom 133 132 ! 134 133 zlim1 = xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) 135 zlim2 = tr n(ji,jj,jk,jppo4) / ( trn(ji,jj,jk,jppo4) + zconc0nnh4 )136 zratio = tr n(ji,jj,jk,jpnfe) * z1_trnphy137 zironmin = xcoef1 * tr n(ji,jj,jk,jpnch) * z1_trnphy + xcoef2 * zlim1 + xcoef3 * xnanono3(ji,jj,jk)134 zlim2 = trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + zconc0nnh4 ) 135 zratio = trb(ji,jj,jk,jpnfe) * z1_trbphy 136 zironmin = xcoef1 * trb(ji,jj,jk,jpnch) * z1_trbphy + xcoef2 * zlim1 + xcoef3 * xnanono3(ji,jj,jk) 138 137 zlim3 = MAX( 0.,( zratio - zironmin ) / qnfelim ) 139 138 xnanopo4(ji,jj,jk) = zlim2 … … 143 142 ! Michaelis-Menten Limitation term for nutrients Diatoms 144 143 ! ---------------------------------------------- 145 zdenom = 1. / ( zconc1d * zconc1dnh4 + zconc1dnh4 * tr n(ji,jj,jk,jpno3) + zconc1d * trn(ji,jj,jk,jpnh4) )146 xdiatno3(ji,jj,jk) = tr n(ji,jj,jk,jpno3) * zconc1dnh4 * zdenom147 xdiatnh4(ji,jj,jk) = tr n(ji,jj,jk,jpnh4) * zconc1d * zdenom144 zdenom = 1. / ( zconc1d * zconc1dnh4 + zconc1dnh4 * trb(ji,jj,jk,jpno3) + zconc1d * trb(ji,jj,jk,jpnh4) ) 145 xdiatno3(ji,jj,jk) = trb(ji,jj,jk,jpno3) * zconc1dnh4 * zdenom 146 xdiatnh4(ji,jj,jk) = trb(ji,jj,jk,jpnh4) * zconc1d * zdenom 148 147 ! 149 148 zlim1 = xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) 150 zlim2 = tr n(ji,jj,jk,jppo4) / ( trn(ji,jj,jk,jppo4) + zconc1dnh4 )151 zlim3 = tr n(ji,jj,jk,jpsil) / ( trn(ji,jj,jk,jpsil) + xksi(ji,jj) )152 zratio = tr n(ji,jj,jk,jpdfe) * z1_trndia153 zironmin = xcoef1 * tr n(ji,jj,jk,jpdch) * z1_trndia + xcoef2 * zlim1 + xcoef3 * xdiatno3(ji,jj,jk)149 zlim2 = trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + zconc1dnh4 ) 150 zlim3 = trb(ji,jj,jk,jpsil) / ( trb(ji,jj,jk,jpsil) + xksi(ji,jj) ) 151 zratio = trb(ji,jj,jk,jpdfe) * z1_trbdia 152 zironmin = xcoef1 * trb(ji,jj,jk,jpdch) * z1_trbdia + xcoef2 * zlim1 + xcoef3 * xdiatno3(ji,jj,jk) 154 153 zlim4 = MAX( 0., ( zratio - zironmin ) / qdfelim ) 155 154 xdiatpo4(ji,jj,jk) = zlim2 … … 166 165 DO jj = 1, jpj 167 166 DO ji = 1, jpi 168 zlim1 = ( tr n(ji,jj,jk,jpno3) * concnnh4 + trn(ji,jj,jk,jpnh4) * concnno3 ) &169 & / ( concnno3 * concnnh4 + concnnh4 * tr n(ji,jj,jk,jpno3) + concnno3 * trn(ji,jj,jk,jpnh4) )170 zlim2 = tr n(ji,jj,jk,jppo4) / ( trn(ji,jj,jk,jppo4) + concnnh4 )171 zlim3 = tr n(ji,jj,jk,jpfer) / ( trn(ji,jj,jk,jpfer) + 5.E-11 )167 zlim1 = ( trb(ji,jj,jk,jpno3) * concnnh4 + trb(ji,jj,jk,jpnh4) * concnno3 ) & 168 & / ( concnno3 * concnnh4 + concnnh4 * trb(ji,jj,jk,jpno3) + concnno3 * trb(ji,jj,jk,jpnh4) ) 169 zlim2 = trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + concnnh4 ) 170 zlim3 = trb(ji,jj,jk,jpfer) / ( trb(ji,jj,jk,jpfer) + 5.E-11 ) 172 171 ztem1 = MAX( 0., tsn(ji,jj,jk,jp_tem) ) 173 172 ztem2 = tsn(ji,jj,jk,jp_tem) - 10. 174 zetot1 = MAX( 0., etot (ji,jj,jk) - 1.) / ( 4. + etot(ji,jj,jk) )175 zetot2 = 30. / ( 30. + etot (ji,jj,jk) )173 zetot1 = MAX( 0., etot_ndcy(ji,jj,jk) - 1.) / ( 4. + etot_ndcy(ji,jj,jk) ) 174 zetot2 = 30. / ( 30. + etot_ndcy(ji,jj,jk) ) 176 175 177 176 xfracal(ji,jj,jk) = caco3r * MIN( zlim1, zlim2, zlim3 ) & 178 177 & * ztem1 / ( 0.1 + ztem1 ) & 179 & * MAX( 1., tr n(ji,jj,jk,jpphy) * 1.e6 / 2. ) &178 & * MAX( 1., trb(ji,jj,jk,jpphy) * 1.e6 / 2. ) & 180 179 & * zetot1 * zetot2 & 181 180 & * ( 1. + EXP(-ztem2 * ztem2 / 25. ) ) & … … 188 187 ! 189 188 ! 190 IF( lk_iomput .AND. jnt == nrdttrc ) THEN ! save output diagnostics189 IF( lk_iomput .AND. knt == nrdttrc ) THEN ! save output diagnostics 191 190 IF( iom_use( "xfracal" ) ) CALL iom_put( "xfracal", xfracal(:,:,:) * tmask(:,:,:) ) ! euphotic layer deptht 192 191 IF( iom_use( "LNnut" ) ) CALL iom_put( "LNnut" , xlimphy(:,:,:) * tmask(:,:,:) ) ! Nutrient limitation term … … 265 264 266 265 !!====================================================================== 267 END MODULE 266 END MODULE p4zlim -
branches/2014/dev_r4650_UKMO10_Tidally_Meaned_Diagnostics/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zlys.F90
r5260 r5989 48 48 CONTAINS 49 49 50 SUBROUTINE p4z_lys( kt )50 SUBROUTINE p4z_lys( kt, knt ) 51 51 !!--------------------------------------------------------------------- 52 52 !! *** ROUTINE p4z_lys *** … … 59 59 !!--------------------------------------------------------------------- 60 60 ! 61 INTEGER, INTENT(in) :: kt ! ocean time step61 INTEGER, INTENT(in) :: kt, knt ! ocean time step 62 62 INTEGER :: ji, jj, jk, jn 63 63 REAL(wp) :: zalk, zdic, zph, zah2 64 64 REAL(wp) :: zdispot, zfact, zcalcon, zalka, zaldi 65 65 REAL(wp) :: zomegaca, zexcess, zexcess0 66 REAL(wp) :: zrfact267 66 CHARACTER (len=25) :: charout 68 67 REAL(wp), POINTER, DIMENSION(:,:,:) :: zco3, zcaldiss … … 81 80 DO jn = 1, 5 ! BEGIN OF ITERATION 82 81 ! 83 !CDIR NOVERRCHK84 82 DO jk = 1, jpkm1 85 !CDIR NOVERRCHK86 83 DO jj = 1, jpj 87 !CDIR NOVERRCHK88 84 DO ji = 1, jpi 89 85 zfact = rhop(ji,jj,jk) / 1000. + rtrn 90 86 zph = hi(ji,jj,jk) * tmask(ji,jj,jk) / zfact + ( 1.-tmask(ji,jj,jk) ) * 1.e-9 ! [H+] 91 zdic = tr n(ji,jj,jk,jpdic) / zfact92 zalka = tr n(ji,jj,jk,jptal) / zfact87 zdic = trb(ji,jj,jk,jpdic) / zfact 88 zalka = trb(ji,jj,jk,jptal) / zfact 93 89 ! CALCULATE [ALK]([CO3--], [HCO3-]) 94 90 zalk = zalka - ( akw3(ji,jj,jk) / zph - zph + borat(ji,jj,jk) / ( 1. + zph / akb3(ji,jj,jk) ) ) … … 130 126 ! (ACCORDING TO THIS FORMULATION ALSO SOME PARTICULATE 131 127 ! CACO3 GETS DISSOLVED EVEN IN THE CASE OF OVERSATURATION) 132 zdispot = kdca * zexcess * tr n(ji,jj,jk,jpcal)128 zdispot = kdca * zexcess * trb(ji,jj,jk,jpcal) 133 129 # if defined key_degrad 134 130 zdispot = zdispot * facvol(ji,jj,jk) … … 136 132 ! CHANGE OF [CO3--] , [ALK], PARTICULATE [CACO3], 137 133 ! AND [SUM(CO2)] DUE TO CACO3 DISSOLUTION/PRECIPITATION 138 zcaldiss(ji,jj,jk) = zdispot / rmtss! calcite dissolution139 zco3(ji,jj,jk) = zco3(ji,jj,jk) + zcaldiss(ji,jj,jk) * rfact134 zcaldiss(ji,jj,jk) = zdispot * rfact2 / rmtss ! calcite dissolution 135 zco3(ji,jj,jk) = zco3(ji,jj,jk) + zcaldiss(ji,jj,jk) 140 136 ! 141 137 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + 2. * zcaldiss(ji,jj,jk) … … 147 143 ! 148 144 149 IF( lk_iomput ) THEN145 IF( lk_iomput .AND. knt == nrdttrc ) THEN 150 146 IF( iom_use( "PH" ) ) CALL iom_put( "PH" , -1. * LOG10( hi(:,:,:) ) * tmask(:,:,:) ) 151 147 IF( iom_use( "CO3" ) ) CALL iom_put( "CO3" , zco3(:,:,:) * 1.e+3 * tmask(:,:,:) ) 152 148 IF( iom_use( "CO3sat" ) ) CALL iom_put( "CO3sat", aksp(:,:,:) * 1.e+3 / calcon * tmask(:,:,:) ) 153 IF( iom_use( "DCAL" ) ) CALL iom_put( "DCAL" , zcaldiss(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:) )149 IF( iom_use( "DCAL" ) ) CALL iom_put( "DCAL" , zcaldiss(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:) ) 154 150 ELSE 155 151 trc3d(:,:,:,jp_pcs0_3d ) = -1. * LOG10( hi(:,:,:) ) * tmask(:,:,:) … … 224 220 #endif 225 221 !!====================================================================== 226 END MODULE 222 END MODULE p4zlys -
branches/2014/dev_r4650_UKMO10_Tidally_Meaned_Diagnostics/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmeso.F90
r5260 r5989 50 50 REAL(wp), PUBLIC :: grazflux !: mesozoo flux feeding rate 51 51 52 !!* Substitution53 # include "top_substitute.h90"54 52 !!---------------------------------------------------------------------- 55 53 !! NEMO/TOP 3.3 , NEMO Consortium (2010) … … 60 58 CONTAINS 61 59 62 SUBROUTINE p4z_meso( kt, jnt )60 SUBROUTINE p4z_meso( kt, knt ) 63 61 !!--------------------------------------------------------------------- 64 62 !! *** ROUTINE p4z_meso *** … … 68 66 !! ** Method : - ??? 69 67 !!--------------------------------------------------------------------- 70 INTEGER, INTENT(in) :: kt, jnt ! ocean time step68 INTEGER, INTENT(in) :: kt, knt ! ocean time step 71 69 INTEGER :: ji, jj, jk 72 70 REAL(wp) :: zcompadi, zcompaph, zcompapoc, zcompaz, zcompam … … 97 95 DO jj = 1, jpj 98 96 DO ji = 1, jpi 99 zcompam = MAX( ( tr n(ji,jj,jk,jpmes) - 1.e-9 ), 0.e0 )97 zcompam = MAX( ( trb(ji,jj,jk,jpmes) - 1.e-9 ), 0.e0 ) 100 98 # if defined key_degrad 101 99 zstep = xstep * facvol(ji,jj,jk) … … 107 105 ! Respiration rates of both zooplankton 108 106 ! ------------------------------------- 109 zrespz2 = resrat2 * zfact * tr n(ji,jj,jk,jpmes) / ( xkmort + trn(ji,jj,jk,jpmes) ) &107 zrespz2 = resrat2 * zfact * trb(ji,jj,jk,jpmes) / ( xkmort + trb(ji,jj,jk,jpmes) ) & 110 108 & + resrat2 * zfact * 3. * nitrfac(ji,jj,jk) 111 109 … … 113 111 ! no real reason except that it seems to be more stable and may mimic predation 114 112 ! --------------------------------------------------------------- 115 ztortz2 = mzrat2 * 1.e6 * zfact * tr n(ji,jj,jk,jpmes)113 ztortz2 = mzrat2 * 1.e6 * zfact * trb(ji,jj,jk,jpmes) 116 114 ! 117 zcompadi = MAX( ( tr n(ji,jj,jk,jpdia) - xthresh2dia ), 0.e0 )118 zcompaz = MAX( ( tr n(ji,jj,jk,jpzoo) - xthresh2zoo ), 0.e0 )115 zcompadi = MAX( ( trb(ji,jj,jk,jpdia) - xthresh2dia ), 0.e0 ) 116 zcompaz = MAX( ( trb(ji,jj,jk,jpzoo) - xthresh2zoo ), 0.e0 ) 119 117 ! Size effect of nanophytoplankton on grazing : the smaller it is, the less prone 120 118 ! it is to predation by mesozooplankton 121 119 ! ------------------------------------------------------------------------------- 122 zcompaph = MAX( ( tr n(ji,jj,jk,jpphy) - xthresh2phy ), 0.e0 ) &120 zcompaph = MAX( ( trb(ji,jj,jk,jpphy) - xthresh2phy ), 0.e0 ) & 123 121 & * MIN(1., MAX( 0., ( quotan(ji,jj,jk) - 0.2) / 0.3 ) ) 124 zcompapoc = MAX( ( tr n(ji,jj,jk,jppoc) - xthresh2poc ), 0.e0 )122 zcompapoc = MAX( ( trb(ji,jj,jk,jppoc) - xthresh2poc ), 0.e0 ) 125 123 126 124 zfood = xprefc * zcompadi + xprefz * zcompaz + xprefp * zcompaph + xprefpoc * zcompapoc … … 128 126 zdenom = zfoodlim / ( xkgraz2 + zfoodlim ) 129 127 zdenom2 = zdenom / ( zfood + rtrn ) 130 zgraze2 = grazrat2 * zstep * tgfunc2(ji,jj,jk) * tr n(ji,jj,jk,jpmes)128 zgraze2 = grazrat2 * zstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpmes) 131 129 132 130 zgrazd = zgraze2 * xprefc * zcompadi * zdenom2 … … 135 133 zgrazpoc = zgraze2 * xprefpoc * zcompapoc * zdenom2 136 134 137 zgraznf = zgrazn * tr n(ji,jj,jk,jpnfe) / ( trn(ji,jj,jk,jpphy) + rtrn)138 zgrazf = zgrazd * tr n(ji,jj,jk,jpdfe) / ( trn(ji,jj,jk,jpdia) + rtrn)139 zgrazpof = zgrazpoc * tr n(ji,jj,jk,jpsfe) / ( trn(ji,jj,jk,jppoc) + rtrn)135 zgraznf = zgrazn * trb(ji,jj,jk,jpnfe) / ( trb(ji,jj,jk,jpphy) + rtrn) 136 zgrazf = zgrazd * trb(ji,jj,jk,jpdfe) / ( trb(ji,jj,jk,jpdia) + rtrn) 137 zgrazpof = zgrazpoc * trb(ji,jj,jk,jpsfe) / ( trb(ji,jj,jk,jppoc) + rtrn) 140 138 141 139 ! Mesozooplankton flux feeding on GOC … … 144 142 # if ! defined key_kriest 145 143 zgrazffeg = grazflux * zstep * wsbio4(ji,jj,jk) & 146 & * tgfunc2(ji,jj,jk) * tr n(ji,jj,jk,jpgoc) * trn(ji,jj,jk,jpmes)147 zgrazfffg = zgrazffeg * tr n(ji,jj,jk,jpbfe) / (trn(ji,jj,jk,jpgoc) + rtrn)144 & * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpgoc) * trb(ji,jj,jk,jpmes) 145 zgrazfffg = zgrazffeg * trb(ji,jj,jk,jpbfe) / (trb(ji,jj,jk,jpgoc) + rtrn) 148 146 # endif 149 147 zgrazffep = grazflux * zstep * wsbio3(ji,jj,jk) & 150 & * tgfunc2(ji,jj,jk) * tr n(ji,jj,jk,jppoc) * trn(ji,jj,jk,jpmes)151 zgrazfffp = zgrazffep * tr n(ji,jj,jk,jpsfe) / (trn(ji,jj,jk,jppoc) + rtrn)148 & * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jpmes) 149 zgrazfffp = zgrazffep * trb(ji,jj,jk,jpsfe) / (trb(ji,jj,jk,jppoc) + rtrn) 152 150 ! 153 151 # if ! defined key_kriest … … 158 156 ! diatoms based aggregates are more prone to fractionation 159 157 ! since they are more porous (marine snow instead of fecal pellets) 160 zratio = tr n(ji,jj,jk,jpgsi) / ( trn(ji,jj,jk,jpgoc) + rtrn )158 zratio = trb(ji,jj,jk,jpgsi) / ( trb(ji,jj,jk,jpgoc) + rtrn ) 161 159 zratio2 = zratio * zratio 162 160 zfrac = zproport * grazflux * zstep * wsbio4(ji,jj,jk) & 163 & * tr n(ji,jj,jk,jpgoc) * trn(ji,jj,jk,jpmes) &161 & * trb(ji,jj,jk,jpgoc) * trb(ji,jj,jk,jpmes) & 164 162 & * ( 0.2 + 3.8 * zratio2 / ( 1.**2 + zratio2 ) ) 165 zfracfe = zfrac * tr n(ji,jj,jk,jpbfe) / (trn(ji,jj,jk,jpgoc) + rtrn)163 zfracfe = zfrac * trb(ji,jj,jk,jpbfe) / (trb(ji,jj,jk,jpgoc) + rtrn) 166 164 167 165 zgrazffep = zproport * zgrazffep … … 215 213 tra(ji,jj,jk,jpzoo) = tra(ji,jj,jk,jpzoo) - zgrazz 216 214 tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) - zgrazn 217 tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) - zgrazn * tr n(ji,jj,jk,jpnch) / ( trn(ji,jj,jk,jpphy) + rtrn )218 tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) - zgrazd * tr n(ji,jj,jk,jpdch) / ( trn(ji,jj,jk,jpdia) + rtrn )219 tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) - zgrazd * tr n(ji,jj,jk,jpdsi) / ( trn(ji,jj,jk,jpdia) + rtrn )220 tra(ji,jj,jk,jpgsi) = tra(ji,jj,jk,jpgsi) + zgrazd * tr n(ji,jj,jk,jpdsi) / ( trn(ji,jj,jk,jpdia) + rtrn )215 tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) - zgrazn * trb(ji,jj,jk,jpnch) / ( trb(ji,jj,jk,jpphy) + rtrn ) 216 tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) - zgrazd * trb(ji,jj,jk,jpdch) / ( trb(ji,jj,jk,jpdia) + rtrn ) 217 tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) - zgrazd * trb(ji,jj,jk,jpdsi) / ( trb(ji,jj,jk,jpdia) + rtrn ) 218 tra(ji,jj,jk,jpgsi) = tra(ji,jj,jk,jpgsi) + zgrazd * trb(ji,jj,jk,jpdsi) / ( trb(ji,jj,jk,jpdia) + rtrn ) 221 219 tra(ji,jj,jk,jpnfe) = tra(ji,jj,jk,jpnfe) - zgraznf 222 220 tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) - zgrazf … … 231 229 tra(ji,jj,jk,jpcal) = tra(ji,jj,jk,jpcal) + zprcaca 232 230 #if defined key_kriest 233 znumpoc = tr n(ji,jj,jk,jpnum) / ( trn(ji,jj,jk,jppoc) + rtrn )231 znumpoc = trb(ji,jj,jk,jpnum) / ( trb(ji,jj,jk,jppoc) + rtrn ) 234 232 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zmortzgoc - zgrazpoc - zgrazffep + zgrapoc2 235 233 tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) - zgrazpoc * znumpoc + zgrapoc2 * xkr_dmeso & … … 248 246 END DO 249 247 ! 250 IF( lk_iomput .AND. jnt == nrdttrc ) THEN248 IF( lk_iomput .AND. knt == nrdttrc ) THEN 251 249 CALL wrk_alloc( jpi, jpj, jpk, zw3d ) 252 250 IF( iom_use( "GRAZ2" ) ) THEN … … 340 338 341 339 !!====================================================================== 342 END MODULE 340 END MODULE p4zmeso -
branches/2014/dev_r4650_UKMO10_Tidally_Meaned_Diagnostics/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmicro.F90
r5260 r5989 49 49 50 50 51 !!* Substitution52 # include "top_substitute.h90"53 51 !!---------------------------------------------------------------------- 54 52 !! NEMO/TOP 3.3 , NEMO Consortium (2010) … … 59 57 CONTAINS 60 58 61 SUBROUTINE p4z_micro( kt, jnt )59 SUBROUTINE p4z_micro( kt, knt ) 62 60 !!--------------------------------------------------------------------- 63 61 !! *** ROUTINE p4z_micro *** … … 68 66 !!--------------------------------------------------------------------- 69 67 INTEGER, INTENT(in) :: kt ! ocean time step 70 INTEGER, INTENT(in) :: jnt68 INTEGER, INTENT(in) :: knt 71 69 ! 72 70 INTEGER :: ji, jj, jk … … 90 88 DO jj = 1, jpj 91 89 DO ji = 1, jpi 92 zcompaz = MAX( ( tr n(ji,jj,jk,jpzoo) - 1.e-9 ), 0.e0 )90 zcompaz = MAX( ( trb(ji,jj,jk,jpzoo) - 1.e-9 ), 0.e0 ) 93 91 zstep = xstep 94 92 # if defined key_degrad … … 99 97 ! Respiration rates of both zooplankton 100 98 ! ------------------------------------- 101 zrespz = resrat * zfact * tr n(ji,jj,jk,jpzoo) / ( xkmort + trn(ji,jj,jk,jpzoo) ) &99 zrespz = resrat * zfact * trb(ji,jj,jk,jpzoo) / ( xkmort + trb(ji,jj,jk,jpzoo) ) & 102 100 & + resrat * zfact * 3. * nitrfac(ji,jj,jk) 103 101 … … 105 103 ! no real reason except that it seems to be more stable and may mimic predation. 106 104 ! --------------------------------------------------------------- 107 ztortz = mzrat * 1.e6 * zfact * tr n(ji,jj,jk,jpzoo)108 109 zcompadi = MIN( MAX( ( tr n(ji,jj,jk,jpdia) - xthreshdia ), 0.e0 ), xsizedia )110 zcompaph = MAX( ( tr n(ji,jj,jk,jpphy) - xthreshphy ), 0.e0 )111 zcompapoc = MAX( ( tr n(ji,jj,jk,jppoc) - xthreshpoc ), 0.e0 )105 ztortz = mzrat * 1.e6 * zfact * trb(ji,jj,jk,jpzoo) 106 107 zcompadi = MIN( MAX( ( trb(ji,jj,jk,jpdia) - xthreshdia ), 0.e0 ), xsizedia ) 108 zcompaph = MAX( ( trb(ji,jj,jk,jpphy) - xthreshphy ), 0.e0 ) 109 zcompapoc = MAX( ( trb(ji,jj,jk,jppoc) - xthreshpoc ), 0.e0 ) 112 110 113 111 ! Microzooplankton grazing … … 117 115 zdenom = zfoodlim / ( xkgraz + zfoodlim ) 118 116 zdenom2 = zdenom / ( zfood + rtrn ) 119 zgraze = grazrat * zstep * tgfunc2(ji,jj,jk) * tr n(ji,jj,jk,jpzoo)117 zgraze = grazrat * zstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpzoo) 120 118 121 119 zgrazp = zgraze * xpref2p * zcompaph * zdenom2 … … 123 121 zgrazsd = zgraze * xpref2d * zcompadi * zdenom2 124 122 125 zgrazpf = zgrazp * tr n(ji,jj,jk,jpnfe) / (trn(ji,jj,jk,jpphy) + rtrn)126 zgrazmf = zgrazm * tr n(ji,jj,jk,jpsfe) / (trn(ji,jj,jk,jppoc) + rtrn)127 zgrazsf = zgrazsd * tr n(ji,jj,jk,jpdfe) / (trn(ji,jj,jk,jpdia) + rtrn)123 zgrazpf = zgrazp * trb(ji,jj,jk,jpnfe) / (trb(ji,jj,jk,jpphy) + rtrn) 124 zgrazmf = zgrazm * trb(ji,jj,jk,jpsfe) / (trb(ji,jj,jk,jppoc) + rtrn) 125 zgrazsf = zgrazsd * trb(ji,jj,jk,jpdfe) / (trb(ji,jj,jk,jpdia) + rtrn) 128 126 ! 129 127 zgraztot = zgrazp + zgrazm + zgrazsd … … 165 163 tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) - zgrazp 166 164 tra(ji,jj,jk,jpdia) = tra(ji,jj,jk,jpdia) - zgrazsd 167 tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) - zgrazp * tr n(ji,jj,jk,jpnch)/(trn(ji,jj,jk,jpphy)+rtrn)168 tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) - zgrazsd * tr n(ji,jj,jk,jpdch)/(trn(ji,jj,jk,jpdia)+rtrn)169 tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) - zgrazsd * tr n(ji,jj,jk,jpdsi)/(trn(ji,jj,jk,jpdia)+rtrn)170 tra(ji,jj,jk,jpgsi) = tra(ji,jj,jk,jpgsi) + zgrazsd * tr n(ji,jj,jk,jpdsi)/(trn(ji,jj,jk,jpdia)+rtrn)165 tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) - zgrazp * trb(ji,jj,jk,jpnch)/(trb(ji,jj,jk,jpphy)+rtrn) 166 tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) - zgrazsd * trb(ji,jj,jk,jpdch)/(trb(ji,jj,jk,jpdia)+rtrn) 167 tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) - zgrazsd * trb(ji,jj,jk,jpdsi)/(trb(ji,jj,jk,jpdia)+rtrn) 168 tra(ji,jj,jk,jpgsi) = tra(ji,jj,jk,jpgsi) + zgrazsd * trb(ji,jj,jk,jpdsi)/(trb(ji,jj,jk,jpdia)+rtrn) 171 169 tra(ji,jj,jk,jpnfe) = tra(ji,jj,jk,jpnfe) - zgrazpf 172 170 tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) - zgrazsf … … 184 182 #if defined key_kriest 185 183 tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + zmortz * xkr_dmicro & 186 - zgrazm * tr n(ji,jj,jk,jpnum) / ( trn(ji,jj,jk,jppoc) + rtrn )184 - zgrazm * trb(ji,jj,jk,jpnum) / ( trb(ji,jj,jk,jppoc) + rtrn ) 187 185 #endif 188 186 END DO … … 190 188 END DO 191 189 ! 192 IF( lk_iomput .AND. jnt == nrdttrc ) THEN190 IF( lk_iomput .AND. knt == nrdttrc ) THEN 193 191 CALL wrk_alloc( jpi, jpj, jpk, zw3d ) 194 192 IF( iom_use( "GRAZ1" ) ) THEN … … 273 271 274 272 !!====================================================================== 275 END MODULE 273 END MODULE p4zmicro -
branches/2014/dev_r4650_UKMO10_Tidally_Meaned_Diagnostics/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmort.F90
r5260 r5989 35 35 36 36 37 !!* Substitution38 # include "top_substitute.h90"39 37 !!---------------------------------------------------------------------- 40 38 !! NEMO/TOP 3.3 , NEMO Consortium (2010) … … 85 83 DO jj = 1, jpj 86 84 DO ji = 1, jpi 87 zcompaph = MAX( ( tr n(ji,jj,jk,jpphy) - 1e-8 ), 0.e0 )85 zcompaph = MAX( ( trb(ji,jj,jk,jpphy) - 1e-8 ), 0.e0 ) 88 86 zstep = xstep 89 87 # if defined key_degrad … … 94 92 ! due to turbulence is negligible. Mortality is also set 95 93 ! to 0 96 zsizerat = MIN(1., MAX( 0., (quotan(ji,jj,jk) - 0.2) / 0.3) ) * tr n(ji,jj,jk,jpphy)94 zsizerat = MIN(1., MAX( 0., (quotan(ji,jj,jk) - 0.2) / 0.3) ) * trb(ji,jj,jk,jpphy) 97 95 ! Squared mortality of Phyto similar to a sedimentation term during 98 96 ! blooms (Doney et al. 1996) … … 102 100 ! increased when nutrients are limiting phytoplankton growth 103 101 ! as observed for instance in case of iron limitation. 104 ztortp = mprat * xstep * zcompaph / ( xkmort + tr n(ji,jj,jk,jpphy) ) * zsizerat102 ztortp = mprat * xstep * zcompaph / ( xkmort + trb(ji,jj,jk,jpphy) ) * zsizerat 105 103 106 104 zmortp = zrespp + ztortp … … 108 106 ! Update the arrays TRA which contains the biological sources and sinks 109 107 110 zfactfe = tr n(ji,jj,jk,jpnfe)/(trn(ji,jj,jk,jpphy)+rtrn)111 zfactch = tr n(ji,jj,jk,jpnch)/(trn(ji,jj,jk,jpphy)+rtrn)108 zfactfe = trb(ji,jj,jk,jpnfe)/(trb(ji,jj,jk,jpphy)+rtrn) 109 zfactch = trb(ji,jj,jk,jpnch)/(trb(ji,jj,jk,jpphy)+rtrn) 112 110 tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) - zmortp 113 111 tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) - zmortp * zfactch … … 172 170 DO ji = 1, jpi 173 171 174 zcompadi = MAX( ( tr n(ji,jj,jk,jpdia) - 1e-9), 0. )172 zcompadi = MAX( ( trb(ji,jj,jk,jpdia) - 1e-9), 0. ) 175 173 176 174 ! Aggregation term for diatoms is increased in case of nutrient … … 186 184 zlim2 = xlimdia(ji,jj,jk) * xlimdia(ji,jj,jk) 187 185 zlim1 = 0.25 * ( 1. - zlim2 ) / ( 0.25 + zlim2 ) 188 zrespp2 = 1.e6 * zstep * ( wchld + wchldm * zlim1 ) * xdiss(ji,jj,jk) * zcompadi * tr n(ji,jj,jk,jpdia)186 zrespp2 = 1.e6 * zstep * ( wchld + wchldm * zlim1 ) * xdiss(ji,jj,jk) * zcompadi * trb(ji,jj,jk,jpdia) 189 187 190 188 ! Phytoplankton mortality. 191 189 ! ------------------------ 192 ztortp2 = mprat2 * zstep * tr n(ji,jj,jk,jpdia) / ( xkmort + trn(ji,jj,jk,jpdia) ) * zcompadi190 ztortp2 = mprat2 * zstep * trb(ji,jj,jk,jpdia) / ( xkmort + trb(ji,jj,jk,jpdia) ) * zcompadi 193 191 194 192 zmortp2 = zrespp2 + ztortp2 … … 196 194 ! Update the arrays tra which contains the biological sources and sinks 197 195 ! --------------------------------------------------------------------- 198 zfactch = tr n(ji,jj,jk,jpdch) / ( trn(ji,jj,jk,jpdia) + rtrn )199 zfactfe = tr n(ji,jj,jk,jpdfe) / ( trn(ji,jj,jk,jpdia) + rtrn )200 zfactsi = tr n(ji,jj,jk,jpdsi) / ( trn(ji,jj,jk,jpdia) + rtrn )196 zfactch = trb(ji,jj,jk,jpdch) / ( trb(ji,jj,jk,jpdia) + rtrn ) 197 zfactfe = trb(ji,jj,jk,jpdfe) / ( trb(ji,jj,jk,jpdia) + rtrn ) 198 zfactsi = trb(ji,jj,jk,jpdsi) / ( trb(ji,jj,jk,jpdia) + rtrn ) 201 199 tra(ji,jj,jk,jpdia) = tra(ji,jj,jk,jpdia) - zmortp2 202 200 tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) - zmortp2 * zfactch … … 277 275 278 276 !!====================================================================== 279 END MODULE 277 END MODULE p4zmort -
branches/2014/dev_r4650_UKMO10_Tidally_Meaned_Diagnostics/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zopt.F90
r5260 r5989 35 35 REAL(wp) :: parlux !: Fraction of shortwave as PAR 36 36 REAL(wp) :: xparsw !: parlux/3 37 REAL(wp) :: xsi0r !: 1. /rn_si0 37 38 38 39 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_par ! structure of input par … … 42 43 43 44 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: enano, ediat !: PAR for phyto, nano and diat 45 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: etot_ndcy !: PAR over 24h in case of diurnal cycle 44 46 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: emoy !: averaged PAR in the mixed layer 47 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ekb, ekg, ekr !: wavelength (Red-Green-Blue) 45 48 46 49 INTEGER :: nksrp ! levels below which the light cannot penetrate ( depth larger than 391 m) … … 48 51 REAL(wp), DIMENSION(3,61), PUBLIC :: xkrgb !: tabulated attenuation coefficients for RGB absorption 49 52 50 !! * Substitution51 # include " top_substitute.h90"53 !! * Substitutions 54 # include "domzgr_substitute.h90" 52 55 !!---------------------------------------------------------------------- 53 56 !! NEMO/TOP 3.3 , NEMO Consortium (2010) … … 57 60 CONTAINS 58 61 59 SUBROUTINE p4z_opt( kt, jnt )62 SUBROUTINE p4z_opt( kt, knt ) 60 63 !!--------------------------------------------------------------------- 61 64 !! *** ROUTINE p4z_opt *** … … 67 70 !!--------------------------------------------------------------------- 68 71 ! 69 INTEGER, INTENT(in) :: kt, jnt ! ocean time step72 INTEGER, INTENT(in) :: kt, knt ! ocean time step 70 73 ! 71 74 INTEGER :: ji, jj, jk 72 75 INTEGER :: irgb 73 REAL(wp) :: zchl , zxsi0r76 REAL(wp) :: zchl 74 77 REAL(wp) :: zc0 , zc1 , zc2, zc3, z1_dep 75 REAL(wp), POINTER, DIMENSION(:,: ) :: zdepmoy, zetmp , zetmp1, zetmp276 REAL(wp), POINTER, DIMENSION(:,:,:) :: z ekg, zekr, zekb, ze0, ze1, ze2, ze378 REAL(wp), POINTER, DIMENSION(:,: ) :: zdepmoy, zetmp1, zetmp2, zetmp3, zetmp4, zqsr100 79 REAL(wp), POINTER, DIMENSION(:,:,:) :: zpar, ze0, ze1, ze2, ze3 77 80 !!--------------------------------------------------------------------- 78 81 ! … … 80 83 ! 81 84 ! Allocate temporary workspace 82 CALL wrk_alloc( jpi, jpj, z depmoy, zetmp, zetmp1, zetmp2 )83 CALL wrk_alloc( jpi, jpj, jpk, z ekg, zekr, zekb, ze0, ze1, ze2, ze3 )84 85 IF( jnt == 1 .AND. ln_varpar ) CALL p4z_optsbc( kt )85 CALL wrk_alloc( jpi, jpj, zqsr100, zdepmoy, zetmp1, zetmp2, zetmp3, zetmp4 ) 86 CALL wrk_alloc( jpi, jpj, jpk, zpar, ze0, ze1, ze2, ze3 ) 87 88 IF( knt == 1 .AND. ln_varpar ) CALL p4z_opt_sbc( kt ) 86 89 87 90 ! Initialisation of variables used to compute PAR 88 91 ! ----------------------------------------------- 89 ze1(:,:,jpk) = 0._wp 90 ze2(:,:,jpk) = 0._wp 91 ze3(:,:,jpk) = 0._wp 92 92 ze1(:,:,:) = 0._wp 93 ze2(:,:,:) = 0._wp 94 ze3(:,:,:) = 0._wp 93 95 ! !* attenuation coef. function of Chlorophyll and wavelength (Red-Green-Blue) 94 96 DO jk = 1, jpkm1 ! -------------------------------------------------------- 95 !CDIR NOVERRCHK96 97 DO jj = 1, jpj 97 !CDIR NOVERRCHK98 98 DO ji = 1, jpi 99 zchl = ( tr n(ji,jj,jk,jpnch) + trn(ji,jj,jk,jpdch) + rtrn ) * 1.e699 zchl = ( trb(ji,jj,jk,jpnch) + trb(ji,jj,jk,jpdch) + rtrn ) * 1.e6 100 100 zchl = MIN( 10. , MAX( 0.05, zchl ) ) 101 101 irgb = NINT( 41 + 20.* LOG10( zchl ) + rtrn ) 102 102 ! 103 zekb(ji,jj,jk) = xkrgb(1,irgb) * fse3t(ji,jj,jk)104 zekg(ji,jj,jk) = xkrgb(2,irgb) * fse3t(ji,jj,jk)105 zekr(ji,jj,jk) = xkrgb(3,irgb) * fse3t(ji,jj,jk)103 ekb(ji,jj,jk) = xkrgb(1,irgb) * fse3t(ji,jj,jk) 104 ekg(ji,jj,jk) = xkrgb(2,irgb) * fse3t(ji,jj,jk) 105 ekr(ji,jj,jk) = xkrgb(3,irgb) * fse3t(ji,jj,jk) 106 106 END DO 107 107 END DO 108 108 END DO 109 110 111 109 ! !* Photosynthetically Available Radiation (PAR) 112 110 ! ! -------------------------------------- 113 114 IF( ln_varpar ) THEN 115 ze1(:,:,1) = par_varsw(:,:) * qsr(:,:) * EXP( -0.5 * zekb(:,:,1) ) 116 ze2(:,:,1) = par_varsw(:,:) * qsr(:,:) * EXP( -0.5 * zekg(:,:,1) ) 117 ze3(:,:,1) = par_varsw(:,:) * qsr(:,:) * EXP( -0.5 * zekr(:,:,1) ) 111 IF( l_trcdm2dc ) THEN ! diurnal cycle 112 ! 1% of qsr to compute euphotic layer 113 zqsr100(:,:) = 0.01 * qsr_mean(:,:) ! daily mean qsr 114 ! 115 CALL p4z_opt_par( kt, qsr_mean, ze1, ze2, ze3 ) 116 ! 117 DO jk = 1, nksrp 118 etot_ndcy(:,:,jk) = ze1(:,:,jk) + ze2(:,:,jk) + ze3(:,:,jk) 119 enano (:,:,jk) = 2.1 * ze1(:,:,jk) + 0.42 * ze2(:,:,jk) + 0.4 * ze3(:,:,jk) 120 ediat (:,:,jk) = 1.6 * ze1(:,:,jk) + 0.69 * ze2(:,:,jk) + 0.7 * ze3(:,:,jk) 121 END DO 122 ! 123 CALL p4z_opt_par( kt, qsr, ze1, ze2, ze3 ) 124 ! 125 DO jk = 1, nksrp 126 etot(:,:,jk) = ze1(:,:,jk) + ze2(:,:,jk) + ze3(:,:,jk) 127 END DO 128 ! 118 129 ELSE 119 ze1(:,:,1) = xparsw * qsr(:,:) * EXP( -0.5 * zekb(:,:,1) ) 120 ze2(:,:,1) = xparsw * qsr(:,:) * EXP( -0.5 * zekg(:,:,1) ) 121 ze3(:,:,1) = xparsw * qsr(:,:) * EXP( -0.5 * zekr(:,:,1) ) 122 ENDIF 123 124 !CDIR NOVERRCHK 125 DO jj = 1, jpj 126 !CDIR NOVERRCHK 127 DO ji = 1, jpi 128 zc1 = ze1(ji,jj,1) 129 zc2 = ze2(ji,jj,1) 130 zc3 = ze3(ji,jj,1) 131 etot (ji,jj,1) = ( zc1 + zc2 + zc3 ) 132 enano(ji,jj,1) = ( 2.1 * zc1 + 0.42 * zc2 + 0.4 * zc3 ) 133 ediat(ji,jj,1) = ( 1.6 * zc1 + 0.69 * zc2 + 0.7 * zc3 ) 134 END DO 135 END DO 136 137 138 DO jk = 2, nksrp 139 !CDIR NOVERRCHK 140 DO jj = 1, jpj 141 !CDIR NOVERRCHK 142 DO ji = 1, jpi 143 zc1 = ze1(ji,jj,jk-1) * EXP( -0.5 * ( zekb(ji,jj,jk-1) + zekb(ji,jj,jk) ) ) 144 zc2 = ze2(ji,jj,jk-1) * EXP( -0.5 * ( zekg(ji,jj,jk-1) + zekg(ji,jj,jk) ) ) 145 zc3 = ze3(ji,jj,jk-1) * EXP( -0.5 * ( zekr(ji,jj,jk-1) + zekr(ji,jj,jk) ) ) 146 ze1 (ji,jj,jk) = zc1 147 ze2 (ji,jj,jk) = zc2 148 ze3 (ji,jj,jk) = zc3 149 etot (ji,jj,jk) = ( zc1 + zc2 + zc3 ) 150 enano(ji,jj,jk) = ( 2.1 * zc1 + 0.42 * zc2 + 0.4 * zc3 ) 151 ediat(ji,jj,jk) = ( 1.6 * zc1 + 0.69 * zc2 + 0.7 * zc3 ) 152 END DO 153 END DO 154 END DO 130 ! 1% of qsr to compute euphotic layer 131 zqsr100(:,:) = 0.01 * qsr(:,:) 132 ! 133 CALL p4z_opt_par( kt, qsr, ze1, ze2, ze3 ) 134 ! 135 DO jk = 1, nksrp 136 etot (:,:,jk) = ze1(:,:,jk) + ze2(:,:,jk) + ze3(:,:,jk) 137 enano(:,:,jk) = 2.1 * ze1(:,:,jk) + 0.42 * ze2(:,:,jk) + 0.4 * ze3(:,:,jk) 138 ediat(:,:,jk) = 1.6 * ze1(:,:,jk) + 0.69 * ze2(:,:,jk) + 0.7 * ze3(:,:,jk) 139 END DO 140 etot_ndcy(:,:,:) = etot(:,:,:) 141 ENDIF 142 155 143 156 144 IF( ln_qsr_bio ) THEN !* heat flux accros w-level (used in the dynamics) 157 145 ! ! ------------------------ 158 zxsi0r = 1.e0 / rn_si0 159 ! 160 ze0(:,:,1) = rn_abs * qsr(:,:) 161 ! ! surface value : separation in R-G-B + near surface 162 IF( ln_varpar ) THEN 163 ze0(:,:,1) = ( 1. - 3. * par_varsw(:,:) ) * qsr(:,:) 164 ze1(:,:,1) = par_varsw(:,:) * qsr(:,:) 165 ze2(:,:,1) = par_varsw(:,:) * qsr(:,:) 166 ze3(:,:,1) = par_varsw(:,:) * qsr(:,:) 167 ELSE 168 ze0(:,:,1) = ( 1. - 3. * xparsw ) * qsr(:,:) 169 ze1(:,:,1) = xparsw * qsr(:,:) 170 ze2(:,:,1) = xparsw * qsr(:,:) 171 ze3(:,:,1) = xparsw * qsr(:,:) 172 ENDIF 146 CALL p4z_opt_par( kt, qsr, ze1, ze2, ze3, pe0=ze0 ) 147 ! 173 148 etot3(:,:,1) = qsr(:,:) * tmask(:,:,1) 174 !175 !176 149 DO jk = 2, nksrp + 1 177 !CDIR NOVERRCHK 178 DO jj = 1, jpj 179 !CDIR NOVERRCHK 180 DO ji = 1, jpi 181 zc0 = ze0(ji,jj,jk-1) * EXP( -fse3t(ji,jj,jk-1) * zxsi0r ) 182 zc1 = ze1(ji,jj,jk-1) * EXP( -zekb(ji,jj,jk-1 ) ) 183 zc2 = ze2(ji,jj,jk-1) * EXP( -zekg(ji,jj,jk-1 ) ) 184 zc3 = ze3(ji,jj,jk-1) * EXP( -zekr(ji,jj,jk-1 ) ) 185 ze0(ji,jj,jk) = zc0 186 ze1(ji,jj,jk) = zc1 187 ze2(ji,jj,jk) = zc2 188 ze3(ji,jj,jk) = zc3 189 etot3(ji,jj,jk) = ( zc0 + zc1 + zc2 + zc3 ) * tmask(ji,jj,jk) 190 END DO 191 ! 192 END DO 193 ! 194 END DO 195 ! 196 ENDIF 197 150 etot3(:,:,jk) = ( ze0(:,:,jk) + ze1(:,:,jk) + ze2(:,:,jk) + ze3(:,:,jk) ) * tmask(:,:,jk) 151 END DO 152 ! ! ------------------------ 153 ENDIF 198 154 ! !* Euphotic depth and level 199 155 neln(:,:) = 1 ! ------------------------ … … 203 159 DO jj = 1, jpj 204 160 DO ji = 1, jpi 205 IF( etot (ji,jj,jk) * tmask(ji,jj,jk) >= 0.0043 * qsr(ji,jj) ) THEN161 IF( etot_ndcy(ji,jj,jk) * tmask(ji,jj,jk) >= 0.43 * zqsr100(ji,jj) ) THEN 206 162 neln(ji,jj) = jk+1 ! Euphotic level : 1rst T-level strictly below Euphotic layer 207 ! ! nb: ensure the compatibility with nmld_trc definition in trd_m xl_trc_zint163 ! ! nb: ensure the compatibility with nmld_trc definition in trd_mld_trc_zint 208 164 heup(ji,jj) = fsdepw(ji,jj,jk+1) ! Euphotic layer depth 209 165 ENDIF … … 211 167 END DO 212 168 END DO 213 169 ! 214 170 heup(:,:) = MIN( 300., heup(:,:) ) 215 216 171 ! !* mean light over the mixed layer 217 172 zdepmoy(:,:) = 0.e0 ! ------------------------------- 218 zetmp (:,:) = 0.e0219 173 zetmp1 (:,:) = 0.e0 220 174 zetmp2 (:,:) = 0.e0 175 zetmp3 (:,:) = 0.e0 176 zetmp4 (:,:) = 0.e0 221 177 222 178 DO jk = 1, nksrp 223 !CDIR NOVERRCHK224 179 DO jj = 1, jpj 225 !CDIR NOVERRCHK226 180 DO ji = 1, jpi 227 181 IF( fsdepw(ji,jj,jk+1) <= hmld(ji,jj) ) THEN 228 zetmp (ji,jj) = zetmp (ji,jj) + etot (ji,jj,jk) * fse3t(ji,jj,jk) 229 zetmp1 (ji,jj) = zetmp1 (ji,jj) + enano(ji,jj,jk) * fse3t(ji,jj,jk) 230 zetmp2 (ji,jj) = zetmp2 (ji,jj) + ediat(ji,jj,jk) * fse3t(ji,jj,jk) 182 zetmp1 (ji,jj) = zetmp1 (ji,jj) + etot (ji,jj,jk) * fse3t(ji,jj,jk) ! remineralisation 183 zetmp2 (ji,jj) = zetmp2 (ji,jj) + etot_ndcy(ji,jj,jk) * fse3t(ji,jj,jk) ! production 184 zetmp3 (ji,jj) = zetmp3 (ji,jj) + enano (ji,jj,jk) * fse3t(ji,jj,jk) ! production 185 zetmp4 (ji,jj) = zetmp4 (ji,jj) + ediat (ji,jj,jk) * fse3t(ji,jj,jk) ! production 231 186 zdepmoy(ji,jj) = zdepmoy(ji,jj) + fse3t(ji,jj,jk) 232 187 ENDIF … … 235 190 END DO 236 191 ! 237 emoy(:,:,:) = etot(:,:,:) 192 emoy(:,:,:) = etot(:,:,:) ! remineralisation 193 zpar(:,:,:) = etot_ndcy(:,:,:) ! diagnostic : PAR with no diurnal cycle 238 194 ! 239 195 DO jk = 1, nksrp 240 !CDIR NOVERRCHK241 196 DO jj = 1, jpj 242 !CDIR NOVERRCHK243 197 DO ji = 1, jpi 244 198 IF( fsdepw(ji,jj,jk+1) <= hmld(ji,jj) ) THEN 245 199 z1_dep = 1. / ( zdepmoy(ji,jj) + rtrn ) 246 emoy (ji,jj,jk) = zetmp (ji,jj) * z1_dep 247 enano(ji,jj,jk) = zetmp1(ji,jj) * z1_dep 248 ediat(ji,jj,jk) = zetmp2(ji,jj) * z1_dep 200 emoy (ji,jj,jk) = zetmp1(ji,jj) * z1_dep 201 zpar (ji,jj,jk) = zetmp2(ji,jj) * z1_dep 202 enano(ji,jj,jk) = zetmp3(ji,jj) * z1_dep 203 ediat(ji,jj,jk) = zetmp4(ji,jj) * z1_dep 249 204 ENDIF 250 205 END DO 251 206 END DO 252 207 END DO 253 208 ! 254 209 IF( lk_iomput ) THEN 255 IF( jnt == nrdttrc ) THEN 256 IF( iom_use( "Heup" ) ) CALL iom_put( "Heup", heup(:,: ) * tmask(:,:,1) ) ! euphotic layer deptht 257 IF( iom_use( "PAR" ) ) CALL iom_put( "PAR" , emoy(:,:,:) * tmask(:,:,:) ) ! Photosynthetically Available Radiation 210 IF( knt == nrdttrc ) THEN 211 IF( iom_use( "Heup" ) ) CALL iom_put( "Heup" , heup(:,: ) * tmask(:,:,1) ) ! euphotic layer deptht 212 IF( iom_use( "PARDM" ) ) CALL iom_put( "PARDM", zpar(:,:,:) * tmask(:,:,:) ) ! Photosynthetically Available Radiation 213 IF( iom_use( "PAR" ) ) CALL iom_put( "PAR" , emoy(:,:,:) * tmask(:,:,:) ) ! Photosynthetically Available Radiation 258 214 ENDIF 259 215 ELSE 260 216 IF( ln_diatrc ) THEN ! save output diagnostics 261 trc2d(:,:, jp_pcs0_2d + 10) = heup(:,: ) * tmask(:,:,1) 217 trc2d(:,:, jp_pcs0_2d + 10) = heup(:,: ) * tmask(:,:,1) 262 218 trc3d(:,:,:,jp_pcs0_3d + 3) = etot(:,:,:) * tmask(:,:,:) 263 219 ENDIF 264 220 ENDIF 265 221 ! 266 CALL wrk_dealloc( jpi, jpj, z depmoy, zetmp, zetmp1, zetmp2)267 CALL wrk_dealloc( jpi, jpj, jpk, z ekg, zekr, zekb,ze0, ze1, ze2, ze3 )222 CALL wrk_dealloc( jpi, jpj, zqsr100, zdepmoy, zetmp1, zetmp2, zetmp3, zetmp4 ) 223 CALL wrk_dealloc( jpi, jpj, jpk, zpar, ze0, ze1, ze2, ze3 ) 268 224 ! 269 225 IF( nn_timing == 1 ) CALL timing_stop('p4z_opt') … … 271 227 END SUBROUTINE p4z_opt 272 228 273 SUBROUTINE p4z_optsbc( kt ) 274 !!---------------------------------------------------------------------- 275 !! *** routine p4z_optsbc *** 229 SUBROUTINE p4z_opt_par( kt, pqsr, pe1, pe2, pe3, pe0 ) 230 !!---------------------------------------------------------------------- 231 !! *** routine p4z_opt_par *** 232 !! 233 !! ** purpose : compute PAR of each wavelength (Red-Green-Blue) 234 !! for a given shortwave radiation 235 !! 236 !!---------------------------------------------------------------------- 237 !! * arguments 238 INTEGER, INTENT(in) :: kt ! ocean time-step 239 REAL(wp), DIMENSION(jpi,jpj) , INTENT(in) :: pqsr ! shortwave 240 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pe1 , pe2 , pe3 ! PAR ( R-G-B) 241 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout), OPTIONAL :: pe0 242 !! * local variables 243 INTEGER :: ji, jj, jk ! dummy loop indices 244 REAL(wp), DIMENSION(jpi,jpj) :: zqsr ! shortwave 245 !!---------------------------------------------------------------------- 246 247 ! Real shortwave 248 IF( ln_varpar ) THEN ; zqsr(:,:) = par_varsw(:,:) * pqsr(:,:) 249 ELSE ; zqsr(:,:) = xparsw * pqsr(:,:) 250 ENDIF 251 ! 252 IF( PRESENT( pe0 ) ) THEN ! W-level 253 ! 254 pe0(:,:,1) = pqsr(:,:) - 3. * zqsr(:,:) ! ( 1 - 3 * alpha ) * q 255 pe1(:,:,1) = zqsr(:,:) 256 pe2(:,:,1) = zqsr(:,:) 257 pe3(:,:,1) = zqsr(:,:) 258 ! 259 DO jk = 2, nksrp + 1 260 DO jj = 1, jpj 261 DO ji = 1, jpi 262 pe0(ji,jj,jk) = pe0(ji,jj,jk-1) * EXP( -fse3t(ji,jj,jk-1) * xsi0r ) 263 pe1(ji,jj,jk) = pe1(ji,jj,jk-1) * EXP( -ekb(ji,jj,jk-1 ) ) 264 pe2(ji,jj,jk) = pe2(ji,jj,jk-1) * EXP( -ekg(ji,jj,jk-1 ) ) 265 pe3(ji,jj,jk) = pe3(ji,jj,jk-1) * EXP( -ekr(ji,jj,jk-1 ) ) 266 END DO 267 ! 268 END DO 269 ! 270 END DO 271 ! 272 ELSE ! T- level 273 ! 274 pe1(:,:,1) = zqsr(:,:) * EXP( -0.5 * ekb(:,:,1) ) 275 pe2(:,:,1) = zqsr(:,:) * EXP( -0.5 * ekg(:,:,1) ) 276 pe3(:,:,1) = zqsr(:,:) * EXP( -0.5 * ekr(:,:,1) ) 277 ! 278 DO jk = 2, nksrp 279 DO jj = 1, jpj 280 DO ji = 1, jpi 281 pe1(ji,jj,jk) = pe1(ji,jj,jk-1) * EXP( -0.5 * ( ekb(ji,jj,jk-1) + ekb(ji,jj,jk) ) ) 282 pe2(ji,jj,jk) = pe2(ji,jj,jk-1) * EXP( -0.5 * ( ekg(ji,jj,jk-1) + ekg(ji,jj,jk) ) ) 283 pe3(ji,jj,jk) = pe3(ji,jj,jk-1) * EXP( -0.5 * ( ekr(ji,jj,jk-1) + ekr(ji,jj,jk) ) ) 284 END DO 285 END DO 286 END DO 287 ! 288 ENDIF 289 ! 290 END SUBROUTINE p4z_opt_par 291 292 293 SUBROUTINE p4z_opt_sbc( kt ) 294 !!---------------------------------------------------------------------- 295 !! *** routine p4z_opt_sbc *** 276 296 !! 277 297 !! ** purpose : read and interpolate the variable PAR fraction … … 284 304 !!---------------------------------------------------------------------- 285 305 !! * arguments 286 INTEGER , INTENT( in ) :: kt! ocean time step306 INTEGER , INTENT(in) :: kt ! ocean time step 287 307 288 308 !! * local declarations … … 297 317 IF( kt == nit000 .OR. ( kt /= nit000 .AND. ntimes_par > 1 ) ) THEN 298 318 CALL fld_read( kt, 1, sf_par ) 299 par_varsw(:,:) = ( sf_par(1)%fnow(:,:,1) ) /3.0319 par_varsw(:,:) = ( sf_par(1)%fnow(:,:,1) ) / 3.0 300 320 ENDIF 301 321 ENDIF … … 303 323 IF( nn_timing == 1 ) CALL timing_stop('p4z_optsbc') 304 324 ! 305 END SUBROUTINE p4z_opt sbc325 END SUBROUTINE p4z_opt_sbc 306 326 307 327 SUBROUTINE p4z_opt_init … … 347 367 ! 348 368 xparsw = parlux / 3.0 369 xsi0r = 1.e0 / rn_si0 349 370 ! 350 371 ! Variable PAR at the surface of the ocean … … 372 393 IF(lwp) WRITE(numout,*) ' level of light extinction = ', nksrp, ' ref depth = ', gdepw_1d(nksrp+1), ' m' 373 394 ! 374 etot (:,:,:) = 0._wp 375 enano(:,:,:) = 0._wp 376 ediat(:,:,:) = 0._wp 377 IF( ln_qsr_bio ) etot3(:,:,:) = 0._wp 395 ekr (:,:,:) = 0._wp 396 ekb (:,:,:) = 0._wp 397 ekg (:,:,:) = 0._wp 398 etot (:,:,:) = 0._wp 399 etot_ndcy(:,:,:) = 0._wp 400 enano (:,:,:) = 0._wp 401 ediat (:,:,:) = 0._wp 402 IF( ln_qsr_bio ) etot3 (:,:,:) = 0._wp 378 403 ! 379 404 IF( nn_timing == 1 ) CALL timing_stop('p4z_opt_init') … … 386 411 !! *** ROUTINE p4z_opt_alloc *** 387 412 !!---------------------------------------------------------------------- 388 ALLOCATE( enano(jpi,jpj,jpk), ediat(jpi,jpj,jpk), emoy (jpi,jpj,jpk), STAT=p4z_opt_alloc ) 413 ALLOCATE( ekb(jpi,jpj,jpk) , ekr(jpi,jpj,jpk), ekg(jpi,jpj,jpk), & 414 & enano(jpi,jpj,jpk) , ediat(jpi,jpj,jpk), & 415 & etot_ndcy(jpi,jpj,jpk), emoy (jpi,jpj,jpk), STAT=p4z_opt_alloc ) 389 416 ! 390 417 IF( p4z_opt_alloc /= 0 ) CALL ctl_warn('p4z_opt_alloc : failed to allocate arrays.') … … 402 429 403 430 !!====================================================================== 404 END MODULE 431 END MODULE p4zopt -
branches/2014/dev_r4650_UKMO10_Tidally_Meaned_Diagnostics/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zprod.F90
r5260 r5989 54 54 REAL(wp) :: texcret2 !: 1 - excret2 55 55 56 57 !!* Substitution 58 # include "top_substitute.h90" 56 !! * Substitutions 57 # include "domzgr_substitute.h90" 59 58 !!---------------------------------------------------------------------- 60 59 !! NEMO/TOP 3.3 , NEMO Consortium (2010) … … 64 63 CONTAINS 65 64 66 SUBROUTINE p4z_prod( kt , jnt )65 SUBROUTINE p4z_prod( kt , knt ) 67 66 !!--------------------------------------------------------------------- 68 67 !! *** ROUTINE p4z_prod *** … … 74 73 !!--------------------------------------------------------------------- 75 74 ! 76 INTEGER, INTENT(in) :: kt, jnt75 INTEGER, INTENT(in) :: kt, knt 77 76 ! 78 77 INTEGER :: ji, jj, jk … … 129 128 END DO 130 129 131 IF( ln_newprod ) THEN 132 ! Impact of the day duration on phytoplankton growth 133 DO jk = 1, jpkm1 134 DO jj = 1 ,jpj 135 DO ji = 1, jpi 136 IF( etot(ji,jj,jk) > 1.E-3 ) THEN 137 zval = MAX( 1., zstrn(ji,jj) ) 138 zval = 1.5 * zval / ( 12. + zval ) 139 zprbio(ji,jj,jk) = prmax(ji,jj,jk) * zval 140 zprdia(ji,jj,jk) = zprbio(ji,jj,jk) 141 ENDIF 142 END DO 143 END DO 144 END DO 145 ENDIF 130 ! Impact of the day duration on phytoplankton growth 131 DO jk = 1, jpkm1 132 DO jj = 1 ,jpj 133 DO ji = 1, jpi 134 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 135 zval = MAX( 1., zstrn(ji,jj) ) 136 zval = 1.5 * zval / ( 12. + zval ) 137 zprbio(ji,jj,jk) = prmax(ji,jj,jk) * zval 138 zprdia(ji,jj,jk) = zprbio(ji,jj,jk) 139 ENDIF 140 END DO 141 END DO 142 END DO 146 143 147 144 ! Maximum light intensity … … 150 147 151 148 IF( ln_newprod ) THEN 152 !CDIR NOVERRCHK153 149 DO jk = 1, jpkm1 154 !CDIR NOVERRCHK155 150 DO jj = 1, jpj 156 !CDIR NOVERRCHK157 151 DO ji = 1, jpi 158 152 ! Computation of the P-I slope for nanos and diatoms 159 IF( etot (ji,jj,jk) > 1.E-3 ) THEN153 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 160 154 ztn = MAX( 0., tsn(ji,jj,jk,jp_tem) - 15. ) 161 155 zadap = xadap * ztn / ( 2.+ ztn ) 162 zconctemp = MAX( 0.e0 , tr n(ji,jj,jk,jpdia) - xsizedia )163 zconctemp2 = tr n(ji,jj,jk,jpdia) - zconctemp156 zconctemp = MAX( 0.e0 , trb(ji,jj,jk,jpdia) - xsizedia ) 157 zconctemp2 = trb(ji,jj,jk,jpdia) - zconctemp 164 158 znanotot = enano(ji,jj,jk) * zstrn(ji,jj) 165 159 zdiattot = ediat(ji,jj,jk) * zstrn(ji,jj) 166 160 ! 167 161 zpislopead (ji,jj,jk) = pislope * ( 1.+ zadap * EXP( -znanotot ) ) & 168 & * tr n(ji,jj,jk,jpnch) /( trn(ji,jj,jk,jpphy) * 12. + rtrn)162 & * trb(ji,jj,jk,jpnch) /( trb(ji,jj,jk,jpphy) * 12. + rtrn) 169 163 ! 170 zpislopead2(ji,jj,jk) = (pislope * zconctemp2 + pislope2 * zconctemp) / ( tr n(ji,jj,jk,jpdia) + rtrn ) &171 & * tr n(ji,jj,jk,jpdch) /( trn(ji,jj,jk,jpdia) * 12. + rtrn)164 zpislopead2(ji,jj,jk) = (pislope * zconctemp2 + pislope2 * zconctemp) / ( trb(ji,jj,jk,jpdia) + rtrn ) & 165 & * trb(ji,jj,jk,jpdch) /( trb(ji,jj,jk,jpdia) * 12. + rtrn) 172 166 173 167 ! Computation of production function for Carbon … … 188 182 END DO 189 183 ELSE 190 !CDIR NOVERRCHK191 184 DO jk = 1, jpkm1 192 !CDIR NOVERRCHK193 185 DO jj = 1, jpj 194 !CDIR NOVERRCHK195 186 DO ji = 1, jpi 196 187 197 188 ! Computation of the P-I slope for nanos and diatoms 198 IF( etot (ji,jj,jk) > 1.E-3 ) THEN189 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 199 190 ztn = MAX( 0., tsn(ji,jj,jk,jp_tem) - 15. ) 200 191 zadap = ztn / ( 2.+ ztn ) 201 zconctemp = MAX( 0.e0 , trn(ji,jj,jk,jpdia) - xsizedia ) 202 zconctemp2 = trn(ji,jj,jk,jpdia) - zconctemp 192 zconctemp = MAX( 0.e0 , trb(ji,jj,jk,jpdia) - xsizedia ) 193 zconctemp2 = trb(ji,jj,jk,jpdia) - zconctemp 194 znanotot = enano(ji,jj,jk) * zstrn(ji,jj) 195 zdiattot = ediat(ji,jj,jk) * zstrn(ji,jj) 203 196 ! 204 zpislopead (ji,jj,jk) = pislope * ( 1.+ zadap * EXP( - 0.21 * enano(ji,jj,jk)) )205 zpislopead2(ji,jj,jk) = (pislope * zconctemp2 + pislope2 * zconctemp) / ( tr n(ji,jj,jk,jpdia) + rtrn )206 207 zpislopen = zpislopead(ji,jj,jk) * tr n(ji,jj,jk,jpnch) &208 & / ( tr n(ji,jj,jk,jpphy) * 12. + rtrn ) &197 zpislopead (ji,jj,jk) = pislope * ( 1.+ zadap * EXP( -znanotot ) ) 198 zpislopead2(ji,jj,jk) = (pislope * zconctemp2 + pislope2 * zconctemp) / ( trb(ji,jj,jk,jpdia) + rtrn ) 199 200 zpislopen = zpislopead(ji,jj,jk) * trb(ji,jj,jk,jpnch) & 201 & / ( trb(ji,jj,jk,jpphy) * 12. + rtrn ) & 209 202 & / ( prmax(ji,jj,jk) * rday * xlimphy(ji,jj,jk) + rtrn ) 210 203 211 zpislope2n = zpislopead2(ji,jj,jk) * tr n(ji,jj,jk,jpdch) &212 & / ( tr n(ji,jj,jk,jpdia) * 12. + rtrn ) &204 zpislope2n = zpislopead2(ji,jj,jk) * trb(ji,jj,jk,jpdch) & 205 & / ( trb(ji,jj,jk,jpdia) * 12. + rtrn ) & 213 206 & / ( prmax(ji,jj,jk) * rday * xlimdia(ji,jj,jk) + rtrn ) 214 207 215 208 ! Computation of production function for Carbon 216 209 ! --------------------------------------------- 217 zprbio(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislopen * enano(ji,jj,jk)) )218 zprdia(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislope2n * ediat(ji,jj,jk)) )210 zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1.- EXP( -zpislopen * znanotot ) ) 211 zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * ( 1.- EXP( -zpislope2n * zdiattot ) ) 219 212 220 213 ! Computation of production function for Chlorophyll 221 214 !-------------------------------------------------- 222 zprnch(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislopen * enano(ji,jj,jk) * zstrn(ji,jj)) )223 zprdch(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislope2n * ediat(ji,jj,jk) * zstrn(ji,jj)) )215 zprnch(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislopen * enano(ji,jj,jk) ) ) 216 zprdch(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislope2n * ediat(ji,jj,jk) ) ) 224 217 ENDIF 225 218 END DO … … 231 224 ! Computation of a proxy of the N/C ratio 232 225 ! --------------------------------------- 233 !CDIR NOVERRCHK234 226 DO jk = 1, jpkm1 235 !CDIR NOVERRCHK236 227 DO jj = 1, jpj 237 !CDIR NOVERRCHK238 228 DO ji = 1, jpi 239 229 zval = MIN( xnanopo4(ji,jj,jk), ( xnanonh4(ji,jj,jk) + xnanono3(ji,jj,jk) ) ) & … … 252 242 DO ji = 1, jpi 253 243 254 IF( etot (ji,jj,jk) > 1.E-3 ) THEN244 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 255 245 ! Si/C of diatoms 256 246 ! ------------------------ … … 258 248 ! Si/C is arbitrariliy increased for very high Si concentrations 259 249 ! to mimic the very high ratios observed in the Southern Ocean (silpot2) 260 zlim = tr n(ji,jj,jk,jpsil) / ( trn(ji,jj,jk,jpsil) + xksi1 )250 zlim = trb(ji,jj,jk,jpsil) / ( trb(ji,jj,jk,jpsil) + xksi1 ) 261 251 zsilim = MIN( zprdia(ji,jj,jk) / ( prmax(ji,jj,jk) + rtrn ), xlimsi(ji,jj,jk) ) 262 252 zsilfac = 4.4 * EXP( -4.23 * zsilim ) * MAX( 0.e0, MIN( 1., 2.2 * ( zlim - 0.5 ) ) ) + 1.e0 263 zsiborn = tr n(ji,jj,jk,jpsil) * trn(ji,jj,jk,jpsil) * trn(ji,jj,jk,jpsil)253 zsiborn = trb(ji,jj,jk,jpsil) * trb(ji,jj,jk,jpsil) * trb(ji,jj,jk,jpsil) 264 254 IF (gphit(ji,jj) < -30 ) THEN 265 255 zsilfac2 = 1. + 2. * zsiborn / ( zsiborn + xksi2**3 ) … … 296 286 297 287 ! Computation of the various production terms 298 !CDIR NOVERRCHK299 288 DO jk = 1, jpkm1 300 !CDIR NOVERRCHK301 289 DO jj = 1, jpj 302 !CDIR NOVERRCHK303 290 DO ji = 1, jpi 304 IF( etot (ji,jj,jk) > 1.E-3 ) THEN291 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 305 292 ! production terms for nanophyto. 306 zprorca(ji,jj,jk) = zprbio(ji,jj,jk) * xlimphy(ji,jj,jk) * tr n(ji,jj,jk,jpphy) * rfact2293 zprorca(ji,jj,jk) = zprbio(ji,jj,jk) * xlimphy(ji,jj,jk) * trb(ji,jj,jk,jpphy) * rfact2 307 294 zpronew(ji,jj,jk) = zprorca(ji,jj,jk) * xnanono3(ji,jj,jk) / ( xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) + rtrn ) 308 295 ! 309 zratio = tr n(ji,jj,jk,jpnfe) / ( trn(ji,jj,jk,jpphy) + rtrn )296 zratio = trb(ji,jj,jk,jpnfe) / ( trb(ji,jj,jk,jpphy) + rtrn ) 310 297 zratio = zratio / fecnm 311 298 zmax = MAX( 0., ( 1. - zratio ) / ABS( 1.05 - zratio ) ) … … 313 300 & * ( 4. - 4.5 * xlimnfe(ji,jj,jk) / ( xlimnfe(ji,jj,jk) + 0.5 ) ) & 314 301 & * biron(ji,jj,jk) / ( biron(ji,jj,jk) + concnfe(ji,jj,jk) ) & 315 & * zmax * tr n(ji,jj,jk,jpphy) * rfact2302 & * zmax * trb(ji,jj,jk,jpphy) * rfact2 316 303 ! production terms for diatomees 317 zprorcad(ji,jj,jk) = zprdia(ji,jj,jk) * xlimdia(ji,jj,jk) * tr n(ji,jj,jk,jpdia) * rfact2304 zprorcad(ji,jj,jk) = zprdia(ji,jj,jk) * xlimdia(ji,jj,jk) * trb(ji,jj,jk,jpdia) * rfact2 318 305 zpronewd(ji,jj,jk) = zprorcad(ji,jj,jk) * xdiatno3(ji,jj,jk) / ( xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) + rtrn ) 319 306 ! 320 zratio = tr n(ji,jj,jk,jpdfe) / ( trn(ji,jj,jk,jpdia) + rtrn )307 zratio = trb(ji,jj,jk,jpdfe) / ( trb(ji,jj,jk,jpdia) + rtrn ) 321 308 zratio = zratio / fecdm 322 309 zmax = MAX( 0., ( 1. - zratio ) / ABS( 1.05 - zratio ) ) … … 324 311 & * ( 4. - 4.5 * xlimdfe(ji,jj,jk) / ( xlimdfe(ji,jj,jk) + 0.5 ) ) & 325 312 & * biron(ji,jj,jk) / ( biron(ji,jj,jk) + concdfe(ji,jj,jk) ) & 326 & * zmax * tr n(ji,jj,jk,jpdia) * rfact2313 & * zmax * trb(ji,jj,jk,jpdia) * rfact2 327 314 ENDIF 328 315 END DO … … 331 318 332 319 IF( ln_newprod ) THEN 333 !CDIR NOVERRCHK334 320 DO jk = 1, jpkm1 335 !CDIR NOVERRCHK336 321 DO jj = 1, jpj 337 !CDIR NOVERRCHK338 322 DO ji = 1, jpi 339 323 IF( fsdepw(ji,jj,jk+1) <= hmld(ji,jj) ) THEN … … 341 325 zprdch(ji,jj,jk) = zprdch(ji,jj,jk) * zmixdiat(ji,jj) 342 326 ENDIF 343 IF( etot (ji,jj,jk) > 1.E-3 ) THEN327 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 344 328 ! production terms for nanophyto. ( chlorophyll ) 345 329 znanotot = enano(ji,jj,jk) * zstrn(ji,jj) … … 359 343 END DO 360 344 ELSE 361 !CDIR NOVERRCHK362 345 DO jk = 1, jpkm1 363 !CDIR NOVERRCHK364 346 DO jj = 1, jpj 365 !CDIR NOVERRCHK366 347 DO ji = 1, jpi 367 IF( etot (ji,jj,jk) > 1.E-3 ) THEN348 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 368 349 ! production terms for nanophyto. ( chlorophyll ) 369 znanotot = enano(ji,jj,jk) * zstrn(ji,jj)370 zprod = rday * zprorca(ji,jj,jk) * zprnch(ji,jj,jk) * tr n(ji,jj,jk,jpphy) * xlimphy(ji,jj,jk)350 znanotot = enano(ji,jj,jk) 351 zprod = rday * zprorca(ji,jj,jk) * zprnch(ji,jj,jk) * trb(ji,jj,jk,jpphy) * xlimphy(ji,jj,jk) 371 352 zprochln(ji,jj,jk) = chlcmin * 12. * zprorca (ji,jj,jk) 372 353 zprochln(ji,jj,jk) = zprochln(ji,jj,jk) + (chlcnm-chlcmin) * 144. * zprod & 373 & / ( zpislopead(ji,jj,jk) * tr n(ji,jj,jk,jpnch) * znanotot +rtrn )354 & / ( zpislopead(ji,jj,jk) * trb(ji,jj,jk,jpnch) * znanotot +rtrn ) 374 355 ! production terms for diatomees ( chlorophyll ) 375 zdiattot = ediat(ji,jj,jk) * zstrn(ji,jj)376 zprod = rday * zprorcad(ji,jj,jk) * zprdch(ji,jj,jk) * tr n(ji,jj,jk,jpdia) * xlimdia(ji,jj,jk)356 zdiattot = ediat(ji,jj,jk) 357 zprod = rday * zprorcad(ji,jj,jk) * zprdch(ji,jj,jk) * trb(ji,jj,jk,jpdia) * xlimdia(ji,jj,jk) 377 358 zprochld(ji,jj,jk) = chlcmin * 12. * zprorcad(ji,jj,jk) 378 359 zprochld(ji,jj,jk) = zprochld(ji,jj,jk) + (chlcdm-chlcmin) * 144. * zprod & 379 & / ( zpislopead2(ji,jj,jk) * tr n(ji,jj,jk,jpdch) * zdiattot +rtrn )360 & / ( zpislopead2(ji,jj,jk) * trb(ji,jj,jk,jpdch) * zdiattot +rtrn ) 380 361 ENDIF 381 362 END DO … … 414 395 415 396 ! Total primary production per year 416 IF( iom_use( "tintpp" ) .OR. ( ln_check_mass .AND. kt == nitend .AND. jnt == nrdttrc ) ) &397 IF( iom_use( "tintpp" ) .OR. ( ln_check_mass .AND. kt == nitend .AND. knt == nrdttrc ) ) & 417 398 & tpp = glob_sum( ( zprorca(:,:,:) + zprorcad(:,:,:) ) * cvol(:,:,:) ) 418 399 419 400 IF( lk_iomput ) THEN 420 IF( jnt == nrdttrc ) THEN401 IF( knt == nrdttrc ) THEN 421 402 CALL wrk_alloc( jpi, jpj, zw2d ) 422 403 CALL wrk_alloc( jpi, jpj, jpk, zw3d ) … … 629 610 630 611 !!====================================================================== 631 END MODULE 612 END MODULE p4zprod -
branches/2014/dev_r4650_UKMO10_Tidally_Meaned_Diagnostics/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zrem.F90
r5260 r5989 50 50 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: denitnh4 !: - - - - - 51 51 52 !! * Substitution53 # include " top_substitute.h90"52 !! * Substitutions 53 # include "domzgr_substitute.h90" 54 54 !!---------------------------------------------------------------------- 55 55 !! NEMO/TOP 3.3 , NEMO Consortium (2010) … … 59 59 CONTAINS 60 60 61 SUBROUTINE p4z_rem( kt, jnt )61 SUBROUTINE p4z_rem( kt, knt ) 62 62 !!--------------------------------------------------------------------- 63 63 !! *** ROUTINE p4z_rem *** … … 68 68 !!--------------------------------------------------------------------- 69 69 ! 70 INTEGER, INTENT(in) :: kt, jnt ! ocean time step70 INTEGER, INTENT(in) :: kt, knt ! ocean time step 71 71 ! 72 72 INTEGER :: ji, jj, jk … … 104 104 zdep = MAX( hmld(ji,jj), heup(ji,jj) ) 105 105 IF( fsdept(ji,jj,jk) < zdep ) THEN 106 zdepbac(ji,jj,jk) = MIN( 0.7 * ( tr n(ji,jj,jk,jpzoo) + 2.* trn(ji,jj,jk,jpmes) ), 4.e-6 )106 zdepbac(ji,jj,jk) = MIN( 0.7 * ( trb(ji,jj,jk,jpzoo) + 2.* trb(ji,jj,jk,jpmes) ), 4.e-6 ) 107 107 ztempbac(ji,jj) = zdepbac(ji,jj,jk) 108 108 ELSE … … 119 119 DO ji = 1, jpi 120 120 ! denitrification factor computed from O2 levels 121 nitrfac(ji,jj,jk) = MAX( 0.e0, 0.4 * ( 6.e-6 - tr n(ji,jj,jk,jpoxy) ) &122 & / ( oxymin + tr n(ji,jj,jk,jpoxy) ) )121 nitrfac(ji,jj,jk) = MAX( 0.e0, 0.4 * ( 6.e-6 - trb(ji,jj,jk,jpoxy) ) & 122 & / ( oxymin + trb(ji,jj,jk,jpoxy) ) ) 123 123 nitrfac(ji,jj,jk) = MIN( 1., nitrfac(ji,jj,jk) ) 124 124 END DO … … 140 140 ! Ammonification in oxic waters with oxygen consumption 141 141 ! ----------------------------------------------------- 142 zolimit = zremik * ( 1.- nitrfac(ji,jj,jk) ) * tr n(ji,jj,jk,jpdoc)143 zolimi(ji,jj,jk) = MIN( ( tr n(ji,jj,jk,jpoxy) - rtrn ) / o2ut, zolimit )142 zolimit = zremik * ( 1.- nitrfac(ji,jj,jk) ) * trb(ji,jj,jk,jpdoc) 143 zolimi(ji,jj,jk) = MIN( ( trb(ji,jj,jk,jpoxy) - rtrn ) / o2ut, zolimit ) 144 144 ! Ammonification in suboxic waters with denitrification 145 145 ! ------------------------------------------------------- 146 denitr(ji,jj,jk) = MIN( ( tr n(ji,jj,jk,jpno3) - rtrn ) / rdenit, &147 & zremik * nitrfac(ji,jj,jk) * tr n(ji,jj,jk,jpdoc) )146 denitr(ji,jj,jk) = MIN( ( trb(ji,jj,jk,jpno3) - rtrn ) / rdenit, & 147 & zremik * nitrfac(ji,jj,jk) * trb(ji,jj,jk,jpdoc) ) 148 148 ! 149 149 zolimi (ji,jj,jk) = MAX( 0.e0, zolimi (ji,jj,jk) ) … … 165 165 ! below 2 umol/L. Inhibited at strong light 166 166 ! ---------------------------------------------------------- 167 zonitr =nitrif * zstep * tr n(ji,jj,jk,jpnh4) / ( 1.+ emoy(ji,jj,jk) ) * ( 1.- nitrfac(ji,jj,jk) )168 denitnh4(ji,jj,jk) = nitrif * zstep * tr n(ji,jj,jk,jpnh4) * nitrfac(ji,jj,jk)167 zonitr =nitrif * zstep * trb(ji,jj,jk,jpnh4) / ( 1.+ emoy(ji,jj,jk) ) * ( 1.- nitrfac(ji,jj,jk) ) 168 denitnh4(ji,jj,jk) = nitrif * zstep * trb(ji,jj,jk,jpnh4) * nitrfac(ji,jj,jk) 169 169 ! Update of the tracers trends 170 170 ! ---------------------------- … … 192 192 ! ---------------------------------------------------------- 193 193 zbactfer = 10.e-6 * rfact2 * prmax(ji,jj,jk) * xlimbacl(ji,jj,jk) & 194 & * tr n(ji,jj,jk,jpfer) / ( 2.5E-10 + trn(ji,jj,jk,jpfer) ) &194 & * trb(ji,jj,jk,jpfer) / ( 2.5E-10 + trb(ji,jj,jk,jpfer) ) & 195 195 & * zdepprod(ji,jj,jk) * zdepbac(ji,jj,jk) 196 196 #if defined key_kriest … … 228 228 ! means a disaggregation constant about 0.5 the value in oxic zones 229 229 ! ----------------------------------------------------------------- 230 zorem = zremip * tr n(ji,jj,jk,jppoc)231 zofer = zremip * tr n(ji,jj,jk,jpsfe)230 zorem = zremip * trb(ji,jj,jk,jppoc) 231 zofer = zremip * trb(ji,jj,jk,jpsfe) 232 232 #if ! defined key_kriest 233 zorem2 = zremip * tr n(ji,jj,jk,jpgoc)234 zofer2 = zremip * tr n(ji,jj,jk,jpbfe)233 zorem2 = zremip * trb(ji,jj,jk,jpgoc) 234 zofer2 = zremip * trb(ji,jj,jk,jpbfe) 235 235 #else 236 zorem2 = zremip * tr n(ji,jj,jk,jpnum)236 zorem2 = zremip * trb(ji,jj,jk,jpnum) 237 237 #endif 238 238 … … 272 272 ! Remineralization rate of BSi depedant on T and saturation 273 273 ! --------------------------------------------------------- 274 zsatur = ( sio3eq(ji,jj,jk) - tr n(ji,jj,jk,jpsil) ) / ( sio3eq(ji,jj,jk) + rtrn )274 zsatur = ( sio3eq(ji,jj,jk) - trb(ji,jj,jk,jpsil) ) / ( sio3eq(ji,jj,jk) + rtrn ) 275 275 zsatur = MAX( rtrn, zsatur ) 276 276 zsatur2 = ( 1. + tsn(ji,jj,jk,jp_tem) / 400.)**37 … … 287 287 zfactdep = xsilab * EXP(-( xsiremlab - xsirem ) * znusil2 * zdep / wsbio2 ) * ztem / ( ztem + 10. ) 288 288 zsiremin = ( xsiremlab * zfactdep + xsirem * ( 1. - zfactdep ) ) * zstep * znusil 289 zosil = zsiremin * tr n(ji,jj,jk,jpgsi)289 zosil = zsiremin * trb(ji,jj,jk,jpgsi) 290 290 ! 291 291 tra(ji,jj,jk,jpgsi) = tra(ji,jj,jk,jpgsi) - zosil … … 315 315 END DO 316 316 317 IF( jnt == nrdttrc ) THEN317 IF( knt == nrdttrc ) THEN 318 318 CALL wrk_alloc( jpi, jpj, jpk, zw3d ) 319 319 zfact = 1.e+3 * rfact2r ! conversion from mol/l/kt to mol/m3/s -
branches/2014/dev_r4650_UKMO10_Tidally_Meaned_Diagnostics/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsbc.F90
r5260 r5989 81 81 82 82 83 !!* Substitution 84 # include "top_substitute.h90" 83 !! * Substitutions 84 # include "domzgr_substitute.h90" 85 # include "vectopt_loop_substitute.h90" 85 86 !!---------------------------------------------------------------------- 86 87 !! NEMO/TOP 3.3 , NEMO Consortium (2010) … … 117 118 IF( kt == nit000 .OR. ( kt /= nit000 .AND. ntimes_dust > 1 ) ) THEN 118 119 CALL fld_read( kt, 1, sf_dust ) 119 dust(:,:) = sf_dust(1)%fnow(:,:,1) 120 IF( nn_ice_tr == -1 .AND. .NOT. ln_ironice ) THEN 121 dust(:,:) = sf_dust(1)%fnow(:,:,1) 122 ELSE 123 dust(:,:) = sf_dust(1)%fnow(:,:,1) * ( 1.0 - fr_i(:,:) ) 124 ENDIF 120 125 ENDIF 121 126 ENDIF … … 136 141 DO jj = 1, jpj 137 142 DO ji = 1, jpi 138 zcoef = ryyss * cvol(ji,jj,1)143 zcoef = ryyss * e1e2t(ji,jj) * h_rnf(ji,jj) 139 144 rivalk(ji,jj) = sf_river(jr_dic)%fnow(ji,jj,1) & 140 145 & * 1.E3 / ( 12. * zcoef + rtrn ) … … 187 192 INTEGER :: ierr, ierr1, ierr2, ierr3 188 193 INTEGER :: ios ! Local integer output status for namelist read 194 INTEGER :: ik50 ! last level where depth less than 50 m 195 INTEGER :: isrow ! index for ORCA1 starting row 189 196 REAL(wp) :: zexpide, zdenitide, zmaskt 190 197 REAL(wp) :: ztimes_dust, ztimes_riv, ztimes_ndep … … 216 223 902 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampissbc in configuration namelist', lwp ) 217 224 IF(lwm) WRITE ( numonp, nampissbc ) 225 226 IF ( ( nn_ice_tr >= 0 ) .AND. ln_ironice ) THEN 227 IF(lwp) THEN 228 WRITE(numout,*) ' ln_ironice incompatible with nn_ice_tr = ', nn_ice_tr 229 WRITE(numout,*) ' Specify your sea ice iron concentration in nampisice instead ' 230 WRITE(numout,*) ' ln_ironice is forced to .FALSE. ' 231 ln_ironice = .FALSE. 232 ENDIF 233 ENDIF 218 234 219 235 IF(lwp) THEN … … 247 263 ENDIF 248 264 265 ! set the number of level over which river runoffs are applied 266 ! online configuration : computed in sbcrnf 267 IF( lk_offline ) THEN 268 nk_rnf(:,:) = 1 269 h_rnf (:,:) = fsdept(:,:,1) 270 ENDIF 271 249 272 ! dust input from the atmosphere 250 273 ! ------------------------------ … … 358 381 rivalkinput = 0._wp 359 382 END IF 360 361 383 ! nutrient input from dust 362 384 ! ------------------------ … … 410 432 CALL iom_close( numiron ) 411 433 ! 412 DO jk = 1, 5 434 ik50 = 5 ! last level where depth less than 50 m 435 DO jk = jpkm1, 1, -1 436 IF( gdept_1d(jk) > 50. ) ik50 = jk - 1 437 END DO 438 IF (lwp) WRITE(numout,*) 439 IF (lwp) WRITE(numout,*) ' Level corresponding to 50m depth ', ik50,' ', gdept_1d(ik50+1) 440 IF (lwp) WRITE(numout,*) 441 DO jk = 1, ik50 413 442 DO jj = 2, jpjm1 414 443 DO ji = fs_2, fs_jpim1 … … 421 450 END DO 422 451 END DO 423 IF( cp_cfg == 'orca' .AND. jp_cfg == 2 ) THEN 424 ii0 = 176 ; ii1 = 176 ! Southern Island : Kerguelen 425 ij0 = 37 ; ij1 = 37 ; zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) = 0.3_wp 426 ! 427 ii0 = 119 ; ii1 = 119 ! South Georgia 428 ij0 = 29 ; ij1 = 29 ; zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) = 0.3_wp 429 ! 430 ii0 = 111 ; ii1 = 111 ! Falklands 431 ij0 = 35 ; ij1 = 35 ; zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) = 0.3_wp 432 ! 433 ii0 = 168 ; ii1 = 168 ! Crozet 434 ij0 = 40 ; ij1 = 40 ; zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) = 0.3_wp 435 ! 436 ii0 = 119 ; ii1 = 119 ! South Orkney 437 ij0 = 28 ; ij1 = 28 ; zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) = 0.3_wp 438 ! 439 ii0 = 140 ; ii1 = 140 ! Bouvet Island 440 ij0 = 33 ; ij1 = 33 ; zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) = 0.3_wp 441 ! 442 ii0 = 178 ; ii1 = 178 ! Prince edwards 443 ij0 = 34 ; ij1 = 34 ; zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) = 0.3_wp 444 ! 445 ii0 = 43 ; ii1 = 43 ! Balleny islands 446 ij0 = 21 ; ij1 = 21 ; zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) = 0.3_wp 447 ENDIF 452 ! 448 453 CALL lbc_lnk( zcmask , 'T', 1. ) ! lateral boundary conditions on cmask (sign unchanged) 454 ! 449 455 DO jk = 1, jpk 450 456 DO jj = 1, jpj … … 514 520 515 521 !!====================================================================== 516 END MODULE 522 END MODULE p4zsbc -
branches/2014/dev_r4650_UKMO10_Tidally_Meaned_Diagnostics/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsed.F90
r5260 r5989 21 21 USE p4zopt ! optical model 22 22 USE p4zlim ! Co-limitations of differents nutrients 23 USE p4zrem ! Remineralisation of organic matter24 23 USE p4zsbc ! External source of nutrients 25 24 USE p4zint ! interpolation and computation of various fields … … 30 29 PRIVATE 31 30 32 PUBLIC p4z_sed 31 PUBLIC p4z_sed 32 PUBLIC p4z_sed_alloc 33 33 34 34 35 !! * Module variables 36 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: nitrpot !: Nitrogen fixation 37 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,: ) :: sdenit !: Nitrate reduction in the sediments 35 38 REAL(wp) :: r1_rday !: inverse of rday 36 39 37 INTEGER :: numnit 38 39 40 !!* Substitution 41 # include "top_substitute.h90" 40 !! * Substitutions 41 # include "domzgr_substitute.h90" 42 42 !!---------------------------------------------------------------------- 43 43 !! NEMO/TOP 3.3 , NEMO Consortium (2010) … … 47 47 CONTAINS 48 48 49 SUBROUTINE p4z_sed( kt, jnt )49 SUBROUTINE p4z_sed( kt, knt ) 50 50 !!--------------------------------------------------------------------- 51 51 !! *** ROUTINE p4z_sed *** … … 58 58 !!--------------------------------------------------------------------- 59 59 ! 60 INTEGER, INTENT(in) :: kt, jnt ! ocean time step60 INTEGER, INTENT(in) :: kt, knt ! ocean time step 61 61 INTEGER :: ji, jj, jk, ikt 62 62 #if ! defined key_sed … … 69 69 REAL(wp) :: zsiloss, zcaloss, zws3, zws4, zwsc, zdep, zwstpoc 70 70 REAL(wp) :: ztrfer, ztrpo4, zwdust, zlight 71 REAL(wp) :: zrdenittot, zsdenittot, znitrpottot72 71 ! 73 72 CHARACTER (len=25) :: charout 74 REAL(wp), POINTER, DIMENSION(:,: ) :: zpdep, zsidep, zwork1, zwork2, zwork3 , zwork473 REAL(wp), POINTER, DIMENSION(:,: ) :: zpdep, zsidep, zwork1, zwork2, zwork3 75 74 REAL(wp), POINTER, DIMENSION(:,: ) :: zdenit2d, zironice, zbureff 76 75 REAL(wp), POINTER, DIMENSION(:,: ) :: zwsbio3, zwsbio4, zwscal 77 REAL(wp), POINTER, DIMENSION(:,:,:) :: z nitrpot, zirondep, zsoufer76 REAL(wp), POINTER, DIMENSION(:,:,:) :: zirondep, zsoufer 78 77 !!--------------------------------------------------------------------- 79 78 ! 80 79 IF( nn_timing == 1 ) CALL timing_start('p4z_sed') 81 80 ! 82 IF( kt == nittrc000 .AND. jnt == 1 ) THEN 83 r1_rday = 1. / rday 84 IF( ln_check_mass .AND. lwp) & 85 & CALL ctl_opn( numnit, 'nitrogen.budget', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, 6, .FALSE., narea ) 86 ENDIF 81 IF( kt == nittrc000 .AND. knt == 1 ) r1_rday = 1. / rday 87 82 ! 88 83 ! Allocate temporary workspace 89 CALL wrk_alloc( jpi, jpj, zdenit2d, zwork1, zwork2, zwork3, z work4, zbureff )84 CALL wrk_alloc( jpi, jpj, zdenit2d, zwork1, zwork2, zwork3, zbureff ) 90 85 CALL wrk_alloc( jpi, jpj, zwsbio3, zwsbio4, zwscal ) 91 CALL wrk_alloc( jpi, jpj, jpk, z nitrpot, zsoufer )86 CALL wrk_alloc( jpi, jpj, jpk, zsoufer ) 92 87 93 88 zdenit2d(:,:) = 0.e0 … … 96 91 zwork2 (:,:) = 0.e0 97 92 zwork3 (:,:) = 0.e0 98 zwork4 (:,:) = 0.e099 93 100 94 ! Iron input/uptake due to sea ice : Crude parameterization based on Lancelot et al. … … 108 102 zdep = rfact2 / fse3t(ji,jj,1) 109 103 zwflux = fmmflx(ji,jj) / 1000._wp 110 zfminus = MIN( 0._wp, -zwflux ) * tr n(ji,jj,1,jpfer) * zdep104 zfminus = MIN( 0._wp, -zwflux ) * trb(ji,jj,1,jpfer) * zdep 111 105 zfplus = MAX( 0._wp, -zwflux ) * icefeinput * zdep 112 106 zironice(ji,jj) = zfplus + zfminus … … 114 108 END DO 115 109 ! 116 tr n(:,:,1,jpfer) = trn(:,:,1,jpfer) + zironice(:,:)110 tra(:,:,1,jpfer) = tra(:,:,1,jpfer) + zironice(:,:) 117 111 ! 118 IF( lk_iomput .AND. jnt == nrdttrc .AND. iom_use( "Ironice" ) ) &112 IF( lk_iomput .AND. knt == nrdttrc .AND. iom_use( "Ironice" ) ) & 119 113 & CALL iom_put( "Ironice", zironice(:,:) * 1.e+3 * rfact2r * fse3t(:,:,1) * tmask(:,:,1) ) ! iron flux from ice 120 114 ! … … 144 138 END DO 145 139 ! ! Iron solubilization of particles in the water column 146 tr n(:,:,1,jppo4) = trn(:,:,1,jppo4) + zpdep (:,:)147 tr n(:,:,1,jpsil) = trn(:,:,1,jpsil) + zsidep (:,:)148 tr n(:,:,:,jpfer) = trn(:,:,:,jpfer) + zirondep(:,:,:)140 tra(:,:,1,jppo4) = tra(:,:,1,jppo4) + zpdep (:,:) 141 tra(:,:,1,jpsil) = tra(:,:,1,jpsil) + zsidep (:,:) 142 tra(:,:,:,jpfer) = tra(:,:,:,jpfer) + zirondep(:,:,:) 149 143 ! 150 144 IF( lk_iomput ) THEN 151 IF( jnt == nrdttrc ) THEN145 IF( knt == nrdttrc ) THEN 152 146 IF( iom_use( "Irondep" ) ) & 153 147 & CALL iom_put( "Irondep", zirondep(:,:,1) * 1.e+3 * rfact2r * fse3t(:,:,1) * tmask(:,:,1) ) ! surface downward dust depo of iron … … 167 161 ! ---------------------------------------------------------- 168 162 IF( ln_river ) THEN 169 trn(:,:,1,jppo4) = trn(:,:,1,jppo4) + rivdip(:,:) * rfact2 170 trn(:,:,1,jpno3) = trn(:,:,1,jpno3) + rivdin(:,:) * rfact2 171 trn(:,:,1,jpfer) = trn(:,:,1,jpfer) + rivdic(:,:) * 5.e-5 * rfact2 172 trn(:,:,1,jpsil) = trn(:,:,1,jpsil) + rivdsi(:,:) * rfact2 173 trn(:,:,1,jpdic) = trn(:,:,1,jpdic) + rivdic(:,:) * rfact2 174 trn(:,:,1,jptal) = trn(:,:,1,jptal) + ( rivalk(:,:) - rno3 * rivdin(:,:) ) * rfact2 163 DO jj = 1, jpj 164 DO ji = 1, jpi 165 DO jk = 1, nk_rnf(ji,jj) 166 tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + rivdip(ji,jj) * rfact2 167 tra(ji,jj,jk,jpno3) = tra(ji,jj,jk,jpno3) + rivdin(ji,jj) * rfact2 168 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + rivdic(ji,jj) * 5.e-5 * rfact2 169 tra(ji,jj,jk,jpsil) = tra(ji,jj,jk,jpsil) + rivdsi(ji,jj) * rfact2 170 tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + rivdic(ji,jj) * rfact2 171 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + ( rivalk(ji,jj) - rno3 * rivdin(ji,jj) ) * rfact2 172 ENDDO 173 ENDDO 174 ENDDO 175 175 ENDIF 176 176 … … 178 178 ! ---------------------------------------------------------- 179 179 IF( ln_ndepo ) THEN 180 tr n(:,:,1,jpno3) = trn(:,:,1,jpno3) + nitdep(:,:) * rfact2181 tr n(:,:,1,jptal) = trn(:,:,1,jptal) - rno3 * nitdep(:,:) * rfact2180 tra(:,:,1,jpno3) = tra(:,:,1,jpno3) + nitdep(:,:) * rfact2 181 tra(:,:,1,jptal) = tra(:,:,1,jptal) - rno3 * nitdep(:,:) * rfact2 182 182 ENDIF 183 183 … … 185 185 ! ------------------------------------------------------ 186 186 IF( ln_ironsed ) THEN 187 tr n(:,:,:,jpfer) = trn(:,:,:,jpfer) + ironsed(:,:,:) * rfact2187 tra(:,:,:,jpfer) = tra(:,:,:,jpfer) + ironsed(:,:,:) * rfact2 188 188 ! 189 IF( lk_iomput .AND. jnt == nrdttrc .AND. iom_use( "Ironsed" ) ) &189 IF( lk_iomput .AND. knt == nrdttrc .AND. iom_use( "Ironsed" ) ) & 190 190 & CALL iom_put( "Ironsed", ironsed(:,:,:) * 1.e+3 * tmask(:,:,:) ) ! iron inputs from sediments 191 191 ENDIF … … 194 194 ! ------------------------------------------------------ 195 195 IF( ln_hydrofe ) THEN 196 tr n(:,:,:,jpfer) = trn(:,:,:,jpfer) + hydrofe(:,:,:) * rfact2196 tra(:,:,:,jpfer) = tra(:,:,:,jpfer) + hydrofe(:,:,:) * rfact2 197 197 ! 198 IF( lk_iomput .AND. jnt == nrdttrc .AND. iom_use( "HYDR" ) ) &198 IF( lk_iomput .AND. knt == nrdttrc .AND. iom_use( "HYDR" ) ) & 199 199 & CALL iom_put( "HYDR", hydrofe(:,:,:) * 1.e+3 * tmask(:,:,:) ) ! hydrothermal iron input 200 200 ENDIF … … 222 222 ikt = mbkt(ji,jj) 223 223 # if defined key_kriest 224 zflx = tr n(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) * 1E3 * 1E6 / 1E4224 zflx = trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) * 1E3 * 1E6 / 1E4 225 225 # else 226 zflx = ( tr n(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj) &227 & + tr n(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) ) * 1E3 * 1E6 / 1E4226 zflx = ( trb(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj) & 227 & + trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) ) * 1E3 * 1E6 / 1E4 228 228 #endif 229 229 zflx = LOG10( MAX( 1E-3, zflx ) ) 230 zo2 = LOG10( MAX( 10. , tr n(ji,jj,ikt,jpoxy) * 1E6 ) )231 zno3 = LOG10( MAX( 1. , tr n(ji,jj,ikt,jpno3) * 1E6 * rno3 ) )230 zo2 = LOG10( MAX( 10. , trb(ji,jj,ikt,jpoxy) * 1E6 ) ) 231 zno3 = LOG10( MAX( 1. , trb(ji,jj,ikt,jpno3) * 1E6 * rno3 ) ) 232 232 zdep = LOG10( fsdepw(ji,jj,ikt+1) ) 233 233 zdenit2d(ji,jj) = -2.2567 - 1.185 * zflx - 0.221 * zflx**2 - 0.3995 * zno3 * zo2 + 1.25 * zno3 & … … 235 235 zdenit2d(ji,jj) = 10.0**( zdenit2d(ji,jj) ) 236 236 ! 237 zflx = ( tr n(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj) &238 & + tr n(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) ) * 1E6237 zflx = ( trb(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj) & 238 & + trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) ) * 1E6 239 239 zbureff(ji,jj) = 0.013 + 0.53 * zflx**2 / ( 7.0 + zflx )**2 240 240 ENDIF … … 251 251 ikt = mbkt(ji,jj) 252 252 # if defined key_kriest 253 zwork1(ji,jj) = tr n(ji,jj,ikt,jpgsi) * zwscal (ji,jj)254 zwork2(ji,jj) = tr n(ji,jj,ikt,jppoc) * zwsbio3(ji,jj)253 zwork1(ji,jj) = trb(ji,jj,ikt,jpgsi) * zwscal (ji,jj) 254 zwork2(ji,jj) = trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) 255 255 # else 256 zwork1(ji,jj) = tr n(ji,jj,ikt,jpgsi) * zwsbio4(ji,jj)257 zwork2(ji,jj) = tr n(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj) + trn(ji,jj,ikt,jppoc) * zwsbio3(ji,jj)256 zwork1(ji,jj) = trb(ji,jj,ikt,jpgsi) * zwsbio4(ji,jj) 257 zwork2(ji,jj) = trb(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj) + trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) 258 258 # endif 259 259 ! For calcite, burial efficiency is made a function of saturation 260 260 zfactcal = MIN( excess(ji,jj,ikt), 0.2 ) 261 261 zfactcal = MIN( 1., 1.3 * ( 0.2 - zfactcal ) / ( 0.4 - zfactcal ) ) 262 zwork3(ji,jj) = tr n(ji,jj,ikt,jpcal) * zwscal(ji,jj) * 2.e0 * zfactcal262 zwork3(ji,jj) = trb(ji,jj,ikt,jpcal) * zwscal(ji,jj) * 2.e0 * zfactcal 263 263 ENDIF 264 264 END DO … … 279 279 DO ji = 1, jpi 280 280 ikt = mbkt(ji,jj) 281 zdep = xstep / fse3t(ji,jj,ikt) 281 zdep = xstep / fse3t(ji,jj,ikt) 282 282 zws4 = zwsbio4(ji,jj) * zdep 283 283 zwsc = zwscal (ji,jj) * zdep 284 284 # if defined key_kriest 285 zsiloss = tr n(ji,jj,ikt,jpgsi) * zws4285 zsiloss = trb(ji,jj,ikt,jpgsi) * zws4 286 286 # else 287 zsiloss = tr n(ji,jj,ikt,jpgsi) * zwsc287 zsiloss = trb(ji,jj,ikt,jpgsi) * zwsc 288 288 # endif 289 zcaloss = tr n(ji,jj,ikt,jpcal) * zwsc289 zcaloss = trb(ji,jj,ikt,jpcal) * zwsc 290 290 ! 291 tr n(ji,jj,ikt,jpgsi) = trn(ji,jj,ikt,jpgsi) - zsiloss292 tr n(ji,jj,ikt,jpcal) = trn(ji,jj,ikt,jpcal) - zcaloss291 tra(ji,jj,ikt,jpgsi) = tra(ji,jj,ikt,jpgsi) - zsiloss 292 tra(ji,jj,ikt,jpcal) = tra(ji,jj,ikt,jpcal) - zcaloss 293 293 #if ! defined key_sed 294 tr n(ji,jj,ikt,jpsil) = trn(ji,jj,ikt,jpsil) + zsiloss * zrivsil294 tra(ji,jj,ikt,jpsil) = tra(ji,jj,ikt,jpsil) + zsiloss * zrivsil 295 295 zfactcal = MIN( excess(ji,jj,ikt), 0.2 ) 296 296 zfactcal = MIN( 1., 1.3 * ( 0.2 - zfactcal ) / ( 0.4 - zfactcal ) ) 297 297 zrivalk = 1._wp - ( rivalkinput * r1_ryyss ) * zfactcal / ( zsumsedcal + rtrn ) 298 tr n(ji,jj,ikt,jptal) = trn(ji,jj,ikt,jptal) + zcaloss * zrivalk * 2.0299 tr n(ji,jj,ikt,jpdic) = trn(ji,jj,ikt,jpdic) + zcaloss * zrivalk298 tra(ji,jj,ikt,jptal) = tra(ji,jj,ikt,jptal) + zcaloss * zrivalk * 2.0 299 tra(ji,jj,ikt,jpdic) = tra(ji,jj,ikt,jpdic) + zcaloss * zrivalk 300 300 #endif 301 301 END DO … … 304 304 DO jj = 1, jpj 305 305 DO ji = 1, jpi 306 ikt 307 zdep = xstep / fse3t(ji,jj,ikt)306 ikt = mbkt(ji,jj) 307 zdep = xstep / fse3t(ji,jj,ikt) 308 308 zws4 = zwsbio4(ji,jj) * zdep 309 309 zws3 = zwsbio3(ji,jj) * zdep 310 310 zrivno3 = 1. - zbureff(ji,jj) 311 311 # if ! defined key_kriest 312 tr n(ji,jj,ikt,jpgoc) = trn(ji,jj,ikt,jpgoc) - trn(ji,jj,ikt,jpgoc) * zws4313 tr n(ji,jj,ikt,jppoc) = trn(ji,jj,ikt,jppoc) - trn(ji,jj,ikt,jppoc) * zws3314 tr n(ji,jj,ikt,jpbfe) = trn(ji,jj,ikt,jpbfe) - trn(ji,jj,ikt,jpbfe) * zws4315 tr n(ji,jj,ikt,jpsfe) = trn(ji,jj,ikt,jpsfe) - trn(ji,jj,ikt,jpsfe) * zws3316 zwstpoc = trn(ji,jj,ikt,jpgoc) * zws4 + trn(ji,jj,ikt,jppoc) * zws3312 tra(ji,jj,ikt,jpgoc) = tra(ji,jj,ikt,jpgoc) - trb(ji,jj,ikt,jpgoc) * zws4 313 tra(ji,jj,ikt,jppoc) = tra(ji,jj,ikt,jppoc) - trb(ji,jj,ikt,jppoc) * zws3 314 tra(ji,jj,ikt,jpbfe) = tra(ji,jj,ikt,jpbfe) - trb(ji,jj,ikt,jpbfe) * zws4 315 tra(ji,jj,ikt,jpsfe) = tra(ji,jj,ikt,jpsfe) - trb(ji,jj,ikt,jpsfe) * zws3 316 zwstpoc = trb(ji,jj,ikt,jpgoc) * zws4 + trb(ji,jj,ikt,jppoc) * zws3 317 317 # else 318 tr n(ji,jj,ikt,jpnum) = trn(ji,jj,ikt,jpnum) - trn(ji,jj,ikt,jpnum) * zws4319 tr n(ji,jj,ikt,jppoc) = trn(ji,jj,ikt,jppoc) - trn(ji,jj,ikt,jppoc) * zws3320 tr n(ji,jj,ikt,jpsfe) = trn(ji,jj,ikt,jpsfe) - trn(ji,jj,ikt,jpsfe) * zws3321 zwstpoc = tr n(ji,jj,ikt,jppoc) * zws3318 tra(ji,jj,ikt,jpnum) = tra(ji,jj,ikt,jpnum) - trb(ji,jj,ikt,jpnum) * zws4 319 tra(ji,jj,ikt,jppoc) = tra(ji,jj,ikt,jppoc) - trb(ji,jj,ikt,jppoc) * zws3 320 tra(ji,jj,ikt,jpsfe) = tra(ji,jj,ikt,jpsfe) - trb(ji,jj,ikt,jpsfe) * zws3 321 zwstpoc = trb(ji,jj,ikt,jppoc) * zws3 322 322 # endif 323 323 … … 325 325 ! The 0.5 factor in zpdenit and zdenitt is to avoid negative NO3 concentration after both denitrification 326 326 ! in the sediments and just above the sediments. Not very clever, but simpliest option. 327 zpdenit = MIN( 0.5 * ( tr n(ji,jj,ikt,jpno3) - rtrn ) / rdenit, zdenit2d(ji,jj) * zwstpoc * zrivno3 )327 zpdenit = MIN( 0.5 * ( trb(ji,jj,ikt,jpno3) - rtrn ) / rdenit, zdenit2d(ji,jj) * zwstpoc * zrivno3 ) 328 328 z1pdenit = zwstpoc * zrivno3 - zpdenit 329 zolimit = MIN( ( tr n(ji,jj,ikt,jpoxy) - rtrn ) / o2ut, z1pdenit * ( 1.- nitrfac(ji,jj,ikt) ) )330 zdenitt = MIN( 0.5 * ( tr n(ji,jj,ikt,jpno3) - rtrn ) / rdenit, z1pdenit * nitrfac(ji,jj,ikt) )331 tr n(ji,jj,ikt,jpdoc) = trn(ji,jj,ikt,jpdoc) + z1pdenit - zolimit - zdenitt332 tr n(ji,jj,ikt,jppo4) = trn(ji,jj,ikt,jppo4) + zpdenit + zolimit + zdenitt333 tr n(ji,jj,ikt,jpnh4) = trn(ji,jj,ikt,jpnh4) + zpdenit + zolimit + zdenitt334 tr n(ji,jj,ikt,jpno3) = trn(ji,jj,ikt,jpno3) - rdenit * (zpdenit + zdenitt)335 tr n(ji,jj,ikt,jpoxy) = trn(ji,jj,ikt,jpoxy) - zolimit * o2ut336 tr n(ji,jj,ikt,jptal) = trn(ji,jj,ikt,jptal) + rno3 * (zolimit + (1.+rdenit) * (zpdenit + zdenitt) )337 tr n(ji,jj,ikt,jpdic) = trn(ji,jj,ikt,jpdic) + zpdenit + zolimit + zdenitt338 zwork4(ji,jj) = rdenit * zpdenit * fse3t(ji,jj,ikt)329 zolimit = MIN( ( trb(ji,jj,ikt,jpoxy) - rtrn ) / o2ut, z1pdenit * ( 1.- nitrfac(ji,jj,ikt) ) ) 330 zdenitt = MIN( 0.5 * ( trb(ji,jj,ikt,jpno3) - rtrn ) / rdenit, z1pdenit * nitrfac(ji,jj,ikt) ) 331 tra(ji,jj,ikt,jpdoc) = tra(ji,jj,ikt,jpdoc) + z1pdenit - zolimit - zdenitt 332 tra(ji,jj,ikt,jppo4) = tra(ji,jj,ikt,jppo4) + zpdenit + zolimit + zdenitt 333 tra(ji,jj,ikt,jpnh4) = tra(ji,jj,ikt,jpnh4) + zpdenit + zolimit + zdenitt 334 tra(ji,jj,ikt,jpno3) = tra(ji,jj,ikt,jpno3) - rdenit * (zpdenit + zdenitt) 335 tra(ji,jj,ikt,jpoxy) = tra(ji,jj,ikt,jpoxy) - zolimit * o2ut 336 tra(ji,jj,ikt,jptal) = tra(ji,jj,ikt,jptal) + rno3 * (zolimit + (1.+rdenit) * (zpdenit + zdenitt) ) 337 tra(ji,jj,ikt,jpdic) = tra(ji,jj,ikt,jpdic) + zpdenit + zolimit + zdenitt 338 sdenit(ji,jj) = rdenit * zpdenit * fse3t(ji,jj,ikt) 339 339 #endif 340 340 END DO … … 356 356 #endif 357 357 ztrfer = biron(ji,jj,jk) / ( concfediaz + biron(ji,jj,jk) ) 358 ztrpo4 = tr n (ji,jj,jk,jppo4) / ( concnnh4 + trn(ji,jj,jk,jppo4) )359 zlight = ( 1.- EXP( -etot (ji,jj,jk) / diazolight ) )360 znitrpot(ji,jj,jk) = MAX( 0.e0, ( 0.6 * tgfunc(ji,jj,jk) - 2.15 ) * r1_rday ) &358 ztrpo4 = trb (ji,jj,jk,jppo4) / ( concnnh4 + trb (ji,jj,jk,jppo4) ) 359 zlight = ( 1.- EXP( -etot_ndcy(ji,jj,jk) / diazolight ) ) 360 nitrpot(ji,jj,jk) = MAX( 0.e0, ( 0.6 * tgfunc(ji,jj,jk) - 2.15 ) * r1_rday ) & 361 361 & * zfact * MIN( ztrfer, ztrpo4 ) * zlight 362 362 zsoufer(ji,jj,jk) = zlight * 2E-11 / (2E-11 + biron(ji,jj,jk)) … … 370 370 DO jj = 1, jpj 371 371 DO ji = 1, jpi 372 zfact = znitrpot(ji,jj,jk) * nitrfix373 tr n(ji,jj,jk,jpnh4) = trn(ji,jj,jk,jpnh4) + zfact374 tr n(ji,jj,jk,jptal) = trn(ji,jj,jk,jptal) + rno3 * zfact375 tr n(ji,jj,jk,jpoxy) = trn(ji,jj,jk,jpoxy) + o2nit * zfact376 tr n(ji,jj,jk,jppo4) = trn(ji,jj,jk,jppo4) + concdnh4 / ( concdnh4 + trn(ji,jj,jk,jppo4) ) &377 & * 0.002 * tr n(ji,jj,jk,jpdoc) * rfact2 / rday378 tr n(ji,jj,jk,jpfer) = trn(ji,jj,jk,jpfer) + 0.002 * 4E-10 * zsoufer(ji,jj,jk) * rfact2 / rday372 zfact = nitrpot(ji,jj,jk) * nitrfix 373 tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zfact 374 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * zfact 375 tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) + o2nit * zfact 376 tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + concdnh4 / ( concdnh4 + trb(ji,jj,jk,jppo4) ) & 377 & * 0.002 * trb(ji,jj,jk,jpdoc) * xstep 378 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + 0.002 * 4E-10 * zsoufer(ji,jj,jk) * xstep 379 379 END DO 380 380 END DO 381 381 END DO 382 382 383 ! Global budget of N SMS : denitrification in the water column and in the sediment384 ! nitrogen fixation by the diazotrophs385 ! --------------------------------------------------------------------------------386 zrdenittot = glob_sum ( denitr(:,:,:) * rdenit * xnegtr(:,:,:) * cvol(:,:,:) )387 zsdenittot = glob_sum ( zwork4(:,:) * e1e2t(:,:) )388 znitrpottot = glob_sum ( znitrpot(:,:,:) * nitrfix * cvol(:,:,:) )389 zfact = 1.e+3 * rfact2r * rno3 * 14. / 1.e12 * ryyss ! conversion molC/l/kt ----> TgN/m3/year390 !391 IF( ln_check_mass .AND. ( kt == nitend .AND. jnt == nrdttrc ) .AND. ( lwp ) ) &392 & WRITE(numnit,9100) ndastp, znitrpottot * zfact , &393 & zrdenittot * zfact , &394 & zsdenittot * zfact395 !396 383 IF( lk_iomput ) THEN 397 IF( jnt == nrdttrc ) THEN384 IF( knt == nrdttrc ) THEN 398 385 zfact = 1.e+3 * rfact2r * rno3 ! conversion from molC/l/kt to molN/m3/s 399 IF( iom_use("Nfix" ) ) CALL iom_put( "Nfix" , znitrpot(:,:,:) * nitrfix * zfact * tmask(:,:,:) ) ! nitrogen fixation 400 IF( iom_use("Sdenit" ) ) CALL iom_put( "Sdenit", zwork4(:,:) * zfact * tmask(:,:,1) ) ! Nitrate reduction in the sediments 401 IF( iom_use("tnfix" ) ) CALL iom_put( "tnfix" , znitrpottot * zfact ) ! Global nitrogen fixation 402 IF( iom_use("tdenit" ) ) CALL iom_put( "tdenit" , zrdenittot * zfact ) ! Total denitrification 386 IF( iom_use("Nfix" ) ) CALL iom_put( "Nfix", nitrpot(:,:,:) * nitrfix * zfact * tmask(:,:,:) ) ! nitrogen fixation 403 387 IF( iom_use("INTNFIX") ) THEN ! nitrogen fixation rate in ocean ( vertically integrated ) 404 388 zwork1(:,:) = 0. 405 389 DO jk = 1, jpkm1 406 zwork1(:,:) = zwork1(:,:) + znitrpot(:,:,jk) * nitrfix * zfact * fse3t(:,:,jk) * tmask(:,:,jk)390 zwork1(:,:) = zwork1(:,:) + nitrpot(:,:,jk) * nitrfix * zfact * fse3t(:,:,jk) * tmask(:,:,jk) 407 391 ENDDO 408 392 CALL iom_put( "INTNFIX" , zwork1 ) … … 411 395 ELSE 412 396 IF( ln_diatrc ) & 413 & trc2d(:,:,jp_pcs0_2d + 12) = znitrpot(:,:,1) * nitrfix * rno3 * 1.e+3 * rfact2r * fse3t(:,:,1) * tmask(:,:,1)397 & trc2d(:,:,jp_pcs0_2d + 12) = nitrpot(:,:,1) * nitrfix * rno3 * 1.e+3 * rfact2r * fse3t(:,:,1) * tmask(:,:,1) 414 398 ENDIF 415 399 ! … … 417 401 WRITE(charout, fmt="('sed ')") 418 402 CALL prt_ctl_trc_info(charout) 419 CALL prt_ctl_trc(tab4d=tr n, mask=tmask, clinfo=ctrcnm)420 ENDIF 421 ! 422 CALL wrk_dealloc( jpi, jpj, zdenit2d, zwork1, zwork2, zwork3, z work4, zbureff )403 CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm) 404 ENDIF 405 ! 406 CALL wrk_dealloc( jpi, jpj, zdenit2d, zwork1, zwork2, zwork3, zbureff ) 423 407 CALL wrk_dealloc( jpi, jpj, zwsbio3, zwsbio4, zwscal ) 424 CALL wrk_dealloc( jpi, jpj, jpk, z nitrpot, zsoufer )408 CALL wrk_dealloc( jpi, jpj, jpk, zsoufer ) 425 409 ! 426 410 IF( nn_timing == 1 ) CALL timing_stop('p4z_sed') … … 429 413 ! 430 414 END SUBROUTINE p4z_sed 415 416 417 INTEGER FUNCTION p4z_sed_alloc() 418 !!---------------------------------------------------------------------- 419 !! *** ROUTINE p4z_sed_alloc *** 420 !!---------------------------------------------------------------------- 421 ALLOCATE( nitrpot(jpi,jpj,jpk), sdenit(jpi,jpj), STAT=p4z_sed_alloc ) 422 ! 423 IF( p4z_sed_alloc /= 0 ) CALL ctl_warn('p4z_sed_alloc: failed to allocate arrays') 424 ! 425 END FUNCTION p4z_sed_alloc 426 431 427 432 428 #else … … 440 436 441 437 !!====================================================================== 442 END MODULE 438 END MODULE p4zsed -
branches/2014/dev_r4650_UKMO10_Tidally_Meaned_Diagnostics/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsink.F90
r5260 r5989 65 65 #endif 66 66 67 !! * Substitution68 # include " top_substitute.h90"67 !! * Substitutions 68 # include "domzgr_substitute.h90" 69 69 !!---------------------------------------------------------------------- 70 70 !! NEMO/TOP 3.3 , NEMO Consortium (2010) … … 79 79 !!---------------------------------------------------------------------- 80 80 81 SUBROUTINE p4z_sink ( kt, jnt )81 SUBROUTINE p4z_sink ( kt, knt ) 82 82 !!--------------------------------------------------------------------- 83 83 !! *** ROUTINE p4z_sink *** … … 88 88 !! ** Method : - ??? 89 89 !!--------------------------------------------------------------------- 90 INTEGER, INTENT(in) :: kt, jnt90 INTEGER, INTENT(in) :: kt, knt 91 91 INTEGER :: ji, jj, jk, jit 92 92 INTEGER :: iiter1, iiter2 … … 199 199 zfact = zstep * xdiss(ji,jj,jk) 200 200 ! Part I : Coagulation dependent on turbulence 201 zagg1 = 25.9 * zfact * tr n(ji,jj,jk,jppoc) * trn(ji,jj,jk,jppoc)202 zagg2 = 4452. * zfact * tr n(ji,jj,jk,jppoc) * trn(ji,jj,jk,jpgoc)201 zagg1 = 25.9 * zfact * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jppoc) 202 zagg2 = 4452. * zfact * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jpgoc) 203 203 204 204 ! Part II : Differential settling 205 205 206 206 ! Aggregation of small into large particles 207 zagg3 = 47.1 * zstep * tr n(ji,jj,jk,jppoc) * trn(ji,jj,jk,jpgoc)208 zagg4 = 3.3 * zstep * tr n(ji,jj,jk,jppoc) * trn(ji,jj,jk,jppoc)207 zagg3 = 47.1 * zstep * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jpgoc) 208 zagg4 = 3.3 * zstep * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jppoc) 209 209 210 210 zagg = zagg1 + zagg2 + zagg3 + zagg4 211 zaggfe = zagg * tr n(ji,jj,jk,jpsfe) / ( trn(ji,jj,jk,jppoc) + rtrn )211 zaggfe = zagg * trb(ji,jj,jk,jpsfe) / ( trb(ji,jj,jk,jppoc) + rtrn ) 212 212 213 213 ! Aggregation of DOC to POC : … … 215 215 ! 2nd term is shear aggregation of DOC-POC 216 216 ! 3rd term is differential settling of DOC-POC 217 zaggdoc = ( ( 0.369 * 0.3 * tr n(ji,jj,jk,jpdoc) + 102.4 * trn(ji,jj,jk,jppoc) ) * zfact &218 & + 2.4 * zstep * tr n(ji,jj,jk,jppoc) ) * 0.3 * trn(ji,jj,jk,jpdoc)217 zaggdoc = ( ( 0.369 * 0.3 * trb(ji,jj,jk,jpdoc) + 102.4 * trb(ji,jj,jk,jppoc) ) * zfact & 218 & + 2.4 * zstep * trb(ji,jj,jk,jppoc) ) * 0.3 * trb(ji,jj,jk,jpdoc) 219 219 ! transfer of DOC to GOC : 220 220 ! 1st term is shear aggregation 221 221 ! 2nd term is differential settling 222 zaggdoc2 = ( 3.53E3 * zfact + 0.1 * zstep ) * tr n(ji,jj,jk,jpgoc) * 0.3 * trn(ji,jj,jk,jpdoc)222 zaggdoc2 = ( 3.53E3 * zfact + 0.1 * zstep ) * trb(ji,jj,jk,jpgoc) * 0.3 * trb(ji,jj,jk,jpdoc) 223 223 ! tranfer of DOC to POC due to brownian motion 224 zaggdoc3 = ( 5095. * tr n(ji,jj,jk,jppoc) + 114. * 0.3 * trn(ji,jj,jk,jpdoc) ) *zstep * 0.3 * trn(ji,jj,jk,jpdoc)224 zaggdoc3 = ( 5095. * trb(ji,jj,jk,jppoc) + 114. * 0.3 * trb(ji,jj,jk,jpdoc) ) *zstep * 0.3 * trb(ji,jj,jk,jpdoc) 225 225 226 226 ! Update the trends … … 237 237 238 238 ! Total carbon export per year 239 IF( iom_use( "tcexp" ) .OR. ( ln_check_mass .AND. kt == nitend .AND. jnt == nrdttrc ) ) &239 IF( iom_use( "tcexp" ) .OR. ( ln_check_mass .AND. kt == nitend .AND. knt == nrdttrc ) ) & 240 240 & t_oce_co2_exp = glob_sum( ( sinking(:,:,ik100) + sinking2(:,:,ik100) ) * e1e2t(:,:) * tmask(:,:,1) ) 241 241 ! 242 242 IF( lk_iomput ) THEN 243 IF( jnt == nrdttrc ) THEN243 IF( knt == nrdttrc ) THEN 244 244 CALL wrk_alloc( jpi, jpj, zw2d ) 245 245 CALL wrk_alloc( jpi, jpj, jpk, zw3d ) … … 328 328 !!---------------------------------------------------------------------- 329 329 330 SUBROUTINE p4z_sink ( kt, jnt )330 SUBROUTINE p4z_sink ( kt, knt ) 331 331 !!--------------------------------------------------------------------- 332 332 !! *** ROUTINE p4z_sink *** … … 338 338 !!--------------------------------------------------------------------- 339 339 ! 340 INTEGER, INTENT(in) :: kt, jnt340 INTEGER, INTENT(in) :: kt, knt 341 341 ! 342 342 INTEGER :: ji, jj, jk, jit, niter1, niter2 … … 373 373 DO ji = 1, jpi 374 374 IF( tmask(ji,jj,jk) /= 0.e0 ) THEN 375 znum = tr n(ji,jj,jk,jppoc) / ( trn(ji,jj,jk,jpnum) + rtrn ) / xkr_massp375 znum = trb(ji,jj,jk,jppoc) / ( trb(ji,jj,jk,jpnum) + rtrn ) / xkr_massp 376 376 ! -------------- To avoid sinking speed over 50 m/day ------- 377 377 znum = MIN( xnumm(jk), znum ) … … 435 435 IF( tmask(ji,jj,jk) /= 0.e0 ) THEN 436 436 437 znum = tr n(ji,jj,jk,jppoc)/(trn(ji,jj,jk,jpnum)+rtrn) / xkr_massp437 znum = trb(ji,jj,jk,jppoc)/(trb(ji,jj,jk,jpnum)+rtrn) / xkr_massp 438 438 !-------------- To avoid sinking speed over 50 m/day ------- 439 439 znum = min(xnumm(jk),znum) … … 453 453 ! ---------------------------------------------- 454 454 455 zagg1 = 0.163 * tr n(ji,jj,jk,jpnum)**2 &455 zagg1 = 0.163 * trb(ji,jj,jk,jpnum)**2 & 456 456 & * 2.*( (zfm-1.)*(zfm*xkr_mass_max**3-xkr_mass_min**3) & 457 457 & * (zeps-1)/zdiv1 + 3.*(zfm*xkr_mass_max-xkr_mass_min) & 458 458 & * (zfm*xkr_mass_max**2-xkr_mass_min**2) & 459 459 & * (zeps-1.)**2/(zdiv2*zdiv3)) 460 zagg2 = 2*0.163*tr n(ji,jj,jk,jpnum)**2*zfm* &460 zagg2 = 2*0.163*trb(ji,jj,jk,jpnum)**2*zfm* & 461 461 & ((xkr_mass_max**3+3.*(xkr_mass_max**2 & 462 462 & *xkr_mass_min*(zeps-1.)/zdiv2 & … … 466 466 & (zeps-2.)+(zeps-1.)/zdiv3)+(zeps-1.)/zdiv1)) 467 467 468 zagg3 = 0.163*tr n(ji,jj,jk,jpnum)**2*zfm**2*8. * xkr_mass_max**3468 zagg3 = 0.163*trb(ji,jj,jk,jpnum)**2*zfm**2*8. * xkr_mass_max**3 469 469 470 470 ! Aggregation of small into large particles … … 472 472 ! ---------------------------------------------- 473 473 474 zagg4 = 2.*3.141*0.125*tr n(ji,jj,jk,jpnum)**2* &474 zagg4 = 2.*3.141*0.125*trb(ji,jj,jk,jpnum)**2* & 475 475 & xkr_wsbio_min*(zeps-1.)**2 & 476 476 & *(xkr_mass_min**2*((1.-zsm*zfm)/(zdiv3*zdiv4) & … … 479 479 & *xkr_eta)/(zdiv*zdiv3*zdiv5) ) 480 480 481 zagg5 = 2.*3.141*0.125*tr n(ji,jj,jk,jpnum)**2 &481 zagg5 = 2.*3.141*0.125*trb(ji,jj,jk,jpnum)**2 & 482 482 & *(zeps-1.)*zfm*xkr_wsbio_min & 483 483 & *(zsm*(xkr_mass_min**2-zfm*xkr_mass_max**2) & … … 489 489 ! ------------------------------------ 490 490 491 zfract = 2.*3.141*0.125*tr n(ji,jj,jk,jpmes)*12./0.12/0.06**3*trn(ji,jj,jk,jpnum) &491 zfract = 2.*3.141*0.125*trb(ji,jj,jk,jpmes)*12./0.12/0.06**3*trb(ji,jj,jk,jpnum) & 492 492 & * (0.01/xkr_mass_min)**(1.-zeps)*0.1**2 & 493 493 & * 10000.*xstep … … 496 496 ! -------------------------------------- 497 497 498 zaggdoc = 0.83 * tr n(ji,jj,jk,jpdoc) * xstep * xdiss(ji,jj,jk) * trn(ji,jj,jk,jpdoc) &499 & + 0.005 * 231. * tr n(ji,jj,jk,jpdoc) * xstep * trn(ji,jj,jk,jpdoc)500 zaggdoc1 = 271. * tr n(ji,jj,jk,jppoc) * xstep * xdiss(ji,jj,jk) * trn(ji,jj,jk,jpdoc) &501 & + 0.02 * 16706. * tr n(ji,jj,jk,jppoc) * xstep * trn(ji,jj,jk,jpdoc)498 zaggdoc = 0.83 * trb(ji,jj,jk,jpdoc) * xstep * xdiss(ji,jj,jk) * trb(ji,jj,jk,jpdoc) & 499 & + 0.005 * 231. * trb(ji,jj,jk,jpdoc) * xstep * trb(ji,jj,jk,jpdoc) 500 zaggdoc1 = 271. * trb(ji,jj,jk,jppoc) * xstep * xdiss(ji,jj,jk) * trb(ji,jj,jk,jpdoc) & 501 & + 0.02 * 16706. * trb(ji,jj,jk,jppoc) * xstep * trb(ji,jj,jk,jpdoc) 502 502 503 503 # if defined key_degrad … … 514 514 zagg = 0.5 * xkr_stick * ( zaggsh + zaggsi ) 515 515 ! 516 znumdoc = tr n(ji,jj,jk,jpnum) / ( trn(ji,jj,jk,jppoc) + rtrn )516 znumdoc = trb(ji,jj,jk,jpnum) / ( trb(ji,jj,jk,jppoc) + rtrn ) 517 517 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zaggdoc + zaggdoc1 518 518 tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + zfract + zaggdoc / xkr_massp - zagg … … 528 528 ! 529 529 IF( lk_iomput ) THEN 530 IF( jnt == nrdttrc ) THEN530 IF( knt == nrdttrc ) THEN 531 531 CALL wrk_alloc( jpi, jpj, zw2d ) 532 532 CALL wrk_alloc( jpi, jpj, jpk, zw3d ) … … 800 800 ztraz(:,:,:) = 0.e0 801 801 zakz (:,:,:) = 0.e0 802 ztrb (:,:,:) = tr n(:,:,:,jp_tra)802 ztrb (:,:,:) = trb(:,:,:,jp_tra) 803 803 804 804 DO jk = 1, jpkm1 … … 815 815 ! first guess of the slopes interior values 816 816 DO jk = 2, jpkm1 817 ztraz(:,:,jk) = ( tr n(:,:,jk-1,jp_tra) - trn(:,:,jk,jp_tra) ) * tmask(:,:,jk)817 ztraz(:,:,jk) = ( trb(:,:,jk-1,jp_tra) - trb(:,:,jk,jp_tra) ) * tmask(:,:,jk) 818 818 END DO 819 819 ztraz(:,:,1 ) = 0.0 … … 846 846 zigma = zwsink2(ji,jj,jk+1) * zstep / fse3w(ji,jj,jk+1) 847 847 zew = zwsink2(ji,jj,jk+1) 848 psinkflx(ji,jj,jk+1) = -zew * ( tr n(ji,jj,jk,jp_tra) - 0.5 * ( 1 + zigma ) * zakz(ji,jj,jk) ) * zstep848 psinkflx(ji,jj,jk+1) = -zew * ( trb(ji,jj,jk,jp_tra) - 0.5 * ( 1 + zigma ) * zakz(ji,jj,jk) ) * zstep 849 849 END DO 850 850 END DO … … 859 859 DO ji = 1, jpi 860 860 zflx = ( psinkflx(ji,jj,jk) - psinkflx(ji,jj,jk+1) ) / fse3t(ji,jj,jk) 861 tr n(ji,jj,jk,jp_tra) = trn(ji,jj,jk,jp_tra) + zflx861 trb(ji,jj,jk,jp_tra) = trb(ji,jj,jk,jp_tra) + zflx 862 862 END DO 863 863 END DO … … 875 875 END DO 876 876 877 tr n(:,:,:,jp_tra) = ztrb(:,:,:)877 trb(:,:,:,jp_tra) = ztrb(:,:,:) 878 878 psinkflx(:,:,:) = 2. * psinkflx(:,:,:) 879 879 ! … … 913 913 914 914 !!====================================================================== 915 END MODULE 915 END MODULE p4zsink -
branches/2014/dev_r4650_UKMO10_Tidally_Meaned_Diagnostics/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsms.F90
r5260 r5989 24 24 USE p4zsed ! Sedimentation 25 25 USE p4zint ! time interpolation 26 USE p4zrem ! remineralisation 26 27 USE iom ! I/O manager 27 28 USE trd_oce ! Ocean trends variables … … 36 37 PUBLIC p4z_sms ! called in p4zsms.F90 37 38 38 REAL(wp) :: alkbudget, no3budget, silbudget, ferbudget 39 INTEGER :: numco2, numnut !: logical unit for co2 budget 39 REAL(wp) :: alkbudget, no3budget, silbudget, ferbudget, po4budget 40 REAL(wp) :: xfact1, xfact2, xfact3 41 INTEGER :: numco2, numnut, numnit !: logical unit for co2 budget 42 43 !!* Array used to indicate negative tracer values 44 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xnegtr !: ??? 45 40 46 41 47 !!---------------------------------------------------------------------- … … 61 67 INTEGER, INTENT( in ) :: kt ! ocean time-step index 62 68 !! 63 INTEGER :: jnt, jn, jl 69 INTEGER :: ji, jj, jk, jnt, jn, jl 70 REAL(wp) :: ztra 71 #if defined key_kriest 72 REAL(wp) :: zcoef1, zcoef2 73 #endif 64 74 CHARACTER (len=25) :: charout 65 REAL(wp), POINTER, DIMENSION(:,:,:,:) :: ztrdpis66 75 !!--------------------------------------------------------------------- 67 76 ! 68 77 IF( nn_timing == 1 ) CALL timing_start('p4z_sms') 69 78 ! 70 IF( l_trdtrc ) THEN71 CALL wrk_alloc( jpi, jpj, jpk, jp_pisces, ztrdpis )72 DO jn = 1, jp_pisces73 jl = jn + jp_pcs0 - 174 ztrdpis(:,:,:,jn) = trn(:,:,:,jl)75 ENDDO76 ENDIF77 !78 79 IF( kt == nittrc000 ) THEN 80 ! 81 ALLOCATE( xnegtr(jpi,jpj,jpk) ) 79 82 ! 80 83 CALL p4z_che ! initialize the chemical constants … … 88 91 IF( ln_pisdmp .AND. MOD( kt - nn_dttrc, nn_pisdmp ) == 0 ) CALL p4z_dmp( kt ) ! Relaxation of some tracers 89 92 ! 93 ! ! set time step size (Euler/Leapfrog) 94 IF( ( neuler == 0 .AND. kt == nittrc000 ) .OR. ln_top_euler ) THEN ; rfact = rdttrc(1) ! at nittrc000 95 ELSEIF( kt <= nittrc000 + nn_dttrc ) THEN ; rfact = 2. * rdttrc(1) ! at nittrc000 or nittrc000+nn_dttrc (Leapfrog) 96 ENDIF 97 ! 98 IF( ( ln_top_euler .AND. kt == nittrc000 ) .OR. ( .NOT.ln_top_euler .AND. kt <= nittrc000 + nn_dttrc ) ) THEN 99 rfactr = 1. / rfact 100 rfact2 = rfact / FLOAT( nrdttrc ) 101 rfact2r = 1. / rfact2 102 xstep = rfact2 / rday ! Time step duration for biology 103 IF(lwp) WRITE(numout,*) 104 IF(lwp) WRITE(numout,*) ' Passive Tracer time step rfact = ', rfact, ' rdt = ', rdttra(1) 105 IF(lwp) write(numout,*) ' PISCES Biology time step rfact2 = ', rfact2 106 IF(lwp) WRITE(numout,*) 107 ENDIF 108 109 IF( ( neuler == 0 .AND. kt == nittrc000 ) .OR. ln_top_euler ) THEN 110 DO jn = jp_pcs0, jp_pcs1 ! SMS on tracer without Asselin time-filter 111 trb(:,:,:,jn) = trn(:,:,:,jn) 112 END DO 113 ENDIF 114 ! 90 115 IF( ndayflxtr /= nday_year ) THEN ! New days 91 116 ! … … 105 130 DO jnt = 1, nrdttrc ! Potential time splitting if requested 106 131 ! 107 CALL p4z_bio (kt, jnt) ! Biology 108 CALL p4z_sed (kt, jnt) ! Sedimentation 109 ! 132 CALL p4z_bio( kt, jnt ) ! Biology 133 CALL p4z_sed( kt, jnt ) ! Sedimentation 134 CALL p4z_lys( kt, jnt ) ! Compute CaCO3 saturation 135 CALL p4z_flx( kt, jnt ) ! Compute surface fluxes 136 ! 137 xnegtr(:,:,:) = 1.e0 110 138 DO jn = jp_pcs0, jp_pcs1 111 trb(:,:,:,jn) = trn(:,:,:,jn) 112 ENDDO 113 ! 139 DO jk = 1, jpk 140 DO jj = 1, jpj 141 DO ji = 1, jpi 142 IF( ( trb(ji,jj,jk,jn) + tra(ji,jj,jk,jn) ) < 0.e0 ) THEN 143 ztra = ABS( trb(ji,jj,jk,jn) ) / ( ABS( tra(ji,jj,jk,jn) ) + rtrn ) 144 xnegtr(ji,jj,jk) = MIN( xnegtr(ji,jj,jk), ztra ) 145 ENDIF 146 END DO 147 END DO 148 END DO 149 END DO 150 ! ! where at least 1 tracer concentration becomes negative 151 ! ! 152 DO jn = jp_pcs0, jp_pcs1 153 trb(:,:,:,jn) = trb(:,:,:,jn) + xnegtr(:,:,:) * tra(:,:,:,jn) 154 END DO 155 ! 156 DO jn = jp_pcs0, jp_pcs1 157 tra(:,:,:,jn) = 0._wp 158 END DO 159 ! 160 IF( ln_top_euler ) THEN 161 DO jn = jp_pcs0, jp_pcs1 162 trn(:,:,:,jn) = trb(:,:,:,jn) 163 END DO 164 ENDIF 114 165 END DO 115 166 116 IF( l_trdtrc ) THEN 117 DO jn = 1, jp_pisces 118 jl = jn + jp_pcs0 - 1 119 ztrdpis(:,:,:,jn) = ( ztrdpis(:,:,:,jn) - trn(:,:,:,jl) ) * rfact2r 120 ENDDO 121 ENDIF 122 CALL p4z_lys( kt ) ! Compute CaCO3 saturation 123 CALL p4z_flx( kt ) ! Compute surface fluxes 124 125 DO jn = jp_pcs0, jp_pcs1 126 CALL lbc_lnk( trn(:,:,:,jn), 'T', 1. ) 127 CALL lbc_lnk( trb(:,:,:,jn), 'T', 1. ) 128 CALL lbc_lnk( tra(:,:,:,jn), 'T', 1. ) 167 #if defined key_kriest 168 ! 169 zcoef1 = 1.e0 / xkr_massp 170 zcoef2 = 1.e0 / xkr_massp / 1.1 171 DO jk = 1,jpkm1 172 trb(:,:,jk,jpnum) = MAX( trb(:,:,jk,jpnum), trb(:,:,jk,jppoc) * zcoef1 / xnumm(jk) ) 173 trb(:,:,jk,jpnum) = MIN( trb(:,:,jk,jpnum), trb(:,:,jk,jppoc) * zcoef2 ) 129 174 END DO 130 175 ! 176 #endif 177 ! 178 ! 179 IF( l_trdtrc ) THEN 180 DO jn = jp_pcs0, jp_pcs1 181 CALL trd_trc( tra(:,:,:,jn), jn, jptra_sms, kt ) ! save trends 182 END DO 183 END IF 184 ! 131 185 IF( lk_sed ) THEN 132 186 ! … … 134 188 ! 135 189 DO jn = jp_pcs0, jp_pcs1 136 CALL lbc_lnk( tr n(:,:,:,jn), 'T', 1. )190 CALL lbc_lnk( trb(:,:,:,jn), 'T', 1. ) 137 191 END DO 138 192 ! … … 141 195 IF( lrst_trc ) CALL p4z_rst( kt, 'WRITE' ) !* Write PISCES informations in restart file 142 196 ! 143 IF( l_trdtrc ) THEN 144 DO jn = 1, jp_pisces 145 jl = jn + jp_pcs0 - 1 146 ztrdpis(:,:,:,jn) = ztrdpis(:,:,:,jn) + tra(:,:,:,jl) 147 CALL trd_trc( ztrdpis(:,:,:,jn), jn, jptra_sms, kt ) ! save trends 148 END DO 149 CALL wrk_dealloc( jpi, jpj, jpk, jp_pisces, ztrdpis ) 150 END IF 151 ! 197 152 198 IF( lk_iomput .OR. ln_check_mass ) CALL p4z_chk_mass( kt ) ! Mass conservation checking 153 199 … … 280 326 ztmas = tmask(ji,jj,jk) 281 327 ztmas1 = 1. - tmask(ji,jj,jk) 282 zcaralk = tr n(ji,jj,jk,jptal) - borat(ji,jj,jk) / ( 1. + 1.E-8 / ( rtrn + akb3(ji,jj,jk) ) )283 zco3 = ( zcaralk - tr n(ji,jj,jk,jpdic) ) * ztmas + 0.5e-3 * ztmas1284 zbicarb = ( 2. * tr n(ji,jj,jk,jpdic) - zcaralk )328 zcaralk = trb(ji,jj,jk,jptal) - borat(ji,jj,jk) / ( 1. + 1.E-8 / ( rtrn + akb3(ji,jj,jk) ) ) 329 zco3 = ( zcaralk - trb(ji,jj,jk,jpdic) ) * ztmas + 0.5e-3 * ztmas1 330 zbicarb = ( 2. * trb(ji,jj,jk,jpdic) - zcaralk ) 285 331 hi(ji,jj,jk) = ( ak23(ji,jj,jk) * zbicarb / zco3 ) * ztmas + 1.e-9 * ztmas1 286 332 END DO … … 361 407 REAL(wp) :: silmean = 91.51 ! mean value of silicate 362 408 ! 363 REAL(wp) :: zarea, zalksum, zpo4sum, zno3sum, zsilsum 409 REAL(wp) :: zarea, zalksumn, zpo4sumn, zno3sumn, zsilsumn 410 REAL(wp) :: zalksumb, zpo4sumb, zno3sumb, zsilsumb 364 411 !!--------------------------------------------------------------------- 365 412 … … 374 421 zarea = 1._wp / glob_sum( cvol(:,:,:) ) * 1e6 375 422 376 zalksum = glob_sum( trn(:,:,:,jptal) * cvol(:,:,:) ) * zarea377 zpo4sum = glob_sum( trn(:,:,:,jppo4) * cvol(:,:,:) ) * zarea * po4r378 zno3sum = glob_sum( trn(:,:,:,jpno3) * cvol(:,:,:) ) * zarea * rno3379 zsilsum = glob_sum( trn(:,:,:,jpsil) * cvol(:,:,:) ) * zarea423 zalksumn = glob_sum( trn(:,:,:,jptal) * cvol(:,:,:) ) * zarea 424 zpo4sumn = glob_sum( trn(:,:,:,jppo4) * cvol(:,:,:) ) * zarea * po4r 425 zno3sumn = glob_sum( trn(:,:,:,jpno3) * cvol(:,:,:) ) * zarea * rno3 426 zsilsumn = glob_sum( trn(:,:,:,jpsil) * cvol(:,:,:) ) * zarea 380 427 381 IF(lwp) WRITE(numout,*) ' TALK mean : ', zalksum 382 trn(:,:,:,jptal) = trn(:,:,:,jptal) * alkmean / zalksum 383 384 IF(lwp) WRITE(numout,*) ' PO4 mean : ', zpo4sum 385 trn(:,:,:,jppo4) = trn(:,:,:,jppo4) * po4mean / zpo4sum 386 387 IF(lwp) WRITE(numout,*) ' NO3 mean : ', zno3sum 388 trn(:,:,:,jpno3) = trn(:,:,:,jpno3) * no3mean / zno3sum 389 390 IF(lwp) WRITE(numout,*) ' SiO3 mean : ', zsilsum 391 trn(:,:,:,jpsil) = MIN( 400.e-6,trn(:,:,:,jpsil) * silmean / zsilsum ) 392 ! 393 ENDIF 394 428 IF(lwp) WRITE(numout,*) ' TALKN mean : ', zalksumn 429 trn(:,:,:,jptal) = trn(:,:,:,jptal) * alkmean / zalksumn 430 431 IF(lwp) WRITE(numout,*) ' PO4N mean : ', zpo4sumn 432 trn(:,:,:,jppo4) = trn(:,:,:,jppo4) * po4mean / zpo4sumn 433 434 IF(lwp) WRITE(numout,*) ' NO3N mean : ', zno3sumn 435 trn(:,:,:,jpno3) = trn(:,:,:,jpno3) * no3mean / zno3sumn 436 437 IF(lwp) WRITE(numout,*) ' SiO3N mean : ', zsilsumn 438 trn(:,:,:,jpsil) = MIN( 400.e-6,trn(:,:,:,jpsil) * silmean / zsilsumn ) 439 ! 440 ! 441 IF( .NOT. ln_top_euler ) THEN 442 zalksumb = glob_sum( trb(:,:,:,jptal) * cvol(:,:,:) ) * zarea 443 zpo4sumb = glob_sum( trb(:,:,:,jppo4) * cvol(:,:,:) ) * zarea * po4r 444 zno3sumb = glob_sum( trb(:,:,:,jpno3) * cvol(:,:,:) ) * zarea * rno3 445 zsilsumb = glob_sum( trb(:,:,:,jpsil) * cvol(:,:,:) ) * zarea 446 447 IF(lwp) WRITE(numout,*) ' ' 448 IF(lwp) WRITE(numout,*) ' TALKB mean : ', zalksumb 449 trb(:,:,:,jptal) = trb(:,:,:,jptal) * alkmean / zalksumb 450 451 IF(lwp) WRITE(numout,*) ' PO4B mean : ', zpo4sumb 452 trb(:,:,:,jppo4) = trb(:,:,:,jppo4) * po4mean / zpo4sumb 453 454 IF(lwp) WRITE(numout,*) ' NO3B mean : ', zno3sumb 455 trb(:,:,:,jpno3) = trb(:,:,:,jpno3) * no3mean / zno3sumb 456 457 IF(lwp) WRITE(numout,*) ' SiO3B mean : ', zsilsumb 458 trb(:,:,:,jpsil) = MIN( 400.e-6,trb(:,:,:,jpsil) * silmean / zsilsumb ) 459 ENDIF 460 ! 461 ENDIF 462 ! 395 463 END SUBROUTINE p4z_dmp 396 464 … … 404 472 !!--------------------------------------------------------------------- 405 473 ! 406 INTEGER , INTENT( in ) :: kt ! ocean time-step index 407 REAL(wp) :: zfact 408 !! 474 INTEGER, INTENT( in ) :: kt ! ocean time-step index 475 REAL(wp) :: zrdenittot, zsdenittot, znitrpottot 476 CHARACTER(LEN=100) :: cltxt 477 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zvol 478 INTEGER :: jk 479 !!---------------------------------------------------------------------- 480 481 ! 409 482 !!--------------------------------------------------------------------- 410 483 … … 413 486 CALL ctl_opn( numco2, 'carbon.budget' , 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, 6, .FALSE., narea ) 414 487 CALL ctl_opn( numnut, 'nutrient.budget', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, 6, .FALSE., narea ) 488 CALL ctl_opn( numnit, 'nitrogen.budget', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, 6, .FALSE., narea ) 489 xfact1 = rfact2r * 12. / 1.e15 * ryyss ! conversion molC/kt --> PgC/yr 490 xfact2 = 1.e+3 * rno3 * 14. / 1.e12 * ryyss ! conversion molC/l/s ----> TgN/m3/yr 491 xfact3 = 1.e+3 * rfact2r * rno3 ! conversion molC/l/kt ----> molN/m3/s 492 cltxt='time-step Alkalinity Nitrate Phosphorus Silicate Iron' 493 IF( lwp ) WRITE(numnut,*) TRIM(cltxt) 494 IF( lwp ) WRITE(numnut,*) 415 495 ENDIF 416 496 ENDIF 417 497 498 ! 418 499 IF( iom_use( "pno3tot" ) .OR. ( ln_check_mass .AND. kt == nitend ) ) THEN 419 500 ! Compute the budget of NO3, ALK, Si, Fer … … 431 512 ENDIF 432 513 ! 433 IF( iom_use( "psiltot" ) .OR. ( ln_check_mass .AND. kt == nitend ) ) THEN 514 IF( iom_use( "ppo4tot" ) .OR. ( ln_check_mass .AND. kt == nitend ) ) THEN 515 po4budget = glob_sum( ( trn(:,:,:,jppo4) & 516 & + trn(:,:,:,jpphy) + trn(:,:,:,jpdia) & 517 & + trn(:,:,:,jpzoo) + trn(:,:,:,jpmes) & 518 & + trn(:,:,:,jppoc) & 519 #if ! defined key_kriest 520 & + trn(:,:,:,jpgoc) & 521 #endif 522 & + trn(:,:,:,jpdoc) ) * cvol(:,:,:) ) 523 po4budget = po4budget / areatot 524 CALL iom_put( "ppo4tot", po4budget ) 525 ENDIF 526 ! 527 IF( iom_use( "psiltot" ) .OR. ( ln_check_mass .AND. kt == nitend ) ) THEN 434 528 silbudget = glob_sum( ( trn(:,:,:,jpsil) + trn(:,:,:,jpgsi) & 435 529 & + trn(:,:,:,jpdsi) ) * cvol(:,:,:) ) … … 439 533 ENDIF 440 534 ! 441 IF( iom_use( "palktot" ) .OR. 535 IF( iom_use( "palktot" ) .OR. ( ln_check_mass .AND. kt == nitend ) ) THEN 442 536 alkbudget = glob_sum( ( trn(:,:,:,jpno3) * rno3 & 443 537 & + trn(:,:,:,jptal) & … … 448 542 ENDIF 449 543 ! 450 IF( iom_use( "pfertot" ) .OR. 544 IF( iom_use( "pfertot" ) .OR. ( ln_check_mass .AND. kt == nitend ) ) THEN 451 545 ferbudget = glob_sum( ( trn(:,:,:,jpfer) + trn(:,:,:,jpnfe) & 452 546 & + trn(:,:,:,jpdfe) & … … 462 556 ENDIF 463 557 ! 558 559 ! Global budget of N SMS : denitrification in the water column and in the sediment 560 ! nitrogen fixation by the diazotrophs 561 ! -------------------------------------------------------------------------------- 562 IF( iom_use( "tnfix" ) .OR. ( ln_check_mass .AND. kt == nitend ) ) THEN 563 znitrpottot = glob_sum ( nitrpot(:,:,:) * nitrfix * cvol(:,:,:) ) 564 CALL iom_put( "tnfix" , znitrpottot * 1.e+3 * rno3 ) ! Global nitrogen fixation molC/l to molN/m3 565 ENDIF 566 ! 567 IF( iom_use( "tdenit" ) .OR. ( ln_check_mass .AND. kt == nitend ) ) THEN 568 zrdenittot = glob_sum ( denitr(:,:,:) * rdenit * xnegtr(:,:,:) * cvol(:,:,:) ) 569 CALL iom_put( "tdenit" , zrdenittot * 1.e+3 * rno3 ) ! Total denitrification molC/l to molN/m3 570 ENDIF 571 ! 572 IF( iom_use( "Sdenit" ) .OR. ( ln_check_mass .AND. kt == nitend ) ) THEN 573 zsdenittot = glob_sum ( sdenit(:,:) * e1e2t(:,:) ) 574 CALL iom_put( "Sdenit", sdenit(:,:) * xfact3 * tmask(:,:,1) ) ! Nitrate reduction in the sediments 575 ENDIF 576 464 577 IF( ln_check_mass .AND. kt == nitend ) THEN ! Compute the budget of NO3, ALK, Si, Fer 465 zfact = rfact2r * 12. / 1.e15 * ryyss ! conversion molC/kt --> PgC/year466 578 t_atm_co2_flx = t_atm_co2_flx / glob_sum( e1e2t(:,:) ) 467 t_oce_co2_flx = t_oce_co2_flx * zfact* (-1 )468 tpp = tpp * 1000. * zfact469 t_oce_co2_exp = t_oce_co2_exp * 1000. * zfact579 t_oce_co2_flx = t_oce_co2_flx * xfact1 * (-1 ) 580 tpp = tpp * 1000. * xfact1 581 t_oce_co2_exp = t_oce_co2_exp * 1000. * xfact1 470 582 IF( lwp ) WRITE(numco2,9000) ndastp, t_atm_co2_flx, t_oce_co2_flx, tpp, t_oce_co2_exp 471 IF( lwp ) WRITE(numnut,9 500) ndastp, alkbudget * 1.e+06, &583 IF( lwp ) WRITE(numnut,9100) ndastp, alkbudget * 1.e+06, & 472 584 & no3budget * rno3 * 1.e+06, & 585 & po4budget * po4r * 1.e+06, & 473 586 & silbudget * 1.e+06, & 474 587 & ferbudget * 1.e+09 588 ! 589 IF( lwp ) WRITE(numnit,9200) ndastp, znitrpottot * xfact2 , & 590 & zrdenittot * xfact2 , & 591 & zsdenittot * xfact2 592 475 593 ENDIF 476 594 ! 477 595 9000 FORMAT(i8,f10.5,e18.10,f10.5,f10.5) 478 9500 FORMAT(i8,4e18.10) 596 9100 FORMAT(i8,5e18.10) 597 9200 FORMAT(i8,3f10.5) 598 479 599 ! 480 600 END SUBROUTINE p4z_chk_mass -
branches/2014/dev_r4650_UKMO10_Tidally_Meaned_Diagnostics/NEMOGCM/NEMO/TOP_SRC/PISCES/par_pisces.F90
r3680 r5989 63 63 INTEGER, PUBLIC, PARAMETER :: jpdia = 11 !: Diatoms Concentration 64 64 INTEGER, PUBLIC, PARAMETER :: jpmes = 12 !: Mesozooplankton Concentration 65 INTEGER, PUBLIC, PARAMETER :: jpdsi = 13 !: (big)Silicate Concentration65 INTEGER, PUBLIC, PARAMETER :: jpdsi = 13 !: Diatoms Silicate Concentration 66 66 INTEGER, PUBLIC, PARAMETER :: jpfer = 14 !: Iron Concentration 67 67 INTEGER, PUBLIC, PARAMETER :: jpnum = 15 !: Big iron particles Concentration 68 68 INTEGER, PUBLIC, PARAMETER :: jpsfe = 16 !: number of particulate organic phosphate concentration 69 69 INTEGER, PUBLIC, PARAMETER :: jpdfe = 17 !: Diatoms iron Concentration 70 INTEGER, PUBLIC, PARAMETER :: jpgsi = 18 !: DiatomsSilicate Concentration70 INTEGER, PUBLIC, PARAMETER :: jpgsi = 18 !: (big) Silicate Concentration 71 71 INTEGER, PUBLIC, PARAMETER :: jpnfe = 19 !: Nano iron Concentration 72 72 INTEGER, PUBLIC, PARAMETER :: jpnch = 20 !: Nano Chlorophyll Concentration … … 102 102 INTEGER, PUBLIC, PARAMETER :: jpdia = 11 !: Diatoms Concentration 103 103 INTEGER, PUBLIC, PARAMETER :: jpmes = 12 !: Mesozooplankton Concentration 104 INTEGER, PUBLIC, PARAMETER :: jpdsi = 13 !: (big)Silicate Concentration104 INTEGER, PUBLIC, PARAMETER :: jpdsi = 13 !: Diatoms Silicate Concentration 105 105 INTEGER, PUBLIC, PARAMETER :: jpfer = 14 !: Iron Concentration 106 106 INTEGER, PUBLIC, PARAMETER :: jpbfe = 15 !: Big iron particles Concentration … … 108 108 INTEGER, PUBLIC, PARAMETER :: jpsfe = 17 !: Small iron particles Concentration 109 109 INTEGER, PUBLIC, PARAMETER :: jpdfe = 18 !: Diatoms iron Concentration 110 INTEGER, PUBLIC, PARAMETER :: jpgsi = 19 !: DiatomsSilicate Concentration110 INTEGER, PUBLIC, PARAMETER :: jpgsi = 19 !: (big) Silicate Concentration 111 111 INTEGER, PUBLIC, PARAMETER :: jpnfe = 20 !: Nano iron Concentration 112 112 INTEGER, PUBLIC, PARAMETER :: jpnch = 21 !: Nano Chlorophyll Concentration -
branches/2014/dev_r4650_UKMO10_Tidally_Meaned_Diagnostics/NEMOGCM/NEMO/TOP_SRC/PISCES/sms_pisces.F90
r5260 r5989 106 106 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: tgfunc2 !: Temp. dependancy of mesozooplankton rates 107 107 108 !!* Array used to indicate negative tracer values109 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xnegtr !: ???110 111 108 #if defined key_kriest 112 109 !!* Kriest parameter for aggregation … … 131 128 !!---------------------------------------------------------------------- 132 129 USE lib_mpp , ONLY: ctl_warn 133 INTEGER :: ierr( 6) ! Local variables130 INTEGER :: ierr(5) ! Local variables 134 131 !!---------------------------------------------------------------------- 135 132 ierr(:) = 0 … … 162 159 ALLOCATE( tgfunc(jpi,jpj,jpk) , tgfunc2(jpi,jpj,jpk) , STAT=ierr(5) ) 163 160 ! 164 !* Array used to indicate negative tracer values165 ALLOCATE( xnegtr(jpi,jpj,jpk) , STAT=ierr(6) )166 161 #endif 167 162 ! -
branches/2014/dev_r4650_UKMO10_Tidally_Meaned_Diagnostics/NEMOGCM/NEMO/TOP_SRC/PISCES/trcice_pisces.F90
r5386 r5989 29 29 CONTAINS 30 30 31 31 32 SUBROUTINE trc_ice_ini_pisces 32 33 !!---------------------------------------------------------------------- 33 !! *** ROUTINE trc_ice_ini_pisces *** 34 !! *** ROUTINE trc_ini_pisces *** 35 !! 36 !! ** Purpose : Initialisation of the PISCES biochemical model 37 !!---------------------------------------------------------------------- 38 39 IF( lk_p4z ) THEN ; CALL p4z_ice_ini ! PISCES 40 ELSE ; CALL p2z_ice_ini ! LOBSTER 41 ENDIF 42 43 END SUBROUTINE trc_ice_ini_pisces 44 45 46 SUBROUTINE p4z_ice_ini 47 48 #if defined key_pisces 49 !!---------------------------------------------------------------------- 50 !! *** ROUTINE p4z_ice_ini *** 34 51 !! 35 52 !! ** Purpose : PISCES fake sea ice model setting … … 58 75 59 76 !--- Dummy variables 60 REAL(wp), DIMENSION(jptra,2) & 61 :: zratio ! effective ice-ocean tracer cc ratio 77 REAL(wp), DIMENSION(jp_pisces,2) :: zratio ! effective ice-ocean tracer cc ratio 78 REAL(wp), DIMENSION(jp_pisces,4) :: zpisc ! prescribes concentration 79 ! ! 1:global, 2:Arctic, 3:Antarctic, 4:Baltic 80 62 81 REAL(wp), DIMENSION(2) :: zrs ! ice-ocean salinity ratio, 1 - global, 2- Baltic 63 82 REAL(wp) :: zsice_bal ! prescribed ice salinity in the Baltic … … 80 99 ! fluxes 81 100 82 !--- Global case83 IF ( cn_trc_o(jpdic) == 'GL ' ) trc_o(:,:,jpdic) = 1.99e-3_wp84 IF ( cn_trc_o(jpdoc) == 'GL ' ) trc_o(:,:,jpdoc) = 2.04e-5_wp85 IF ( cn_trc_o(jptal) == 'GL ' ) trc_o(:,:,jptal) = 2.31e-3_wp86 IF ( cn_trc_o(jpoxy) == 'GL ' ) trc_o(:,:,jpoxy) = 2.47e-4_wp87 IF ( cn_trc_o(jpcal) == 'GL ' ) trc_o(:,:,jpcal) = 1.04e-8_wp88 IF ( cn_trc_o(jppo4) == 'GL ' ) trc_o(:,:,jppo4) = 5.77e-7_wp / po4r89 IF ( cn_trc_o(jppoc) == 'GL ' ) trc_o(:,:,jppoc) = 1.27e-6_wp101 !--- Global values 102 zpisc(jpdic,1) = 1.99e-3_wp 103 zpisc(jpdoc,1) = 2.04e-5_wp 104 zpisc(jptal,1) = 2.31e-3_wp 105 zpisc(jpoxy,1) = 2.47e-4_wp 106 zpisc(jpcal,1) = 1.04e-8_wp 107 zpisc(jppo4,1) = 5.77e-7_wp / po4r 108 zpisc(jppoc,1) = 1.27e-6_wp 90 109 # if ! defined key_kriest 91 IF ( cn_trc_o(jpgoc) == 'GL ' ) trc_o(:,:,jpgoc) = 5.23e-8_wp92 IF ( cn_trc_o(jpbfe) == 'GL ' ) trc_o(:,:,jpbfe) = 9.84e-13_wp110 zpisc(jpgoc,1) = 5.23e-8_wp 111 zpisc(jpbfe,1) = 9.84e-13_wp 93 112 # else 94 IF ( cn_trc_o(jpnum) == 'GL ' ) trc_o(:,:,jpnum) = 0. ! could not get this value since did not use it113 zpisc(jpnum,1) = 0. ! could not get this value since did not use it 95 114 # endif 96 IF ( cn_trc_o(jpsil) == 'GL ' ) trc_o(:,:,jpsil) = 7.36e-6_wp97 IF ( cn_trc_o(jpdsi) == 'GL ' ) trc_o(:,:,jpdsi) = 1.07e-7_wp98 IF ( cn_trc_o(jpgsi) == 'GL ' ) trc_o(:,:,jpgsi) = 1.53e-8_wp99 IF ( cn_trc_o(jpphy) == 'GL ' ) trc_o(:,:,jpphy) = 9.57e-8_wp100 IF ( cn_trc_o(jpdia) == 'GL ' ) trc_o(:,:,jpdia) = 4.24e-7_wp101 IF ( cn_trc_o(jpzoo) == 'GL ' ) trc_o(:,:,jpzoo) = 6.07e-7_wp102 IF ( cn_trc_o(jpmes) == 'GL ' ) trc_o(:,:,jpmes) = 3.44e-7_wp103 IF ( cn_trc_o(jpfer) == 'GL ' ) trc_o(:,:,jpfer) = 4.06e-10_wp104 IF ( cn_trc_o(jpsfe) == 'GL ' ) trc_o(:,:,jpsfe) = 2.51e-11_wp105 IF ( cn_trc_o(jpdfe) == 'GL ' ) trc_o(:,:,jpdfe) = 6.57e-12_wp106 IF ( cn_trc_o(jpnfe) == 'GL ' ) trc_o(:,:,jpnfe) = 1.76e-11_wp107 IF ( cn_trc_o(jpnch) == 'GL ' ) trc_o(:,:,jpnch) = 1.67e-7_wp108 IF ( cn_trc_o(jpdch) == 'GL ' ) trc_o(:,:,jpdch) = 1.02e-7_wp109 IF ( cn_trc_o(jpno3) == 'GL ' ) trc_o(:,:,jpno3) = 5.79e-6_wp / rno3110 IF ( cn_trc_o(jpnh4) == 'GL ' ) trc_o(:,:,jpnh4) = 3.22e-7_wp / rno3115 zpisc(jpsil,1) = 7.36e-6_wp 116 zpisc(jpdsi,1) = 1.07e-7_wp 117 zpisc(jpgsi,1) = 1.53e-8_wp 118 zpisc(jpphy,1) = 9.57e-8_wp 119 zpisc(jpdia,1) = 4.24e-7_wp 120 zpisc(jpzoo,1) = 6.07e-7_wp 121 zpisc(jpmes,1) = 3.44e-7_wp 122 zpisc(jpfer,1) = 4.06e-10_wp 123 zpisc(jpsfe,1) = 2.51e-11_wp 124 zpisc(jpdfe,1) = 6.57e-12_wp 125 zpisc(jpnfe,1) = 1.76e-11_wp 126 zpisc(jpnch,1) = 1.67e-7_wp 127 zpisc(jpdch,1) = 1.02e-7_wp 128 zpisc(jpno3,1) = 5.79e-6_wp / rno3 129 zpisc(jpnh4,1) = 3.22e-7_wp / rno3 111 130 112 131 !--- Arctic specificities (dissolved inorganic & DOM) 113 IF ( cn_trc_o(jpdic) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpdic) = 1.98e-3_wp ; END WHERE ; ENDIF114 IF ( cn_trc_o(jpdoc) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpdoc) = 6.00e-6_wp ; END WHERE ; ENDIF115 IF ( cn_trc_o(jptal) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jptal) = 2.13e-3_wp ; END WHERE ; ENDIF116 IF ( cn_trc_o(jpoxy) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpoxy) = 3.65e-4_wp ; END WHERE ; ENDIF117 IF ( cn_trc_o(jpcal) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpcal) = 1.50e-9_wp ; END WHERE ; ENDIF118 IF ( cn_trc_o(jppo4) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jppo4) = 4.09e-7_wp / po4r ; END WHERE ; ENDIF119 IF ( cn_trc_o(jppoc) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jppoc) = 4.05e-7_wp ; END WHERE ; ENDIF132 zpisc(jpdic,2) = 1.98e-3_wp 133 zpisc(jpdoc,2) = 6.00e-6_wp 134 zpisc(jptal,2) = 2.13e-3_wp 135 zpisc(jpoxy,2) = 3.65e-4_wp 136 zpisc(jpcal,2) = 1.50e-9_wp 137 zpisc(jppo4,2) = 4.09e-7_wp / po4r 138 zpisc(jppoc,2) = 4.05e-7_wp 120 139 # if ! defined key_kriest 121 IF ( cn_trc_o(jpgoc) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpgoc) = 2.84e-8_wp ; END WHERE ; ENDIF122 IF ( cn_trc_o(jpbfe) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpbfe) = 7.03e-13_wp ; END WHERE ; ENDIF140 zpisc(jpgoc,2) = 2.84e-8_wp 141 zpisc(jpbfe,2) = 7.03e-13_wp 123 142 # else 124 IF ( cn_trc_o(jpnum) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpnum) = 0.00e-00_wp ; END WHERE ; ENDIF143 zpisc(jpnum,2) = 0.00e-00_wp 125 144 # endif 126 IF ( cn_trc_o(jpsil) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpsil) = 6.87e-6_wp ; END WHERE ; ENDIF127 IF ( cn_trc_o(jpdsi) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpdsi) = 1.73e-7_wp ; END WHERE ; ENDIF128 IF ( cn_trc_o(jpgsi) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpgsi) = 7.93e-9_wp ; END WHERE ; ENDIF129 IF ( cn_trc_o(jpphy) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpphy) = 5.25e-7_wp ; END WHERE ; ENDIF130 IF ( cn_trc_o(jpdia) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpdia) = 7.75e-7_wp ; END WHERE ; ENDIF131 IF ( cn_trc_o(jpzoo) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpzoo) = 3.34e-7_wp ; END WHERE ; ENDIF132 IF ( cn_trc_o(jpmes) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpmes) = 2.49e-7_wp ; END WHERE ; ENDIF133 IF ( cn_trc_o(jpfer) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpfer) = 1.43e-9_wp ; END WHERE ; ENDIF134 IF ( cn_trc_o(jpsfe) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpsfe) = 2.21e-11_wp ; END WHERE ; ENDIF135 IF ( cn_trc_o(jpdfe) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpdfe) = 2.04e-11_wp ; END WHERE ; ENDIF136 IF ( cn_trc_o(jpnfe) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpnfe) = 1.75e-11_wp ; END WHERE ; ENDIF137 IF ( cn_trc_o(jpnch) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpnch) = 1.46e-07_wp ; END WHERE ; ENDIF138 IF ( cn_trc_o(jpdch) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpdch) = 2.36e-07_wp ; END WHERE ; ENDIF139 IF ( cn_trc_o(jpno3) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpno3) = 3.51e-06_wp / rno3 ; END WHERE ; ENDIF140 IF ( cn_trc_o(jpnh4) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpnh4) = 6.15e-08_wp / rno3 ; END WHERE ; ENDIF145 zpisc(jpsil,2) = 6.87e-6_wp 146 zpisc(jpdsi,2) = 1.73e-7_wp 147 zpisc(jpgsi,2) = 7.93e-9_wp 148 zpisc(jpphy,2) = 5.25e-7_wp 149 zpisc(jpdia,2) = 7.75e-7_wp 150 zpisc(jpzoo,2) = 3.34e-7_wp 151 zpisc(jpmes,2) = 2.49e-7_wp 152 zpisc(jpfer,2) = 1.43e-9_wp 153 zpisc(jpsfe,2) = 2.21e-11_wp 154 zpisc(jpdfe,2) = 2.04e-11_wp 155 zpisc(jpnfe,2) = 1.75e-11_wp 156 zpisc(jpnch,2) = 1.46e-07_wp 157 zpisc(jpdch,2) = 2.36e-07_wp 158 zpisc(jpno3,2) = 3.51e-06_wp / rno3 159 zpisc(jpnh4,2) = 6.15e-08_wp / rno3 141 160 142 161 !--- Antarctic specificities (dissolved inorganic & DOM) 143 IF ( cn_trc_o(jpdic) == 'AA ' ) THEN ; WHERE( gphit(:,:) < 00._wp ) ; trc_o(:,:,jpdic) = 2.20e-3_wp ; END WHERE ; ENDIF144 IF ( cn_trc_o(jpdoc) == 'AA ' ) THEN ; WHERE( gphit(:,:) < 00._wp ) ; trc_o(:,:,jpdoc) = 7.02e-6_wp ; END WHERE ; ENDIF145 IF ( cn_trc_o(jptal) == 'AA ' ) THEN ; WHERE( gphit(:,:) < 00._wp ) ; trc_o(:,:,jptal) = 2.37e-3_wp ; END WHERE ; ENDIF146 IF ( cn_trc_o(jpoxy) == 'AA ' ) THEN ; WHERE( gphit(:,:) < 00._wp ) ; trc_o(:,:,jpoxy) = 3.42e-4_wp ; END WHERE ; ENDIF147 IF ( cn_trc_o(jpcal) == 'AA ' ) THEN ; WHERE( gphit(:,:) < 00._wp ) ; trc_o(:,:,jpcal) = 3.17e-9_wp ; END WHERE ; ENDIF148 IF ( cn_trc_o(jppo4) == 'AA ' ) THEN ; WHERE( gphit(:,:) < 00._wp ) ; trc_o(:,:,jppo4) = 1.88e-6_wp / po4r ; END WHERE ; ENDIF149 IF ( cn_trc_o(jppoc) == 'AA ' ) THEN ; WHERE( gphit(:,:) < 00._wp ) ; trc_o(:,:,jppoc) = 1.13e-6_wp ; END WHERE ; ENDIF162 zpisc(jpdic,3) = 2.20e-3_wp 163 zpisc(jpdoc,3) = 7.02e-6_wp 164 zpisc(jptal,3) = 2.37e-3_wp 165 zpisc(jpoxy,3) = 3.42e-4_wp 166 zpisc(jpcal,3) = 3.17e-9_wp 167 zpisc(jppo4,3) = 1.88e-6_wp / po4r 168 zpisc(jppoc,3) = 1.13e-6_wp 150 169 # if ! defined key_kriest 151 IF ( cn_trc_o(jpgoc) == 'AA ' ) THEN ; WHERE( gphit(:,:) < 00._wp ) ; trc_o(:,:,jpgoc) = 2.89e-8_wp ; END WHERE ; ENDIF152 IF ( cn_trc_o(jpbfe) == 'AA ' ) THEN ; WHERE( gphit(:,:) < 00._wp ) ; trc_o(:,:,jpbfe) = 5.63e-13_wp ; END WHERE ; ENDIF170 zpisc(jpgoc,3) = 2.89e-8_wp 171 zpisc(jpbfe,3) = 5.63e-13_wp 153 172 # else 154 IF ( cn_trc_o(jpnum) == 'AA ' ) THEN ; WHERE( gphit(:,:) < 00._wp ) ; trc_o(:,:,jpnum) = 0.00e-00_wp ; END WHERE ; ENDIF173 zpisc(jpnum,3) = 0.00e-00_wp 155 174 # endif 156 IF ( cn_trc_o(jpsil) == 'AA ' ) THEN ; WHERE( gphit(:,:) < 00._wp ) ; trc_o(:,:,jpsil) = 4.96e-5_wp ; END WHERE ; ENDIF157 IF ( cn_trc_o(jpdsi) == 'AA ' ) THEN ; WHERE( gphit(:,:) < 00._wp ) ; trc_o(:,:,jpdsi) = 5.63e-7_wp ; END WHERE ; ENDIF158 IF ( cn_trc_o(jpgsi) == 'AA ' ) THEN ; WHERE( gphit(:,:) < 00._wp ) ; trc_o(:,:,jpgsi) = 5.35e-8_wp ; END WHERE ; ENDIF159 IF ( cn_trc_o(jpphy) == 'AA ' ) THEN ; WHERE( gphit(:,:) < 00._wp ) ; trc_o(:,:,jpphy) = 8.10e-7_wp ; END WHERE ; ENDIF160 IF ( cn_trc_o(jpdia) == 'AA ' ) THEN ; WHERE( gphit(:,:) < 00._wp ) ; trc_o(:,:,jpdia) = 5.77e-7_wp ; END WHERE ; ENDIF161 IF ( cn_trc_o(jpzoo) == 'AA ' ) THEN ; WHERE( gphit(:,:) < 00._wp ) ; trc_o(:,:,jpzoo) = 6.68e-7_wp ; END WHERE ; ENDIF162 IF ( cn_trc_o(jpmes) == 'AA ' ) THEN ; WHERE( gphit(:,:) < 00._wp ) ; trc_o(:,:,jpmes) = 3.55e-7_wp ; END WHERE ; ENDIF163 IF ( cn_trc_o(jpfer) == 'AA ' ) THEN ; WHERE( gphit(:,:) < 00._wp ) ; trc_o(:,:,jpfer) = 1.62e-10_wp ; END WHERE ; ENDIF164 IF ( cn_trc_o(jpsfe) == 'AA ' ) THEN ; WHERE( gphit(:,:) < 00._wp ) ; trc_o(:,:,jpsfe) = 2.29e-11_wp ; END WHERE ; ENDIF165 IF ( cn_trc_o(jpdfe) == 'AA ' ) THEN ; WHERE( gphit(:,:) < 00._wp ) ; trc_o(:,:,jpdfe) = 8.75e-12_wp ; END WHERE ; ENDIF166 IF ( cn_trc_o(jpnfe) == 'AA ' ) THEN ; WHERE( gphit(:,:) < 00._wp ) ; trc_o(:,:,jpnfe) = 1.48e-11_wp ; END WHERE ; ENDIF167 IF ( cn_trc_o(jpnch) == 'AA ' ) THEN ; WHERE( gphit(:,:) < 00._wp ) ; trc_o(:,:,jpnch) = 2.02e-7_wp ; END WHERE ; ENDIF168 IF ( cn_trc_o(jpdch) == 'AA ' ) THEN ; WHERE( gphit(:,:) < 00._wp ) ; trc_o(:,:,jpdch) = 1.60e-7_wp ; END WHERE ; ENDIF169 IF ( cn_trc_o(jpno3) == 'AA ' ) THEN ; WHERE( gphit(:,:) < 00._wp ) ; trc_o(:,:,jpno3) = 2.64e-5_wp / rno3 ; END WHERE ; ENDIF170 IF ( cn_trc_o(jpnh4) == 'AA ' ) THEN ; WHERE( gphit(:,:) < 00._wp ) ; trc_o(:,:,jpnh4) = 3.39e-7_wp / rno3 ; END WHERE ; ENDIF175 zpisc(jpsil,3) = 4.96e-5_wp 176 zpisc(jpdsi,3) = 5.63e-7_wp 177 zpisc(jpgsi,3) = 5.35e-8_wp 178 zpisc(jpphy,3) = 8.10e-7_wp 179 zpisc(jpdia,3) = 5.77e-7_wp 180 zpisc(jpzoo,3) = 6.68e-7_wp 181 zpisc(jpmes,3) = 3.55e-7_wp 182 zpisc(jpfer,3) = 1.62e-10_wp 183 zpisc(jpsfe,3) = 2.29e-11_wp 184 zpisc(jpdfe,3) = 8.75e-12_wp 185 zpisc(jpnfe,3) = 1.48e-11_wp 186 zpisc(jpnch,3) = 2.02e-7_wp 187 zpisc(jpdch,3) = 1.60e-7_wp 188 zpisc(jpno3,3) = 2.64e-5_wp / rno3 189 zpisc(jpnh4,3) = 3.39e-7_wp / rno3 171 190 172 191 !--- Baltic Sea particular case for ORCA configurations 173 IF( cp_cfg == "orca" ) THEN ! Baltic mask 174 WHERE( 14._wp <= glamt(:,:) .AND. glamt(:,:) <= 32._wp .AND. & 175 54._wp <= gphit(:,:) .AND. gphit(:,:) <= 66._wp ) 176 trc_o(:,:,jpdic) = 1.14e-3_wp 177 trc_o(:,:,jpdoc) = 1.06e-5_wp 178 trc_o(:,:,jptal) = 1.16e-3_wp 179 trc_o(:,:,jpoxy) = 3.71e-4_wp 180 trc_o(:,:,jpcal) = 1.51e-9_wp 181 trc_o(:,:,jppo4) = 2.85e-9_wp / po4r 182 trc_o(:,:,jppoc) = 4.84e-7_wp 192 zpisc(jpdic,4) = 1.14e-3_wp 193 zpisc(jpdoc,4) = 1.06e-5_wp 194 zpisc(jptal,4) = 1.16e-3_wp 195 zpisc(jpoxy,4) = 3.71e-4_wp 196 zpisc(jpcal,4) = 1.51e-9_wp 197 zpisc(jppo4,4) = 2.85e-9_wp / po4r 198 zpisc(jppoc,4) = 4.84e-7_wp 183 199 # if ! defined key_kriest 184 trc_o(:,:,jpgoc) = 1.05e-8_wp185 trc_o(:,:,jpbfe) = 4.97e-13_wp200 zpisc(jpgoc,4) = 1.05e-8_wp 201 zpisc(jpbfe,4) = 4.97e-13_wp 186 202 # else 187 trc_o(:,:,jpnum) = 0. ! could not get this value203 zpisc(jpnum,4) = 0. ! could not get this value 188 204 # endif 189 trc_o(:,:,jpsil) = 4.91e-5_wp 190 trc_o(:,:,jpdsi) = 3.25e-7_wp 191 trc_o(:,:,jpgsi) = 1.93e-8_wp 192 trc_o(:,:,jpphy) = 6.64e-7_wp 193 trc_o(:,:,jpdia) = 3.41e-7_wp 194 trc_o(:,:,jpzoo) = 3.83e-7_wp 195 trc_o(:,:,jpmes) = 0.225e-6_wp 196 trc_o(:,:,jpfer) = 2.45e-9_wp 197 trc_o(:,:,jpsfe) = 3.89e-11_wp 198 trc_o(:,:,jpdfe) = 1.33e-11_wp 199 trc_o(:,:,jpnfe) = 2.62e-11_wp 200 trc_o(:,:,jpnch) = 1.17e-7_wp 201 trc_o(:,:,jpdch) = 9.69e-8_wp 202 trc_o(:,:,jpno3) = 5.36e-5_wp / rno3 203 trc_o(:,:,jpnh4) = 7.18e-7_wp / rno3 204 END WHERE 205 ENDIF ! cfg 205 zpisc(jpsil,4) = 4.91e-5_wp 206 zpisc(jpdsi,4) = 3.25e-7_wp 207 zpisc(jpgsi,4) = 1.93e-8_wp 208 zpisc(jpphy,4) = 6.64e-7_wp 209 zpisc(jpdia,4) = 3.41e-7_wp 210 zpisc(jpzoo,4) = 3.83e-7_wp 211 zpisc(jpmes,4) = 0.225e-6_wp 212 zpisc(jpfer,4) = 2.45e-9_wp 213 zpisc(jpsfe,4) = 3.89e-11_wp 214 zpisc(jpdfe,4) = 1.33e-11_wp 215 zpisc(jpnfe,4) = 2.62e-11_wp 216 zpisc(jpnch,4) = 1.17e-7_wp 217 zpisc(jpdch,4) = 9.69e-8_wp 218 zpisc(jpno3,4) = 5.36e-5_wp / rno3 219 zpisc(jpnh4,4) = 7.18e-7_wp / rno3 220 221 DO jn = jp_pcs0, jp_pcs1 222 IF( cn_trc_o(jn) == 'GL ' ) trc_o(:,:,jn) = zpisc(jn,1) ! Global case 223 IF( cn_trc_o(jn) == 'AA ' ) THEN 224 WHERE( gphit(:,:) >= 0._wp ) ; trc_o(:,:,jn) = zpisc(jn,2) ; END WHERE ! Arctic 225 WHERE( gphit(:,:) < 0._wp ) ; trc_o(:,:,jn) = zpisc(jn,3) ; END WHERE ! Antarctic 226 ENDIF 227 IF( cp_cfg == "orca" ) THEN ! Baltic Sea particular case for ORCA configurations 228 WHERE( 14._wp <= glamt(:,:) .AND. glamt(:,:) <= 32._wp .AND. & 229 54._wp <= gphit(:,:) .AND. gphit(:,:) <= 66._wp ) 230 trc_o(:,:,jn) = zpisc(jn,4) 231 END WHERE 232 ENDIF 233 ENDDO 234 235 206 236 207 237 !----------------------------- … … 217 247 218 248 DO jn = jp_pcs0, jp_pcs1 219 IF 220 IF 221 IF 249 IF( trc_ice_ratio(jn) >= 0._wp ) zratio(jn,:) = trc_ice_ratio(jn) 250 IF( trc_ice_ratio(jn) == -1._wp ) zratio(jn,:) = zrs(:) 251 IF( trc_ice_ratio(jn) == -2._wp ) zratio(jn,:) = -9999.99_wp 222 252 END DO 223 253 … … 227 257 DO jn = jp_pcs0, jp_pcs1 228 258 !-- Everywhere but in the Baltic 229 IF ( trc_ice_ratio(jn) >= -1._wp ) THEN !! no prescribed concentration 230 !! (typically everything but iron) 259 IF ( trc_ice_ratio(jn) >= -1._wp ) THEN ! no prescribed conc. ; typically everything but iron) 231 260 trc_i(:,:,jn) = zratio(jn,1) * trc_o(:,:,jn) 232 ELSE !! prescribed concentration261 ELSE ! prescribed concentration 233 262 trc_i(:,:,jn) = trc_ice_prescr(jn) 234 263 ENDIF 235 264 236 265 !-- Baltic 237 IF( cp_cfg == "orca" ) THEN !! Baltic treated seperately for ORCA configs 238 IF ( trc_ice_ratio(jn) >= - 1._wp ) THEN !! no prescribed concentration 239 !! (typically everything but iron) 266 IF( cp_cfg == "orca" ) THEN ! Baltic treated seperately for ORCA configs 267 IF ( trc_ice_ratio(jn) >= - 1._wp ) THEN ! no prescribed conc. ; typically everything but iron) 240 268 WHERE( 14._wp <= glamt(:,:) .AND. glamt(:,:) <= 32._wp .AND. & 241 269 54._wp <= gphit(:,:) .AND. gphit(:,:) <= 66._wp ) 242 270 trc_i(:,:,jn) = zratio(jn,2) * trc_o(:,:,jn) 243 271 END WHERE 244 ELSE ! !prescribed tracer concentration in ice272 ELSE ! prescribed tracer concentration in ice 245 273 WHERE( 14._wp <= glamt(:,:) .AND. glamt(:,:) <= 32._wp .AND. & 246 274 54._wp <= gphit(:,:) .AND. gphit(:,:) <= 66._wp ) … … 251 279 ! 252 280 END DO ! jn 253 254 END SUBROUTINE trc_ice_ini_pisces 281 #endif 282 283 END SUBROUTINE p4z_ice_ini 284 285 SUBROUTINE p2z_ice_ini 286 #if defined key_pisces_reduced 287 !!---------------------------------------------------------------------- 288 !! *** ROUTINE p2z_ice_ini *** 289 !! 290 !! ** Purpose : Initialisation of the LOBSTER biochemical model 291 !!---------------------------------------------------------------------- 292 #endif 293 END SUBROUTINE p2z_ice_ini 294 255 295 256 296 #else -
branches/2014/dev_r4650_UKMO10_Tidally_Meaned_Diagnostics/NEMOGCM/NEMO/TOP_SRC/PISCES/trcini_pisces.F90
r5260 r5989 27 27 PUBLIC trc_ini_pisces ! called by trcini.F90 module 28 28 29 30 # include "top_substitute.h90"31 29 !!---------------------------------------------------------------------- 32 30 !! NEMO/TOP 3.3 , NEMO Consortium (2010) … … 71 69 USE p4zmort ! Mortality terms for phytoplankton 72 70 USE p4zlys ! Calcite saturation 71 USE p4zsed ! Sedimentation & burial 73 72 ! 74 73 REAL(wp), SAVE :: sco2 = 2.312e-3_wp 75 REAL(wp), SAVE :: alka0 = 2.42 3e-3_wp74 REAL(wp), SAVE :: alka0 = 2.426e-3_wp 76 75 REAL(wp), SAVE :: oxyg0 = 177.6e-6_wp 77 REAL(wp), SAVE :: po4 = 2.1 74e-6_wp76 REAL(wp), SAVE :: po4 = 2.165e-6_wp 78 77 REAL(wp), SAVE :: bioma0 = 1.000e-8_wp 79 REAL(wp), SAVE :: silic1 = 91. 65e-6_wp80 REAL(wp), SAVE :: no3 = 3 1.04e-6_wp * 7.625_wp78 REAL(wp), SAVE :: silic1 = 91.51e-6_wp 79 REAL(wp), SAVE :: no3 = 30.9e-6_wp * 7.625_wp 81 80 ! 82 81 INTEGER :: ji, jj, jk, ierr … … 97 96 ierr = ierr + p4z_rem_alloc() 98 97 ierr = ierr + p4z_flx_alloc() 98 ierr = ierr + p4z_sed_alloc() 99 99 ! 100 100 IF( lk_mpp ) CALL mpp_sum( ierr ) … … 107 107 CALL p4z_sms_init ! Maint routine 108 108 ! ! Time-step 109 rfact = rdttrc(1) ! ---------110 rfactr = 1. / rfact111 rfact2 = rfact / FLOAT( nrdttrc )112 rfact2r = 1. / rfact2113 114 IF(lwp) WRITE(numout,*) ' Passive Tracer time step rfact = ', rfact, ' rdt = ', rdttra(1)115 IF(lwp) write(numout,*) ' PISCES Biology time step rfact2 = ', rfact2116 117 118 109 119 110 ! Set biological ratios … … 165 156 END IF 166 157 167 ! Time step duration for biology168 xstep = rfact2 / rday169 158 170 159 CALL p4z_sink_init ! vertical flux of particulate organic matter -
branches/2014/dev_r4650_UKMO10_Tidally_Meaned_Diagnostics/NEMOGCM/NEMO/TOP_SRC/PISCES/trcwri_pisces.F90
r5260 r5989 21 21 PUBLIC trc_wri_pisces 22 22 23 # include "top_substitute.h90" 23 !! * Substitutions 24 # include "domzgr_substitute.h90" 25 24 26 CONTAINS 25 27
Note: See TracChangeset
for help on using the changeset viewer.