Changeset 6530
- Timestamp:
- 2016-05-13T14:28:44+02:00 (8 years ago)
- Location:
- branches/CNRS/dev_r6526_PISCES_GAS/NEMOGCM
- Files:
-
- 19 added
- 15 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/CNRS/dev_r6526_PISCES_GAS/NEMOGCM/CONFIG/cfg.txt
r6348 r6530 7 7 AMM12 OPA_SRC 8 8 ORCA2_OFF_PISCES OPA_SRC OFF_SRC TOP_SRC 9 ORCA2_OFF_PISCES_GAS OPA_SRC OFF_SRC TOP_SRC 9 10 ORCA2_LIM_PISCES OPA_SRC LIM_SRC_2 NST_SRC TOP_SRC 10 11 ORCA2_LIM3 OPA_SRC LIM_SRC_3 NST_SRC -
branches/CNRS/dev_r6526_PISCES_GAS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zche.F90
r6287 r6530 123 123 REAL(wp) :: devk53 = 0. 124 124 REAL(wp) :: devk54 = 0.0794E-3 125 REAL(wp) :: devk55 = 0.3692E-3 125 REAL(wp) :: devk55 = 0.3692E-3 126 127 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: chemn2o ! Solubility of N2O 128 REAL(wp), PUBLIC :: atn2o = 284.472 129 REAL(wp) :: nx0 130 REAL(wp) :: nx1 131 REAL(wp) :: nx2 132 REAL(wp) :: nx22 133 REAL(wp) :: nx3 134 REAL(wp) :: nx4 135 REAL(wp) :: nx5 136 ! 137 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: chemcos ! Solubilities of CO, COS and isoprene 138 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: k_hydr ! TL : constant for OCS hydrolysis 139 REAL(wp), PUBLIC :: atco = 90.e-9 ! units atm (90 ppbv) 140 REAL(wp), PUBLIC :: atisp = 0. ! 5.e-12 ! units atm 141 REAL(wp) :: coatm = 1. / ( 1.e+9 ) ! TEST LB 142 REAL(wp) :: ispatm = 1. / ( 1.e+9 * 17.e-12 ) ! conversion factor for nL --> L and 1/atco for units in atm-1 143 REAL(wp) :: co1 = -169.4951 ! Solubility constants for CO in nL/L 144 REAL(wp) :: co2 = 263.5657 ! (from Moist Air at 1 atm total Pressure) 145 REAL(wp) :: co3 = 159.2552 ! from Table VI for Eq 7 of Wiesenburg and Guinasso, 1979. 146 REAL(wp) :: co4 = -25.4967 147 REAL(wp) :: co5 = 0.051198 148 REAL(wp) :: co6 = -0.044591 149 REAL(wp) :: co7 = 0.0086462 150 151 REAL(wp) :: isp1 = -17.85 ! Solubility constants for isoprene in non-saline water 152 REAL(wp) :: isp2 = 4130. ! van't Hoff-type equation parameters; isp1 = dimensionless ; isp2 = K 153 ! from Mochalski et al., 2011 (Table 154 ! 1) 155 ! (J.Breath Res., 156 ! doi:10.1088/1752-7155/5/4/046010) 157 REAL(wp) :: cos1 = 12.722 ! Solubility constants for OCS in saline water 158 REAL(wp) :: cos2 = -3496. ! Johnson et Harrison JGR, VOL. 91, NO. D7, PAGES 7883-7888, JUNE 20, 1986 159 REAL(wp) :: cos_hydr5 = 4.19*1.e12 ! Kamyshn, 2003 160 REAL(wp) :: cos_hydr6 = -12110. ! 161 REAL(wp) :: cos_hydr7 = 1.41*1.e+18 ! 162 REAL(wp) :: cos_hydr8 = -11580. ! 163 REAL(wp) :: cos_hydr1 = 24.3 ! Vonhobe, 2003 164 REAL(wp) :: cos_hydr2 = -10450. ! 165 REAL(wp) :: cos_hydr3 = 22.8 ! 166 REAL(wp) :: cos_hydr4 = -6040. ! exp(24.3-10450./Tkel)+exp(22.8-6040./Tkel)*(kw/zph) 167 REAL(wp) :: kw = 1E-14 ! kw = [OH-][H3O+] for hydrolysis purpose 168 ! 169 126 170 127 171 !!* Substitution … … 150 194 REAL(wp) :: zckb , zck1 , zck2 , zckw , zak1 , zak2 , zakb , zaksp0, zakw 151 195 REAL(wp) :: zst , zft , zcks , zckf , zaksp1 196 REAL(wp) :: zph, zfact 197 REAL(wp) :: ztco , ztco2, ztco3, ztco4, zco, zisp, zcos 198 REAL(wp) :: znx 199 152 200 !!--------------------------------------------------------------------- 153 201 ! … … 199 247 END DO 200 248 249 IF( lk_gas ) THEN 250 ! N2O SOLUBILITY 251 ! ------------------------------- 252 !CDIR NOVERRCHK 253 DO jj = 1, jpj 254 !CDIR NOVERRCHK 255 DO ji = 1, jpi 256 ! ! SET ABSOLUTE TEMPERATURE 257 ztkel = tsn(ji,jj,1,jp_tem) + 273.16 258 zt = ztkel * 0.01 259 zt2 = zt * zt 260 zsal = tsn(ji,jj,1,jp_sal) + ( 1.- tmask(ji,jj,1) ) * 35. 261 zsal2 = zsal * zsal 262 zlogt = LOG( zt ) 263 ! 264 znx = nx0 + nx1 / zt + nx2 * zlogt + nx22 * zt2 + zsal *( nx3 + nx4 * zt + nx5 * zt2 ) 265 chemn2o(ji,jj) = EXP( znx ) * 1.e-9 266 END DO 267 END DO 268 ! 269 !CDIR NOVERRCHK 270 ! CO, ISOPRENE, COS SOLUBILITY 271 ! ------------------------------- 272 DO jj = 1, jpj 273 !CDIR NOVERRCHK 274 DO ji = 1, jpi 275 ! ! SET ABSOLUTE TEMPERATURE 276 ztkel = tsn(ji,jj,1,jp_tem) + 273.16 277 ! LN(K0) OF SOLUBILITY OF CO in nl/L 278 ! (EQ.7, WIESENBURG AND GUINASSO,1979) 279 zsal = tsn(ji,jj,1,jp_sal) + ( 1.- tmask(ji,jj,1) ) * 35. 280 ztco = 100. / ztkel 281 ztco2 = LOG( 1. / ztco ) 282 ztco3 = 1. / ztco 283 ztco4 = ztco3 * ztco3 284 zco = co1 + co2 * ztco + co3 * ztco2 + co4 * ztco3 & 285 & + zsal * ( co5 + co6 * ztco3 + co7 * ztco4 ) 286 ! LN (K0) OF SOLUBILITY OF ISOPRENE (EQ.4, 287 ! Mochalski et al., 2011) 288 zisp = isp1 + isp2 / ztkel 289 zcos = cos1 + cos2 / ztkel 290 ! ! SET SOLUBILITIES OF CO AND ISOPRENE 291 chemcos(ji,jj,1) = ( EXP( zco ) * coatm ) * oxyco ! mol/(L atm) 292 chemcos(ji,jj,2) = 100 * EXP( zisp ) ! mol/(L atm) 293 chemcos(ji,jj,3) = 0.022 * EXP(2100.*( (1./ztkel) - 1./298.15 )) !mol/(L atm) 294 END DO 295 END DO 296 ENDIF 201 297 202 298 … … 337 433 !! *** ROUTINE p4z_che_alloc *** 338 434 !!---------------------------------------------------------------------- 339 ALLOCATE( sio3eq(jpi,jpj,jpk), fekeq(jpi,jpj,jpk), chemc(jpi,jpj), chemo2(jpi,jpj,jpk), & 340 & STAT=p4z_che_alloc ) 435 INTEGER :: ierr(2) 436 437 ierr(:) = 0 438 ALLOCATE( sio3eq(jpi,jpj,jpk), fekeq(jpi,jpj,jpk), chemc(jpi,jpj), chemo2(jpi,jpj,jpk), STAT= ierr(1) ) 439 IF (lk_gas) ALLOCATE ( chemcos(jpi,jpj,3), k_hydr(jpi,jpj,jpk), chemn2o(jpi,jpj), STAT= ierr(2) ) 440 441 p4z_che_alloc = MAXVAL( ierr ) 442 341 443 ! 342 444 IF( p4z_che_alloc /= 0 ) CALL ctl_warn('p4z_che_alloc : failed to allocate arrays.') -
branches/CNRS/dev_r6526_PISCES_GAS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zflx.F90
r6287 r6530 90 90 CHARACTER (len=25) :: charout 91 91 REAL(wp), POINTER, DIMENSION(:,:) :: zkgco2, zkgo2, zh2co3, zoflx, zw2d 92 REAL(wp) :: zsch_dms, zfludms,zflddms 93 REAL(wp) :: zfldco, zfluco, zsch_co, zkin_vis, zD 94 REAL(wp) :: zfldcos, zflucos 95 REAL(wp) :: zfldisp, zfluisp, zsch_isp, zsch_cos 96 REAL(wp) :: zsch_n2o, zfldn2o, zflun2o 97 REAL(wp), POINTER, DIMENSION(:,:) :: zkgdms, zdmsflx 98 REAL(wp), POINTER, DIMENSION(:,:) :: zkgco, zcoflx, zkgisp, zispflx 99 REAL(wp), POINTER, DIMENSION(:,:) :: zH_cos, zkgcos, zcosflx 100 REAL(wp), POINTER, DIMENSION(:,:) :: zkgn2o, znflx 101 92 102 !!--------------------------------------------------------------------- 93 103 ! … … 95 105 ! 96 106 CALL wrk_alloc( jpi, jpj, zkgco2, zkgo2, zh2co3, zoflx ) 107 IF( lk_gas ) THEN 108 CALL wrk_alloc( jpi, jpj, zkgco, zcoflx, zkgisp, zispflx ) 109 CALL wrk_alloc( jpi, jpj, zcosflx, zkgcos, zH_cos ) 110 CALL wrk_alloc( jpi, jpj, zkgdms, zdmsflx ) 111 CALL wrk_alloc( jpi, jpj, zkgn2o, znflx ) 112 ENDIF 97 113 ! 98 114 … … 181 197 END DO 182 198 199 IF( lk_gas ) THEN 200 !CDIR NOVERRCHK 201 DO jj = 1, jpj 202 !CDIR NOVERRCHK 203 DO ji = 1, jpi 204 ztc = MIN( 35., tsn(ji,jj,1,jp_tem) ) 205 ztc2 = ztc * ztc 206 ztc3 = ztc * ztc2 207 208 zsch_dms = 3628.5 - 234.58 * ztc + 7.8601 * ztc2 - 0.1148 * ztc3 209 !zsch_co = 1889.126 - 127.2150 * ztc + 4.499079 * ztc2 - 210 !0.08973561 * ztc3 211 zsch_co = 2124 - 140.07 * ztc + 4.3825 * ztc2 - 0.0553 * ztc3 212 ! pb with the above equation - this one comes from Zafiriou 2008 see w/ B. Bonsang 213 zsch_isp = 3546.535 - 217.2178 * ztc + 5.732073 * ztc2 - 0.06035193 * ztc3 214 !compute Schmidt number for cos, taken from Ulshofer 215 zkin_vis = (1.792747 - 0.05126103 * ztc + 0.0005918645 * ztc2 ) * 1.E-6 ! m2/s 216 zD = ( 10**( -1010. / ( ztc + 273.15 ) - 1.3246) ) * 1.E-4 ! cm2/s to m2/s 217 zsch_cos = zkin_vis / zD 218 zkgdms(ji,jj) = zkgwan * SQRT( 660./ zsch_dms ) 219 zkgco (ji,jj) = zkgwan * SQRT( 660./ zsch_co ) 220 zkgisp(ji,jj) = zkgwan * SQRT( 660./ zsch_isp) 221 zkgcos(ji,jj) = zkgwan * SQRT( 660./ zsch_cos) 222 zH_cos(ji,jj) = EXP( 12.722 - 3496./ ( ztc + 273.15 ) ) + rtrn 223 ! 224 zsch_n2o = 2301.1 - 151.1 * ztc + 4.7364 * ztc2 - 0.059431 * ztc3 225 zkgn2o(ji,jj) = zkgwan * SQRT( 660./ zsch_n2o ) 226 END DO 227 END DO 228 ! 229 ENDIF 230 183 231 DO jj = 1, jpj 184 232 DO ji = 1, jpi … … 197 245 END DO 198 246 END DO 247 248 249 IF( lk_gas ) THEN 250 DO jj = 1, jpj 251 DO ji = 1, jpi 252 ! Compute DMS flux 253 zfludms = trb(ji,jj,1,jpdms) * tmask(ji,jj,1) * zkgdms(ji,jj) 254 zdmsflx(ji,jj) = -1. * zfludms 255 tra(ji,jj,1,jpdms) = tra(ji,jj,1,jpdms) - ( zfludms ) / fse3t(ji,jj,1) 256 257 ! Compute CO flux 258 zfldco = atco * patm(ji,jj) * chemcos(ji,jj,1) *tmask(ji,jj,1) * zkgco(ji,jj) 259 zfluco = trb(ji,jj,1,jpco) * tmask(ji,jj,1) * zkgco(ji,jj) 260 zcoflx(ji,jj) = zfldco - zfluco 261 tra(ji,jj,1,jpco) = tra(ji,jj,1,jpco) + zcoflx(ji,jj) / fse3t(ji,jj,1) 262 263 ! Compute isoprene flux 264 zfldisp = atisp * patm(ji,jj) * chemcos(ji,jj,2) *tmask(ji,jj,1) * zkgisp(ji,jj) ! (mol/L) * (m/s) 265 zfluisp = trb(ji,jj,1,jpisp) * tmask(ji,jj,1) * zkgisp(ji,jj) 266 zispflx(ji,jj) = zfldisp - zfluisp 267 tra(ji,jj,1,jpisp) = tra(ji,jj,1,jpisp) + zispflx(ji,jj) / fse3t(ji,jj,1) 268 269 ! Compute COS flux 270 zfldcos = atccos * patm(ji,jj) * chemcos(ji,jj,3) *tmask(ji,jj,1) *zkgcos(ji,jj) ! (mol/L) * (m/s) 271 zflucos = trb(ji,jj,1,jpcos) * tmask(ji,jj,1) * zkgcos(ji,jj) 272 zcosflx(ji,jj) = zfldcos - zflucos 273 tra(ji,jj,1,jpcos) = tra(ji,jj,1,jpcos) + zcosflx(ji,jj) / fse3t(ji,jj,1) 274 275 ! Compute N2O flux 276 zfldn2o = atcn2o * patm(ji,jj) * chemn2o(ji,jj) *tmask(ji,jj,1) * zkgn2o(ji,jj) 277 zflun2o = trb(ji,jj,1,jpn2o) * tmask(ji,jj,1) * zkgn2o(ji,jj) 278 znflx(ji,jj) = zfldn2o - zflun2o 279 tra(ji,jj,1,jpn2o) = tra(ji,jj,1,jpn2o) + znflx(ji,jj) / fse3t(ji,jj,1) 280 END DO 281 END DO 282 ENDIF 283 199 284 200 285 t_oce_co2_flx = glob_sum( oce_co2(:,:) ) ! Total Flux of Carbon … … 228 313 ENDIF 229 314 IF( iom_use( "Dpo2" ) ) THEN 230 zw2d(:,:) = ( atcox * patm(:,:) - atcox * tr n(:,:,1,jpoxy) / ( chemo2(:,:,1) + rtrn ) ) * tmask(:,:,1)315 zw2d(:,:) = ( atcox * patm(:,:) - atcox * trb(:,:,1,jpoxy) / ( chemo2(:,:,1) + rtrn ) ) * tmask(:,:,1) 231 316 CALL iom_put( "Dpo2" , zw2d ) 232 317 ENDIF … … 234 319 CALL iom_put( "tcflxcum" , t_oce_co2_flx_cum ) ! molC 235 320 ! 321 IF (lk_gas) THEN 322 IF ( iom_use( "DMSflx" ) ) THEN 323 zw2d(:,:) = zdmsflx(:,:) * 1000 * tmask(:,:,1) 324 CALL iom_put( "DMSflx" , zw2d ) 325 ENDIF 326 IF ( iom_use( "COflx" ) ) THEN 327 zw2d(:,:) = zcoflx(:,:) * 1000 * tmask(:,:,1) 328 CALL iom_put( "COflx" , zw2d ) 329 ENDIF 330 IF ( iom_use( "ISPflx" ) ) THEN 331 zw2d(:,:) = zispflx(:,:) * 1000 * tmask(:,:,1) 332 CALL iom_put( "ISPflx" , zw2d ) 333 ENDIF 334 IF ( iom_use( "COSflx" ) ) THEN 335 zw2d(:,:) = zcosflx(:,:) * 1000 * tmask(:,:,1) 336 CALL iom_put( "COSflx" , zw2d ) 337 ENDIF 338 IF ( iom_use( "H_cos" ) ) THEN 339 zw2d(:,:) = zH_cos(:,:) * tmask(:,:,1) 340 CALL iom_put( "H_cos" , zw2d ) 341 ENDIF 342 IF ( iom_use( "N2Oflx" ) ) THEN 343 zw2d(:,:) = znflx(:,:) * 1000 * tmask(:,:,1) 344 CALL iom_put( "N2Oflx" , zw2d ) 345 ENDIF 346 ENDIF 347 236 348 CALL wrk_dealloc( jpi, jpj, zw2d ) 237 349 ELSE … … 261 373 !! ** input : Namelist nampisext 262 374 !!---------------------------------------------------------------------- 263 NAMELIST/nampisext/ln_co2int, atcco2, clname, nn_offset 375 NAMELIST/nampisext/ln_co2int, atcco2, clname, & 376 #ifdef key_gas 377 & atccos, atcn2o, & 378 #endif 379 & nn_offset 264 380 INTEGER :: jm 265 381 INTEGER :: ios ! Local integer output status for namelist read -
branches/CNRS/dev_r6526_PISCES_GAS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zint.F90
r6204 r6530 41 41 INTEGER, INTENT( in ) :: kt ! ocean time-step index 42 42 ! 43 INTEGER :: ji, jj 43 INTEGER :: ji, jj, jk ! dummy loop indices 44 44 REAL(wp) :: zvar ! local variable 45 REAL(wp) :: zo2 ! local variable 46 45 47 !!--------------------------------------------------------------------- 46 48 ! … … 66 68 ENDIF 67 69 ! 70 ! Computation of the suboxic term for N2O production 71 ! ---------------------------------------- 72 IF (lk_gas) THEN 73 ! 74 xn2osub(:,:,:) = 0.0 75 ! 76 DO ji = 1, jpi 77 DO jj = 1, jpj 78 DO jk = 11, jpk 79 80 IF (trb(ji,jj,jk,jpoxy)*1.e6.lt.xlow) THEN 81 zo2=trb(ji,jj,jk,jpoxy)*1.e6 82 ELSE IF ((trb(ji,jj,jk,jpoxy)*1.e6.ge.xlow).and.(trb(ji,jj,jk,jpoxy)*1.e6.lt.xhigh)) THEN 83 zo2=xlow 84 ELSE 85 zo2 = 0.7*xlow*exp(-0.1*(trb(ji,jj,jk,jpoxy)*1.e6 - xhigh)) & 86 & + 0.3*xlow*exp(-0.01*(trb(ji,jj,jk,jpoxy)*1.e6 - xhigh)) 87 ENDIF 88 89 90 xn2osub(ji,jj,jk) = alphan2o + betan2o * zo2 91 ENDDO 92 ENDDO 93 ENDDO 94 95 ENDIF 96 ! 68 97 IF( nn_timing == 1 ) CALL timing_stop('p4z_int') 69 98 ! … … 81 110 82 111 !!====================================================================== 83 END MODULE p4zint112 END MODULE p4zint -
branches/CNRS/dev_r6526_PISCES_GAS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zlim.F90
r6204 r6530 47 47 REAL(wp), PUBLIC :: qdfelim !: optimal Fe quota for diatoms 48 48 REAL(wp), PUBLIC :: caco3r !: mean rainratio 49 49 #ifdef key_gas 50 REAL(wp), PUBLIC :: xknfer !: DMS FER half saturation for nano 51 REAL(wp), PUBLIC :: xkdfer !: DMS FER half saturation for diatoms 52 REAL(wp), PUBLIC :: xkdocdms !: DMS DOC half saturation 53 REAL(wp), PUBLIC :: xknpo4 !: DMS PO4 half saturation for nano 54 REAL(wp), PUBLIC :: xkdpo4 !: DMS PO4 half saturation for diatoms 55 REAL(wp), PUBLIC :: xkdms !: DMS half saturation for bacterial loss 56 REAL(wp), PUBLIC :: xscdiat !: S/C ratio for diatoms 57 REAL(wp), PUBLIC :: xscnanom !: min S/C ratio for nano 58 REAL(wp), PUBLIC :: xscnanov !: var S/C ratio for nano 59 REAL(wp), PUBLIC :: xysvar !: DMSP-to-DMS yield var 60 REAL(wp), PUBLIC :: xysmin !: DMSP-to-DMS yield min 61 #endif 50 62 ! Coefficient for iron limitation 51 63 REAL(wp) :: xcoef1 = 0.0016 / 55.85 … … 79 91 REAL(wp) :: z1_trbdia, z1_trbphy, ztem1, ztem2, zetot1, zetot2 80 92 REAL(wp) :: zdenom, zratio, zironmin 81 REAL(wp) :: zconc1d, zconc1dnh4, zconc0n, zconc0nnh4 93 REAL(wp) :: zconc1d, zconc1dnh4, zconc0n, zconc0nnh4 94 #ifdef key_gas 95 REAL(wp) :: zlim5, zferdms, zpo4dms 96 REAL(wp) :: zstress1, zstress2, zstress2d, zstress3, zstress3d 97 REAL(wp) :: zstress, zstressd, zstresst 98 #endif 82 99 !!--------------------------------------------------------------------- 83 100 ! … … 161 178 END DO 162 179 180 IF( lk_gas ) THEN 181 DO jk = 1, jpkm1 182 DO jj = 1, jpj 183 DO ji = 1, jpi 184 ! new parameterisation (Vogt) below: 185 zpo4dms = MAX(trb(ji,jj,jk,jppo4), 4.88E-9 ) ! 0.1nanoM po4=0.122E-7 186 zlim1 = zpo4dms / ( zpo4dms + xknpo4 ) 187 zferdms = MAX( trb(ji,jj,jk,jpfer), 2.E-11 ) 188 zlim2 = zferdms / ( zferdms + xknfer ) 189 zlim3 = trb(ji,jj,jk,jpdoc) / ( trb(ji,jj,jk,jpdoc) + xkdocdms ) 190 zlim4 = trb(ji,jj,jk,jpdms) / ( trb(ji,jj,jk,jpdms) + xkdms) 191 ! L-bac-light 192 xlimbac2(ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) 193 194 zlim5 = MIN( 1., MAX( 0.66, ( 1. - ( ( etot(ji,jj,jk) / 80.)**6 ) + 0.18 ) ) ) 195 xlimdms(ji,jj,jk) = MIN( ( MIN(zlim1,zlim2,zlim3) ), zlim4 ) * zlim5 ! normal 196 END DO 197 END DO 198 END DO 199 ENDIF 200 163 201 ! Compute the fraction of nanophytoplankton that is made of calcifiers 164 202 ! -------------------------------------------------------------------- … … 187 225 END DO 188 226 ! 227 IF( lk_gas ) THEN 228 ! Compute S/C ratios and dmsp-to-dms yield for DMS module 229 DO jk = 1, jpkm1 230 DO jj = 1, jpj 231 DO ji = 1, jpi 232 ! Bopp 233 xeffic(ji,jj,jk) = xysmin + xysvar * ( 1. - xlimbac2(ji,jj,jk)) 234 ! Vogt: xeffic(ji,jj,jk) = xysmin + xysvar * 235 ! xlimbac2(ji,jj,jk) 236 zstress1 = etot(ji,jj,jk) / 80. 237 ! stress due to Fe 238 zferdms = MAX( trb(ji,jj,jk,jpfer), 2.E-11 ) 239 zstress2 = xknfer / ( xknfer + zferdms ) 240 zstress2d = xkdfer / ( xkdfer + zferdms ) 241 ! stress due to PO4 242 zpo4dms = MAX( trb(ji,jj,jk,jppo4), 4.88E-9 ) 243 zstress3 = 0.7 * ( xknpo4 / ( xknpo4 + zpo4dms) ) 244 zstress3d = 0.7 * ( xkdpo4 / ( xkdpo4 + zpo4dms) ) 245 ! total stress due to nutrients and light 246 zstress = MAX( zstress1, zstress2 , zstress3 , 0.30 ) * 2. 247 zstressd = MAX( zstress1, zstress2d, zstress3d, 0.30 ) * 2. 248 zstress = zstress - 0.25 249 zstressd = zstressd - 0.25 250 ! temperature effect 251 zstresst = 1. + ( 1. / ( ( tsn(ji,jj,jk,jp_tem) + 2.5 )**6 ) ) 252 253 ! calculate the S/C quota 254 xcelln(ji,jj,jk) = xscnanom + xscnanov * zstress * zstresst 255 xcelld(ji,jj,jk) = xscdiat + xscdiat * zstressd * zstresst 256 END DO 257 END DO 258 END DO 259 ENDIF 189 260 ! 190 261 IF( lk_iomput .AND. knt == nrdttrc ) THEN ! save output diagnostics … … 214 285 !!---------------------------------------------------------------------- 215 286 216 NAMELIST/nampislim/ concnno3, concdno3, concnnh4, concdnh4, concnfer, concdfer, concbfe, & 217 & concbno3, concbnh4, xsizedia, xsizephy, xsizern, xsizerd, & 287 NAMELIST/nampislim/ concnno3, concdno3, concnnh4, concdnh4, concnfer, concdfer, concbfe, & 288 & concbno3, concbnh4, xsizedia, xsizephy, xsizern, xsizerd, & 289 #ifdef key_gas 290 & xkdms, xscdiat, xscnanom, xscnanov, xysmin, xysvar, xknfer, xkdfer, & 291 & xkdocdms, xknpo4, xkdpo4, & 292 #endif 218 293 & xksi1, xksi2, xkdoc, qnfelim, qdfelim, caco3r 294 219 295 INTEGER :: ios ! Local integer output status for namelist read 220 296 … … 251 327 WRITE(numout,*) ' optimal Fe quota for nano. qnfelim = ', qnfelim 252 328 WRITE(numout,*) ' Optimal Fe quota for diatoms qdfelim = ', qdfelim 329 IF( lk_gas ) THEN 330 WRITE(numout,*) ' DMS half saturation for bacterial loss xkdms = ', xkdms 331 WRITE(numout,*) ' S/C ratio for diatoms xscdiat = ', xscdiat 332 WRITE(numout,*) ' min S/C ratio for nano xscnanom = ', xscnanom 333 WRITE(numout,*) ' var S/C ratio for nano xscnanov = ', xscnanov 334 WRITE(numout,*) ' DMSP-to-DMS yield min xysmin = ', xysmin 335 WRITE(numout,*) ' DMSP-to-DMS yield var xysvar = ', xysvar 336 WRITE(numout,*) ' DMS FER half saturation for nano xknfer = ', xknfer 337 WRITE(numout,*) ' DMS FER half saturation for diatoms xkdfer = ', xkdfer 338 WRITE(numout,*) ' DMS DOC half saturation xkdocdms = ', xkdocdms 339 WRITE(numout,*) ' DMS PO4 half saturation for nano xknpo4 = ', xknpo4 340 WRITE(numout,*) ' DMS PO4 half saturation for diatoms xkdpo4 = ', xkdpo4 341 ENDIF 253 342 ENDIF 254 343 … … 265 354 266 355 !!====================================================================== 267 END MODULE p4zlim356 END MODULE p4zlim -
branches/CNRS/dev_r6526_PISCES_GAS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmeso.F90
r6204 r6530 244 244 & + zgraztotf * unass2 - zfracfe 245 245 #endif 246 IF( lk_gas ) THEN 247 tra(ji,jj,jk,jpdms) = tra(ji,jj,jk,jpdms) & 248 & + xeffic(ji,jj,jk) * ( xcelln(ji,jj,jk) * zgrazn + xcelld(ji,jj,jk) * zgrazd ) 249 tra(ji,jj,jk,jpn2o) = tra(ji,jj,jk,jpn2o) + xn2osub(jpi,jpj,jpk) * o2ut * zgrarsig 250 ENDIF 246 251 END DO 247 252 END DO … … 340 345 341 346 !!====================================================================== 342 END MODULE p4zmeso347 END MODULE p4zmeso -
branches/CNRS/dev_r6526_PISCES_GAS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmicro.F90
r6204 r6530 186 186 - zgrazm * trb(ji,jj,jk,jpnum) / ( trb(ji,jj,jk,jppoc) + rtrn ) 187 187 #endif 188 IF( lk_gas ) THEN 189 tra(ji,jj,jk,jpdms) = tra(ji,jj,jk,jpdms) & 190 & + xeffic(ji,jj,jk) * ( xcelln(ji,jj,jk) * zgrazp + xcelld(ji,jj,jk) * zgrazsd ) 191 tra(ji,jj,jk,jpn2o) = tra(ji,jj,jk,jpn2o) + xn2osub(jpi,jpj,jpk) * o2ut * zgrarsig 192 ENDIF 188 193 END DO 189 194 END DO … … 273 278 274 279 !!====================================================================== 275 END MODULE p4zmicro280 END MODULE p4zmicro -
branches/CNRS/dev_r6526_PISCES_GAS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmort.F90
r6204 r6530 131 131 tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zfracal * zmortp * zfactfe 132 132 #endif 133 IF( lk_gas ) & 134 & tra(ji,jj,jk,jpdms) = tra(ji,jj,jk,jpdms) + xeffic(ji,jj,jk) * xcelln(ji,jj,jk) * zmortp 133 135 END DO 134 136 END DO … … 214 216 tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + ( zrespp2 + 0.5 * ztortp2 ) * zfactfe 215 217 #endif 218 IF( lk_gas ) & 219 & tra(ji,jj,jk,jpdms) = tra(ji,jj,jk,jpdms) + xeffic(ji,jj,jk) * xcelld(ji,jj,jk) * zmortp2 216 220 END DO 217 221 END DO … … 277 281 278 282 !!====================================================================== 279 END MODULE p4zmort283 END MODULE p4zmort -
branches/CNRS/dev_r6526_PISCES_GAS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zopt.F90
r6204 r6530 36 36 REAL(wp) :: xparsw !: parlux/3 37 37 REAL(wp) :: xsi0r !: 1. /rn_si0 38 ! 39 REAL(wp) :: uvlux ! proportion of UV radiant flux to global solar radiation 40 REAL(wp) :: xa350_a300 41 REAL(wp) :: xa350_a400 42 REAL(wp) :: xa350_a440 38 43 39 44 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_par ! structure of input par … … 46 51 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: emoy !: averaged PAR in the mixed layer 47 52 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ekb, ekg, ekr !: wavelength (Red-Green-Blue) 53 #ifdef key_gas 54 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: euv !: averaged UV in the mixed layer 55 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: a350 !: wavelength (350 for COS) 56 #endif 48 57 49 58 INTEGER :: nksrp ! levels below which the light cannot penetrate ( depth larger than 391 m) … … 78 87 REAL(wp), POINTER, DIMENSION(:,: ) :: zdepmoy, zetmp1, zetmp2, zetmp3, zetmp4, zqsr100 79 88 REAL(wp), POINTER, DIMENSION(:,:,:) :: zpar, ze0, ze1, ze2, ze3 89 REAL(wp) :: za300, za400, za440, zpera440 80 90 !!--------------------------------------------------------------------- 81 91 ! … … 109 119 END DO 110 120 END DO 121 ! 122 IF( lk_gas ) THEN 123 ! calculation of absorbance coefficient at 350 nm 124 DO jk = 1, jpk 125 DO jj = 1, jpj 126 DO ji = 1, jpi 127 zchl = ( trb(ji,jj,jk,jpnch) + trb(ji,jj,jk,jpdch) + rtrn ) * 1.e6 128 !za300 = 0.429 + 0.079 * LOG10( zchl ) ! Kettle 2001 129 !a350(ji,jj,jk) = max(0.,za300 * xa350_a300) 130 ! 131 !Xu 2001 132 !a350(ji,jj,jk) = 0.0077 + 0.0115 * zchl ! Xu 2001 133 ! 134 !!Morel 135 !za400 = 0.065*zchl**(0.63) 136 !a350(ji,jj,jk) = max(0.,za400 * xa350_a400) 137 ! 138 ! Preiswerk 139 zpera440 = (-26. * LOG10( zchl )) +26. 140 za440 = ((zchl * 0.0448)*zpera440)/(100.-zpera440) 141 a350(ji,jj,jk) = max(0.,za440 * xa350_a440) 142 ! Fichot 143 !C=log10(zchl) 144 !a350(ji,jj,jk) = 145 !exp((0.5346*C)-(0.0263*C*C)-(0.0036*C*C*C)+(0.0012*C*C*C*C)-1.6340) 146 END DO 147 END DO 148 END DO 149 ENDIF 150 111 151 ! !* Photosynthetically Available Radiation (PAR) 112 152 ! ! -------------------------------------- … … 141 181 END DO 142 182 etot_ndcy(:,:,:) = etot(:,:,:) 183 ENDIF 184 185 IF( lk_gas ) THEN 186 IF( l_trcdm2dc ) THEN 187 euv(:,:,1) = uvlux * qsr_mean(:,:) * EXP( -0.5 * ze1(:,:,1) ) 188 ELSE 189 euv(:,:,1) = uvlux * qsr(:,:) * EXP( -0.5 * ze1(:,:,1) ) 190 ENDIF 191 DO jk = 2, nksrp 192 !CDIR NOVERRCHK 193 DO jj = 1, jpj 194 !CDIR NOVERRCHK 195 DO ji = 1, jpi 196 euv(ji,jj,jk) = euv(ji,jj,jk-1) * EXP( -0.5 * ( ze1(ji,jj,jk-1) + ze1(ji,jj,jk) ) ) 197 ENDDO 198 ENDDO 199 ENDDO 143 200 ENDIF 144 201 … … 218 275 IF( iom_use( "PARDM" ) ) CALL iom_put( "PARDM", zpar(:,:,:) * tmask(:,:,:) ) ! Photosynthetically Available Radiation 219 276 IF( iom_use( "PAR" ) ) CALL iom_put( "PAR" , emoy(:,:,:) * tmask(:,:,:) ) ! Photosynthetically Available Radiation 277 IF (lk_gas) THEN 278 IF( iom_use( "UV" ) ) CALL iom_put( "UV", euv(:,:,:) * tmask(:,:,:) ) ! Photosynthetically Available Radiation 279 IF( iom_use( "A350" ) ) CALL iom_put( "A350" , a350(:,:,:) * tmask(:,:,:) ) ! Photosynthetically Available Radiation 280 ENDIF 220 281 ENDIF 221 282 ELSE … … 353 414 TYPE(FLD_N) :: sn_par ! informations about the fields to be read 354 415 ! 355 NAMELIST/nampisopt/cn_dir, sn_par, ln_varpar, parlux 356 416 NAMELIST/nampisopt/cn_dir, sn_par, ln_varpar, & 417 #ifdef key_gas 418 & uvlux, & 419 #endif 420 & parlux 357 421 !!---------------------------------------------------------------------- 358 422 … … 374 438 WRITE(numout,*) ' PAR as a variable fraction of SW ln_varpar = ', ln_varpar 375 439 WRITE(numout,*) ' Default value for the PAR fraction parlux = ', parlux 440 IF( lk_gas ) & 441 & WRITE(numout,*) ' Proportion of UV radiant flux to global solar radiation uvlux = ', uvlux 376 442 ENDIF 377 443 ! … … 411 477 ediat (:,:,:) = 0._wp 412 478 IF( ln_qsr_bio ) etot3 (:,:,:) = 0._wp 479 480 IF( lk_gas ) THEN 481 xa350_a300 = 0.36787944117_wp ! exp(-0.02*(350.-300.)) = exp(-1) 482 xa350_a400 = 2.459603_wp ! exp(-0.018*(350.-400.)) 483 xa350_a440 = 6.049647_wp ! exp(-0.02*(350.-440.)) 484 ! 485 euv (:,:,:) = 0._wp 486 a350 (:,:,:) = 0._wp 487 ENDIF 413 488 ! 414 489 IF( nn_timing == 1 ) CALL timing_stop('p4z_opt_init') … … 421 496 !! *** ROUTINE p4z_opt_alloc *** 422 497 !!---------------------------------------------------------------------- 498 INTEGER :: ierr(2) 499 500 ierr(:) = 0 501 423 502 ALLOCATE( ekb(jpi,jpj,jpk) , ekr(jpi,jpj,jpk), ekg(jpi,jpj,jpk), & 424 503 & enano(jpi,jpj,jpk) , ediat(jpi,jpj,jpk), & 425 & etot_ndcy(jpi,jpj,jpk), emoy (jpi,jpj,jpk), STAT=p4z_opt_alloc ) 426 ! 504 & etot_ndcy(jpi,jpj,jpk), emoy (jpi,jpj,jpk), ierr(1) ) 505 506 IF( lk_gas ) ALLOCATE( euv(jpi,jpj,jpk), a350(jpi,jpj,jpk), ierr(2) ) 507 508 p4z_opt_alloc = MAXVAL( ierr ) 509 427 510 IF( p4z_opt_alloc /= 0 ) CALL ctl_warn('p4z_opt_alloc : failed to allocate arrays.') 428 511 ! … … 439 522 440 523 !!====================================================================== 441 END MODULE p4zopt524 END MODULE p4zopt -
branches/CNRS/dev_r6526_PISCES_GAS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zprod.F90
r6204 r6530 45 45 REAL(wp), PUBLIC :: fecdm !: 46 46 REAL(wp), PUBLIC :: grosip !: 47 #if defined key_gas 48 REAL(wp), PUBLIC :: xnanoco !: 49 REAL(wp), PUBLIC :: xdiaco !: 50 REAL(wp), PUBLIC :: xnanoIsp !: 51 REAL(wp), PUBLIC :: xdiaIsp !: 52 #endif 47 53 48 54 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: prmax !: optimal production = f(temperature) … … 88 94 REAL(wp), POINTER, DIMENSION(:,:,:) :: zpislopead, zpislopead2, zprdia, zprbio, zprdch, zprnch, zysopt, zw3d 89 95 REAL(wp), POINTER, DIMENSION(:,:,:) :: zprorca, zprorcad, zprofed, zprofen, zprochln, zprochld, zpronew, zpronewd 96 REAL(wp) :: zstep 97 REAL(wp), POINTER, DIMENSION(:,:,:) :: zproco, zproisp 90 98 !!--------------------------------------------------------------------- 91 99 ! … … 110 118 zprnch (:,:,:) = 0._wp 111 119 zysopt (:,:,:) = 0._wp 120 ! 121 IF( lk_gas ) THEN 122 CALL wrk_alloc( jpi, jpj, jpk, zproco, zproisp ) 123 zproco (:,:,:) = 0._wp 124 zproisp (:,:,:) = 0._wp 125 ENDIF 126 112 127 113 128 ! Computation of the optimal production … … 411 426 END DO 412 427 END DO 428 ! 429 IF( lk_gas ) THEN 430 zstep = xstep * 1.e-6 431 DO jk = 1, jpkm1 432 DO jj = 1, jpj 433 DO ji =1 ,jpi 434 ! update the dms with sources & sinks 435 tra(ji,jj,jk,jpdms) = tra(ji,jj,jk,jpdms) & 436 & + xeffic(ji,jj,jk) * ( xcelld(ji,jj,jk) * zprorcad(ji,jj,jk ) * excret2 & 437 & + xcelln(ji,jj,jk) * zprorca(ji,jj,jk) * excret ) 438 ! production rate of CO & Isoprene : function of phytoplancton 439 ! growth 440 zproco(ji,jj,jk) = zstep * ( xnanoco * trb(ji,jj,jk,jpnch) + xdiaco * trb(ji,jj,jk,jpdch) ) 441 zproisp(ji,jj,jk) = zstep * ( xnanoIsp * trb(ji,jj,jk,jpnch) + xdiaIsp * trb(ji,jj,jk,jpdch) ) 442 ! Add the trends 443 tra(ji,jj,jk,jpco) = tra(ji,jj,jk,jpco) + zproco(ji,jj,jk) 444 tra(ji,jj,jk,jpisp) = tra(ji,jj,jk,jpisp) + zproisp(ji,jj,jk) 445 END DO 446 END DO 447 END DO 448 ENDIF 413 449 414 450 … … 520 556 ENDIF 521 557 IF( iom_use( "tintpp" ) ) CALL iom_put( "tintpp" , tpp * zfact ) ! global total integrated primary production molC/s 558 ! 559 IF( lk_gas ) THEN 560 IF( iom_use( "SCquotan" ) ) THEN 561 zw3d(:,:,:) = xcelln(:,:,:) * tmask(:,:,:) ! Quota S/C for Nanos 562 CALL iom_put( "SCquotan" , zw3d ) 563 ENDIF 564 IF( iom_use( "SCquotad" ) ) THEN 565 zw3d(:,:,:) = xcelld(:,:,:) * tmask(:,:,:) ! Quota S/C for Diatoms 566 CALL iom_put( "SCquotad" , zw3d ) 567 ENDIF 568 IF( iom_use( "Yield" ) ) THEN 569 zw3d(:,:,:) = xeffic(:,:,:) * tmask(:,:,:) ! DMSP to DMS Yield 570 CALL iom_put( "Yield" , zw3d ) 571 ENDIF 572 IF( iom_use( "BioprodCO" ) ) THEN 573 zw3d(:,:,:) = zproco(:,:,:) * zfact * tmask(:,:,:) ! Biological Production of CO 574 CALL iom_put( "BioprodCO" , zw3d ) 575 ENDIF 576 IF( iom_use( "BioprodISP" ) ) THEN 577 zw3d(:,:,:) = zproisp(:,:,:) * zfact * tmask(:,:,:) ! Biological Production of ISP 578 CALL iom_put( "BioprodISP" , zw3d ) 579 ENDIF 580 ENDIF 522 581 ! 523 582 CALL wrk_dealloc( jpi, jpj, zw2d ) … … 545 604 ENDIF 546 605 ! 547 CALL wrk_dealloc( jpi, jpj, zmixnano, zmixdiat, zstrn ) 548 CALL wrk_dealloc( jpi, jpj, jpk, zpislopead, zpislopead2, zprdia, zprbio, zprdch, zprnch, zysopt ) 549 CALL wrk_dealloc( jpi, jpj, jpk, zprorca, zprorcad, zprofed, zprofen, zprochln, zprochld, zpronew, zpronewd ) 606 CALL wrk_dealloc( jpi, jpj, zmixnano, zmixdiat, zstrn ) 607 CALL wrk_dealloc( jpi, jpj, jpk, zpislopead, zpislopead2, zprdia, zprbio, zprdch, zprnch, zysopt ) 608 CALL wrk_dealloc( jpi, jpj, jpk, zprorca, zprorcad, zprofed, zprofen, zprochln, zprochld, zpronew, zpronewd ) 609 IF( lk_gas ) CALL wrk_dealloc( jpi, jpj, jpk, zproco, zproisp ) 550 610 ! 551 611 IF( nn_timing == 1 ) CALL timing_stop('p4z_prod') … … 567 627 ! 568 628 NAMELIST/nampisprod/ pislope, pislope2, xadap, ln_newprod, bresp, excret, excret2, & 629 #if defined key_gas 630 & xnanoco, xdiaco, xnanoIsp, xdiaIsp, & 631 #endif 569 632 & chlcnm, chlcdm, chlcmin, fecnm, fecdm, grosip 570 633 INTEGER :: ios ! Local integer output status for namelist read … … 599 662 WRITE(numout,*) ' Maximum Fe/C in nanophytoplankton fecnm =', fecnm 600 663 WRITE(numout,*) ' Minimum Fe/C in diatoms fecdm =', fecdm 664 #if defined key_gas 665 WRITE(numout,*) ' Production of CO via nanophyto (µmol.gChla-1.d-1) xnanoco =', xnanoco 666 WRITE(numout,*) ' Production of CO via diatome (µmol.gChla-1.d-1) xdiaco =', xdiaco 667 WRITE(numout,*) ' Production of isoprene via nanophyto (µmol.gChla-1.d-1) xnanoIsp =', xnanoIsp 668 WRITE(numout,*) ' Production of isoprene via diatome (µmol.gChla-1.d-1) xdiaIsp =', xdiaIsp 669 #endif 601 670 ENDIF 602 671 ! … … 629 698 630 699 !!====================================================================== 631 END MODULE p4zprod700 END MODULE p4zprod -
branches/CNRS/dev_r6526_PISCES_GAS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zrem.F90
r5385 r6530 45 45 REAL(wp), PUBLIC :: xsilab !: fraction of labile biogenic silica 46 46 REAL(wp), PUBLIC :: oxymin !: halk saturation constant for anoxia 47 47 #if defined key_gas 48 REAL(wp), PUBLIC :: xlightdms !: photodegradation rate constant of DMS 49 REAL(wp), PUBLIC :: xsinkdms !: microbial degradation rate of DMS 50 REAL(wp), PUBLIC :: xvsinkdms !: microbial degradation rate of DMS VOGT 51 REAL(wp), PUBLIC :: xprodco !: CO photoproduction 52 REAL(wp), PUBLIC :: xsinkco !: CO bacterial sink 53 REAL(wp), PUBLIC :: xsinkisp !: Isoprene bacterial sink 54 #endif 48 55 49 56 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: denitr !: denitrification array … … 82 89 REAL(wp), POINTER, DIMENSION(:,: ) :: ztempbac 83 90 REAL(wp), POINTER, DIMENSION(:,:,:) :: zdepbac, zolimi, zdepprod, zw3d 91 REAL(wp) :: ztkel, zlim1 92 REAL(wp), POINTER, DIMENSION(:,:,:) :: zlightdms, zsinkdms 93 REAL(wp), POINTER, DIMENSION(:,:,:) :: zprodco, zsinkco, zsinkisp 94 REAL(wp), POINTER, DIMENSION(:,:,:) :: zhydrcos,zprodcos,zdarkcos 84 95 !!--------------------------------------------------------------------- 85 96 ! … … 93 104 zdepprod(:,:,:) = 1._wp 94 105 ztempbac(:,:) = 0._wp 106 107 IF( lk_gas ) THEN 108 CALL wrk_alloc( jpi, jpj, jpk, zlightdms, zsinkdms ) 109 CALL wrk_alloc( jpi, jpj, jpk, zprodco , zsinkco , zsinkisp ) 110 CALL wrk_alloc( jpi, jpj, jpk, zhydrcos, zprodcos, zdarkcos ) 111 ! Initialisation of temprary arrys 112 zlightdms(:,:,:)= 0._wp 113 zsinkdms(:,:,:) = 0._wp 114 zprodco (:,:,:) = 0._wp 115 zprodcos(:,:,:) = 0._wp 116 zhydrcos(:,:,:) = 0._wp 117 zdarkcos(:,:,:) = 0._wp 118 zsinkco (:,:,:) = 0._wp 119 zsinkisp(:,:,:) = 0._wp 120 ENDIF 95 121 96 122 ! Computation of the mean phytoplankton concentration as … … 154 180 END DO 155 181 182 IF( lk_gas ) THEN 183 DO jk = 1, jpkm1 184 DO jj = 1, jpj 185 DO ji = 1, jpi 186 zstep = xstep 187 # if defined key_degrad 188 zstep = zstep * facvol(ji,jj,jk) 189 #endif 190 ! PhotoDegradation of DMS 191 zlim1 = trb(ji,jj,jk,jpno3) / ( 4.E-6 + trb(ji,jj,jk,jpno3) ) 192 zlim1 = MAX( zlim1, 0.01 ) 193 194 zlightdms(ji,jj,jk)= ( etot(ji,jj,jk) / ( etot(ji,jj,jk) + 5.) ) & 195 & * 0.25 * zlim1 * zstep * trb(ji,jj,jk,jpdms) 196 ! DMS microbial sink. Depends on depth, phytoplankton biomass 197 ! and a limitation term which is supposed to be a 198 ! parameterization 199 ! of the bacterial activity. 200 zsinkdms(ji,jj,jk) = xsinkdms * tgfunc(ji,jj,jk) * zstep / 1.e-6 * xlimdms(ji,jj,jk) & 201 & * zdepbac(ji,jj,jk) * trb(ji,jj,jk,jpdms) 202 ! Vogt model assumes only 33% of bacteria can use DMS 203 ! xvsinkdms=0.33 204 zsinkdms(ji,jj,jk) = zsinkdms(ji,jj,jk) * xvsinkdms 205 206 zlightdms(ji,jj,jk) = MAX( 0.e0, zlightdms(ji,jj,jk) ) 207 zsinkdms(ji,jj,jk) = MAX( 0.e0, zsinkdms(ji,jj,jk) ) 208 209 ! Production of CO from DOC photodegradation 210 ! formulae avec UV pour la production photochimique du CO 211 ! zprodco in mol.L-1.timestep-1 ; xprodco in mol.W-1.s-1 ; 212 ! euv(ji,jj,jk) in W.m-2 213 ! *1.e-3 to convert m-3 --> L-1 ; rfact2 to convert s/timestep 214 zprodco(ji,jj,jk) = xprodco * 1.e-3 * rfact2 * euv(ji,jj,jk) / fse3t(ji,jj,jk) 215 216 ! CO microbial sink. Depends on depth, phytoplankton biomass 217 ! and a limitation term which is supposed to be a 218 ! parameterization of the bacterial activity. 219 ! zsinkco in mol.L-1.timestep-1 ; trb(ji,jj,jk,jpco) in mol/L 220 ! ; xsinkco in d-1 221 ! zstep to convert d-1 into timestep-1 222 zsinkco (ji,jj,jk) = xsinkco * zstep * trb(ji,jj,jk,jpco) 223 224 ! Isoprene microbial sink from Palmer and Shaw, 2005 225 ! (doi:10.1029/2005GL022592) 226 ! zsinkisp in mol.L-1.timestep-1; trb(ji,jj,jk,jpisp) in 227 ! mol/L; xsinkisp in d-1 228 zsinkisp (ji,jj,jk) = xsinkisp * zstep * trb(ji,jj,jk,jpisp) 229 zhydrcos(ji,jj,jk) = trb(ji,jj,jk,jpcos) * k_hydr(ji,jj,jk) * rfact2 230 231 ! TL 2013 : darkproduction : selon la formulation de Von Hobe, 232 ! 2001 233 ztkel = tsn(ji,jj,jk,jp_tem) + 273.16 234 zdarkcos(ji,jj,jk) = a350(ji,jj,jk) * EXP( 55.8 - 16200. / ztkel ) * 1.e-12 * rfact2 * 1.E-3 235 236 ! UV penetrates only first 80m. And 20m if there is a high 237 ! concentration of chlorophylle 238 if (jk .LT. 4) then ! test, only first layer priduces COS by photoproduction 239 if ((jk .EQ. 1) .OR. ((jk .GT. 1) .AND. (sum(a350(ji,jj,1:2))/2. .LT. 0.1))) then 240 zprodcos(ji,jj,jk) = 2.1 * euv(ji,jj,jk) * a350(ji,jj,jk) * 1.e-12 * rfact2 * 1.E-3 241 ! WRITE(numout,*) 'jk=, zprodcos(ji,jj,jk) = ', jk, 242 ! zprodcos(ji,jj,jk) 243 endif 244 endif 245 END DO 246 END DO 247 END DO 248 ENDIF 156 249 157 250 DO jk = 1, jpkm1 … … 173 266 tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2nit * zonitr 174 267 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) - 2 * rno3 * zonitr + rno3 * ( rdenita - 1. ) * denitnh4(ji,jj,jk) 268 IF (lk_gas) tra(ji,jj,jk,jpn2o) = tra(ji,jj,jk,jpn2o) + xn2osub(ji,jj,jk) * o2nit * zonitr 175 269 END DO 176 270 END DO … … 315 409 END DO 316 410 411 ! 412 IF( lk_gas ) THEN 413 DO jk = 1, jpkm1 414 ! zlightdms(:,:,jk) =0. 415 ! zsinkdms(:,:,jk) =0. 416 tra(:,:,jk,jpdms) = tra(:,:,jk,jpdms) - zlightdms(:,:,jk) - zsinkdms(:,:,jk) 417 tra(:,:,jk,jpco) = tra(:,:,jk,jpco) + zprodco(:,:,jk) - zsinkco(:,:,jk) 418 tra(:,:,jk,jpisp) = tra(:,:,jk,jpisp) - zsinkisp(:,:,jk) 419 tra(:,:,jk,jpcos) = tra(:,:,jk,jpcos) + zprodcos(:,:,jk) + zdarkcos(:,:,jk) - zhydrcos(:,:,jk) 420 tra(:,:,jk,jpn2o) = tra(:,:,jk,jpn2o) + xn2osub(:,:,jk) * zolimi (:,:,jk) * o2ut - sinkn2o * tra(:,:,jk,jpn2o) 421 422 ENDDO 423 ENDIF 424 317 425 IF( knt == nrdttrc ) THEN 318 426 CALL wrk_alloc( jpi, jpj, jpk, zw3d ) … … 328 436 ENDIF 329 437 ! 438 IF( lk_gas ) THEN 439 IF( iom_use( "Sinkdms" ) ) THEN 440 zw3d(:,:,:) = zsinkdms(:,:,:) * tmask(:,:,:) * rfact2r ! DMS Microbial Sink 441 CALL iom_put( "REMIN" , zw3d ) 442 ENDIF 443 ! 444 IF( iom_use( "Lightdms" ) ) THEN 445 zw3d(:,:,:) = zlightdms(:,:,:) * tmask(:,:,:) * rfact2r ! DMS Photochemical Sink 446 CALL iom_put( "Lightdms" , zw3d ) 447 ENDIF 448 ! 449 IF( iom_use( "PhotoprodCO" ) ) THEN 450 zw3d(:,:,:) = zprodco(:,:,:) * tmask(:,:,:) * rfact2r ! CO Photoproduction 451 CALL iom_put( "PhotoprodCO" , zw3d ) 452 ENDIF 453 ! 454 IF( iom_use( "BactconsCO" ) ) THEN 455 zw3d(:,:,:) = zsinkco(:,:,:) * tmask(:,:,:) * rfact2r ! CO Microbial Sink 456 CALL iom_put( "BactconsCO" , zw3d ) 457 ENDIF 458 ! 459 IF( iom_use( "BactconsISP" ) ) THEN 460 zw3d(:,:,:) = zsinkisp(:,:,:) * tmask(:,:,:) * rfact2r ! Isoprene Microbial Sink 461 CALL iom_put( "BactconsISP" , zw3d ) 462 ENDIF 463 ! 464 IF( iom_use( "OCS_hydr" ) ) THEN 465 zw3d(:,:,:) = zhydrcos(:,:,:) * tmask(:,:,:) * rfact2r ! COS Hydrolysis Sink 466 CALL iom_put( "OCS_hydr" , zw3d ) 467 ENDIF 468 ! 469 IF( iom_use( "OCS_dark" ) ) THEN 470 zw3d(:,:,:) = zdarkcos(:,:,:) * tmask(:,:,:) * rfact2r ! COS Dark Production 471 CALL iom_put( "OCS_dark" , zw3d ) 472 ENDIF 473 ! 474 IF( iom_use( "OCS_phot" ) ) THEN 475 zw3d(:,:,:) = zprodcos(:,:,:) * tmask(:,:,:) * rfact2r ! COS Photoproduction 476 CALL iom_put( "OCS_phot" , zw3d ) 477 ENDIF 478 ! 479 ENDIF 480 ! 330 481 CALL wrk_dealloc( jpi, jpj, jpk, zw3d ) 331 482 ENDIF … … 339 490 CALL wrk_dealloc( jpi, jpj, ztempbac ) 340 491 CALL wrk_dealloc( jpi, jpj, jpk, zdepbac, zdepprod, zolimi ) 492 IF( lk_gas ) THEN 493 CALL wrk_dealloc( jpi, jpj, jpk, zlightdms, zsinkdms ) 494 CALL wrk_dealloc( jpi, jpj, jpk, zprodco , zsinkco , zsinkisp ) 495 CALL wrk_dealloc( jpi, jpj, jpk, zhydrcos, zprodcos, zdarkcos ) 496 ENDIF 341 497 ! 342 498 IF( nn_timing == 1 ) CALL timing_stop('p4z_rem') … … 358 514 !!---------------------------------------------------------------------- 359 515 NAMELIST/nampisrem/ xremik, xremip, nitrif, xsirem, xsiremlab, xsilab, & 516 #if defined_key_gas 517 & xlightdms, xsinkdms, xvsinkdms, xprodco, xsinkco, xsinkisp, & 518 #endif 360 519 & oxymin 361 520 INTEGER :: ios ! Local integer output status for namelist read … … 381 540 WRITE(numout,*) ' NH4 nitrification rate nitrif =', nitrif 382 541 WRITE(numout,*) ' halk saturation constant for anoxia oxymin =', oxymin 542 #if defined key_gas 543 WRITE(numout,*) ' photodegradation rate constant of DMS xlightdms =', xlightdms 544 WRITE(numout,*) ' microbial degradation rate of DMS xsinkdms =', xsinkdms 545 WRITE(numout,*) ' microbial degradation rate of DMS VOGT xvsinkdms =', xvsinkdms 546 WRITE(numout,*) ' CO photoproduction xprodco =', xprodco 547 WRITE(numout,*) ' CO bacterial sink xsinkco =', xsinkco 548 WRITE(numout,*) ' Isoprene bacterial sink xsinkisp =', xsinkisp 549 #endif 383 550 ENDIF 384 551 ! -
branches/CNRS/dev_r6526_PISCES_GAS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsms.F90
r6420 r6530 216 216 !! natkriest ("key_kriest") 217 217 !!---------------------------------------------------------------------- 218 NAMELIST/nampisbio/ nrdttrc, wsbio, xkmort, ferat3, wsbio2, niter1max, niter2max 218 NAMELIST/nampisbio/ nrdttrc, wsbio, xkmort, ferat3, wsbio2, & 219 #if defined key_gas 220 & alphan2o, betan2o, xlow, xhigh, sinkn2o, & 221 #endif 222 & niter1max, niter2max 219 223 #if defined key_kriest 220 224 NAMELIST/nampiskrp/ xkr_eta, xkr_zeta, xkr_ncontent, xkr_mass_min, xkr_mass_max … … 243 247 WRITE(numout,*) ' Maximum number of iterations for POC niter1max =', niter1max 244 248 WRITE(numout,*) ' Maximum number of iterations for GOC niter2max =', niter2max 249 #if defined key_gas 250 WRITE(numout,*) ' Nitrification coefficient for n2o alphan2o =', alphan2o 251 WRITE(numout,*) ' Denitrification coefficient for n2o betan2o =', betan2o 252 WRITE(numout,*) ' lower boundary of suboxia xlow =', xlow 253 WRITE(numout,*) ' upper boundary of suboxia xhigh =', xhigh 254 WRITE(numout,*) ' n2o sink term coefficient sinkn2o =', sinkn2o 255 #endif 245 256 ENDIF 246 257 -
branches/CNRS/dev_r6526_PISCES_GAS/NEMOGCM/NEMO/TOP_SRC/PISCES/par_pisces.F90
r5385 r6530 43 43 LOGICAL, PUBLIC, PARAMETER :: lk_p4z = .TRUE. !: p4z flag 44 44 LOGICAL, PUBLIC, PARAMETER :: lk_kriest = .TRUE. !: Kriest flag 45 LOGICAL, PUBLIC, PARAMETER :: lk_gas = .FALSE. !: Gas flag 45 46 INTEGER, PUBLIC, PARAMETER :: jp_pisces = 23 !: number of passive tracers 46 47 INTEGER, PUBLIC, PARAMETER :: jp_pisces_2d = 13 !: additional 2d output … … 75 76 INTEGER, PUBLIC, PARAMETER :: jpnh4 = 23 !: Ammonium Concentration 76 77 78 #elif defined key_pisces & key_gas 79 !!--------------------------------------------------------------------- 80 !! 'key_pisces' : standard PISCES bio-model 81 !!--------------------------------------------------------------------- 82 LOGICAL, PUBLIC, PARAMETER :: lk_pisces = .TRUE. !: PISCES flag 83 LOGICAL, PUBLIC, PARAMETER :: lk_p4z = .TRUE. !: p4z flag 84 LOGICAL, PUBLIC, PARAMETER :: lk_kriest = .FALSE. !: Kriest flag 85 LOGICAL, PUBLIC, PARAMETER :: lk_gas = .TRUE. !: Gas flag 86 INTEGER, PUBLIC, PARAMETER :: jp_pisces = 29 !: number of PISCES passive tracers 87 INTEGER, PUBLIC, PARAMETER :: jp_pisces_2d = 21 !: additional 2d output 88 INTEGER, PUBLIC, PARAMETER :: jp_pisces_3d = 15 !: additional 3d output 89 INTEGER, PUBLIC, PARAMETER :: jp_pisces_trd = 1 !: number of sms trends for PISCES 90 91 ! assign an index in trc arrays for each LOBSTER prognostic variables 92 ! WARNING: be carefull about the order when reading the restart 93 ! !!gm this warning should be obsolet with IOM 94 INTEGER, PUBLIC, PARAMETER :: jpdic = 1 !: dissolved inoganic carbon concentration 95 INTEGER, PUBLIC, PARAMETER :: jptal = 2 !: total alkalinity 96 INTEGER, PUBLIC, PARAMETER :: jpoxy = 3 !: oxygen carbon concentration 97 INTEGER, PUBLIC, PARAMETER :: jpcal = 4 !: calcite concentration 98 INTEGER, PUBLIC, PARAMETER :: jppo4 = 5 !: phosphate concentration 99 INTEGER, PUBLIC, PARAMETER :: jppoc = 6 !: small particulate organic phosphate concentration 100 INTEGER, PUBLIC, PARAMETER :: jpsil = 7 !: silicate concentration 101 INTEGER, PUBLIC, PARAMETER :: jpphy = 8 !: phytoplancton concentration 102 INTEGER, PUBLIC, PARAMETER :: jpzoo = 9 !: zooplancton concentration 103 INTEGER, PUBLIC, PARAMETER :: jpdoc = 10 !: dissolved organic carbon concentration 104 INTEGER, PUBLIC, PARAMETER :: jpdia = 11 !: Diatoms Concentration 105 INTEGER, PUBLIC, PARAMETER :: jpmes = 12 !: Mesozooplankton Concentration 106 INTEGER, PUBLIC, PARAMETER :: jpdsi = 13 !: Diatoms Silicate Concentration 107 INTEGER, PUBLIC, PARAMETER :: jpfer = 14 !: Iron Concentration 108 INTEGER, PUBLIC, PARAMETER :: jpbfe = 15 !: Big iron particles Concentration 109 INTEGER, PUBLIC, PARAMETER :: jpgoc = 16 !: big particulate organic phosphate concentration 110 INTEGER, PUBLIC, PARAMETER :: jpsfe = 17 !: Small iron particles Concentration 111 INTEGER, PUBLIC, PARAMETER :: jpdfe = 18 !: Diatoms iron Concentration 112 INTEGER, PUBLIC, PARAMETER :: jpgsi = 19 !: (big) Silicate Concentration 113 INTEGER, PUBLIC, PARAMETER :: jpnfe = 20 !: Nano iron Concentration 114 INTEGER, PUBLIC, PARAMETER :: jpnch = 21 !: Nano Chlorophyll Concentration 115 INTEGER, PUBLIC, PARAMETER :: jpdch = 22 !: Diatoms Chlorophyll Concentration 116 INTEGER, PUBLIC, PARAMETER :: jpno3 = 23 !: Nitrates Concentration 117 INTEGER, PUBLIC, PARAMETER :: jpnh4 = 24 !: Ammonium Concentration 118 INTEGER, PUBLIC, PARAMETER :: jpn2o = 25 !: Nitrous Oxide Concentration 119 INTEGER, PUBLIC, PARAMETER :: jpdms = 26 !: Dimethylsulfide Concentration 120 INTEGER, PUBLIC, PARAMETER :: jpco = 27 !: Carbon Monoxide Concentration 121 INTEGER, PUBLIC, PARAMETER :: jpisp = 28 !: Isoprene Concentration 122 INTEGER, PUBLIC, PARAMETER :: jpcos = 29 !: Carbonyl Sulfide Concentration 123 77 124 #elif defined key_pisces 78 125 !!--------------------------------------------------------------------- … … 82 129 LOGICAL, PUBLIC, PARAMETER :: lk_p4z = .TRUE. !: p4z flag 83 130 LOGICAL, PUBLIC, PARAMETER :: lk_kriest = .FALSE. !: Kriest flag 131 LOGICAL, PUBLIC, PARAMETER :: lk_gas = .FALSE. !: Gas flag 84 132 INTEGER, PUBLIC, PARAMETER :: jp_pisces = 24 !: number of PISCES passive tracers 85 133 INTEGER, PUBLIC, PARAMETER :: jp_pisces_2d = 13 !: additional 2d output -
branches/CNRS/dev_r6526_PISCES_GAS/NEMOGCM/NEMO/TOP_SRC/PISCES/sms_pisces.F90
r6287 r6530 108 108 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: tgfunc2 !: Temp. dependancy of mesozooplankton rates 109 109 110 REAL(wp) :: alphan2o 111 REAL(wp) :: betan2o 112 REAL(wp) :: xhigh 113 REAL(wp) :: xlow 114 REAL(wp) :: sinkn2o 115 ! 116 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimbac2 !: ??? 117 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimdms !: ?? 118 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xcelln !: ?? 119 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xcelld !: ?? 120 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xeffic !: ?? 121 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xn2osub !: Jin formualtion for N2O production 122 123 110 124 #if defined key_kriest 111 125 !!* Kriest parameter for aggregation … … 130 144 !!---------------------------------------------------------------------- 131 145 USE lib_mpp , ONLY: ctl_warn 132 INTEGER :: ierr( 5) ! Local variables146 INTEGER :: ierr(6) ! Local variables 133 147 !!---------------------------------------------------------------------- 134 148 ierr(:) = 0 … … 162 176 ALLOCATE( tgfunc(jpi,jpj,jpk) , tgfunc2(jpi,jpj,jpk) , STAT=ierr(5) ) 163 177 ! 178 179 !* SMS for GAS 180 IF( lk_gas ) THEN 181 ALLOCATE( xlimbac2(jpi,jpj,jpk), xcelln (jpi,jpj,jpk), & 182 & xcelld (jpi,jpj,jpk), xlimdms(jpi,jpj,jpk), & 183 & xeffic (jpi,jpj,jpk), xn2osub(jpi,jpj,jpk), STAT=ierr(6) ) 184 ENDIF 185 164 186 #endif 165 187 ! -
branches/CNRS/dev_r6526_PISCES_GAS/NEMOGCM/NEMO/TOP_SRC/PISCES/trcini_pisces.F90
r6324 r6530 153 153 trn(:,:,:,jpnh4) = bioma0 154 154 155 IF( lk_gas ) THEN 156 trn(:,:,:,jpdms) = bioma0 / 1.e2 157 trn(:,:,:,jpco) = bioma0 / 1.e2 158 trn(:,:,:,jpisp) = bioma0 / 1.e4 159 trn(:,:,:,jpcos) = bioma0 / 1.e4 160 trn(:,:,:,jpn2o) = 10.e-9 161 ENDIF 162 155 163 ! initialize the half saturation constant for silicate 156 164 ! ----------------------------------------------------
Note: See TracChangeset
for help on using the changeset viewer.