Changeset 5348 for branches/2015/dev_r5204_CNRS_PISCES_dcy
- Timestamp:
- 2015-06-04T13:10:38+02:00 (9 years ago)
- Location:
- branches/2015/dev_r5204_CNRS_PISCES_dcy/NEMOGCM
- Files:
-
- 23 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2015/dev_r5204_CNRS_PISCES_dcy/NEMOGCM/CONFIG/ORCA2_LIM_PISCES/EXP00/iodef.xml
r5107 r5348 55 55 <field field_ref="tintpp" name="tintpp" unit="PgC/yr" operation="instant" > tintpp * 12. * 86400. * 365. / 1e15 </field> 56 56 <field field_ref="pno3tot" name="pno3tot" unit="umolN" > pno3tot * 16. / 122. * 1e6 </field> 57 <field field_ref="ppo4tot" name="ppo4tot" unit="umolP" > ppo4tot * 1. / 122. * 1e6 </field> 57 58 <field field_ref="psiltot" name="psiltot" unit="umolC" > psiltot * 1e6 </field> 58 59 <field field_ref="palktot" name="palktot" unit="umolC" > palktot * 1e6 </field> -
branches/2015/dev_r5204_CNRS_PISCES_dcy/NEMOGCM/CONFIG/ORCA2_OFF_PISCES/EXP00/iodef.xml
r4996 r5348 39 39 <field field_ref="tintpp" name="tintpp" unit="PgC/yr" operation="instant" > tintpp * 12. * 86400. * 365. / 1e15 </field> 40 40 <field field_ref="pno3tot" name="pno3tot" unit="umolN" > pno3tot * 16. / 122. * 1e6 </field> 41 <field field_ref="ppo4tot" name="ppo4tot" unit="umolP" > ppo4tot * 1. / 122. * 1e6 </field> 41 42 <field field_ref="psiltot" name="psiltot" unit="umolC" > psiltot * 1e6 </field> 42 43 <field field_ref="palktot" name="palktot" unit="umolC" > palktot * 1e6 </field> -
branches/2015/dev_r5204_CNRS_PISCES_dcy/NEMOGCM/CONFIG/SHARED/field_def.xml
r5311 r5348 758 758 <field_group id="PISCES_scalar" domain_ref="1point" > 759 759 <field id="pno3tot" long_name="global mean nitrate concentration" unit="mol/l" /> 760 <field id="ppo4tot" long_name="global mean phosphorus concentration" unit="mol/l" /> 760 761 <field id="psiltot" long_name="global mean silicate concentration" unit="mol/l" /> 761 762 <field id="palktot" long_name="global mean alkalinity concentration" unit="mol/l" /> -
branches/2015/dev_r5204_CNRS_PISCES_dcy/NEMOGCM/CONFIG/cfg.txt
r5311 r5348 6 6 GYRE_BFM OPA_SRC TOP_SRC 7 7 AMM12 OPA_SRC 8 ORCA2_LIM_PISCES OPA_SRC LIM_SRC_2 NST_SRC TOP_SRC 8 9 ISOMIP OPA_SRC 9 10 GYRE OPA_SRC 10 ORCA2_LIM _PISCES OPA_SRC LIM_SRC_2 NST_SRC TOP_SRC11 ORCA2_LIM3 OPA_SRC LIM_SRC_3 NST_SRC 11 12 ORCA2_LIM OPA_SRC LIM_SRC_2 NST_SRC 12 ORCA2_LIM 3 OPA_SRC LIM_SRC_3NST_SRC13 ORCA2_LIM_OBS OPA_SRC LIM_SRC_2 NST_SRC 13 14 ORCA2_OFF_PISCES OPA_SRC OFF_SRC TOP_SRC -
branches/2015/dev_r5204_CNRS_PISCES_dcy/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zbio.F90
r4529 r5348 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 ! -
branches/2015/dev_r5204_CNRS_PISCES_dcy/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zfechem.F90
r4996 r5348 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 … … 127 127 zionic = 19.9201 * tsn(ji,jj,jk,jp_sal) / ( 1000. - 1.00488 * tsn(ji,jj,jk,jp_sal) + rtrn ) 128 128 zph = -LOG10( MAX( hi(ji,jj,jk), rtrn) ) 129 zoxy = tr n(ji,jj,jk,jpoxy) * ( rhop(ji,jj,jk) / 1.e3 )129 zoxy = trb(ji,jj,jk,jpoxy) * ( rhop(ji,jj,jk) / 1.e3 ) 130 130 ! Fe2+ oxydation rate from Santana-Casiano et al. (2005) 131 131 zkox = 35.407 - 6.7109 * zph + 0.5342 * zph * zph - 5362.6 / ( tsn(ji,jj,jk,jp_tem) + 273.15 ) & … … 137 137 zkph1 = zkph2 / 5. 138 138 ! pass the dfe concentration from PISCES 139 ztfe = tr n(ji,jj,jk,jpfer) * 1e9139 ztfe = trb(ji,jj,jk,jpfer) * 1e9 140 140 ! ---------------------------------------------------------- 141 141 ! ANALYTICAL SOLUTION OF ROOTS OF THE FE3+ EQUATION … … 204 204 zkeq = fekeq(ji,jj,jk) 205 205 zfesatur = zTL1(ji,jj,jk) * 1E-9 206 ztfe = tr n(ji,jj,jk,jpfer)206 ztfe = trb(ji,jj,jk,jpfer) 207 207 ! Fe' is the root of a 2nd order polynom 208 208 zFe3 (ji,jj,jk) = ( -( 1. + zfesatur * zkeq - zkeq * ztfe ) & … … 210 210 & + 4. * ztfe * zkeq) ) / ( 2. * zkeq ) 211 211 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) )212 zFeL1(ji,jj,jk) = MAX( 0., trb(ji,jj,jk,jpfer) * 1E9 - zFe3(ji,jj,jk) ) 213 213 END DO 214 214 END DO … … 240 240 ENDIF 241 241 #if defined key_kriest 242 ztrc = ( tr n(ji,jj,jk,jppoc) + trn(ji,jj,jk,jpcal) + trn(ji,jj,jk,jpgsi) ) * 1.e6242 ztrc = ( trb(ji,jj,jk,jppoc) + trb(ji,jj,jk,jpcal) + trb(ji,jj,jk,jpgsi) ) * 1.e6 243 243 #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.e6244 ztrc = ( trb(ji,jj,jk,jppoc) + trb(ji,jj,jk,jpgoc) + trb(ji,jj,jk,jpcal) + trb(ji,jj,jk,jpgsi) ) * 1.e6 245 245 #endif 246 246 IF( ln_dust ) zdust = dust(ji,jj) / ( wdust / rday ) * tmask(ji,jj,jk) ! dust in kg/m2/s … … 251 251 ! to later allocate scavenged iron to the different organic pools 252 252 ! --------------------------------------------------------- 253 zdenom1 = xlam1 * tr n(ji,jj,jk,jppoc) / zlam1b253 zdenom1 = xlam1 * trb(ji,jj,jk,jppoc) / zlam1b 254 254 #if ! defined key_kriest 255 zdenom2 = xlam1 * tr n(ji,jj,jk,jpgoc) / zlam1b255 zdenom2 = xlam1 * trb(ji,jj,jk,jpgoc) / zlam1b 256 256 #endif 257 257 … … 262 262 zlamfac = MIN( 1. , zlamfac ) 263 263 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)264 zlam1b = xlam1 * MAX( 0.e0, ( trb(ji,jj,jk,jpfer) * 1.e9 - ztotlig(ji,jj,jk) ) ) 265 zcoag = zfeequi * zlam1b * zstep + 1E-4 * ( 1. - zlamfac ) * zdep * zstep * trb(ji,jj,jk,jpfer) 266 266 267 267 ! Compute the coagulation of colloidal iron. This parameterization … … 269 269 ! It requires certainly some more work as it is very poorly constrained. 270 270 ! ---------------------------------------------------------------- 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) )271 zlam1a = ( 0.369 * 0.3 * trb(ji,jj,jk,jpdoc) + 102.4 * trb(ji,jj,jk,jppoc) ) * xdiss(ji,jj,jk) & 272 & + ( 114. * 0.3 * trb(ji,jj,jk,jpdoc) + 5.09E3 * trb(ji,jj,jk,jppoc) ) 273 273 zaggdfea = zlam1a * zstep * zfecoll 274 274 #if defined key_kriest … … 278 278 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zscave * zdenom1 + zaggdfea + zaggdfeb 279 279 #else 280 zlam1b = 3.53E3 * tr n(ji,jj,jk,jpgoc) * xdiss(ji,jj,jk)280 zlam1b = 3.53E3 * trb(ji,jj,jk,jpgoc) * xdiss(ji,jj,jk) 281 281 zaggdfeb = zlam1b * zstep * zfecoll 282 282 ! … … 292 292 ! ---------------------------------------- 293 293 IF( ln_fechem ) THEN 294 biron(:,:,:) = MAX( 0., tr n(:,:,:,jpfer) - zFeP(:,:,:) * 1E-9 )294 biron(:,:,:) = MAX( 0., trb(:,:,:,jpfer) - zFeP(:,:,:) * 1E-9 ) 295 295 ELSE 296 biron(:,:,:) = tr n(:,:,:,jpfer)296 biron(:,:,:) = trb(:,:,:,jpfer) 297 297 ENDIF 298 298 299 299 ! Output of some diagnostics variables 300 300 ! --------------------------------- 301 IF( lk_iomput .AND. jnt == nrdttrc ) THEN301 IF( lk_iomput .AND. knt == nrdttrc ) THEN 302 302 IF( iom_use("Fe3") ) CALL iom_put("Fe3" , zFe3 (:,:,:) * tmask(:,:,:) ) ! Fe3+ 303 303 IF( iom_use("FeL1") ) CALL iom_put("FeL1" , zFeL1 (:,:,:) * tmask(:,:,:) ) ! FeL1 -
branches/2015/dev_r5204_CNRS_PISCES_dcy/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zflx.F90
r4996 r5348 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 … … 130 130 zbot = borat(ji,jj,1) 131 131 zfact = rhop(ji,jj,1) / 1000. + rtrn 132 zdic = tr n(ji,jj,1,jpdic) / zfact132 zdic = trb(ji,jj,1,jpdic) / zfact 133 133 zph = MAX( hi(ji,jj,1), 1.e-10 ) / zfact 134 zalka = tr n(ji,jj,1,jptal) / zfact134 zalka = trb(ji,jj,1,jptal) / zfact 135 135 136 136 ! CALCULATE [ALK]([CO3--], [HCO3-]) … … 184 184 zfld = satmco2(ji,jj) * patm(ji,jj) * tmask(ji,jj,1) * chemc(ji,jj,1) * zkgco2(ji,jj) ! (mol/L) * (m/s) 185 185 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.186 oce_co2(ji,jj) = ( zfld - zflu ) * rfact2 * e1e2t(ji,jj) * tmask(ji,jj,1) * 1000. 187 187 ! compute the trend 188 tra(ji,jj,1,jpdic) = tra(ji,jj,1,jpdic) + ( zfld - zflu ) / fse3t(ji,jj,1)188 tra(ji,jj,1,jpdic) = tra(ji,jj,1,jpdic) + ( zfld - zflu ) * rfact2 / fse3t(ji,jj,1) 189 189 190 190 ! Compute O2 flux 191 191 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)192 zflu16 = trb(ji,jj,1,jpoxy) * tmask(ji,jj,1) * zkgo2(ji,jj) 193 193 zoflx(ji,jj) = zfld16 - zflu16 194 tra(ji,jj,1,jpoxy) = tra(ji,jj,1,jpoxy) + zoflx(ji,jj) / fse3t(ji,jj,1)194 tra(ji,jj,1,jpoxy) = tra(ji,jj,1,jpoxy) + zoflx(ji,jj) * rfact2 / fse3t(ji,jj,1) 195 195 END DO 196 196 END DO … … 207 207 ENDIF 208 208 209 IF( lk_iomput ) THEN209 IF( lk_iomput .AND. knt == nrdttrc ) THEN 210 210 CALL wrk_alloc( jpi, jpj, zw2d ) 211 211 IF( iom_use( "Cflx" ) ) THEN 212 zw2d(:,:) = oce_co2(:,:) / e1e2t(:,:) / rfact212 zw2d(:,:) = oce_co2(:,:) / e1e2t(:,:) * rfact2r 213 213 CALL iom_put( "Cflx" , zw2d ) 214 214 ENDIF … … 226 226 ENDIF 227 227 IF( iom_use( "Dpo2" ) ) THEN 228 zw2d(:,:) = ( atcox * patm(:,:) - tr n(:,:,1,jpoxy) / ( chemc(:,:,2) + rtrn ) ) * tmask(:,:,1)228 zw2d(:,:) = ( atcox * patm(:,:) - trb(:,:,1,jpoxy) / ( chemc(:,:,2) + rtrn ) ) * tmask(:,:,1) 229 229 CALL iom_put( "Dpo2" , zw2d ) 230 230 ENDIF … … 235 235 ELSE 236 236 IF( ln_diatrc ) THEN 237 trc2d(:,:,jp_pcs0_2d ) = oce_co2(:,:) / e1e2t(:,:) / rfact237 trc2d(:,:,jp_pcs0_2d ) = oce_co2(:,:) / e1e2t(:,:) * rfact2r 238 238 trc2d(:,:,jp_pcs0_2d + 1) = zoflx(:,:) * 1000 * tmask(:,:,1) 239 239 trc2d(:,:,jp_pcs0_2d + 2) = zkgco2(:,:) * tmask(:,:,1) -
branches/2015/dev_r5204_CNRS_PISCES_dcy/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zint.F90
r3446 r5348 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 -
branches/2015/dev_r5204_CNRS_PISCES_dcy/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zlim.F90
r5206 r5348 62 62 CONTAINS 63 63 64 SUBROUTINE p4z_lim( kt, jnt )64 SUBROUTINE p4z_lim( kt, knt ) 65 65 !!--------------------------------------------------------------------- 66 66 !! *** ROUTINE p4z_lim *** … … 72 72 !!--------------------------------------------------------------------- 73 73 ! 74 INTEGER, INTENT(in) :: kt, jnt74 INTEGER, INTENT(in) :: kt, knt 75 75 ! 76 76 INTEGER :: ji, jj, jk 77 77 REAL(wp) :: zlim1, zlim2, zlim3, zlim4, zno3, zferlim 78 78 REAL(wp) :: zconcd, zconcd2, zconcn, zconcn2 79 REAL(wp) :: z1_tr ndia, z1_trnphy, ztem1, ztem2, zetot1, zetot279 REAL(wp) :: z1_trbdia, z1_trbphy, ztem1, ztem2, zetot1, zetot2 80 80 REAL(wp) :: zdenom, zratio, zironmin 81 81 REAL(wp) :: zconc1d, zconc1dnh4, zconc0n, zconc0nnh4 … … 90 90 ! Tuning of the iron concentration to a minimum level that is set to the detection limit 91 91 !------------------------------------- 92 zno3 = tr n(ji,jj,jk,jpno3) / 40.e-692 zno3 = trb(ji,jj,jk,jpno3) / 40.e-6 93 93 zferlim = MAX( 3e-11 * zno3 * zno3, 5e-12 ) 94 94 zferlim = MIN( zferlim, 7e-11 ) 95 tr n(ji,jj,jk,jpfer) = MAX( trn(ji,jj,jk,jpfer), zferlim )95 trb(ji,jj,jk,jpfer) = MAX( trb(ji,jj,jk,jpfer), zferlim ) 96 96 97 97 ! Computation of a variable Ks for iron on diatoms taking into account 98 98 ! that increasing biomass is made of generally bigger cells 99 99 !------------------------------------------------ 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 )100 zconcd = MAX( 0.e0 , trb(ji,jj,jk,jpdia) - xsizedia ) 101 zconcd2 = trb(ji,jj,jk,jpdia) - zconcd 102 zconcn = MAX( 0.e0 , trb(ji,jj,jk,jpphy) - xsizephy ) 103 zconcn2 = trb(ji,jj,jk,jpphy) - zconcn 104 z1_trbphy = 1. / ( trb(ji,jj,jk,jpphy) + rtrn ) 105 z1_trbdia = 1. / ( trb(ji,jj,jk,jpdia) + rtrn ) 106 107 concdfe(ji,jj,jk) = MAX( concdfer, ( zconcd2 * concdfer + concdfer * xsizerd * zconcd ) * z1_trbdia ) 108 zconc1d = MAX( concdno3, ( zconcd2 * concdno3 + concdno3 * xsizerd * zconcd ) * z1_trbdia ) 109 zconc1dnh4 = MAX( concdnh4, ( zconcd2 * concdnh4 + concdnh4 * xsizerd * zconcd ) * z1_trbdia ) 110 111 concnfe(ji,jj,jk) = MAX( concnfer, ( zconcn2 * concnfer + concnfer * xsizern * zconcn ) * z1_trbphy ) 112 zconc0n = MAX( concnno3, ( zconcn2 * concnno3 + concnno3 * xsizern * zconcn ) * z1_trbphy ) 113 zconc0nnh4 = MAX( concnnh4, ( zconcn2 * concnnh4 + concnnh4 * xsizern * zconcn ) * z1_trbphy ) 114 114 115 115 ! Michaelis-Menten Limitation term for nutrients Small bacteria 116 116 ! ------------------------------------------------------------- 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 * zdenom117 zdenom = 1. / ( concbno3 * concbnh4 + concbnh4 * trb(ji,jj,jk,jpno3) + concbno3 * trb(ji,jj,jk,jpnh4) ) 118 xnanono3(ji,jj,jk) = trb(ji,jj,jk,jpno3) * concbnh4 * zdenom 119 xnanonh4(ji,jj,jk) = trb(ji,jj,jk,jpnh4) * concbno3 * zdenom 120 120 ! 121 121 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) )122 zlim2 = trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + concbnh4 ) 123 zlim3 = trb(ji,jj,jk,jpfer) / ( concbfe + trb(ji,jj,jk,jpfer) ) 124 zlim4 = trb(ji,jj,jk,jpdoc) / ( xkdoc + trb(ji,jj,jk,jpdoc) ) 125 125 xlimbacl(ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) 126 126 xlimbac (ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) * zlim4 … … 128 128 ! Michaelis-Menten Limitation term for nutrients Small flagellates 129 129 ! ----------------------------------------------- 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 * zdenom130 zdenom = 1. / ( zconc0n * zconc0nnh4 + zconc0nnh4 * trb(ji,jj,jk,jpno3) + zconc0n * trb(ji,jj,jk,jpnh4) ) 131 xnanono3(ji,jj,jk) = trb(ji,jj,jk,jpno3) * zconc0nnh4 * zdenom 132 xnanonh4(ji,jj,jk) = trb(ji,jj,jk,jpnh4) * zconc0n * zdenom 133 133 ! 134 134 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)135 zlim2 = trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + zconc0nnh4 ) 136 zratio = trb(ji,jj,jk,jpnfe) * z1_trbphy 137 zironmin = xcoef1 * trb(ji,jj,jk,jpnch) * z1_trbphy + xcoef2 * zlim1 + xcoef3 * xnanono3(ji,jj,jk) 138 138 zlim3 = MAX( 0.,( zratio - zironmin ) / qnfelim ) 139 139 xnanopo4(ji,jj,jk) = zlim2 … … 143 143 ! Michaelis-Menten Limitation term for nutrients Diatoms 144 144 ! ---------------------------------------------- 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 * zdenom145 zdenom = 1. / ( zconc1d * zconc1dnh4 + zconc1dnh4 * trb(ji,jj,jk,jpno3) + zconc1d * trb(ji,jj,jk,jpnh4) ) 146 xdiatno3(ji,jj,jk) = trb(ji,jj,jk,jpno3) * zconc1dnh4 * zdenom 147 xdiatnh4(ji,jj,jk) = trb(ji,jj,jk,jpnh4) * zconc1d * zdenom 148 148 ! 149 149 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)150 zlim2 = trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + zconc1dnh4 ) 151 zlim3 = trb(ji,jj,jk,jpsil) / ( trb(ji,jj,jk,jpsil) + xksi(ji,jj) ) 152 zratio = trb(ji,jj,jk,jpdfe) * z1_trbdia 153 zironmin = xcoef1 * trb(ji,jj,jk,jpdch) * z1_trbdia + xcoef2 * zlim1 + xcoef3 * xdiatno3(ji,jj,jk) 154 154 zlim4 = MAX( 0., ( zratio - zironmin ) / qdfelim ) 155 155 xdiatpo4(ji,jj,jk) = zlim2 … … 166 166 DO jj = 1, jpj 167 167 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 )168 zlim1 = ( trb(ji,jj,jk,jpno3) * concnnh4 + trb(ji,jj,jk,jpnh4) * concnno3 ) & 169 & / ( concnno3 * concnnh4 + concnnh4 * trb(ji,jj,jk,jpno3) + concnno3 * trb(ji,jj,jk,jpnh4) ) 170 zlim2 = trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + concnnh4 ) 171 zlim3 = trb(ji,jj,jk,jpfer) / ( trb(ji,jj,jk,jpfer) + 5.E-11 ) 172 172 ztem1 = MAX( 0., tsn(ji,jj,jk,jp_tem) ) 173 173 ztem2 = tsn(ji,jj,jk,jp_tem) - 10. … … 177 177 xfracal(ji,jj,jk) = caco3r * MIN( zlim1, zlim2, zlim3 ) & 178 178 & * ztem1 / ( 0.1 + ztem1 ) & 179 & * MAX( 1., tr n(ji,jj,jk,jpphy) * 1.e6 / 2. ) &179 & * MAX( 1., trb(ji,jj,jk,jpphy) * 1.e6 / 2. ) & 180 180 & * zetot1 * zetot2 & 181 181 & * ( 1. + EXP(-ztem2 * ztem2 / 25. ) ) & … … 188 188 ! 189 189 ! 190 IF( lk_iomput .AND. jnt == nrdttrc ) THEN ! save output diagnostics190 IF( lk_iomput .AND. knt == nrdttrc ) THEN ! save output diagnostics 191 191 IF( iom_use( "xfracal" ) ) CALL iom_put( "xfracal", xfracal(:,:,:) * tmask(:,:,:) ) ! euphotic layer deptht 192 192 IF( iom_use( "LNnut" ) ) CALL iom_put( "LNnut" , xlimphy(:,:,:) * tmask(:,:,:) ) ! Nutrient limitation term -
branches/2015/dev_r5204_CNRS_PISCES_dcy/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zlys.F90
r4996 r5348 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 … … 89 88 zfact = rhop(ji,jj,jk) / 1000. + rtrn 90 89 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) / zfact90 zdic = trb(ji,jj,jk,jpdic) / zfact 91 zalka = trb(ji,jj,jk,jptal) / zfact 93 92 ! CALCULATE [ALK]([CO3--], [HCO3-]) 94 93 zalk = zalka - ( akw3(ji,jj,jk) / zph - zph + borat(ji,jj,jk) / ( 1. + zph / akb3(ji,jj,jk) ) ) … … 130 129 ! (ACCORDING TO THIS FORMULATION ALSO SOME PARTICULATE 131 130 ! CACO3 GETS DISSOLVED EVEN IN THE CASE OF OVERSATURATION) 132 zdispot = kdca * zexcess * tr n(ji,jj,jk,jpcal)131 zdispot = kdca * zexcess * trb(ji,jj,jk,jpcal) 133 132 # if defined key_degrad 134 133 zdispot = zdispot * facvol(ji,jj,jk) … … 136 135 ! CHANGE OF [CO3--] , [ALK], PARTICULATE [CACO3], 137 136 ! 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) * rfact137 zcaldiss(ji,jj,jk) = zdispot * rfact2 / rmtss ! calcite dissolution 138 zco3(ji,jj,jk) = zco3(ji,jj,jk) + zcaldiss(ji,jj,jk) 140 139 ! 141 140 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + 2. * zcaldiss(ji,jj,jk) … … 147 146 ! 148 147 149 IF( lk_iomput ) THEN148 IF( lk_iomput .AND. knt == nrdttrc ) THEN 150 149 IF( iom_use( "PH" ) ) CALL iom_put( "PH" , -1. * LOG10( hi(:,:,:) ) * tmask(:,:,:) ) 151 150 IF( iom_use( "CO3" ) ) CALL iom_put( "CO3" , zco3(:,:,:) * 1.e+3 * tmask(:,:,:) ) 152 151 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(:,:,:) )152 IF( iom_use( "DCAL" ) ) CALL iom_put( "DCAL" , zcaldiss(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:) ) 154 153 ELSE 155 154 trc3d(:,:,:,jp_pcs0_3d ) = -1. * LOG10( hi(:,:,:) ) * tmask(:,:,:) -
branches/2015/dev_r5204_CNRS_PISCES_dcy/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmeso.F90
r4996 r5348 60 60 CONTAINS 61 61 62 SUBROUTINE p4z_meso( kt, jnt )62 SUBROUTINE p4z_meso( kt, knt ) 63 63 !!--------------------------------------------------------------------- 64 64 !! *** ROUTINE p4z_meso *** … … 68 68 !! ** Method : - ??? 69 69 !!--------------------------------------------------------------------- 70 INTEGER, INTENT(in) :: kt, jnt ! ocean time step70 INTEGER, INTENT(in) :: kt, knt ! ocean time step 71 71 INTEGER :: ji, jj, jk 72 72 REAL(wp) :: zcompadi, zcompaph, zcompapoc, zcompaz, zcompam … … 97 97 DO jj = 1, jpj 98 98 DO ji = 1, jpi 99 zcompam = MAX( ( tr n(ji,jj,jk,jpmes) - 1.e-9 ), 0.e0 )99 zcompam = MAX( ( trb(ji,jj,jk,jpmes) - 1.e-9 ), 0.e0 ) 100 100 # if defined key_degrad 101 101 zstep = xstep * facvol(ji,jj,jk) … … 107 107 ! Respiration rates of both zooplankton 108 108 ! ------------------------------------- 109 zrespz2 = resrat2 * zfact * tr n(ji,jj,jk,jpmes) / ( xkmort + trn(ji,jj,jk,jpmes) ) &109 zrespz2 = resrat2 * zfact * trb(ji,jj,jk,jpmes) / ( xkmort + trb(ji,jj,jk,jpmes) ) & 110 110 & + resrat2 * zfact * 3. * nitrfac(ji,jj,jk) 111 111 … … 113 113 ! no real reason except that it seems to be more stable and may mimic predation 114 114 ! --------------------------------------------------------------- 115 ztortz2 = mzrat2 * 1.e6 * zfact * tr n(ji,jj,jk,jpmes)115 ztortz2 = mzrat2 * 1.e6 * zfact * trb(ji,jj,jk,jpmes) 116 116 ! 117 zcompadi = MAX( ( tr n(ji,jj,jk,jpdia) - xthresh2dia ), 0.e0 )118 zcompaz = MAX( ( tr n(ji,jj,jk,jpzoo) - xthresh2zoo ), 0.e0 )117 zcompadi = MAX( ( trb(ji,jj,jk,jpdia) - xthresh2dia ), 0.e0 ) 118 zcompaz = MAX( ( trb(ji,jj,jk,jpzoo) - xthresh2zoo ), 0.e0 ) 119 119 ! Size effect of nanophytoplankton on grazing : the smaller it is, the less prone 120 120 ! it is to predation by mesozooplankton 121 121 ! ------------------------------------------------------------------------------- 122 zcompaph = MAX( ( tr n(ji,jj,jk,jpphy) - xthresh2phy ), 0.e0 ) &122 zcompaph = MAX( ( trb(ji,jj,jk,jpphy) - xthresh2phy ), 0.e0 ) & 123 123 & * MIN(1., MAX( 0., ( quotan(ji,jj,jk) - 0.2) / 0.3 ) ) 124 zcompapoc = MAX( ( tr n(ji,jj,jk,jppoc) - xthresh2poc ), 0.e0 )124 zcompapoc = MAX( ( trb(ji,jj,jk,jppoc) - xthresh2poc ), 0.e0 ) 125 125 126 126 zfood = xprefc * zcompadi + xprefz * zcompaz + xprefp * zcompaph + xprefpoc * zcompapoc … … 128 128 zdenom = zfoodlim / ( xkgraz2 + zfoodlim ) 129 129 zdenom2 = zdenom / ( zfood + rtrn ) 130 zgraze2 = grazrat2 * zstep * tgfunc2(ji,jj,jk) * tr n(ji,jj,jk,jpmes)130 zgraze2 = grazrat2 * zstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpmes) 131 131 132 132 zgrazd = zgraze2 * xprefc * zcompadi * zdenom2 … … 135 135 zgrazpoc = zgraze2 * xprefpoc * zcompapoc * zdenom2 136 136 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)137 zgraznf = zgrazn * trb(ji,jj,jk,jpnfe) / ( trb(ji,jj,jk,jpphy) + rtrn) 138 zgrazf = zgrazd * trb(ji,jj,jk,jpdfe) / ( trb(ji,jj,jk,jpdia) + rtrn) 139 zgrazpof = zgrazpoc * trb(ji,jj,jk,jpsfe) / ( trb(ji,jj,jk,jppoc) + rtrn) 140 140 141 141 ! Mesozooplankton flux feeding on GOC … … 144 144 # if ! defined key_kriest 145 145 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)146 & * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpgoc) * trb(ji,jj,jk,jpmes) 147 zgrazfffg = zgrazffeg * trb(ji,jj,jk,jpbfe) / (trb(ji,jj,jk,jpgoc) + rtrn) 148 148 # endif 149 149 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)150 & * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jpmes) 151 zgrazfffp = zgrazffep * trb(ji,jj,jk,jpsfe) / (trb(ji,jj,jk,jppoc) + rtrn) 152 152 ! 153 153 # if ! defined key_kriest … … 158 158 ! diatoms based aggregates are more prone to fractionation 159 159 ! 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 )160 zratio = trb(ji,jj,jk,jpgsi) / ( trb(ji,jj,jk,jpgoc) + rtrn ) 161 161 zratio2 = zratio * zratio 162 162 zfrac = zproport * grazflux * zstep * wsbio4(ji,jj,jk) & 163 & * tr n(ji,jj,jk,jpgoc) * trn(ji,jj,jk,jpmes) &163 & * trb(ji,jj,jk,jpgoc) * trb(ji,jj,jk,jpmes) & 164 164 & * ( 0.2 + 3.8 * zratio2 / ( 1.**2 + zratio2 ) ) 165 zfracfe = zfrac * tr n(ji,jj,jk,jpbfe) / (trn(ji,jj,jk,jpgoc) + rtrn)165 zfracfe = zfrac * trb(ji,jj,jk,jpbfe) / (trb(ji,jj,jk,jpgoc) + rtrn) 166 166 167 167 zgrazffep = zproport * zgrazffep … … 215 215 tra(ji,jj,jk,jpzoo) = tra(ji,jj,jk,jpzoo) - zgrazz 216 216 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 )217 tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) - zgrazn * trb(ji,jj,jk,jpnch) / ( trb(ji,jj,jk,jpphy) + rtrn ) 218 tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) - zgrazd * trb(ji,jj,jk,jpdch) / ( trb(ji,jj,jk,jpdia) + rtrn ) 219 tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) - zgrazd * trb(ji,jj,jk,jpdsi) / ( trb(ji,jj,jk,jpdia) + rtrn ) 220 tra(ji,jj,jk,jpgsi) = tra(ji,jj,jk,jpgsi) + zgrazd * trb(ji,jj,jk,jpdsi) / ( trb(ji,jj,jk,jpdia) + rtrn ) 221 221 tra(ji,jj,jk,jpnfe) = tra(ji,jj,jk,jpnfe) - zgraznf 222 222 tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) - zgrazf … … 231 231 tra(ji,jj,jk,jpcal) = tra(ji,jj,jk,jpcal) + zprcaca 232 232 #if defined key_kriest 233 znumpoc = tr n(ji,jj,jk,jpnum) / ( trn(ji,jj,jk,jppoc) + rtrn )233 znumpoc = trb(ji,jj,jk,jpnum) / ( trb(ji,jj,jk,jppoc) + rtrn ) 234 234 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zmortzgoc - zgrazpoc - zgrazffep + zgrapoc2 235 235 tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) - zgrazpoc * znumpoc + zgrapoc2 * xkr_dmeso & … … 248 248 END DO 249 249 ! 250 IF( lk_iomput .AND. jnt == nrdttrc ) THEN250 IF( lk_iomput .AND. knt == nrdttrc ) THEN 251 251 CALL wrk_alloc( jpi, jpj, jpk, zw3d ) 252 252 IF( iom_use( "GRAZ2" ) ) THEN -
branches/2015/dev_r5204_CNRS_PISCES_dcy/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmicro.F90
r4996 r5348 59 59 CONTAINS 60 60 61 SUBROUTINE p4z_micro( kt, jnt )61 SUBROUTINE p4z_micro( kt, knt ) 62 62 !!--------------------------------------------------------------------- 63 63 !! *** ROUTINE p4z_micro *** … … 68 68 !!--------------------------------------------------------------------- 69 69 INTEGER, INTENT(in) :: kt ! ocean time step 70 INTEGER, INTENT(in) :: jnt70 INTEGER, INTENT(in) :: knt 71 71 ! 72 72 INTEGER :: ji, jj, jk … … 90 90 DO jj = 1, jpj 91 91 DO ji = 1, jpi 92 zcompaz = MAX( ( tr n(ji,jj,jk,jpzoo) - 1.e-9 ), 0.e0 )92 zcompaz = MAX( ( trb(ji,jj,jk,jpzoo) - 1.e-9 ), 0.e0 ) 93 93 zstep = xstep 94 94 # if defined key_degrad … … 99 99 ! Respiration rates of both zooplankton 100 100 ! ------------------------------------- 101 zrespz = resrat * zfact * tr n(ji,jj,jk,jpzoo) / ( xkmort + trn(ji,jj,jk,jpzoo) ) &101 zrespz = resrat * zfact * trb(ji,jj,jk,jpzoo) / ( xkmort + trb(ji,jj,jk,jpzoo) ) & 102 102 & + resrat * zfact * 3. * nitrfac(ji,jj,jk) 103 103 … … 105 105 ! no real reason except that it seems to be more stable and may mimic predation. 106 106 ! --------------------------------------------------------------- 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 )107 ztortz = mzrat * 1.e6 * zfact * trb(ji,jj,jk,jpzoo) 108 109 zcompadi = MIN( MAX( ( trb(ji,jj,jk,jpdia) - xthreshdia ), 0.e0 ), xsizedia ) 110 zcompaph = MAX( ( trb(ji,jj,jk,jpphy) - xthreshphy ), 0.e0 ) 111 zcompapoc = MAX( ( trb(ji,jj,jk,jppoc) - xthreshpoc ), 0.e0 ) 112 112 113 113 ! Microzooplankton grazing … … 117 117 zdenom = zfoodlim / ( xkgraz + zfoodlim ) 118 118 zdenom2 = zdenom / ( zfood + rtrn ) 119 zgraze = grazrat * zstep * tgfunc2(ji,jj,jk) * tr n(ji,jj,jk,jpzoo)119 zgraze = grazrat * zstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpzoo) 120 120 121 121 zgrazp = zgraze * xpref2p * zcompaph * zdenom2 … … 123 123 zgrazsd = zgraze * xpref2d * zcompadi * zdenom2 124 124 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)125 zgrazpf = zgrazp * trb(ji,jj,jk,jpnfe) / (trb(ji,jj,jk,jpphy) + rtrn) 126 zgrazmf = zgrazm * trb(ji,jj,jk,jpsfe) / (trb(ji,jj,jk,jppoc) + rtrn) 127 zgrazsf = zgrazsd * trb(ji,jj,jk,jpdfe) / (trb(ji,jj,jk,jpdia) + rtrn) 128 128 ! 129 129 zgraztot = zgrazp + zgrazm + zgrazsd … … 165 165 tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) - zgrazp 166 166 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)167 tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) - zgrazp * trb(ji,jj,jk,jpnch)/(trb(ji,jj,jk,jpphy)+rtrn) 168 tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) - zgrazsd * trb(ji,jj,jk,jpdch)/(trb(ji,jj,jk,jpdia)+rtrn) 169 tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) - zgrazsd * trb(ji,jj,jk,jpdsi)/(trb(ji,jj,jk,jpdia)+rtrn) 170 tra(ji,jj,jk,jpgsi) = tra(ji,jj,jk,jpgsi) + zgrazsd * trb(ji,jj,jk,jpdsi)/(trb(ji,jj,jk,jpdia)+rtrn) 171 171 tra(ji,jj,jk,jpnfe) = tra(ji,jj,jk,jpnfe) - zgrazpf 172 172 tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) - zgrazsf … … 184 184 #if defined key_kriest 185 185 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 )186 - zgrazm * trb(ji,jj,jk,jpnum) / ( trb(ji,jj,jk,jppoc) + rtrn ) 187 187 #endif 188 188 END DO … … 190 190 END DO 191 191 ! 192 IF( lk_iomput .AND. jnt == nrdttrc ) THEN192 IF( lk_iomput .AND. knt == nrdttrc ) THEN 193 193 CALL wrk_alloc( jpi, jpj, jpk, zw3d ) 194 194 IF( iom_use( "GRAZ1" ) ) THEN -
branches/2015/dev_r5204_CNRS_PISCES_dcy/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmort.F90
r4624 r5348 85 85 DO jj = 1, jpj 86 86 DO ji = 1, jpi 87 zcompaph = MAX( ( tr n(ji,jj,jk,jpphy) - 1e-8 ), 0.e0 )87 zcompaph = MAX( ( trb(ji,jj,jk,jpphy) - 1e-8 ), 0.e0 ) 88 88 zstep = xstep 89 89 # if defined key_degrad … … 94 94 ! due to turbulence is negligible. Mortality is also set 95 95 ! to 0 96 zsizerat = MIN(1., MAX( 0., (quotan(ji,jj,jk) - 0.2) / 0.3) ) * tr n(ji,jj,jk,jpphy)96 zsizerat = MIN(1., MAX( 0., (quotan(ji,jj,jk) - 0.2) / 0.3) ) * trb(ji,jj,jk,jpphy) 97 97 ! Squared mortality of Phyto similar to a sedimentation term during 98 98 ! blooms (Doney et al. 1996) … … 102 102 ! increased when nutrients are limiting phytoplankton growth 103 103 ! as observed for instance in case of iron limitation. 104 ztortp = mprat * xstep * zcompaph / ( xkmort + tr n(ji,jj,jk,jpphy) ) * zsizerat104 ztortp = mprat * xstep * zcompaph / ( xkmort + trb(ji,jj,jk,jpphy) ) * zsizerat 105 105 106 106 zmortp = zrespp + ztortp … … 108 108 ! Update the arrays TRA which contains the biological sources and sinks 109 109 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)110 zfactfe = trb(ji,jj,jk,jpnfe)/(trb(ji,jj,jk,jpphy)+rtrn) 111 zfactch = trb(ji,jj,jk,jpnch)/(trb(ji,jj,jk,jpphy)+rtrn) 112 112 tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) - zmortp 113 113 tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) - zmortp * zfactch … … 172 172 DO ji = 1, jpi 173 173 174 zcompadi = MAX( ( tr n(ji,jj,jk,jpdia) - 1e-9), 0. )174 zcompadi = MAX( ( trb(ji,jj,jk,jpdia) - 1e-9), 0. ) 175 175 176 176 ! Aggregation term for diatoms is increased in case of nutrient … … 186 186 zlim2 = xlimdia(ji,jj,jk) * xlimdia(ji,jj,jk) 187 187 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)188 zrespp2 = 1.e6 * zstep * ( wchld + wchldm * zlim1 ) * xdiss(ji,jj,jk) * zcompadi * trb(ji,jj,jk,jpdia) 189 189 190 190 ! Phytoplankton mortality. 191 191 ! ------------------------ 192 ztortp2 = mprat2 * zstep * tr n(ji,jj,jk,jpdia) / ( xkmort + trn(ji,jj,jk,jpdia) ) * zcompadi192 ztortp2 = mprat2 * zstep * trb(ji,jj,jk,jpdia) / ( xkmort + trb(ji,jj,jk,jpdia) ) * zcompadi 193 193 194 194 zmortp2 = zrespp2 + ztortp2 … … 196 196 ! Update the arrays tra which contains the biological sources and sinks 197 197 ! --------------------------------------------------------------------- 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 )198 zfactch = trb(ji,jj,jk,jpdch) / ( trb(ji,jj,jk,jpdia) + rtrn ) 199 zfactfe = trb(ji,jj,jk,jpdfe) / ( trb(ji,jj,jk,jpdia) + rtrn ) 200 zfactsi = trb(ji,jj,jk,jpdsi) / ( trb(ji,jj,jk,jpdia) + rtrn ) 201 201 tra(ji,jj,jk,jpdia) = tra(ji,jj,jk,jpdia) - zmortp2 202 202 tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) - zmortp2 * zfactch -
branches/2015/dev_r5204_CNRS_PISCES_dcy/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zopt.F90
r5236 r5348 60 60 CONTAINS 61 61 62 SUBROUTINE p4z_opt( kt, jnt )62 SUBROUTINE p4z_opt( kt, knt ) 63 63 !!--------------------------------------------------------------------- 64 64 !! *** ROUTINE p4z_opt *** … … 70 70 !!--------------------------------------------------------------------- 71 71 ! 72 INTEGER, INTENT(in) :: kt, jnt ! ocean time step72 INTEGER, INTENT(in) :: kt, knt ! ocean time step 73 73 ! 74 74 INTEGER :: ji, jj, jk … … 86 86 CALL wrk_alloc( jpi, jpj, jpk, zpar, ze0, ze1, ze2, ze3 ) 87 87 88 IF( jnt == 1 .AND. ln_varpar ) CALL p4z_opt_sbc( kt )88 IF( knt == 1 .AND. ln_varpar ) CALL p4z_opt_sbc( kt ) 89 89 90 90 ! Initialisation of variables used to compute PAR … … 99 99 !CDIR NOVERRCHK 100 100 DO ji = 1, jpi 101 zchl = ( tr n(ji,jj,jk,jpnch) + trn(ji,jj,jk,jpdch) + rtrn ) * 1.e6101 zchl = ( trb(ji,jj,jk,jpnch) + trb(ji,jj,jk,jpdch) + rtrn ) * 1.e6 102 102 zchl = MIN( 10. , MAX( 0.05, zchl ) ) 103 103 irgb = NINT( 41 + 20.* LOG10( zchl ) + rtrn ) … … 214 214 ! 215 215 IF( lk_iomput ) THEN 216 IF( jnt == nrdttrc) THEN216 IF( knt == nrdttrc ) THEN 217 217 IF( iom_use( "Heup" ) ) CALL iom_put( "Heup" , heup(:,: ) * tmask(:,:,1) ) ! euphotic layer deptht 218 218 IF( iom_use( "PARDM" ) ) CALL iom_put( "PARDM", zpar(:,:,:) * tmask(:,:,:) ) ! Photosynthetically Available Radiation -
branches/2015/dev_r5204_CNRS_PISCES_dcy/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zprod.F90
r5206 r5348 64 64 CONTAINS 65 65 66 SUBROUTINE p4z_prod( kt , jnt )66 SUBROUTINE p4z_prod( kt , knt ) 67 67 !!--------------------------------------------------------------------- 68 68 !! *** ROUTINE p4z_prod *** … … 74 74 !!--------------------------------------------------------------------- 75 75 ! 76 INTEGER, INTENT(in) :: kt, jnt76 INTEGER, INTENT(in) :: kt, knt 77 77 ! 78 78 INTEGER :: ji, jj, jk … … 160 160 ztn = MAX( 0., tsn(ji,jj,jk,jp_tem) - 15. ) 161 161 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) - zconctemp162 zconctemp = MAX( 0.e0 , trb(ji,jj,jk,jpdia) - xsizedia ) 163 zconctemp2 = trb(ji,jj,jk,jpdia) - zconctemp 164 164 znanotot = enano(ji,jj,jk) * zstrn(ji,jj) 165 165 zdiattot = ediat(ji,jj,jk) * zstrn(ji,jj) 166 166 ! 167 167 zpislopead (ji,jj,jk) = pislope * ( 1.+ zadap * EXP( -znanotot ) ) & 168 & * tr n(ji,jj,jk,jpnch) /( trn(ji,jj,jk,jpphy) * 12. + rtrn)168 & * trb(ji,jj,jk,jpnch) /( trb(ji,jj,jk,jpphy) * 12. + rtrn) 169 169 ! 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)170 zpislopead2(ji,jj,jk) = (pislope * zconctemp2 + pislope2 * zconctemp) / ( trb(ji,jj,jk,jpdia) + rtrn ) & 171 & * trb(ji,jj,jk,jpdch) /( trb(ji,jj,jk,jpdia) * 12. + rtrn) 172 172 173 173 ! Computation of production function for Carbon … … 199 199 ztn = MAX( 0., tsn(ji,jj,jk,jp_tem) - 15. ) 200 200 zadap = ztn / ( 2.+ ztn ) 201 zconctemp = MAX( 0.e0 , tr n(ji,jj,jk,jpdia) - xsizedia )202 zconctemp2 = tr n(ji,jj,jk,jpdia) - zconctemp201 zconctemp = MAX( 0.e0 , trb(ji,jj,jk,jpdia) - xsizedia ) 202 zconctemp2 = trb(ji,jj,jk,jpdia) - zconctemp 203 203 ! 204 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 ) &205 zpislopead2(ji,jj,jk) = (pislope * zconctemp2 + pislope2 * zconctemp) / ( trb(ji,jj,jk,jpdia) + rtrn ) 206 207 zpislopen = zpislopead(ji,jj,jk) * trb(ji,jj,jk,jpnch) & 208 & / ( trb(ji,jj,jk,jpphy) * 12. + rtrn ) & 209 209 & / ( prmax(ji,jj,jk) * rday * xlimphy(ji,jj,jk) + rtrn ) 210 210 211 zpislope2n = zpislopead2(ji,jj,jk) * tr n(ji,jj,jk,jpdch) &212 & / ( tr n(ji,jj,jk,jpdia) * 12. + rtrn ) &211 zpislope2n = zpislopead2(ji,jj,jk) * trb(ji,jj,jk,jpdch) & 212 & / ( trb(ji,jj,jk,jpdia) * 12. + rtrn ) & 213 213 & / ( prmax(ji,jj,jk) * rday * xlimdia(ji,jj,jk) + rtrn ) 214 214 … … 258 258 ! Si/C is arbitrariliy increased for very high Si concentrations 259 259 ! 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 )260 zlim = trb(ji,jj,jk,jpsil) / ( trb(ji,jj,jk,jpsil) + xksi1 ) 261 261 zsilim = MIN( zprdia(ji,jj,jk) / ( prmax(ji,jj,jk) + rtrn ), xlimsi(ji,jj,jk) ) 262 262 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)263 zsiborn = trb(ji,jj,jk,jpsil) * trb(ji,jj,jk,jpsil) * trb(ji,jj,jk,jpsil) 264 264 IF (gphit(ji,jj) < -30 ) THEN 265 265 zsilfac2 = 1. + 2. * zsiborn / ( zsiborn + xksi2**3 ) … … 304 304 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 305 305 ! production terms for nanophyto. 306 zprorca(ji,jj,jk) = zprbio(ji,jj,jk) * xlimphy(ji,jj,jk) * tr n(ji,jj,jk,jpphy) * rfact2306 zprorca(ji,jj,jk) = zprbio(ji,jj,jk) * xlimphy(ji,jj,jk) * trb(ji,jj,jk,jpphy) * rfact2 307 307 zpronew(ji,jj,jk) = zprorca(ji,jj,jk) * xnanono3(ji,jj,jk) / ( xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) + rtrn ) 308 308 ! 309 zratio = tr n(ji,jj,jk,jpnfe) / ( trn(ji,jj,jk,jpphy) + rtrn )309 zratio = trb(ji,jj,jk,jpnfe) / ( trb(ji,jj,jk,jpphy) + rtrn ) 310 310 zratio = zratio / fecnm 311 311 zmax = MAX( 0., ( 1. - zratio ) / ABS( 1.05 - zratio ) ) … … 313 313 & * ( 4. - 4.5 * xlimnfe(ji,jj,jk) / ( xlimnfe(ji,jj,jk) + 0.5 ) ) & 314 314 & * biron(ji,jj,jk) / ( biron(ji,jj,jk) + concnfe(ji,jj,jk) ) & 315 & * zmax * tr n(ji,jj,jk,jpphy) * rfact2315 & * zmax * trb(ji,jj,jk,jpphy) * rfact2 316 316 ! production terms for diatomees 317 zprorcad(ji,jj,jk) = zprdia(ji,jj,jk) * xlimdia(ji,jj,jk) * tr n(ji,jj,jk,jpdia) * rfact2317 zprorcad(ji,jj,jk) = zprdia(ji,jj,jk) * xlimdia(ji,jj,jk) * trb(ji,jj,jk,jpdia) * rfact2 318 318 zpronewd(ji,jj,jk) = zprorcad(ji,jj,jk) * xdiatno3(ji,jj,jk) / ( xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) + rtrn ) 319 319 ! 320 zratio = tr n(ji,jj,jk,jpdfe) / ( trn(ji,jj,jk,jpdia) + rtrn )320 zratio = trb(ji,jj,jk,jpdfe) / ( trb(ji,jj,jk,jpdia) + rtrn ) 321 321 zratio = zratio / fecdm 322 322 zmax = MAX( 0., ( 1. - zratio ) / ABS( 1.05 - zratio ) ) … … 324 324 & * ( 4. - 4.5 * xlimdfe(ji,jj,jk) / ( xlimdfe(ji,jj,jk) + 0.5 ) ) & 325 325 & * biron(ji,jj,jk) / ( biron(ji,jj,jk) + concdfe(ji,jj,jk) ) & 326 & * zmax * tr n(ji,jj,jk,jpdia) * rfact2326 & * zmax * trb(ji,jj,jk,jpdia) * rfact2 327 327 ENDIF 328 328 END DO … … 368 368 ! production terms for nanophyto. ( chlorophyll ) 369 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)370 zprod = rday * zprorca(ji,jj,jk) * zprnch(ji,jj,jk) * trb(ji,jj,jk,jpphy) * xlimphy(ji,jj,jk) 371 371 zprochln(ji,jj,jk) = chlcmin * 12. * zprorca (ji,jj,jk) 372 372 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 )373 & / ( zpislopead(ji,jj,jk) * trb(ji,jj,jk,jpnch) * znanotot +rtrn ) 374 374 ! production terms for diatomees ( chlorophyll ) 375 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)376 zprod = rday * zprorcad(ji,jj,jk) * zprdch(ji,jj,jk) * trb(ji,jj,jk,jpdia) * xlimdia(ji,jj,jk) 377 377 zprochld(ji,jj,jk) = chlcmin * 12. * zprorcad(ji,jj,jk) 378 378 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 )379 & / ( zpislopead2(ji,jj,jk) * trb(ji,jj,jk,jpdch) * zdiattot +rtrn ) 380 380 ENDIF 381 381 END DO … … 414 414 415 415 ! Total primary production per year 416 IF( iom_use( "tintpp" ) .OR. ( ln_check_mass .AND. kt == nitend .AND. jnt == nrdttrc ) ) &416 IF( iom_use( "tintpp" ) .OR. ( ln_check_mass .AND. kt == nitend .AND. knt == nrdttrc ) ) & 417 417 & tpp = glob_sum( ( zprorca(:,:,:) + zprorcad(:,:,:) ) * cvol(:,:,:) ) 418 418 419 419 IF( lk_iomput ) THEN 420 IF( jnt == nrdttrc ) THEN420 IF( knt == nrdttrc ) THEN 421 421 CALL wrk_alloc( jpi, jpj, zw2d ) 422 422 CALL wrk_alloc( jpi, jpj, jpk, zw3d ) -
branches/2015/dev_r5204_CNRS_PISCES_dcy/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zrem.F90
r4996 r5348 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/2015/dev_r5204_CNRS_PISCES_dcy/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsbc.F90
r5315 r5348 188 188 INTEGER :: ios ! Local integer output status for namelist read 189 189 INTEGER :: ik50 ! last level where depth less than 50 m 190 INTEGER :: 190 INTEGER :: isrow ! index for ORCA1 starting row 191 191 REAL(wp) :: zexpide, zdenitide, zmaskt 192 192 REAL(wp) :: ztimes_dust, ztimes_riv, ztimes_ndep … … 476 476 477 477 ii0 = 357 ; ii1 = 357 ! Southern Island : Kerguelen 478 ij0 = 75 + is wrow ; ij1 = 76 + iswrow478 ij0 = 75 + isrow ; ij1 = 76 + isrow 479 479 zcmask( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1), 1:jpk ) = 0.3_wp 480 480 ! 481 481 ii0 = 243 ; ii1 = 243 ! South Georgia 482 ij0 = 57 + is wrow ; ij1 = 59 + iswrow482 ij0 = 57 + isrow ; ij1 = 59 + isrow 483 483 zcmask( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1), 1:jpk ) = 0.3_wp 484 484 ! 485 485 ii0 = 227 ; ii1 = 227 ! Falklands 486 ij0 = 71 + is wrow ; ij1 = 73 + iswrow486 ij0 = 71 + isrow ; ij1 = 73 + isrow 487 487 zcmask( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1), 1:jpk ) = 0.3_wp 488 488 ! 489 489 ii0 = 326 ; ii1 = 327 ! Crozet 490 ij0 = 79 + is wrow ; ij1 = 79 + iswrow490 ij0 = 79 + isrow ; ij1 = 79 + isrow 491 491 zcmask( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1), 1:jpk ) = 0.3_wp 492 492 ! 493 493 ii0 = 243 ; ii1 = 243 ! South Orkney 494 ij0 = 56 + is wrow ; ij1 = 56 + iswrow494 ij0 = 56 + isrow ; ij1 = 56 + isrow 495 495 zcmask( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1), 1:jpk ) = 0.3_wp 496 496 ! 497 497 ii0 = 283 ; ii1 = 286 ! Bouvet Island 498 ij0 = 66 + is wrow ; ij1 = 66 + iswrow498 ij0 = 66 + isrow ; ij1 = 66 + isrow 499 499 zcmask( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1), 1:jpk ) = 0.3_wp 500 500 ! 501 501 ii0 = 361 ; ii1 = 361 ! Prince edwards 502 ij0 = 67 + is wrow ; ij1 = 68 + iswrow502 ij0 = 67 + isrow ; ij1 = 68 + isrow 503 503 zcmask( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1), 1:jpk ) = 0.3_wp 504 504 ! 505 505 ii0 = 91 ; ii1 = 92 ! Balleny islands 506 ij0 = 42 + is wrow ; ij1 = 43 + iswrow506 ij0 = 42 + isrow ; ij1 = 43 + isrow 507 507 zcmask( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1), 1:jpk ) = 0.3_wp 508 508 ! -
branches/2015/dev_r5204_CNRS_PISCES_dcy/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsed.F90
r5206 r5348 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 37 INTEGER :: numnit38 39 39 40 40 !!* Substitution … … 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 … … 170 164 DO ji = 1, jpi 171 165 DO jk = 1, nk_rnf(ji,jj) 172 tr n(ji,jj,jk,jppo4) = trn(ji,jj,jk,jppo4) + rivdip(ji,jj) * rfact2173 tr n(ji,jj,jk,jpno3) = trn(ji,jj,jk,jpno3) + rivdin(ji,jj) * rfact2174 tr n(ji,jj,jk,jpfer) = trn(ji,jj,jk,jpfer) + rivdic(ji,jj) * 5.e-5 * rfact2175 tr n(ji,jj,jk,jpsil) = trn(ji,jj,jk,jpsil) + rivdsi(ji,jj) * rfact2176 tr n(ji,jj,jk,jpdic) = trn(ji,jj,jk,jpdic) + rivdic(ji,jj) * rfact2177 tr n(ji,jj,jk,jptal) = trn(ji,jj,jk,jptal) + ( rivalk(ji,jj) - rno3 * rivdin(ji,jj) ) * rfact2166 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 178 172 ENDDO 179 173 ENDDO … … 184 178 ! ---------------------------------------------------------- 185 179 IF( ln_ndepo ) THEN 186 tr n(:,:,1,jpno3) = trn(:,:,1,jpno3) + nitdep(:,:) * rfact2187 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 188 182 ENDIF 189 183 … … 191 185 ! ------------------------------------------------------ 192 186 IF( ln_ironsed ) THEN 193 tr n(:,:,:,jpfer) = trn(:,:,:,jpfer) + ironsed(:,:,:) * rfact2187 tra(:,:,:,jpfer) = tra(:,:,:,jpfer) + ironsed(:,:,:) * rfact2 194 188 ! 195 IF( lk_iomput .AND. jnt == nrdttrc .AND. iom_use( "Ironsed" ) ) &189 IF( lk_iomput .AND. knt == nrdttrc .AND. iom_use( "Ironsed" ) ) & 196 190 & CALL iom_put( "Ironsed", ironsed(:,:,:) * 1.e+3 * tmask(:,:,:) ) ! iron inputs from sediments 197 191 ENDIF … … 200 194 ! ------------------------------------------------------ 201 195 IF( ln_hydrofe ) THEN 202 tr n(:,:,:,jpfer) = trn(:,:,:,jpfer) + hydrofe(:,:,:) * rfact2196 tra(:,:,:,jpfer) = tra(:,:,:,jpfer) + hydrofe(:,:,:) * rfact2 203 197 ! 204 IF( lk_iomput .AND. jnt == nrdttrc .AND. iom_use( "HYDR" ) ) &198 IF( lk_iomput .AND. knt == nrdttrc .AND. iom_use( "HYDR" ) ) & 205 199 & CALL iom_put( "HYDR", hydrofe(:,:,:) * 1.e+3 * tmask(:,:,:) ) ! hydrothermal iron input 206 200 ENDIF … … 228 222 ikt = mbkt(ji,jj) 229 223 # if defined key_kriest 230 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 231 225 # else 232 zflx = ( tr n(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj) &233 & + 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 234 228 #endif 235 229 zflx = LOG10( MAX( 1E-3, zflx ) ) 236 zo2 = LOG10( MAX( 10. , tr n(ji,jj,ikt,jpoxy) * 1E6 ) )237 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 ) ) 238 232 zdep = LOG10( fsdepw(ji,jj,ikt+1) ) 239 233 zdenit2d(ji,jj) = -2.2567 - 1.185 * zflx - 0.221 * zflx**2 - 0.3995 * zno3 * zo2 + 1.25 * zno3 & … … 241 235 zdenit2d(ji,jj) = 10.0**( zdenit2d(ji,jj) ) 242 236 ! 243 zflx = ( tr n(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj) &244 & + 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 245 239 zbureff(ji,jj) = 0.013 + 0.53 * zflx**2 / ( 7.0 + zflx )**2 246 240 ENDIF … … 257 251 ikt = mbkt(ji,jj) 258 252 # if defined key_kriest 259 zwork1(ji,jj) = tr n(ji,jj,ikt,jpgsi) * zwscal (ji,jj)260 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) 261 255 # else 262 zwork1(ji,jj) = tr n(ji,jj,ikt,jpgsi) * zwsbio4(ji,jj)263 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) 264 258 # endif 265 259 ! For calcite, burial efficiency is made a function of saturation 266 260 zfactcal = MIN( excess(ji,jj,ikt), 0.2 ) 267 261 zfactcal = MIN( 1., 1.3 * ( 0.2 - zfactcal ) / ( 0.4 - zfactcal ) ) 268 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 269 263 ENDIF 270 264 END DO … … 285 279 DO ji = 1, jpi 286 280 ikt = mbkt(ji,jj) 287 zdep = xstep / fse3t(ji,jj,ikt) 281 zdep = xstep / fse3t(ji,jj,ikt) 288 282 zws4 = zwsbio4(ji,jj) * zdep 289 283 zwsc = zwscal (ji,jj) * zdep 290 284 # if defined key_kriest 291 zsiloss = tr n(ji,jj,ikt,jpgsi) * zws4285 zsiloss = trb(ji,jj,ikt,jpgsi) * zws4 292 286 # else 293 zsiloss = tr n(ji,jj,ikt,jpgsi) * zwsc287 zsiloss = trb(ji,jj,ikt,jpgsi) * zwsc 294 288 # endif 295 zcaloss = tr n(ji,jj,ikt,jpcal) * zwsc289 zcaloss = trb(ji,jj,ikt,jpcal) * zwsc 296 290 ! 297 tr n(ji,jj,ikt,jpgsi) = trn(ji,jj,ikt,jpgsi) - zsiloss298 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 299 293 #if ! defined key_sed 300 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 301 295 zfactcal = MIN( excess(ji,jj,ikt), 0.2 ) 302 296 zfactcal = MIN( 1., 1.3 * ( 0.2 - zfactcal ) / ( 0.4 - zfactcal ) ) 303 297 zrivalk = 1._wp - ( rivalkinput * r1_ryyss ) * zfactcal / ( zsumsedcal + rtrn ) 304 tr n(ji,jj,ikt,jptal) = trn(ji,jj,ikt,jptal) + zcaloss * zrivalk * 2.0305 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 306 300 #endif 307 301 END DO … … 310 304 DO jj = 1, jpj 311 305 DO ji = 1, jpi 312 ikt 313 zdep = xstep / fse3t(ji,jj,ikt)306 ikt = mbkt(ji,jj) 307 zdep = xstep / fse3t(ji,jj,ikt) 314 308 zws4 = zwsbio4(ji,jj) * zdep 315 309 zws3 = zwsbio3(ji,jj) * zdep 316 310 zrivno3 = 1. - zbureff(ji,jj) 317 311 # if ! defined key_kriest 318 tr n(ji,jj,ikt,jpgoc) = trn(ji,jj,ikt,jpgoc) - trn(ji,jj,ikt,jpgoc) * zws4319 tr n(ji,jj,ikt,jppoc) = trn(ji,jj,ikt,jppoc) - trn(ji,jj,ikt,jppoc) * zws3320 tr n(ji,jj,ikt,jpbfe) = trn(ji,jj,ikt,jpbfe) - trn(ji,jj,ikt,jpbfe) * zws4321 tr n(ji,jj,ikt,jpsfe) = trn(ji,jj,ikt,jpsfe) - trn(ji,jj,ikt,jpsfe) * zws3322 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 323 317 # else 324 tr n(ji,jj,ikt,jpnum) = trn(ji,jj,ikt,jpnum) - trn(ji,jj,ikt,jpnum) * zws4325 tr n(ji,jj,ikt,jppoc) = trn(ji,jj,ikt,jppoc) - trn(ji,jj,ikt,jppoc) * zws3326 tr n(ji,jj,ikt,jpsfe) = trn(ji,jj,ikt,jpsfe) - trn(ji,jj,ikt,jpsfe) * zws3327 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 328 322 # endif 329 323 … … 331 325 ! The 0.5 factor in zpdenit and zdenitt is to avoid negative NO3 concentration after both denitrification 332 326 ! in the sediments and just above the sediments. Not very clever, but simpliest option. 333 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 ) 334 328 z1pdenit = zwstpoc * zrivno3 - zpdenit 335 zolimit = MIN( ( tr n(ji,jj,ikt,jpoxy) - rtrn ) / o2ut, z1pdenit * ( 1.- nitrfac(ji,jj,ikt) ) )336 zdenitt = MIN( 0.5 * ( tr n(ji,jj,ikt,jpno3) - rtrn ) / rdenit, z1pdenit * nitrfac(ji,jj,ikt) )337 tr n(ji,jj,ikt,jpdoc) = trn(ji,jj,ikt,jpdoc) + z1pdenit - zolimit - zdenitt338 tr n(ji,jj,ikt,jppo4) = trn(ji,jj,ikt,jppo4) + zpdenit + zolimit + zdenitt339 tr n(ji,jj,ikt,jpnh4) = trn(ji,jj,ikt,jpnh4) + zpdenit + zolimit + zdenitt340 tr n(ji,jj,ikt,jpno3) = trn(ji,jj,ikt,jpno3) - rdenit * (zpdenit + zdenitt)341 tr n(ji,jj,ikt,jpoxy) = trn(ji,jj,ikt,jpoxy) - zolimit * o2ut342 tr n(ji,jj,ikt,jptal) = trn(ji,jj,ikt,jptal) + rno3 * (zolimit + (1.+rdenit) * (zpdenit + zdenitt) )343 tr n(ji,jj,ikt,jpdic) = trn(ji,jj,ikt,jpdic) + zpdenit + zolimit + zdenitt344 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) 345 339 #endif 346 340 END DO … … 362 356 #endif 363 357 ztrfer = biron(ji,jj,jk) / ( concfediaz + biron(ji,jj,jk) ) 364 ztrpo4 = tr n (ji,jj,jk,jppo4) / ( concnnh4 + trn(ji,jj,jk,jppo4) )358 ztrpo4 = trb (ji,jj,jk,jppo4) / ( concnnh4 + trb (ji,jj,jk,jppo4) ) 365 359 zlight = ( 1.- EXP( -etot_ndcy(ji,jj,jk) / diazolight ) ) 366 znitrpot(ji,jj,jk) = MAX( 0.e0, ( 0.6 * tgfunc(ji,jj,jk) - 2.15 ) * r1_rday ) &360 nitrpot(ji,jj,jk) = MAX( 0.e0, ( 0.6 * tgfunc(ji,jj,jk) - 2.15 ) * r1_rday ) & 367 361 & * zfact * MIN( ztrfer, ztrpo4 ) * zlight 368 362 zsoufer(ji,jj,jk) = zlight * 2E-11 / (2E-11 + biron(ji,jj,jk)) … … 376 370 DO jj = 1, jpj 377 371 DO ji = 1, jpi 378 zfact = znitrpot(ji,jj,jk) * nitrfix379 tr n(ji,jj,jk,jpnh4) = trn(ji,jj,jk,jpnh4) + zfact380 tr n(ji,jj,jk,jptal) = trn(ji,jj,jk,jptal) + rno3 * zfact381 tr n(ji,jj,jk,jpoxy) = trn(ji,jj,jk,jpoxy) + o2nit * zfact382 tr n(ji,jj,jk,jppo4) = trn(ji,jj,jk,jppo4) + concdnh4 / ( concdnh4 + trn(ji,jj,jk,jppo4) ) &383 & * 0.002 * tr n(ji,jj,jk,jpdoc) * rfact2 / rday384 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 385 379 END DO 386 380 END DO 387 381 END DO 388 382 389 ! Global budget of N SMS : denitrification in the water column and in the sediment390 ! nitrogen fixation by the diazotrophs391 ! --------------------------------------------------------------------------------392 zrdenittot = glob_sum ( denitr(:,:,:) * rdenit * xnegtr(:,:,:) * cvol(:,:,:) )393 zsdenittot = glob_sum ( zwork4(:,:) * e1e2t(:,:) )394 znitrpottot = glob_sum ( znitrpot(:,:,:) * nitrfix * cvol(:,:,:) )395 zfact = 1.e+3 * rfact2r * rno3 * 14. / 1.e12 * ryyss ! conversion molC/l/kt ----> TgN/m3/year396 !397 IF( ln_check_mass .AND. ( kt == nitend .AND. jnt == nrdttrc ) .AND. ( lwp ) ) &398 & WRITE(numnit,9100) ndastp, znitrpottot * zfact , &399 & zrdenittot * zfact , &400 & zsdenittot * zfact401 !402 383 IF( lk_iomput ) THEN 403 IF( jnt == nrdttrc ) THEN384 IF( knt == nrdttrc ) THEN 404 385 zfact = 1.e+3 * rfact2r * rno3 ! conversion from molC/l/kt to molN/m3/s 405 IF( iom_use("Nfix" ) ) CALL iom_put( "Nfix" , znitrpot(:,:,:) * nitrfix * zfact * tmask(:,:,:) ) ! nitrogen fixation 406 IF( iom_use("Sdenit" ) ) CALL iom_put( "Sdenit", zwork4(:,:) * zfact * tmask(:,:,1) ) ! Nitrate reduction in the sediments 407 IF( iom_use("tnfix" ) ) CALL iom_put( "tnfix" , znitrpottot * zfact ) ! Global nitrogen fixation 408 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 409 387 IF( iom_use("INTNFIX") ) THEN ! nitrogen fixation rate in ocean ( vertically integrated ) 410 388 zwork1(:,:) = 0. 411 389 DO jk = 1, jpkm1 412 zwork1(:,:) = zwork1(:,:) + znitrpot(:,:,jk) * nitrfix * zfact * fse3t(:,:,jk) * tmask(:,:,jk)390 zwork1(:,:) = zwork1(:,:) + nitrpot(:,:,jk) * nitrfix * zfact * fse3t(:,:,jk) * tmask(:,:,jk) 413 391 ENDDO 414 392 CALL iom_put( "INTNFIX" , zwork1 ) … … 417 395 ELSE 418 396 IF( ln_diatrc ) & 419 & 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) 420 398 ENDIF 421 399 ! … … 423 401 WRITE(charout, fmt="('sed ')") 424 402 CALL prt_ctl_trc_info(charout) 425 CALL prt_ctl_trc(tab4d=tr n, mask=tmask, clinfo=ctrcnm)426 ENDIF 427 ! 428 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 ) 429 407 CALL wrk_dealloc( jpi, jpj, zwsbio3, zwsbio4, zwscal ) 430 CALL wrk_dealloc( jpi, jpj, jpk, z nitrpot, zsoufer )408 CALL wrk_dealloc( jpi, jpj, jpk, zsoufer ) 431 409 ! 432 410 IF( nn_timing == 1 ) CALL timing_stop('p4z_sed') … … 435 413 ! 436 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 437 427 438 428 #else -
branches/2015/dev_r5204_CNRS_PISCES_dcy/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsink.F90
r4996 r5348 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 ! -
branches/2015/dev_r5204_CNRS_PISCES_dcy/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsms.F90
r4996 r5348 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 40 39 REAL(wp) :: alkbudget, no3budget, silbudget, ferbudget, po4budget 40 REAL(wp) :: xfact1, xfact2 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 46 47 !! * Substitutions 48 # include "top_substitute.h90" 41 49 !!---------------------------------------------------------------------- 42 50 !! NEMO/TOP 3.3 , NEMO Consortium (2010) … … 61 69 INTEGER, INTENT( in ) :: kt ! ocean time-step index 62 70 !! 63 INTEGER :: jnt, jn, jl 71 INTEGER :: ji, jj, jk, jnt, jn, jl 72 REAL(wp) :: ztra 73 #if defined key_kriest 74 REAL(wp) :: zcoef1, zcoef2 75 #endif 64 76 CHARACTER (len=25) :: charout 65 REAL(wp), POINTER, DIMENSION(:,:,:,:) :: ztrdpis66 77 !!--------------------------------------------------------------------- 67 78 ! 68 79 IF( nn_timing == 1 ) CALL timing_start('p4z_sms') 69 80 ! 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 81 IF( kt == nittrc000 ) THEN 82 ! 83 ALLOCATE( xnegtr(jpi,jpj,jpk) ) 79 84 ! 80 85 CALL p4z_che ! initialize the chemical constants … … 88 93 IF( ln_pisdmp .AND. MOD( kt - nn_dttrc, nn_pisdmp ) == 0 ) CALL p4z_dmp( kt ) ! Relaxation of some tracers 89 94 ! 95 ! ! set time step size (Euler/Leapfrog) 96 IF( ( neuler == 0 .AND. kt == nittrc000 ) .OR. ln_top_euler ) THEN ; rfact = rdttrc(1) ! at nittrc000 97 ELSEIF( kt <= nittrc000 + nn_dttrc ) THEN ; rfact = 2. * rdttrc(1) ! at nittrc000 or nittrc000+nn_dttrc (Leapfrog) 98 ENDIF 99 ! 100 IF( ( ln_top_euler .AND. kt == nittrc000 ) .OR. ( .NOT.ln_top_euler .AND. kt == nittrc000 + nn_dttrc ) ) THEN 101 rfactr = 1. / rfact 102 rfact2 = rfact / FLOAT( nrdttrc ) 103 rfact2r = 1. / rfact2 104 xstep = rfact2 / rday ! Time step duration for biology 105 IF(lwp) WRITE(numout,*) 106 IF(lwp) WRITE(numout,*) ' Passive Tracer time step rfact = ', rfact, ' rdt = ', rdttra(1) 107 IF(lwp) write(numout,*) ' PISCES Biology time step rfact2 = ', rfact2 108 IF(lwp) WRITE(numout,*) 109 ENDIF 110 111 IF( ( neuler == 0 .AND. kt == nittrc000 ) .OR. ln_top_euler ) THEN 112 DO jn = jp_pcs0, jp_pcs1 ! SMS on tracer without Asselin time-filter 113 trb(:,:,:,jn) = trn(:,:,:,jn) 114 END DO 115 ENDIF 116 ! 90 117 IF( ndayflxtr /= nday_year ) THEN ! New days 91 118 ! … … 105 132 DO jnt = 1, nrdttrc ! Potential time splitting if requested 106 133 ! 107 CALL p4z_bio (kt, jnt) ! Biology 108 CALL p4z_sed (kt, jnt) ! Sedimentation 109 ! 134 CALL p4z_bio( kt, jnt ) ! Biology 135 CALL p4z_sed( kt, jnt ) ! Sedimentation 136 CALL p4z_lys( kt, jnt ) ! Compute CaCO3 saturation 137 CALL p4z_flx( kt, jnt ) ! Compute surface fluxes 138 ! 139 xnegtr(:,:,:) = 1.e0 110 140 DO jn = jp_pcs0, jp_pcs1 111 trb(:,:,:,jn) = trn(:,:,:,jn) 112 ENDDO 113 ! 141 DO jk = 1, jpk 142 DO jj = 1, jpj 143 DO ji = 1, jpi 144 IF( ( trb(ji,jj,jk,jn) + tra(ji,jj,jk,jn) ) < 0.e0 ) THEN 145 ztra = ABS( trb(ji,jj,jk,jn) ) / ( ABS( tra(ji,jj,jk,jn) ) + rtrn ) 146 xnegtr(ji,jj,jk) = MIN( xnegtr(ji,jj,jk), ztra ) 147 ENDIF 148 END DO 149 END DO 150 END DO 151 END DO 152 ! ! where at least 1 tracer concentration becomes negative 153 ! ! 154 DO jn = jp_pcs0, jp_pcs1 155 trb(:,:,:,jn) = trb(:,:,:,jn) + xnegtr(:,:,:) * tra(:,:,:,jn) 156 END DO 157 ! 158 DO jn = jp_pcs0, jp_pcs1 159 tra(:,:,:,jn) = 0._wp 160 END DO 161 ! 162 IF( ln_top_euler ) THEN 163 DO jn = jp_pcs0, jp_pcs1 164 trn(:,:,:,jn) = trb(:,:,:,jn) 165 END DO 166 ENDIF 114 167 END DO 115 168 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. ) 169 #if defined key_kriest 170 ! 171 zcoef1 = 1.e0 / xkr_massp 172 zcoef2 = 1.e0 / xkr_massp / 1.1 173 DO jk = 1,jpkm1 174 trb(:,:,jk,jpnum) = MAX( trb(:,:,jk,jpnum), trb(:,:,jk,jppoc) * zcoef1 / xnumm(jk) ) 175 trb(:,:,jk,jpnum) = MIN( trb(:,:,jk,jpnum), trb(:,:,jk,jppoc) * zcoef2 ) 129 176 END DO 130 177 ! 178 #endif 179 ! 180 ! 181 IF( l_trdtrc ) THEN 182 DO jn = jp_pcs0, jp_pcs1 183 CALL trd_trc( tra(:,:,:,jn), jn, jptra_sms, kt ) ! save trends 184 END DO 185 END IF 186 ! 131 187 IF( lk_sed ) THEN 132 188 ! … … 134 190 ! 135 191 DO jn = jp_pcs0, jp_pcs1 136 CALL lbc_lnk( tr n(:,:,:,jn), 'T', 1. )192 CALL lbc_lnk( trb(:,:,:,jn), 'T', 1. ) 137 193 END DO 138 194 ! … … 141 197 IF( lrst_trc ) CALL p4z_rst( kt, 'WRITE' ) !* Write PISCES informations in restart file 142 198 ! 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 ! 199 152 200 IF( lk_iomput .OR. ln_check_mass ) CALL p4z_chk_mass( kt ) ! Mass conservation checking 153 201 … … 280 328 ztmas = tmask(ji,jj,jk) 281 329 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 )330 zcaralk = trb(ji,jj,jk,jptal) - borat(ji,jj,jk) / ( 1. + 1.E-8 / ( rtrn + akb3(ji,jj,jk) ) ) 331 zco3 = ( zcaralk - trb(ji,jj,jk,jpdic) ) * ztmas + 0.5e-3 * ztmas1 332 zbicarb = ( 2. * trb(ji,jj,jk,jpdic) - zcaralk ) 285 333 hi(ji,jj,jk) = ( ak23(ji,jj,jk) * zbicarb / zco3 ) * ztmas + 1.e-9 * ztmas1 286 334 END DO … … 361 409 REAL(wp) :: silmean = 91.51 ! mean value of silicate 362 410 ! 363 REAL(wp) :: zarea, zalksum, zpo4sum, zno3sum, zsilsum 411 REAL(wp) :: zarea, zalksumn, zpo4sumn, zno3sumn, zsilsumn 412 REAL(wp) :: zalksumb, zpo4sumb, zno3sumb, zsilsumb 364 413 !!--------------------------------------------------------------------- 365 414 … … 374 423 zarea = 1._wp / glob_sum( cvol(:,:,:) ) * 1e6 375 424 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(:,:,:) ) * zarea425 zalksumn = glob_sum( trn(:,:,:,jptal) * cvol(:,:,:) ) * zarea 426 zpo4sumn = glob_sum( trn(:,:,:,jppo4) * cvol(:,:,:) ) * zarea * po4r 427 zno3sumn = glob_sum( trn(:,:,:,jpno3) * cvol(:,:,:) ) * zarea * rno3 428 zsilsumn = glob_sum( trn(:,:,:,jpsil) * cvol(:,:,:) ) * zarea 380 429 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 430 IF(lwp) WRITE(numout,*) ' TALKN mean : ', zalksumn 431 trn(:,:,:,jptal) = trn(:,:,:,jptal) * alkmean / zalksumn 432 433 IF(lwp) WRITE(numout,*) ' PO4N mean : ', zpo4sumn 434 trn(:,:,:,jppo4) = trn(:,:,:,jppo4) * po4mean / zpo4sumn 435 436 IF(lwp) WRITE(numout,*) ' NO3N mean : ', zno3sumn 437 trn(:,:,:,jpno3) = trn(:,:,:,jpno3) * no3mean / zno3sumn 438 439 IF(lwp) WRITE(numout,*) ' SiO3N mean : ', zsilsumn 440 trn(:,:,:,jpsil) = MIN( 400.e-6,trn(:,:,:,jpsil) * silmean / zsilsumn ) 441 ! 442 ! 443 IF( .NOT. ln_top_euler ) THEN 444 zalksumb = glob_sum( trb(:,:,:,jptal) * cvol(:,:,:) ) * zarea 445 zpo4sumb = glob_sum( trb(:,:,:,jppo4) * cvol(:,:,:) ) * zarea * po4r 446 zno3sumb = glob_sum( trb(:,:,:,jpno3) * cvol(:,:,:) ) * zarea * rno3 447 zsilsumb = glob_sum( trb(:,:,:,jpsil) * cvol(:,:,:) ) * zarea 448 449 IF(lwp) WRITE(numout,*) ' ' 450 IF(lwp) WRITE(numout,*) ' TALKB mean : ', zalksumb 451 trb(:,:,:,jptal) = trb(:,:,:,jptal) * alkmean / zalksumb 452 453 IF(lwp) WRITE(numout,*) ' PO4B mean : ', zpo4sumb 454 trb(:,:,:,jppo4) = trb(:,:,:,jppo4) * po4mean / zpo4sumb 455 456 IF(lwp) WRITE(numout,*) ' NO3B mean : ', zno3sumb 457 trb(:,:,:,jpno3) = trb(:,:,:,jpno3) * no3mean / zno3sumb 458 459 IF(lwp) WRITE(numout,*) ' SiO3B mean : ', zsilsumb 460 trb(:,:,:,jpsil) = MIN( 400.e-6,trb(:,:,:,jpsil) * silmean / zsilsumb ) 461 ENDIF 462 ! 463 ENDIF 464 ! 395 465 END SUBROUTINE p4z_dmp 396 466 … … 406 476 INTEGER , INTENT( in ) :: kt ! ocean time-step index 407 477 REAL(wp) :: zfact 408 !! 478 REAL(wp) :: zrdenittot, zsdenittot, znitrpottot 479 CHARACTER(LEN=100) :: cltxt 480 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zvol 481 INTEGER :: jk 482 !!---------------------------------------------------------------------- 483 484 ! 409 485 !!--------------------------------------------------------------------- 410 486 … … 413 489 CALL ctl_opn( numco2, 'carbon.budget' , 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, 6, .FALSE., narea ) 414 490 CALL ctl_opn( numnut, 'nutrient.budget', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, 6, .FALSE., narea ) 491 CALL ctl_opn( numnit, 'nitrogen.budget', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, 6, .FALSE., narea ) 492 xfact1 = rfact2r * 12. / 1.e15 * ryyss ! conversion molC/kt --> PgC/yr 493 xfact2 = 1.e+3 * rno3 * 14. / 1.e12 * ryyss ! conversion molC/l/s ----> TgN/m3/yr 494 cltxt='time-step Alkalinity Nitrate Phosphorus Silicate Iron' 495 IF( lwp ) WRITE(numnut,*) TRIM(cltxt) 496 IF( lwp ) WRITE(numnut,*) 415 497 ENDIF 416 498 ENDIF 417 499 500 ! 418 501 IF( iom_use( "pno3tot" ) .OR. ( ln_check_mass .AND. kt == nitend ) ) THEN 419 502 ! Compute the budget of NO3, ALK, Si, Fer … … 431 514 ENDIF 432 515 ! 433 IF( iom_use( "psiltot" ) .OR. ( ln_check_mass .AND. kt == nitend ) ) THEN 516 IF( iom_use( "ppo4tot" ) .OR. ( ln_check_mass .AND. kt == nitend ) ) THEN 517 po4budget = glob_sum( ( trn(:,:,:,jppo4) & 518 & + trn(:,:,:,jpphy) + trn(:,:,:,jpdia) & 519 & + trn(:,:,:,jpzoo) + trn(:,:,:,jpmes) & 520 & + trn(:,:,:,jppoc) & 521 #if ! defined key_kriest 522 & + trn(:,:,:,jpgoc) & 523 #endif 524 & + trn(:,:,:,jpdoc) ) * cvol(:,:,:) ) 525 po4budget = po4budget / areatot 526 CALL iom_put( "ppo4tot", po4budget ) 527 ENDIF 528 ! 529 IF( iom_use( "psiltot" ) .OR. ( ln_check_mass .AND. kt == nitend ) ) THEN 434 530 silbudget = glob_sum( ( trn(:,:,:,jpsil) + trn(:,:,:,jpgsi) & 435 531 & + trn(:,:,:,jpdsi) ) * cvol(:,:,:) ) … … 439 535 ENDIF 440 536 ! 441 IF( iom_use( "palktot" ) .OR. 537 IF( iom_use( "palktot" ) .OR. ( ln_check_mass .AND. kt == nitend ) ) THEN 442 538 alkbudget = glob_sum( ( trn(:,:,:,jpno3) * rno3 & 443 539 & + trn(:,:,:,jptal) & … … 448 544 ENDIF 449 545 ! 450 IF( iom_use( "pfertot" ) .OR. 546 IF( iom_use( "pfertot" ) .OR. ( ln_check_mass .AND. kt == nitend ) ) THEN 451 547 ferbudget = glob_sum( ( trn(:,:,:,jpfer) + trn(:,:,:,jpnfe) & 452 548 & + trn(:,:,:,jpdfe) & … … 462 558 ENDIF 463 559 ! 560 561 ! Global budget of N SMS : denitrification in the water column and in the sediment 562 ! nitrogen fixation by the diazotrophs 563 ! -------------------------------------------------------------------------------- 564 IF( iom_use( "tnfix" ) .OR. ( ln_check_mass .AND. kt == nitend ) ) THEN 565 znitrpottot = glob_sum ( nitrpot(:,:,:) * nitrfix * cvol(:,:,:) ) 566 CALL iom_put( "tnfix" , znitrpottot * 1.e+3 * rno3 ) ! Global nitrogen fixation molC/l to molN/m3 567 ENDIF 568 ! 569 IF( iom_use( "tdenit" ) .OR. ( ln_check_mass .AND. kt == nitend ) ) THEN 570 zrdenittot = glob_sum ( denitr(:,:,:) * rdenit * xnegtr(:,:,:) * cvol(:,:,:) ) 571 CALL iom_put( "tdenit" , zrdenittot * 1.e+3 * rno3 ) ! Total denitrification molC/l to molN/m3 572 ENDIF 573 ! 574 IF( iom_use( "Sdenit" ) .OR. ( ln_check_mass .AND. kt == nitend ) ) THEN 575 zsdenittot = glob_sum ( sdenit(:,:) * e1e2t(:,:) ) 576 CALL iom_put( "Sdenit", sdenit(:,:) * zfact * tmask(:,:,1) ) ! Nitrate reduction in the sediments 577 ENDIF 578 464 579 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 580 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. * zfact581 t_oce_co2_flx = t_oce_co2_flx * xfact1 * (-1 ) 582 tpp = tpp * 1000. * xfact1 583 t_oce_co2_exp = t_oce_co2_exp * 1000. * xfact1 470 584 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, &585 IF( lwp ) WRITE(numnut,9100) ndastp, alkbudget * 1.e+06, & 472 586 & no3budget * rno3 * 1.e+06, & 587 & po4budget * po4r * 1.e+06, & 473 588 & silbudget * 1.e+06, & 474 589 & ferbudget * 1.e+09 590 ! 591 IF( lwp ) WRITE(numnit,9200) ndastp, znitrpottot * xfact2 , & 592 & zrdenittot * xfact2 , & 593 & zsdenittot * xfact2 594 475 595 ENDIF 476 596 ! 477 597 9000 FORMAT(i8,f10.5,e18.10,f10.5,f10.5) 478 9500 FORMAT(i8,4e18.10) 598 9100 FORMAT(i8,5e18.10) 599 9200 FORMAT(i8,3f10.5) 600 479 601 ! 480 602 END SUBROUTINE p4z_chk_mass -
branches/2015/dev_r5204_CNRS_PISCES_dcy/NEMOGCM/NEMO/TOP_SRC/PISCES/sms_pisces.F90
r4996 r5348 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/2015/dev_r5204_CNRS_PISCES_dcy/NEMOGCM/NEMO/TOP_SRC/PISCES/trcini_pisces.F90
r4996 r5348 71 71 USE p4zmort ! Mortality terms for phytoplankton 72 72 USE p4zlys ! Calcite saturation 73 USE p4zsed ! Sedimentation & burial 73 74 ! 74 75 REAL(wp), SAVE :: sco2 = 2.312e-3_wp … … 97 98 ierr = ierr + p4z_rem_alloc() 98 99 ierr = ierr + p4z_flx_alloc() 100 ierr = ierr + p4z_sed_alloc() 99 101 ! 100 102 IF( lk_mpp ) CALL mpp_sum( ierr ) … … 107 109 CALL p4z_sms_init ! Maint routine 108 110 ! ! 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 111 119 112 ! Set biological ratios … … 165 158 END IF 166 159 167 ! Time step duration for biology168 xstep = rfact2 / rday169 160 170 161 CALL p4z_sink_init ! vertical flux of particulate organic matter -
branches/2015/dev_r5204_CNRS_PISCES_dcy/NEMOGCM/SETTE/param.cfg
r4373 r5348 1 1 #- forcing files storing 2 FORCING_DIR= ~/FORCING2 FORCING_DIR=/workgpfs/rech/omr/romr006/FORCING 3 3 #- input files storing 4 4 INPUT_DIR=${CONFIG_DIR}/${NEW_CONF}/EXP00 … … 6 6 #TMPDIR=${CONFIG_DIR}/${NEW_CONF}/EXP00 7 7 #- VALIDATION files storing 8 NEMO_VALIDATION_DIR= ~/NEMO_VALIDATION8 NEMO_VALIDATION_DIR=/workgpfs/rech/omr/romr006/NEMO_VALIDATION
Note: See TracChangeset
for help on using the changeset viewer.