From af4b2a3a51c8ed2444b4cdc3659b92eb33a97970 Mon Sep 17 00:00:00 2001 From: mushroom Date: Tue, 30 Jun 2020 15:07:24 -0700 Subject: [PATCH 1/3] added option for individual closure of the C cycle (hopefully ...) --- genie-biogem/src/fortran/biogem.f90 | 35 ++++++++++++++++++-- genie-biogem/src/fortran/biogem_data.f90 | 1 + genie-biogem/src/fortran/biogem_lib.f90 | 3 +- genie-main/src/xml-config/xml/definition.xml | 4 +++ 4 files changed, 39 insertions(+), 4 deletions(-) diff --git a/genie-biogem/src/fortran/biogem.f90 b/genie-biogem/src/fortran/biogem.f90 index cc377506c..4daa33243 100644 --- a/genie-biogem/src/fortran/biogem.f90 +++ b/genie-biogem/src/fortran/biogem.f90 @@ -493,17 +493,46 @@ subroutine biogem( & lo = conv_ls_lo_i(loc_i,ls) if (lo == io2l(io_PO4)) then loc_remin = loc_conv_ls_lo(lo,ls)*bio_settle(l2is(ls),i,j,loc_k1) - dum_sfxsumrok1(io_PO4,i,j) = dum_sfxsumrok1(io_PO4,i,j) + & - & (loc_remin - locij_fsedocn(io_PO4,i,j)) + dum_sfxsumrok1(l2io(lo),i,j) = dum_sfxsumrok1(l2io(lo),i,j) + & + & (loc_remin - locij_fsedocn(l2io(lo),i,j)) if (ctrl_bio_red_ALKwithPOC) then ! do nothing -- ALK with POC else dum_sfxsumrok1(io_ALK,i,j) = dum_sfxsumrok1(io_ALK,i,j) + & - & conv_sed_ocn(io_ALK,is_POP)*(loc_remin - locij_fsedocn(io_PO4,i,j)) + & conv_sed_ocn(io_ALK,is_POP)*(loc_remin - locij_fsedocn(io_PO4,i,j)) end if end if end do end if + if (ctrl_force_sed_closed_C) then + ! special case of partial closure -- calculate theoretical DIC remin flux required for closure + ! set weathering equal to imbalance in DIC return + DO l=1,n_l_ocn + loc_vocn(l) = ocn(l2io(l),i,j,loc_k1) + end DO + call sub_box_remin_redfield(loc_vocn,loc_conv_ls_lo(:,:)) + ls = is2l(is_POP) + loc_tot_i = conv_ls_lo_i(0,ls) + do loc_i=1,loc_tot_i + lo = conv_ls_lo_i(loc_i,ls) + if (lo == io2l(io_DIC)) then + loc_remin = loc_conv_ls_lo(lo,ls)*bio_settle(l2is(ls),i,j,loc_k1) + dum_sfxsumrok1(l2io(lo),i,j) = dum_sfxsumrok1(l2io(lo),i,j) + & + & (loc_remin - locij_fsedocn(l2io(lo),i,j)) + if (ctrl_bio_red_ALKwithPOC) then + dum_sfxsumrok1(io_ALK,i,j) = dum_sfxsumrok1(io_ALK,i,j) + & + & conv_sed_ocn(io_ALK,is_POC)*(loc_remin - locij_fsedocn(l2io(lo),i,j)) + else + ! do nothing -- ALK with POP + end if + end if + if (lo == io2l(io_DIC_13C)) then + loc_remin = loc_conv_ls_lo(lo,ls)*bio_settle(l2is(ls),i,j,loc_k1) + dum_sfxsumrok1(l2io(lo),i,j) = dum_sfxsumrok1(l2io(lo),i,j) + & + & (loc_remin - locij_fsedocn(l2io(lo),i,j)) + end if + end do + end if end if ! [(ctrl_force_sed_closedsystem)] ! convert fluxes to remin DO l=3,n_l_ocn diff --git a/genie-biogem/src/fortran/biogem_data.f90 b/genie-biogem/src/fortran/biogem_data.f90 index 7b23bc13f..2c9f47600 100755 --- a/genie-biogem/src/fortran/biogem_data.f90 +++ b/genie-biogem/src/fortran/biogem_data.f90 @@ -100,6 +100,7 @@ SUBROUTINE sub_load_goin_biogem(dum_dtyr) print*,'--- BOUNDARY CONDITIONS ----------------------------' print*,'Set dissolution flux = rain flux to close system? : ',ctrl_force_sed_closedsystem print*,'Balance the P cycle (with weathering)? : ',ctrl_force_sed_closed_P + print*,'Balance the C cycle (with weathering)? : ',ctrl_force_sed_closed_C print*,'set reflective boundary condition for POM? : ',ctrl_force_sed_reflective_POM print*,'Allow temperature / salinity forcing of climate? : ',ctrl_force_GOLDSTEInTS print*,'Allow ONLY temperature / salinity forcing? : ',ctrl_force_GOLDSTEInTSonly diff --git a/genie-biogem/src/fortran/biogem_lib.f90 b/genie-biogem/src/fortran/biogem_lib.f90 index 214618465..076c871d5 100755 --- a/genie-biogem/src/fortran/biogem_lib.f90 +++ b/genie-biogem/src/fortran/biogem_lib.f90 @@ -64,7 +64,8 @@ MODULE biogem_lib logical::ctrl_force_sed_closedsystem ! Set dissolution flux = rain flux to close system? NAMELIST /ini_biogem_nml/ctrl_force_sed_closedsystem logical::ctrl_force_sed_closed_P ! Balance the P cycle (with weathering)? - NAMELIST /ini_biogem_nml/ctrl_force_sed_closed_P + logical::ctrl_force_sed_closed_C ! Balance the C cycle (with weathering)? + NAMELIST /ini_biogem_nml/ctrl_force_sed_closed_P,ctrl_force_sed_closed_C logical::ctrl_force_sed_reflective_POM ! Set reflective boundary condition for POM? NAMELIST /ini_biogem_nml/ctrl_force_sed_reflective_POM logical::ctrl_force_GOLDSTEInTS ! Allow temperature / salinity forcing of climate? diff --git a/genie-main/src/xml-config/xml/definition.xml b/genie-main/src/xml-config/xml/definition.xml index 86b587c5f..a0f189500 100644 --- a/genie-main/src/xml-config/xml/definition.xml +++ b/genie-main/src/xml-config/xml/definition.xml @@ -4020,6 +4020,10 @@ .false. Balance the P cycle (with weathering)? + + .false. + Balance the C cycle (with weathering)? + .false. Set reflective boundary condition for POM? From d69a8e7f2a7730ee9996285ad9acea8023739b3c Mon Sep 17 00:00:00 2001 From: mushroom Date: Thu, 9 Jul 2020 17:25:13 -0700 Subject: [PATCH 2/3] fixed typo in POC closure option --- genie-biogem/src/fortran/biogem.f90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/genie-biogem/src/fortran/biogem.f90 b/genie-biogem/src/fortran/biogem.f90 index 4daa33243..a7214a792 100644 --- a/genie-biogem/src/fortran/biogem.f90 +++ b/genie-biogem/src/fortran/biogem.f90 @@ -511,7 +511,7 @@ subroutine biogem( & loc_vocn(l) = ocn(l2io(l),i,j,loc_k1) end DO call sub_box_remin_redfield(loc_vocn,loc_conv_ls_lo(:,:)) - ls = is2l(is_POP) + ls = is2l(is_POC) loc_tot_i = conv_ls_lo_i(0,ls) do loc_i=1,loc_tot_i lo = conv_ls_lo_i(loc_i,ls) From 073668aa4cbaa70241b9398a8ca6485346f3b7da Mon Sep 17 00:00:00 2001 From: mushroom Date: Thu, 9 Jul 2020 18:14:48 -0700 Subject: [PATCH 3/3] more fixes to the same piece of shitty code that was not tested in the first place ... a lesson there somewhere ... --- genie-biogem/src/fortran/biogem.f90 | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/genie-biogem/src/fortran/biogem.f90 b/genie-biogem/src/fortran/biogem.f90 index a7214a792..55d774600 100644 --- a/genie-biogem/src/fortran/biogem.f90 +++ b/genie-biogem/src/fortran/biogem.f90 @@ -487,6 +487,7 @@ subroutine biogem( & loc_vocn(l) = ocn(l2io(l),i,j,loc_k1) end DO call sub_box_remin_redfield(loc_vocn,loc_conv_ls_lo(:,:)) + ! set sed tracer -> POP ls = is2l(is_POP) loc_tot_i = conv_ls_lo_i(0,ls) do loc_i=1,loc_tot_i @@ -511,6 +512,7 @@ subroutine biogem( & loc_vocn(l) = ocn(l2io(l),i,j,loc_k1) end DO call sub_box_remin_redfield(loc_vocn,loc_conv_ls_lo(:,:)) + ! set sed tracer -> POC ls = is2l(is_POC) loc_tot_i = conv_ls_lo_i(0,ls) do loc_i=1,loc_tot_i @@ -526,6 +528,12 @@ subroutine biogem( & ! do nothing -- ALK with POP end if end if + end do + ! set sed tracer -> 13POC + ls = is2l(is_POC_13C) + loc_tot_i = conv_ls_lo_i(0,ls) + do loc_i=1,loc_tot_i + lo = conv_ls_lo_i(loc_i,ls) if (lo == io2l(io_DIC_13C)) then loc_remin = loc_conv_ls_lo(lo,ls)*bio_settle(l2is(ls),i,j,loc_k1) dum_sfxsumrok1(l2io(lo),i,j) = dum_sfxsumrok1(l2io(lo),i,j) + &