Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 22 additions & 22 deletions cime_config/namelist_definition_blom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7116,33 +7116,20 @@
<category>diabgc</category>
<group>diabgc</group>
<values>
<value>0,0,0</value>
<value>0,2,2</value>
<value is_test="yes">4,2,2</value>
<value is_test="yes" empty_hist="yes">0,0,0</value>
<value hamocc_output_size="spinup">2,2</value>
</values>
<desc>Surface carbonate ion concentrations [mol C -m3]</desc>
</entry>

<entry id="int_poc">
<entry id="srf_co3satarag">
<type>integer(3)</type>
<category>diabgc</category>
<group>diabgc</group>
<values>
<value>0,0,0</value>
<value is_test="yes">4,2,2</value>
<value is_test="yes" empty_hist="yes">0,0,0</value>
<value hamocc_output_size="spinup">2,2</value>
</values>
<desc>Column-integrated POC concentration [mol P -m2]</desc>
</entry>

<entry id="co3satarag_0">
<type>integer(3)</type>
<category>diabgc</category>
<group>diabgc</group>
<values>
<value>0,0,0</value>
<value>0,2,2</value>
<value is_test="yes">4,2,2</value>
<value is_test="yes" empty_hist="yes">0,0,0</value>
<value hamocc_output_size="spinup">2,2</value>
Expand All @@ -7155,7 +7142,7 @@
<category>diabgc</category>
<group>diabgc</group>
<values>
<value>0,0,0</value>
<value>0,2,2</value>
<value is_test="yes">4,2,2</value>
<value is_test="yes" empty_hist="yes">0,0,0</value>
<value hamocc_output_size="spinup">2,2</value>
Expand All @@ -7168,7 +7155,7 @@
<category>diabgc</category>
<group>diabgc</group>
<values>
<value>0,0,0</value>
<value>0,2,2</value>
<value is_test="yes">4,2,2</value>
<value is_test="yes" empty_hist="yes">0,0,0</value>
<value hamocc_output_size="spinup">2,2</value>
Expand All @@ -7181,7 +7168,7 @@
<category>diabgc</category>
<group>diabgc</group>
<values>
<value>0,0,0</value>
<value>0,2,2</value>
<value is_test="yes">4,2,2</value>
<value is_test="yes" empty_hist="yes">0,0,0</value>
<value hamocc_output_size="spinup">0,0</value>
Expand All @@ -7194,7 +7181,7 @@
<category>diabgc</category>
<group>diabgc</group>
<values>
<value>0,0,0</value>
<value>0,2,2</value>
<value is_test="yes">4,2,2</value>
<value is_test="yes" empty_hist="yes">0,0,0</value>
<value hamocc_output_size="spinup">2,2</value>
Expand All @@ -7207,7 +7194,7 @@
<category>diabgc</category>
<group>diabgc</group>
<values>
<value>0,0,0</value>
<value>0,2,2</value>
<value is_test="yes">4,2,2</value>
<value is_test="yes" empty_hist="yes">0,0,0</value>
<value hamocc_output_size="spinup">2,2</value>
Expand All @@ -7220,14 +7207,27 @@
<category>diabgc</category>
<group>diabgc</group>
<values>
<value>0,0,0</value>
<value>0,2,2</value>
<value is_test="yes">4,2,2</value>
<value is_test="yes" empty_hist="yes">0,0,0</value>
<value hamocc_output_size="spinup">2,2</value>
</values>
<desc>Minimum oxygen concentration in the water column [mol O2 m-3]</desc>
</entry>

<entry id="int_poc">
<type>integer(3)</type>
<category>diabgc</category>
<group>diabgc</group>
<values>
<value>0,2,2</value>
<value is_test="yes">4,2,2</value>
<value is_test="yes" empty_hist="yes">0,0,0</value>
<value hamocc_output_size="spinup">2,2</value>
</values>
<desc>Column-integrated POC concentration [mol P -m2]</desc>
</entry>

<entry id="int_bromopro">
<type>integer(3)</type>
<category>diabgc</category>
Expand Down
85 changes: 52 additions & 33 deletions hamocc/mo_accfields.F90
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ subroutine accfields(kpie,kpje,kpke,pdlxp,pdlyp,pddpo,omask)
jsrfphyto,jsrfsilica,jsrfph,jwnos,jwphy,jndepnoyfx,jtdustfx, &
jsfefx,joalkfx,nbgc,nacc_bgc,bgcwrt,glb_inventory, &
bgct2d,acclvl,acclyr,accsrf,bgczlv, &
jsrfco3,jintpoc,jphyc_200, jco3satarag_0,jph_200,jco3_200, &
jsrfco3,jintpoc,jphyc_200, jsrfco3satarag,jph_200,jco3_200, &
jco3satarag_200,jo2_200,jo2min, &
jatmbromo,jbromo,jbromo_prod,jbromo_uv,jbromofx,jsrfbromo, &
jcfc11,jcfc11fx,jcfc12,jcfc12fx,jsf6,jsf6fx, &
Expand Down Expand Up @@ -153,7 +153,7 @@ subroutine accfields(kpie,kpje,kpke,pdlxp,pdlyp,pddpo,omask)
use_CFC,use_sedbypass,use_cisonew,use_BOXATM,use_M4AGO, &
use_extNcycle,use_pref_tracers,use_shelfsea_res_time, &
use_sediment_quality,use_river2omip,use_DOMclasses
use mo_param1_bgc, only: ialkali,ian2o,iano3,iatmco2,iatmdms,iatmn2,iatmn2o,iatmo2, &
use mo_param1_bgc, only: safediv,ialkali,ian2o,iano3,iatmco2,iatmdms,iatmn2,iatmn2o,iatmo2, &
icalc,idet,idms,idicsat,idoc,iiron,iopal,itdoc_lc,itdoc_hc, &
ioxygen,iphosph,iphy,iprefalk,iprefdic, &
iprefpo4,iprefo2,isco212,isilica,izoo,itdust,isfe, &
Expand All @@ -171,7 +171,7 @@ subroutine accfields(kpie,kpje,kpke,pdlxp,pdlyp,pddpo,omask)
use mo_sedmnt, only: powtra,sedlay,burial,prorca_mavg,sed_reactivity_a, &
sed_reactivity_k,sed_applied_reminrate,sed_rem_aerob,sed_rem_denit,&
sed_rem_sulf
use mo_vgrid, only: dp_min,k0200
use mo_vgrid, only: dp_min,kmle,k0200
use mo_inventory_bgc, only: inventory_bgc
use mo_ncwrt_bgc , only: ncwrt_bgc
use mo_ihamocc4m4ago, only: aggregate_diagnostics,kav_dp,kav_rho_p,kav_d_C,kws_agg,kdf_agg, &
Expand All @@ -192,23 +192,24 @@ subroutine accfields(kpie,kpje,kpke,pdlxp,pdlyp,pddpo,omask)
real(rp), intent(in) :: omask(kpie,kpje) ! land/ocean mask

! Local variables
integer :: i,j,k,l
integer :: i,j,k,k1,l
integer :: ind1(kpie,kpje),ind2(kpie,kpje)
real(rp) :: wghts(kpie,kpje,ddm)
real(rp) :: di12C ! cisonew
real(rp) :: d13C(kpie,kpje,kpke) ! cisonew
real(rp) :: d14C(kpie,kpje,kpke) ! cisonew
real(rp) :: bigd14C(kpie,kpje,kpke) ! cisonew

! CMIP7 additional daily outputs
real(rp) :: di12C
real(rp) :: d13C(kpie,kpje,kpke)
real(rp) :: d14C(kpie,kpje,kpke)
real(rp) :: bigd14C(kpie,kpje,kpke)
real(rp) :: intpoc(kpie,kpje) ! Vertically integrated detritus concentration
real(rp) :: co3satarag_0(kpie,kpje) ! Mole carbonate anion (CO3) for sea water in equilibrium with pure Aragonite @sfc
real(rp) :: srfph(kpie,kpje) ! Temporary variable for calculation of surface pH
real(rp) :: srfco3satarag(kpie,kpje) ! Mole carbonate anion (CO3) for sea water in equilibrium with pure Aragonite @sfc
real(rp) :: phyc_200(kpie,kpje) ! phytoplankton 200m
real(rp) :: ph_200(kpie,kpje) ! pH 200m
real(rp) :: co3_200(kpie,kpje) ! co3 200m
real(rp) :: co3satarag_200(kpie,kpje) ! Mole carbonate anion (CO3) for sea water in equilibrium with pure Aragonite @200m
real(rp) :: o2_200(kpie,kpje) ! o2 200m
real(rp) :: o2min(kpie,kpje) ! in vertical space)
real(rp) :: o2min(kpie,kpje) ! o2 minimum closest to surface

real(rp),parameter :: himin = 1.0e-11 ! Minimum [H+] for calculation of pH

if (use_cisonew) then
! Calculation d13C, d14C and Dd14C: Delta notation for output
Expand All @@ -233,35 +234,51 @@ subroutine accfields(kpie,kpje,kpke,pdlxp,pdlyp,pddpo,omask)
endif

intpoc (:,:)=0._rp
co3satarag_0 (:,:)=0._rp
srfph (:,:)=0._rp
srfco3satarag (:,:)=0._rp
phyc_200 (:,:)=0._rp
ph_200 (:,:)=0._rp
co3_200 (:,:)=0._rp
co3satarag_200(:,:)=0._rp
o2_200 (:,:)=0._rp
o2min (:,:)=0._rp



do j=1,kpje
do i=1,kpie
if(omask(i,j).gt.0.5_rp) then
co3satarag_0(i,j)=co3(i,j,1)/OmegaA(i,j,1)
if(omask(i,j)>0.5_rp) then

srfco3satarag(i,j) = co3(i,j,1)/(OmegaA(i,j,1) + safediv)

k=k0200(i,j)
phyc_200(i,j)=ocetra(i,j,k,iphy)
ph_200(i,j) =-log10(hi(i,j,k))
co3_200(i,j) =co3(i,j,k)
co3satarag_200(i,j)=co3_200(i,j)/OmegaA(i,j,k)
o2_200(i,j) =ocetra(i,j,k,ioxygen)
o2min(i,j) =ocetra(i,j,1,ioxygen)
phyc_200(i,j) = ocetra(i,j,k,iphy)
co3_200(i,j) = co3(i,j,k)
co3satarag_200(i,j) = co3_200(i,j)/(OmegaA(i,j,k) + safediv)
o2_200(i,j) = ocetra(i,j,k,ioxygen)
ph_200(i,j) = -log10(max(hi(i,j,k),himin))

! integrated POC in kmol P m-2
do k=1,kpke
intpoc(i,j) =intpoc(i,j) +ocetra(i,j,k,idet)*pddpo(i,j,k) ! integrated POC in kmol P m-2
o2min(i,j) =min(o2min(i,j),ocetra(i,j,k,ioxygen))
intpoc(i,j) = intpoc(i,j) + ocetra(i,j,k,idet)*pddpo(i,j,k)
enddo
endif

! O2 minimum closest to surface (but below mixed layer)
k1 = kmle(i,j)
o2min(i,j) = ocetra(i,j,k1,ioxygen)
do k=k1+1,kpke
if(pddpo(i,j,k) > dp_min) then
if(o2min(i,j) > ocetra(i,j,k,ioxygen)) then
o2min(i,j) = ocetra(i,j,k,ioxygen)
else
exit
endif
endif
enddo

endif ! omask > 0.5
enddo
enddo


! Accumulated fluxes for inventory.F90. Note that these are currently not written to restart!
! Division by 2 is to account for leap-frog timestepping (but this is not exact)
do j=1,kpje
Expand Down Expand Up @@ -364,7 +381,8 @@ subroutine accfields(kpie,kpje,kpke,pdlxp,pdlyp,pddpo,omask)
call accsrf(jsrfsilica,ocetra(1,1,1,isilica),omask,0)
call accsrf(jsrfdic,ocetra(1,1,1,isco212),omask,0)
call accsrf(jsrfphyto,ocetra(1,1,1,iphy),omask,0)
call accsrf(jsrfph,hi(1,1,1),omask,0)
srfph = -log10(max(hi(:,:,1),himin))
call accsrf(jsrfph,srfph,omask,0)
call accsrf(jdms,ocetra(1,1,1,idms),omask,0)
call accsrf(jsrfpn2om,pn2om,omask,0)
call accsrf(jexport,expoor,omask,0)
Expand All @@ -381,7 +399,7 @@ subroutine accfields(kpie,kpje,kpke,pdlxp,pdlyp,pddpo,omask)
call accsrf(jzeunutlim_n,zeu_nutlim_diag(1,1,inutlim_n),omask,0)
call accsrf(jsrfco3,co3(1,1,1),omask,0)
call accsrf(jintpoc,intpoc,omask,0)
call accsrf(jco3satarag_0,co3satarag_0,omask,0)
call accsrf(jsrfco3satarag,srfco3satarag,omask,0)
call accsrf(jphyc_200,phyc_200,omask,0)
call accsrf(jph_200,ph_200,omask,0)
call accsrf(jco3_200,co3_200,omask,0)
Expand All @@ -392,7 +410,8 @@ subroutine accfields(kpie,kpje,kpke,pdlxp,pdlyp,pddpo,omask)
call accsrf(jsrfnatdic,ocetra(1,1,1,inatsco212),omask,0)
call accsrf(jsrfnatalk,ocetra(1,1,1,inatalkali),omask,0)
call accsrf(jnatpco2,natpco2,omask,0)
call accsrf(jsrfnatph,nathi(1,1,1),omask,0)
srfph = -log10(max(nathi(:,:,1),himin))
call accsrf(jsrfnatph,srfph,omask,0)
endif
if (use_BROMO) then
call accsrf(jsrfbromo,ocetra(1,1,1,ibromo),omask,0)
Expand Down Expand Up @@ -490,7 +509,7 @@ subroutine accfields(kpie,kpje,kpke,pdlxp,pdlyp,pddpo,omask)
call acclyr(jopal,ocetra(1,1,1,iopal),pddpo,1)
call acclyr(jn2o,ocetra(1,1,1,ian2o),pddpo,1)
call acclyr(jco3,co3,pddpo,1)
call acclyr(jph,hi,pddpo,1)
call acclyr(jph,-log10(max(hi,himin)),pddpo,1)
call acclyr(jomegaa,OmegaA,pddpo,1)
call acclyr(jomegac,OmegaC,pddpo,1)
call acclyr(jphosy,phosy3d,pddpo,1)
Expand All @@ -511,7 +530,7 @@ subroutine accfields(kpie,kpje,kpke,pdlxp,pdlyp,pddpo,omask)
call acclyr(jnatdic,ocetra(1,1,1,inatsco212),pddpo,1)
call acclyr(jnatcalc,ocetra(1,1,1,inatcalc),pddpo,1)
call acclyr(jnatco3,natco3,pddpo,1)
call acclyr(jnatph,nathi,pddpo,1)
call acclyr(jnatph,-log10(max(nathi,himin)),pddpo,1)
call acclyr(jnatomegaa,natOmegaA,pddpo,1)
call acclyr(jnatomegac,natOmegaC,pddpo,1)
endif
Expand Down Expand Up @@ -639,7 +658,7 @@ subroutine accfields(kpie,kpje,kpke,pdlxp,pdlyp,pddpo,omask)
call acclvl(jlvlopal,ocetra(1,1,1,iopal),k,ind1,ind2,wghts)
call acclvl(jlvln2o,ocetra(1,1,1,ian2o),k,ind1,ind2,wghts)
call acclvl(jlvlco3,co3,k,ind1,ind2,wghts)
call acclvl(jlvlph,hi,k,ind1,ind2,wghts)
call acclvl(jlvlph,-log10(max(hi,himin)),k,ind1,ind2,wghts)
call acclvl(jlvlomegaa,OmegaA,k,ind1,ind2,wghts)
call acclvl(jlvlomegac,OmegaC,k,ind1,ind2,wghts)
call acclvl(jlvlphosy,phosy3d,k,ind1,ind2,wghts)
Expand All @@ -660,7 +679,7 @@ subroutine accfields(kpie,kpje,kpke,pdlxp,pdlyp,pddpo,omask)
call acclvl(jlvlnatalkali,ocetra(1,1,1,inatalkali),k,ind1,ind2,wghts)
call acclvl(jlvlnatcalc,ocetra(1,1,1,inatcalc),k,ind1,ind2,wghts)
call acclvl(jlvlnatco3,natco3,k,ind1,ind2,wghts)
call acclvl(jlvlnatph,nathi,k,ind1,ind2,wghts)
call acclvl(jlvlnatph,-log10(max(nathi,himin)),k,ind1,ind2,wghts)
call acclvl(jlvlnatomegaa,natOmegaA,k,ind1,ind2,wghts)
call acclvl(jlvlnatomegac,natOmegaC,k,ind1,ind2,wghts)
endif
Expand Down
24 changes: 12 additions & 12 deletions hamocc/mo_bgcmean.F90
Original file line number Diff line number Diff line change
Expand Up @@ -116,10 +116,10 @@ module mo_bgcmean
& SRF_ATMBROMO =0 ,SRF_BROMO =0 ,SRF_BROMOFX =0 , &
& SRF_ANH4 =0 ,SRF_ANO2 =0 ,SRF_ANH3FX =0 , &
& SRF_PN2OM =0 ,SRF_PNH3 =0 ,SRF_ATMNH3 =0 , &
& SRF_ATMN2O =0 ,SRF_CO3 =0 ,INT_BROMOPRO =0 , &
& INT_BROMOUV =0 ,INT_POC =0 ,CO3SATARAG_0 =0 , &
& SRF_ATMN2O =0 ,SRF_CO3 =0 ,SRF_CO3SATARAG=0 , &
& PHYC_200 =0 ,PH_200 =0 ,CO3_200 =0 , &
& CO3SATARAG_200=0 ,O2_200 =0 ,O2MIN =0 , &
& INT_BROMOPRO =0 ,INT_BROMOUV =0 ,INT_POC =0 , &
& INT_PHOSY =0 ,INT_NFIX =0 ,INT_DNIT =0 , &
& INT_EXUDL =0 ,INT_EXUDSL =0 ,INT_EXCRL =0 , &
& INT_EXCRSL =0 ,INT_DOCL_REM =0 ,INT_DOCSL_REM =0 , &
Expand Down Expand Up @@ -254,10 +254,10 @@ module mo_bgcmean
& SRF_ATMBROMO ,SRF_BROMO ,SRF_BROMOFX , &
& SRF_ANH4 ,SRF_ANO2 ,SRF_ANH3FX , &
& SRF_PN2OM ,SRF_PNH3 ,SRF_ATMNH3 , &
& SRF_ATMN2O ,SRF_CO3 ,INT_BROMOPRO , &
& INT_BROMOUV ,INT_POC ,CO3SATARAG_0 , &
& SRF_ATMN2O ,SRF_CO3 ,SRF_CO3SATARAG , &
& PHYC_200 ,PH_200 ,CO3_200 , &
& CO3SATARAG_200 ,O2_200 ,O2MIN , &
& INT_BROMOPRO ,INT_BROMOUV ,INT_POC , &
& INT_PHOSY ,INT_NFIX ,INT_DNIT , &
& INT_EXUDL ,INT_EXUDSL ,INT_EXCRL , &
& INT_EXCRSL ,INT_DOCL_REM ,INT_DOCSL_REM , &
Expand Down Expand Up @@ -436,6 +436,8 @@ module mo_bgcmean
& jsrfdic = 0 , &
& jsrfphyto = 0 , &
& jsrfph = 0 , &
& jsrfco3 = 0 , &
& jsrfco3satarag= 0 , &
& jintphosy = 0 , &
& jintnfix = 0 , &
& jintdnit = 0 , &
Expand Down Expand Up @@ -480,8 +482,6 @@ module mo_bgcmean
& jzeunutlim_fe = 0 , &
& jzeunutlim_phosph = 0 , &
& jzeunutlim_n = 0 , &
& jsrfco3 = 0 , &
& jco3satarag_0 = 0 , &
& jphyc_200 = 0 , &
& jph_200 = 0 , &
& jco3_200 = 0 , &
Expand Down Expand Up @@ -932,6 +932,12 @@ subroutine alloc_mem_bgcmean(kpie,kpje,kpke)
jsrfphyto(n)=i_bsc_m2d*min(1,SRF_PHYTO(n))
if (SRF_PH(n) > 0) i_bsc_m2d=i_bsc_m2d+1
jsrfph(n)=i_bsc_m2d*min(1,SRF_PH(n))
if (SRF_CO3(n) > 0) i_bsc_m2d=i_bsc_m2d+1
jsrfco3(n)=i_bsc_m2d*min(1,SRF_CO3(n))
if (SRF_CO3SATARAG(n) > 0) i_bsc_m2d=i_bsc_m2d+1
jsrfco3satarag(n)=i_bsc_m2d*min(1,SRF_CO3SATARAG(n))
if (INT_POC(n) > 0) i_bsc_m2d=i_bsc_m2d+1
jintpoc(n)=i_bsc_m2d*min(1,INT_POC(n))
if (INT_PHOSY(n) > 0) i_bsc_m2d=i_bsc_m2d+1
jintphosy(n)=i_bsc_m2d*min(1,INT_PHOSY(n))
if (INT_NFIX(n) > 0) i_bsc_m2d=i_bsc_m2d+1
Expand Down Expand Up @@ -1000,12 +1006,6 @@ subroutine alloc_mem_bgcmean(kpie,kpje,kpke)
jzeunutlim_phosph(n)=i_bsc_m2d*min(1,ZEU_NUTLIM_PHOSPH(n))
if (ZEU_NUTLIM_N(n) > 0) i_bsc_m2d=i_bsc_m2d+1
jzeunutlim_N(n)=i_bsc_m2d*min(1,ZEU_NUTLIM_N(n))
if (SRF_CO3(n) > 0) i_bsc_m2d=i_bsc_m2d+1
jsrfco3(n)=i_bsc_m2d*min(1,SRF_CO3(n))
if (INT_POC(n) > 0) i_bsc_m2d=i_bsc_m2d+1
jintpoc(n)=i_bsc_m2d*min(1,INT_POC(n))
if (CO3SATARAG_0(n) > 0) i_bsc_m2d=i_bsc_m2d+1
jco3satarag_0(n)=i_bsc_m2d*min(1,CO3SATARAG_0(n))
if (PHYC_200(n) > 0) i_bsc_m2d=i_bsc_m2d+1
jphyc_200(n)=i_bsc_m2d*min(1,PHYC_200(n))
if (PH_200(n) > 0) i_bsc_m2d=i_bsc_m2d+1
Expand Down
Loading