diff --git a/source/model/init_var_mod.f90 b/source/model/init_var_mod.f90 index c0d838cd48e12d4a7df0385c161d08b11cc24bb9..09f7083a608dd1bcbc69019e63787453607efc35 100644 --- a/source/model/init_var_mod.f90 +++ b/source/model/init_var_mod.f90 @@ -289,10 +289,10 @@ & Henry_temp_ref, Tb0 + Kelvin0) ! Saturated concentration at the bottom do i = 1, M+1 if (i <= i_ML) then - qwater(i) = ch4_atm0 ! Atmospheric concentration + qwater(i) = 0. !ch4_atm0 ! Atmospheric concentration else - qwater(i) = qwater(max(i_ML,1)) + & - & (ch4_bot - qwater(max(i_ML,1)))*(h_ML0 - dzeta_int(i)*h10)/(h_ML0 - h10) + qwater(i) = 0. !qwater(max(i_ML,1)) + & + !& (ch4_bot - qwater(max(i_ML,1)))*(h_ML0 - dzeta_int(i)*h10)/(h_ML0 - h10) endif enddo else @@ -351,9 +351,9 @@ if (init_T /= 3) then do i = 1, M+1 if (i <= i_ML) then - oxyg(i) = o2_atm0 ! Atmospheric concentration + oxyg(i) = 0. !o2_atm0 ! Atmospheric concentration else - oxyg(i) = oxyg(max(i_ML,1)) - oxyg(max(i_ML,1))*(h_ML0 - dzeta_int(i)*h10)/(h_ML0 - h10) + oxyg(i) = 0. !oxyg(max(i_ML,1)) - oxyg(max(i_ML,1))*(h_ML0 - dzeta_int(i)*h10)/(h_ML0 - h10) endif oxyg(i) = max(oxyg(i),small_value) enddo diff --git a/source/model/lake.f90 b/source/model/lake.f90 index 9bce7427feba6c3b5e47c27b5f548f0050d2b2c5..b4c638dcaaad7b85a61b08480d5bc781f6adecab 100644 --- a/source/model/lake.f90 +++ b/source/model/lake.f90 @@ -989,20 +989,6 @@ if (soilswitch%par == 1) then & bathymwater,bathymice,bathymdice,bathymsoil, & & gsp,o2soilflux, .true.,lso) endif - gs%isoilcol = nsoilcols - call METHANE & - & (gas,pressure,wind10,ch4_pres_atm,zsoil,Tsoil3(1,nsoilcols),rosoil,fbbleflx_ch4_sum, & - & fbbleflx_ch4(0,nsoilcols),wl4(1,nsoilcols),wi2(1,nsoilcols),wa,Sals2, & - & rootss,rosdry,por,veg,0._ireals,TgrAnn, methgenmh, & - & ddz,ddz05,wst, lammeth, h1, ls, dhw, dhw0, .true., .false., & - & lsm, bathymwater, & - & fplant, febul0(nsoilcols), fdiffbot(nsoilcols), ftot, fdiff_lake_surf, & - & plant_sum,bull_sum,oxid_sum,rprod_sum, & - & anox,gs,gsp,dt,eps1(1),sodbot,rprod_total_oldC,rprod_total_newC, & - & ice_meth_oxid_total, & - & h_talik,tot_ice_meth_bubbles,add_to_winter) - qmethane(1:M+1) = qwater(1:M+1,2) - qmethane(M+2:M+ns) = qsoil(2:ns,nsoilcols) !call METHANE2 & ! two-meth !& (pressure,wind10,zsoil,Tsoil3,wl4,wi2,wa,rootss,rosdry,por,veg,qsoil2,TgrAnn, & ! two-meth !& ddz, Tw2, lammeth, qwater2, h1, l1, ls1, dhw, dhw0, & ! two-meth @@ -1012,11 +998,22 @@ if (soilswitch%par == 1) then !& h_talik,tot_ice_meth_bubbles2) ! two-meth !qmethane(1:M+1) = qwater2(1:M+1,2,1) + qwater2(1:M+1,2,2) ! two-meth !qmethane(M+2:M+ns) = qsoil2(2:ns,1) + qsoil2(2:ns,2) ! two-meth -else - qwater(:,2) = qwater(:,1) - qmethane(1:M+1) = qwater(1:M+1,2) - qmethane(M+2:M+ns) = qsoil(2:ns,nsoilcols) endif +gs%isoilcol = nsoilcols +call METHANE & +& (gas,pressure,wind10,ch4_pres_atm,zsoil,Tsoil3(1,nsoilcols),rosoil,fbbleflx_ch4_sum, & +& fbbleflx_ch4(0,nsoilcols),wl4(1,nsoilcols),wi2(1,nsoilcols),wa,Sals2, & +& rootss,rosdry,por,veg,0._ireals,TgrAnn, methgenmh, & +& ddz,ddz05,wst, lammeth, h1, ls, dhw, dhw0, .true., .false., & +& lsm, bathymwater, & +& fplant, febul0(nsoilcols), fdiffbot(nsoilcols), ftot, fdiff_lake_surf, & +& plant_sum,bull_sum,oxid_sum,rprod_sum, & +& anox,gs,gsp,dt,eps1(1),sodbot,rprod_total_oldC,rprod_total_newC, & +& ice_meth_oxid_total, & +& h_talik,tot_ice_meth_bubbles,add_to_winter) +qmethane(1:M+1) = qwater(1:M+1,2) +qmethane(M+2:M+ns) = qsoil(2:ns,nsoilcols) + !call ADDOXPRODCONS(M,i_maxN,H_mixed_layer,H_photic_zone,prodox,resp,bod,sod,RadWater,dt,ls,gas) call OXYGEN (gs, Tw2, fbbleflx_o2_sum, fbbleflx_o2(0,nsoilcols), lamoxyg, gsp, fracb0, pressure, wind10, & & o2_pres_atm, ls, bathymwater, lso, dt, febul0(nsoilcols), eps1(1), sodbot, oxyg, soilswitch%par, fo2) !Foxyg1) !Foxyg1 added by DG @@ -1368,20 +1365,6 @@ if (flag_snow == 1) then & bathymwater,bathymice,bathymdice,bathymsoil, & & gsp,o2soilflux, .true.,lso) endif - gs%isoilcol = nsoilcols - call METHANE & - & (gas,pressure,wind10,ch4_pres_atm,zsoil,Tsoil3(1,nsoilcols),rosoil,fbbleflx_ch4_sum, & - & fbbleflx_ch4(0,nsoilcols),wl4(1,nsoilcols),wi2(1,nsoilcols),wa,Sals2, & - & rootss,rosdry,por,veg,0._ireals,TgrAnn, methgenmh, & - & ddz,ddz05,wst, lammeth, h1, ls, dhw, dhw0, .true., .false. ,& - & lsm, bathymwater, & - & fplant, febul0(nsoilcols), fdiffbot(nsoilcols), ftot, fdiff_lake_surf, & - & plant_sum,bull_sum,oxid_sum,rprod_sum, & - & anox,gs,gsp,dt,eps1(1),sodbot,rprod_total_oldC,rprod_total_newC, & - & ice_meth_oxid_total, & - & h_talik,tot_ice_meth_bubbles,add_to_winter) - qmethane(1:M+1) = qwater(1:M+1,2) - qmethane(M+2:M+ns) = qsoil(2:ns,nsoilcols) ! call METHANE2 & ! two-meth ! & (pressure,wind10,zsoil,Tsoil3,wl4,wi2,wa,rootss,rosdry,por,veg,qsoil2,TgrAnn, & ! two-meth ! & ddz, Tw2, lammeth, qwater2, h1, l1, ls1, dhw, dhw0, & ! two-meth @@ -1391,11 +1374,21 @@ if (flag_snow == 1) then ! & h_talik,tot_ice_meth_bubbles2) ! two-meth ! qmethane(1:M+1) = qwater2(1:M+1,2,1) + qwater2(1:M+1,2,2) ! two-meth ! qmethane(M+2:M+ns) = qsoil2(2:ns,1) + qsoil2(2:ns,2) ! two-meth - else - qwater(:,2) = qwater(:,1) - qmethane(1:M+1) = qwater(1:M+1,2) - qmethane(M+2:M+ns) = qsoil(2:ns,nsoilcols) endif + gs%isoilcol = nsoilcols + call METHANE & + & (gas,pressure,wind10,ch4_pres_atm,zsoil,Tsoil3(1,nsoilcols),rosoil,fbbleflx_ch4_sum, & + & fbbleflx_ch4(0,nsoilcols),wl4(1,nsoilcols),wi2(1,nsoilcols),wa,Sals2, & + & rootss,rosdry,por,veg,0._ireals,TgrAnn, methgenmh, & + & ddz,ddz05,wst, lammeth, h1, ls, dhw, dhw0, .true., .false. ,& + & lsm, bathymwater, & + & fplant, febul0(nsoilcols), fdiffbot(nsoilcols), ftot, fdiff_lake_surf, & + & plant_sum,bull_sum,oxid_sum,rprod_sum, & + & anox,gs,gsp,dt,eps1(1),sodbot,rprod_total_oldC,rprod_total_newC, & + & ice_meth_oxid_total, & + & h_talik,tot_ice_meth_bubbles,add_to_winter) + qmethane(1:M+1) = qwater(1:M+1,2) + qmethane(M+2:M+ns) = qsoil(2:ns,nsoilcols) !call ADDOXPRODCONS(M,i_maxN,H_mixed_layer,H_photic_zone,prodox,resp,bod,sod,RadWater,dt,ls,gas) call OXYGEN (gs, Tw2, fbbleflx_o2_sum, fbbleflx_o2(0,nsoilcols), lamoxyg, gsp, fracb0, pressure, wind10, & & o2_pres_atm, ls, bathymwater, lso, dt, febul0(nsoilcols), eps1(1), sodbot, oxyg, soilswitch%par, fo2) !, Foxyg1) !Foxyg1 added by DG @@ -1632,20 +1625,6 @@ else & bathymwater,bathymice,bathymdice,bathymsoil, & & gsp,o2soilflux, .true.,lso) endif - gs%isoilcol = nsoilcols - call METHANE & - & (gas,pressure,wind10,ch4_pres_atm,zsoil,Tsoil3(1,nsoilcols),rosoil,fbbleflx_ch4_sum, & - & fbbleflx_ch4(0,nsoilcols),wl4(1,nsoilcols),wi2(1,nsoilcols),wa,Sals2, & - & rootss,rosdry,por,veg,0._ireals,TgrAnn, methgenmh, & - & ddz,ddz05,wst, lammeth, h1, ls, dhw, dhw0, .true., .false., & - & lsm, bathymwater, & - & fplant, febul0(nsoilcols), fdiffbot(nsoilcols), ftot, fdiff_lake_surf, & - & plant_sum,bull_sum,oxid_sum,rprod_sum, & - & anox,gs,gsp,dt,eps1(1),sodbot,rprod_total_oldC,rprod_total_newC, & - & ice_meth_oxid_total, & - & h_talik,tot_ice_meth_bubbles,add_to_winter) - qmethane(1:M+1) = qwater(1:M+1,2) - qmethane(M+2:M+ns) = qsoil(2:ns,nsoilcols) ! call METHANE2 & ! two-meth ! & (pressure,wind10,zsoil,Tsoil3,wl4,wi2,wa,rootss,rosdry,por,veg,qsoil2,TgrAnn, & ! two-meth ! & ddz, Tw2, lammeth, qwater2, h1, l1, ls1, dhw, dhw0, & ! two-meth @@ -1655,11 +1634,22 @@ else ! & h_talik,tot_ice_meth_bubbles2) ! two-meth ! qmethane(1:M+1) = qwater2(1:M+1,2,1) + qwater2(1:M+1,2,2) ! two-meth ! qmethane(M+2:M+ns) = qsoil2(2:ns,1) + qsoil2(2:ns,2) ! two-meth - else - qwater(:,2) = qwater(:,1) - qmethane(1:M+1) = qwater(1:M+1,2) - qmethane(M+2:M+ns) = qsoil(2:ns,nsoilcols) endif + gs%isoilcol = nsoilcols + call METHANE & + & (gas,pressure,wind10,ch4_pres_atm,zsoil,Tsoil3(1,nsoilcols),rosoil,fbbleflx_ch4_sum, & + & fbbleflx_ch4(0,nsoilcols),wl4(1,nsoilcols),wi2(1,nsoilcols),wa,Sals2, & + & rootss,rosdry,por,veg,0._ireals,TgrAnn, methgenmh, & + & ddz,ddz05,wst, lammeth, h1, ls, dhw, dhw0, .true., .false., & + & lsm, bathymwater, & + & fplant, febul0(nsoilcols), fdiffbot(nsoilcols), ftot, fdiff_lake_surf, & + & plant_sum,bull_sum,oxid_sum,rprod_sum, & + & anox,gs,gsp,dt,eps1(1),sodbot,rprod_total_oldC,rprod_total_newC, & + & ice_meth_oxid_total, & + & h_talik,tot_ice_meth_bubbles,add_to_winter) + qmethane(1:M+1) = qwater(1:M+1,2) + qmethane(M+2:M+ns) = qsoil(2:ns,nsoilcols) + !call ADDOXPRODCONS(M,i_maxN,H_mixed_layer,H_photic_zone,prodox,resp,bod,sod,RadWater,dt,ls,gas) call OXYGEN (gs, Tw2, fbbleflx_o2_sum, fbbleflx_o2(0,nsoilcols), lamoxyg, gsp, fracb0, pressure, wind10, & & o2_pres_atm, ls, bathymwater, lso, dt, febul0(nsoilcols), eps1(1), sodbot, oxyg, soilswitch%par, fo2) !, Foxyg1) !Foxyg1 added by DG @@ -1829,20 +1819,6 @@ if (flag_snow == 1) then & snowmass_init,a,b,c,d,Temp,phi,fetch,dt) if (soilswitch%par == 1) then call BUBBLE_BLOCK - gs%isoilcol = nsoilcols - call METHANE & - & (gas,pressure,wind10,ch4_pres_atm,zsoil,Tsoil3(1,nsoilcols),rosoil,fbbleflx_ch4_sum, & - & fbbleflx_ch4(0,nsoilcols),wl4(1,nsoilcols),wi2(1,nsoilcols),wa,Sals2, & - & rootss,rosdry,por,veg,0._ireals,TgrAnn, methgenmh, & - & ddz,ddz05,wst, lammeth, h1, ls, dhw, dhw0, .true., .false., & - & lsm, bathymwater, & - & fplant, febul0(nsoilcols), fdiffbot(nsoilcols), ftot, fdiff_lake_surf, & - & plant_sum,bull_sum,oxid_sum,rprod_sum, & - & anox,gs,gsp,dt,eps1(1),sodbot,rprod_total_oldC,rprod_total_newC, & - & ice_meth_oxid_total, & - & h_talik,tot_ice_meth_bubbles,add_to_winter) - qmethane(1:M+1) = qwater(1:M+1,2) - qmethane(M+2:M+ns) = qsoil(2:ns,nsoilcols) ! call METHANE2 & ! two-meth ! & (pressure,wind10,zsoil,Tsoil3,wl4,wi2,wa,rootss,rosdry,por,veg,qsoil2,TgrAnn, & ! two-meth ! & ddz, Tw2, lammeth, qwater2, h1, l1, ls1, dhw, dhw0, & ! two-meth @@ -1853,6 +1829,21 @@ if (flag_snow == 1) then ! qmethane(1:M+1) = qwater2(1:M+1,2,1) + qwater2(1:M+1,2,2) ! two-meth ! qmethane(M+2:M+ns) = qsoil2(2:ns,1) + qsoil2(2:ns,2) ! two-meth endif + gs%isoilcol = nsoilcols + call METHANE & + & (gas,pressure,wind10,ch4_pres_atm,zsoil,Tsoil3(1,nsoilcols),rosoil,fbbleflx_ch4_sum, & + & fbbleflx_ch4(0,nsoilcols),wl4(1,nsoilcols),wi2(1,nsoilcols),wa,Sals2, & + & rootss,rosdry,por,veg,0._ireals,TgrAnn, methgenmh, & + & ddz,ddz05,wst, lammeth, h1, ls, dhw, dhw0, .true., .false., & + & lsm, bathymwater, & + & fplant, febul0(nsoilcols), fdiffbot(nsoilcols), ftot, fdiff_lake_surf, & + & plant_sum,bull_sum,oxid_sum,rprod_sum, & + & anox,gs,gsp,dt,eps1(1),sodbot,rprod_total_oldC,rprod_total_newC, & + & ice_meth_oxid_total, & + & h_talik,tot_ice_meth_bubbles,add_to_winter) + qmethane(1:M+1) = qwater(1:M+1,2) + qmethane(M+2:M+ns) = qsoil(2:ns,nsoilcols) + l2 = l1 + dhi h2 = h1 + dhw @@ -1910,20 +1901,6 @@ else if (soilswitch%par == 1) then call SOILFORLAKE(dt,a,b,c,d,nsoilcols) call BUBBLE_BLOCK - gs%isoilcol = nsoilcols - call METHANE & - & (gas,pressure,wind10,ch4_pres_atm,zsoil,Tsoil3(1,nsoilcols),rosoil,fbbleflx_ch4_sum, & - & fbbleflx_ch4(0,nsoilcols), wl4(1,nsoilcols),wi2(1,nsoilcols),wa,Sals2, & - & rootss,rosdry,por,veg,0._ireals,TgrAnn, methgenmh, & - & ddz,ddz05,wst, lammeth, h1, ls, dhw, dhw0, .true., .false., & - & lsm, bathymwater, & - & fplant, febul0(nsoilcols), fdiffbot(nsoilcols), ftot, fdiff_lake_surf, & - & plant_sum,bull_sum,oxid_sum,rprod_sum, & - & anox,gs,gsp,dt,eps1(1),sodbot,rprod_total_oldC,rprod_total_newC, & - & ice_meth_oxid_total, & - & h_talik,tot_ice_meth_bubbles,add_to_winter) - qmethane(1:M+1) = qwater(1:M+1,2) - qmethane(M+2:M+ns) = qsoil(2:ns,nsoilcols) ! call METHANE2 & ! two-meth ! & (pressure,wind10,zsoil,Tsoil3,wl4,wi2,wa,rootss,rosdry,por,veg,qsoil2,TgrAnn, & ! two-meth ! & ddz, Tw2, lammeth, qwater2, h1, l1, ls1, dhw, dhw0, & ! two-meth @@ -1934,7 +1911,21 @@ else ! qmethane(1:M+1) = qwater2(1:M+1,2,1) + qwater2(1:M+1,2,2) ! two-meth ! qmethane(M+2:M+ns) = qsoil2(2:ns,1) + qsoil2(2:ns,2) ! two-meth endif - + gs%isoilcol = nsoilcols + call METHANE & + & (gas,pressure,wind10,ch4_pres_atm,zsoil,Tsoil3(1,nsoilcols),rosoil,fbbleflx_ch4_sum, & + & fbbleflx_ch4(0,nsoilcols), wl4(1,nsoilcols),wi2(1,nsoilcols),wa,Sals2, & + & rootss,rosdry,por,veg,0._ireals,TgrAnn, methgenmh, & + & ddz,ddz05,wst, lammeth, h1, ls, dhw, dhw0, .true., .false., & + & lsm, bathymwater, & + & fplant, febul0(nsoilcols), fdiffbot(nsoilcols), ftot, fdiff_lake_surf, & + & plant_sum,bull_sum,oxid_sum,rprod_sum, & + & anox,gs,gsp,dt,eps1(1),sodbot,rprod_total_oldC,rprod_total_newC, & + & ice_meth_oxid_total, & + & h_talik,tot_ice_meth_bubbles,add_to_winter) + qmethane(1:M+1) = qwater(1:M+1,2) + qmethane(M+2:M+ns) = qsoil(2:ns,nsoilcols) + l2 = l1 + dhi h2 = h1 + dhw ls2 = 0. @@ -1969,20 +1960,6 @@ if4: IF (layer_case==4) THEN & snowmass_init,a,b,c,d,Temp,phi,fetch,dt) if (soilswitch%par == 1) then call BUBBLE_BLOCK - gs%isoilcol = nsoilcols - call METHANE & - & (gas,pressure,wind10,ch4_pres_atm,zsoil,Tsoil3(1,nsoilcols),rosoil,fbbleflx_ch4_sum, & - & fbbleflx_ch4(0,nsoilcols),wl4(1,nsoilcols),wi2(1,nsoilcols),wa,Sals2, & - & rootss,rosdry,por,veg,0._ireals,TgrAnn, methgenmh, & - & ddz,ddz05,wst, lammeth, h1, ls, dhw, dhw0, .true., .false., & - & lsm, bathymwater, & - & fplant, febul0(nsoilcols), fdiffbot(nsoilcols), ftot, fdiff_lake_surf, & - & plant_sum,bull_sum,oxid_sum,rprod_sum, & - & anox,gs,gsp,dt,eps1(1),sodbot,rprod_total_oldC,rprod_total_newC, & - & ice_meth_oxid_total, & - & h_talik,tot_ice_meth_bubbles,add_to_winter) - qmethane(1:M+1) = qwater(1:M+1,2) - qmethane(M+2:M+ns) = qsoil(2:ns,nsoilcols) ! call METHANE2 & ! two-meth ! & (pressure,wind10,zsoil,Tsoil3,wl4,wi2,wa,rootss,rosdry,por,veg,qsoil2,TgrAnn, & ! two-meth ! & ddz, Tw2, lammeth, qwater2, h1, l1, ls1, dhw, dhw0, & ! two-meth @@ -1993,6 +1970,21 @@ if4: IF (layer_case==4) THEN ! qmethane(1:M+1) = qwater2(1:M+1,2,1) + qwater2(1:M+1,2,2) ! two-meth ! qmethane(M+2:M+ns) = qsoil2(2:ns,1) + qsoil2(2:ns,2) ! two-meth endif + gs%isoilcol = nsoilcols + call METHANE & + & (gas,pressure,wind10,ch4_pres_atm,zsoil,Tsoil3(1,nsoilcols),rosoil,fbbleflx_ch4_sum, & + & fbbleflx_ch4(0,nsoilcols),wl4(1,nsoilcols),wi2(1,nsoilcols),wa,Sals2, & + & rootss,rosdry,por,veg,0._ireals,TgrAnn, methgenmh, & + & ddz,ddz05,wst, lammeth, h1, ls, dhw, dhw0, .true., .false., & + & lsm, bathymwater, & + & fplant, febul0(nsoilcols), fdiffbot(nsoilcols), ftot, fdiff_lake_surf, & + & plant_sum,bull_sum,oxid_sum,rprod_sum, & + & anox,gs,gsp,dt,eps1(1),sodbot,rprod_total_oldC,rprod_total_newC, & + & ice_meth_oxid_total, & + & h_talik,tot_ice_meth_bubbles,add_to_winter) + qmethane(1:M+1) = qwater(1:M+1,2) + qmethane(M+2:M+ns) = qsoil(2:ns,nsoilcols) + else ice = 0; snow = 0; water = 0; deepice = 0 @@ -2008,19 +2000,6 @@ if4: IF (layer_case==4) THEN if (soilswitch%par == 1) then call SOILFORLAKE(dt,a,b,c,d,nsoilcols) call BUBBLE_BLOCK - gs%isoilcol = nsoilcols - call METHANE(gas,pressure,wind10,ch4_pres_atm,zsoil,Tsoil3(1,nsoilcols),rosoil,fbbleflx_ch4_sum, & - & fbbleflx_ch4(0,nsoilcols),wl4(1,nsoilcols),wi2(1,nsoilcols),wa,Sals2, & - & rootss,rosdry,por,veg,0._ireals,TgrAnn, methgenmh, & - & ddz,ddz05,wst, lammeth, h1, ls, dhw, dhw0, .true., .false., & - & lsm, bathymwater, & - & fplant, febul0(nsoilcols), fdiffbot(nsoilcols), ftot, fdiff_lake_surf, & - & plant_sum,bull_sum,oxid_sum,rprod_sum, & - & anox,gs,gsp,dt,eps1(1),sodbot,rprod_total_oldC,rprod_total_newC, & - & ice_meth_oxid_total, & - & h_talik,tot_ice_meth_bubbles,add_to_winter) - qmethane(1:M+1) = qwater(1:M+1,2) - qmethane(M+2:M+ns) = qsoil(2:ns,nsoilcols) ! call METHANE2 & ! two-meth ! & (pressure,wind10,zsoil,Tsoil3,wl4,wi2,wa,rootss,rosdry,por,veg,qsoil2,TgrAnn, & ! two-meth ! & ddz, Tw2, lammeth, qwater2, h1, l1, ls1, dhw, dhw0, & ! two-meth @@ -2031,6 +2010,20 @@ if4: IF (layer_case==4) THEN ! qmethane(1:M+1) = qwater2(1:M+1,2,1) + qwater2(1:M+1,2,2) ! two-meth ! qmethane(M+2:M+ns) = qsoil2(2:ns,1) + qsoil2(2:ns,2) ! two-meth endif + gs%isoilcol = nsoilcols + call METHANE(gas,pressure,wind10,ch4_pres_atm,zsoil,Tsoil3(1,nsoilcols),rosoil,fbbleflx_ch4_sum, & + & fbbleflx_ch4(0,nsoilcols),wl4(1,nsoilcols),wi2(1,nsoilcols),wa,Sals2, & + & rootss,rosdry,por,veg,0._ireals,TgrAnn, methgenmh, & + & ddz,ddz05,wst, lammeth, h1, ls, dhw, dhw0, .true., .false., & + & lsm, bathymwater, & + & fplant, febul0(nsoilcols), fdiffbot(nsoilcols), ftot, fdiff_lake_surf, & + & plant_sum,bull_sum,oxid_sum,rprod_sum, & + & anox,gs,gsp,dt,eps1(1),sodbot,rprod_total_oldC,rprod_total_newC, & + & ice_meth_oxid_total, & + & h_talik,tot_ice_meth_bubbles,add_to_winter) + qmethane(1:M+1) = qwater(1:M+1,2) + qmethane(M+2:M+ns) = qsoil(2:ns,nsoilcols) + endif ENDIF if4 diff --git a/source/model/methane_mod.f90 b/source/model/methane_mod.f90 index e3a9c6355e1d2dbcecabbec537c629257804b0c4..8861b965ca71e10f991ca75ca6472eee70d27c45 100644 --- a/source/model/methane_mod.f90 +++ b/source/model/methane_mod.f90 @@ -22,7 +22,8 @@ use DRIVING_PARAMS , only : & & missing_value, & & thermokarst_meth_prod, & ! Switch for old organics methane production for thermokarst lakes & tricemethhydr, & -& soil_meth_prod ! Switch for methane production from new organics +& soil_meth_prod, & ! Switch for methane production from new organics +& soilswitch use PHYS_CONSTANTS, only : & & row0, g, row0, roa0, roi, & @@ -227,6 +228,12 @@ implicit none real(kind=ireals), pointer :: qsoil(:), qwater(:,:), Twater(:), u(:), v(:) + + if (soilswitch%par == 0 .and. botflux_ch4 == missing_value) then + print*, 'If sediments are deactivated, methane flux at bottom must be prescribed: STOP' + stop + endif + ! Constant of methane production in sediments is set differently for ! sediments in photic zone and underneath dz_ = ls%H_photic_zone - h1 @@ -248,6 +255,8 @@ implicit none ! dhw = 0.; dhw0 = 0. + soilswitch_if: if (soilswitch%par == 1) then + z(:) = zsoil(:) roots(:) = rootss(:) @@ -601,6 +610,55 @@ forall (i = 1:gs%ns, z(i) > rnroot) forg(i) = veg * exp((rnroot - z(i))*10.) q_old(i) = qsoil(i) end do +! ============================================================ +! the methane flux due to plant-mediated transport +! =================fplant(t)================================== +! do i = ms,ml +! qplant(i) = rkp*tveg*froot(i)*fgrow* +! * (1.-0.5)*qsoil(i) +! end do + +!============================================================= +! the methane flux due to ebullition +!=================febul(t)==================================== + + qebul(:) = 0. + do i = 1, gs%ns !ms, ml + if (wl(i) .gt. anox_crit(i)) then + qebul(i) = bull(i)*(q_old(i) - ch4_crit(i)) ! cthresh -> ch4_crit(i), according to explicit scheme + endif + end do + +!Methane bubble flux at the bottom + febul0 = 0. + do i = 2, gs%ns-1 !ms+1, ml +! if(wl(i) .gt. anox_crit(i)) then +! if(z(i).ge.w) then +! The original statement is replaced by the grid-consistent one +! febul = febul + 0.5*(z(i)-z(i-1))*(qebul(i)+qebul(i-1)) + febul0 = febul0 + 0.5*(z(i+1)-z(i-1))*qebul(i) +! end if + end do + febul0 = febul0 + qebul(1)*0.5*(z(2)-z(1)) + febul0 = febul0 + qebul(gs%ns)*0.5*(z(gs%ns)-z(gs%ns-1)) + + else + + febul0 = 0. + + endif soilswitch_if + + if (deepestsoil) then + ! Adding bubble flux from the lowest soil column to horizontally averaged bubble flux + if (gs%nsoilcols > 1) then + call BUBBLEFLUXAVER(gs%ix,gs%iy,gs%nsoilcols) + else + fbbleflx_ch4_sum(0) = febul0*fbbleflx_ch4(0) *bathymwater(1) %area_int + fbbleflx_ch4_sum(1:gs%M) = febul0*fbbleflx_ch4(1:gs%M)*bathymwater(1:gs%M)%area_half + fbbleflx_ch4_sum(gs%M+1) = febul0*fbbleflx_ch4(gs%M+1)*bathymwater(gs%M+1)%area_int + endif + endif + ! ============================================================= ! set up the tridiagonal system of equations ! ============================================================= @@ -885,53 +943,24 @@ endif !print*, Flux_atm -! ============================================================ -! the methane flux due to plant-mediated transport -! =================fplant(t)================================== -! do i = ms,ml -! qplant(i) = rkp*tveg*froot(i)*fgrow* -! * (1.-0.5)*qsoil(i) -! end do - -!============================================================= -! the methane flux due to ebullition -!=================febul(t)==================================== - - qebul(:) = 0. - do i = 1, gs%ns !ms, ml - if (wl(i) .gt. anox_crit(i)) then - qebul(i) = bull(i)*(q_old(i) - ch4_crit(i)) ! cthresh -> ch4_crit(i), according to explicit scheme - endif - end do - -!Methane bubble flux at the bottom - febul0 = 0. - do i = 2, gs%ns-1 !ms+1, ml -! if(wl(i) .gt. anox_crit(i)) then -! if(z(i).ge.w) then -! The original statement is replaced by the grid-consistent one -! febul = febul + 0.5*(z(i)-z(i-1))*(qebul(i)+qebul(i-1)) - febul0 = febul0 + 0.5*(z(i+1)-z(i-1))*qebul(i) -! end if - end do - febul0 = febul0 + qebul(1)*0.5*(z(2)-z(1)) - febul0 = febul0 + qebul(gs%ns)*0.5*(z(gs%ns)-z(gs%ns-1)) fplant = 0. - do i = 2, gs%ns-1 !ms+1, ml-1 - fplant = fplant + 0.5*(z(i+1)-z(i-1))*plant(i)*0.5*(qsoil(i) + q_old(i)) * (1 - pox) !* veg - end do + if (soilswitch%par == 1) then + do i = 2, gs%ns-1 !ms+1, ml-1 + fplant = fplant + 0.5*(z(i+1)-z(i-1))*plant(i)*0.5*(qsoil(i) + q_old(i)) * (1 - pox) !* veg + end do + endif ifdeep : if (deepestsoil) then - ! Adding bubble flux from the lowest soil column to horizontally averaged bubble flux - if (gs%nsoilcols > 1) then - call BUBBLEFLUXAVER(gs%ix,gs%iy,gs%nsoilcols) - else - fbbleflx_ch4_sum(0) = febul0*fbbleflx_ch4(0) *bathymwater(1) %area_int - fbbleflx_ch4_sum(1:gs%M) = febul0*fbbleflx_ch4(1:gs%M)*bathymwater(1:gs%M)%area_half - fbbleflx_ch4_sum(gs%M+1) = febul0*fbbleflx_ch4(gs%M+1)*bathymwater(gs%M+1)%area_int - endif + !! Adding bubble flux from the lowest soil column to horizontally averaged bubble flux + !if (gs%nsoilcols > 1) then + ! call BUBBLEFLUXAVER(gs%ix,gs%iy,gs%nsoilcols) + !else + ! fbbleflx_ch4_sum(0) = febul0*fbbleflx_ch4(0) *bathymwater(1) %area_int + ! fbbleflx_ch4_sum(1:gs%M) = febul0*fbbleflx_ch4(1:gs%M)*bathymwater(1:gs%M)%area_half + ! fbbleflx_ch4_sum(gs%M+1) = febul0*fbbleflx_ch4(gs%M+1)*bathymwater(gs%M+1)%area_int + !endif !The second step of splitting-up scheme - bubble dissolution source in water column if (h1 > 0.) then @@ -994,9 +1023,12 @@ endif ifdeep ! & diff(2)*(qsoil(2) - qsoil(1))*2./(z(2)-z(1)) + & ! & xx*( - qebul(1) - plant(1)*qsoil(1) + rprod(1) - oxid(1)*qsoil(1)) - - fdiff1 = - 0.5*diff(gs%ns)*(qsoil(gs%ns) + q_old(gs%ns) - qsoil(gs%ns-1) - q_old(gs%ns-1))/ & ! ml - & (z(gs%ns) - z(gs%ns-1)) + if (soilswitch%par == 1) then + fdiff1 = - 0.5*diff(gs%ns)*(qsoil(gs%ns) + q_old(gs%ns) - qsoil(gs%ns-1) - q_old(gs%ns-1))/ & ! ml + & (z(gs%ns) - z(gs%ns-1)) + else + fdiff1 = 0. + endif ! =============================================================== ! total methane emission ftot @@ -1008,6 +1040,13 @@ endif ifdeep ftot = fdiff_lake_surf + fbbleflx_ch4_sum(0)/bathymwater(1)%area_int + fplant endif + ! Water methane content + do i = 1, gs%M+1 + q_sum_new = q_sum_new + qwater(i,2)*h1*ddz05(i-1) + enddo + + if (soilswitch%par == 1) then + q_sum_new = 0. do i = 2, gs%ns-1 !ms+1, ml-1 q_sum_new = q_sum_new + qsoil(i)*0.5*(z(i+1)-z(i-1)) @@ -1015,11 +1054,6 @@ endif ifdeep q_sum_new = q_sum_new + qsoil(gs%ns)*0.5*(z(gs%ns)-z(gs%ns-1)) ! ml q_sum_new = q_sum_new + qsoil(1)*(0.5*(z(2)-z(1))) ! + 0.5*ddz(M)*h1/por(1)) - ! Water methane content - do i = 1, gs%M+1 - q_sum_new = q_sum_new + qwater(i,2)*h1*ddz05(i-1) - enddo - do i = 2, gs%ns-1 !ms+1, ml-1 rprod_sum = rprod_sum + rprod(i)*dt*0.5*(z(i+1)-z(i-1)) oxid_sum = oxid_sum + oxid(i)*(qsoil(i) + q_old(i))*dt*0.25*(z(i+1)-z(i-1)) @@ -1037,6 +1071,8 @@ endif ifdeep bull_sum = bull_sum + bull(1)*(q_old(1)-ch4_crit(1))*dt*0.5*(z(2)-z(1)) plant_sum = plant_sum + plant(1)*(qsoil(1) + q_old(1))*dt*0.25*(z(2)-z(1)) + endif + ! print*, 'bounds_talik', 0.5*(z(i_talik-1)+z(i_talik)), 0.5*(z(i_talik+1)+z(i_talik)) !if( (q_sum_new - q_sum_old).ne.0. .and. gs%isoilcol == gs%nsoilcols) then diff --git a/source/model/oxygen_mod.f90 b/source/model/oxygen_mod.f90 index cdb531367f0fa1e6d21aa1520c2fe39755ca6061..2da414866e3a2da13345a83740375e3d0793fa93 100644 --- a/source/model/oxygen_mod.f90 +++ b/source/model/oxygen_mod.f90 @@ -183,11 +183,9 @@ if (ls%h1 > 0) then ! do i = 2, M ! x = x + oxyg(i,2)*(ddz(i-1)+ddz(i))/2. ! enddo - endif - deallocate (a, b, c, f, y) END SUBROUTINE OXYGEN