Skip to content
Closed
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
42 changes: 23 additions & 19 deletions hamocc/mo_extNwatercol.F90
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ subroutine nitrification(kpie,kpje,kpke,kbnd,pddpo,omask,ptho)
real :: Tdepanh4,O2limanh4,nut1lim,anh4new,potdnh4amox,fdetamox,fno2,fn2o,ftotnh4
real :: Tdepano2,O2limano2,nut2lim,ano2new,potdno2nitr,fdetnitr,ftotno2,no2fn2o,no2fno2, &
no2fdetamox
real :: amoxfrac,nitrfrac,totd,amox,nitr,temp
real :: amoxfrac,nitrfrac,totd,amox,nitr,temp,dz

! Set output-related fields to zero
nitr_NH4 = 0.
Expand All @@ -102,7 +102,7 @@ subroutine nitrification(kpie,kpje,kpke,kbnd,pddpo,omask,ptho)
!$OMP PARALLEL DO PRIVATE(i,k,Tdepanh4,O2limanh4,nut1lim,anh4new,potdnh4amox,fdetamox,fno2, &
!$OMP fn2o,ftotnh4,Tdepano2,O2limano2,nut2lim,ano2new,potdno2nitr,fdetnitr,&
!$OMP ftotno2,amoxfrac,nitrfrac,totd,amox,nitr,temp,no2fn2o,no2fno2, &
!$OMP no2fdetamox)
!$OMP no2fdetamox,dz)
do j = 1,kpje
do i = 1,kpie
do k = 1,kpke
Expand Down Expand Up @@ -192,11 +192,12 @@ subroutine nitrification(kpie,kpje,kpke,kbnd,pddpo,omask,ptho)
& - rnm1*rnoi*fdetnitr*nitr

! Output
nitr_NH4(i,j,k) = amox ! kmol N/m3/dtb - NH4 consumption for nitrification on NH4-incl. usage for biomass
nitr_NO2(i,j,k) = nitr ! kmol N/m3/dtb - NO2 consumption for nitrification on NO2
nitr_N2O_prod(i,j,k) = 0.5*fn2o*amox ! kmol N2O/m3/dtb - N2O production during aerob ammonium oxidation
nitr_NH4_OM(i,j,k) = rnoi*fdetamox*amox ! kmol P/m3/dtb - organic matter production during aerob NH4 oxidation
nitr_NO2_OM(i,j,k) = rnoi*fdetnitr*nitr ! kmol P/m3/dtb - organic matter production during aerob NO2 oxidation
dz = pddpo(i,j,k)
nitr_NH4(i,j,k) = amox*dz ! kmol N/m2/dtb - NH4 consumption for nitrification on NH4-incl. usage for biomass
nitr_NO2(i,j,k) = nitr*dz ! kmol N/m2/dtb - NO2 consumption for nitrification on NO2
nitr_N2O_prod(i,j,k) = 0.5*fn2o*amox*dz ! kmol N2O/m2/dtb - N2O production during aerob ammonium oxidation
nitr_NH4_OM(i,j,k) = rnoi*fdetamox*amox*dz ! kmol P/m2/dtb - organic matter production during aerob NH4 oxidation
nitr_NO2_OM(i,j,k) = rnoi*fdetnitr*nitr*dz ! kmol P/m2/dtb - organic matter production during aerob NO2 oxidation
endif
enddo
enddo
Expand All @@ -215,12 +216,12 @@ subroutine denit_NO3_to_NO2(kpie,kpje,kpke,kbnd,pddpo,omask,ptho)

!local variables
integer :: i,j,k
real :: Tdep,O2inhib,nutlim,ano3new,ano3denit,temp
real :: Tdep,O2inhib,nutlim,ano3new,ano3denit,temp,dz

! Set output-related field to zero
denit_NO3 = 0.

!$OMP PARALLEL DO PRIVATE(i,k,Tdep,O2inhib,nutlim,ano3new,ano3denit,temp)
!$OMP PARALLEL DO PRIVATE(i,k,Tdep,O2inhib,nutlim,ano3new,ano3denit,temp,dz)
do j = 1,kpje
do i = 1,kpie
do k = 1,kpke
Expand All @@ -245,7 +246,8 @@ subroutine denit_NO3_to_NO2(kpie,kpje,kpke,kbnd,pddpo,omask,ptho)
ocetra(i,j,k,ialkali) = ocetra(i,j,k,ialkali) + ano3denit*rnm1*rnoxpi

! Output
denit_NO3(i,j,k) = ano3denit ! kmol NO3/m3/dtb - NO3 usage for denit on NO3
dz = pddpo(i,j,k)
denit_NO3(i,j,k) = ano3denit*dz ! kmol NO3/m2/dtb - NO3 usage for denit on NO3
endif
enddo
enddo
Expand All @@ -264,13 +266,13 @@ subroutine anammox(kpie,kpje,kpke,kbnd,pddpo,omask,ptho)

!local variables
integer :: i,j,k
real :: Tdep,O2inhib,nut1lim,nut2lim,ano2new,ano2anmx,temp
real :: Tdep,O2inhib,nut1lim,nut2lim,ano2new,ano2anmx,temp,dz

! Set output-related field to zero
anmx_N2_prod = 0.
anmx_OM_prod = 0.

!$OMP PARALLEL DO PRIVATE(i,k,Tdep,O2inhib,nut1lim,nut2lim,ano2new,ano2anmx,temp)
!$OMP PARALLEL DO PRIVATE(i,k,Tdep,O2inhib,nut1lim,nut2lim,ano2new,ano2anmx,temp,dz)
do j = 1,kpje
do i = 1,kpie
do k = 1,kpke
Expand Down Expand Up @@ -302,8 +304,9 @@ subroutine anammox(kpie,kpje,kpke,kbnd,pddpo,omask,ptho)
ocetra(i,j,k,ialkali) = ocetra(i,j,k,ialkali) - ano2anmx*rnm1*rno2anmxi

! Output
anmx_N2_prod(i,j,k) = ano2anmx*(rnh4anmx-rnit)*rno2anmxi ! kmol N2/m3/dtb - N2 prod through anammox
anmx_OM_prod(i,j,k) = ano2anmx*rno2anmxi ! kmol P/m3/dtb - OM production by anammox
dz = pddpo(i,j,k)
anmx_N2_prod(i,j,k) = ano2anmx*(rnh4anmx-rnit)*rno2anmxi*dz ! kmol N2/m2/dtb - N2 prod through anammox
anmx_OM_prod(i,j,k) = ano2anmx*rno2anmxi*dz ! kmol P/m2/dtb - OM production by anammox
endif
enddo
enddo
Expand All @@ -327,7 +330,7 @@ subroutine denit_dnra(kpie,kpje,kpke,kbnd,pddpo,omask,ptho)
real :: fdenit,fdnra,potano2new,potdano2,potddet,fdetano2denit,fdetan2odenit,fdetdnra
real :: Tdepan2o,O2inhiban2o,nutliman2o,detliman2o,an2onew,an2odenit

real :: temp
real :: temp,dz

! Set output-related field to zero
denit_NO2 = 0.
Expand All @@ -339,7 +342,7 @@ subroutine denit_dnra(kpie,kpje,kpke,kbnd,pddpo,omask,ptho)
!$OMP rpotano2denit,rpotano2dnra, &
!$OMP fdenit,fdnra,potano2new,potdano2,potddet,fdetano2denit, &
!$OMP fdetan2odenit,fdetdnra, &
!$OMP Tdepdnra,O2inhibdnra,nutlimdnra,detlimdnra,ano2dnra,temp)
!$OMP Tdepdnra,O2inhibdnra,nutlimdnra,detlimdnra,ano2dnra,temp,dz)

do j = 1,kpje
do i = 1,kpie
Expand Down Expand Up @@ -412,9 +415,10 @@ subroutine denit_dnra(kpie,kpje,kpke,kbnd,pddpo,omask,ptho)
ocetra(i,j,k,ialkali) = ocetra(i,j,k,ialkali) + (295.*ano2denit + rnm1*an2odenit)*rnoxpi &
& + (rno2dnra + rnh4dnra - 1.)*rno2dnrai*ano2dnra
! Output
denit_NO2(i,j,k) = ano2denit ! kmol NO2/m3/dtb - denitrification on NO2
denit_N2O(i,j,k) = an2odenit ! kmol N2O/m3/dtb - denitrification on N2O
DNRA_NO2(i,j,k) = ano2dnra ! kmol NO2/m3/dtb - DNRA on NO2
dz = pddpo(i,j,k)
denit_NO2(i,j,k) = ano2denit*dz ! kmol NO2/m2/dtb - denitrification on NO2
denit_N2O(i,j,k) = an2odenit*dz ! kmol N2O/m2/dtb - denitrification on N2O
DNRA_NO2(i,j,k) = ano2dnra*dz ! kmol NO2/m2/dtb - DNRA on NO2
endif
enddo
enddo
Expand Down
60 changes: 30 additions & 30 deletions hamocc/mo_ncout_hamocc.F90
Original file line number Diff line number Diff line change
Expand Up @@ -1831,38 +1831,38 @@ subroutine hamoccvardef(iogrp,timeunits,calendar,cmpflg)
call ncdefvar3d(LYR_ANO2(iogrp),cmpflg,'p', &
& 'no2','Nitrite',' ','mol N m-3',1)
call ncdefvar3d(LYR_nitr_NH4(iogrp),cmpflg,'p', &
& 'nh4nitr','NH4 nitrification rate',' ','mol N m-3 s-1',1)
& 'nh4nitr','NH4 nitrification rate',' ','mol N m-2 s-1',1)
call ncdefvar3d(LYR_nitr_NO2(iogrp),cmpflg,'p', &
& 'no2nitr','NO2 nitrification rate',' ','mol N m-3 s-1',1)
& 'no2nitr','NO2 nitrification rate',' ','mol N m-2 s-1',1)
call ncdefvar3d(LYR_nitr_N2O_prod(iogrp),cmpflg,'p', &
& 'nitr_n2o','N2O prod during NH4 nitrification',' ', &
& 'mol N2O m-3 s-1',1)
& 'mol N2O m-2 s-1',1)
call ncdefvar3d(LYR_nitr_NH4_OM(iogrp),cmpflg,'p', &
& 'nh4nitr_om','OM production during NH4 nitrification',' ', &
& 'mol P m-3 s-1',1)
& 'mol P m-2 s-1',1)
call ncdefvar3d(LYR_nitr_NO2_OM(iogrp),cmpflg,'p', &
& 'no2nitr_om','OM production during NO2 nitrification',' ', &
& 'mol P m-3 s-1',1)
& 'mol P m-2 s-1',1)
call ncdefvar3d(LYR_denit_NO3(iogrp),cmpflg,'p', &
& 'no3denit','NO3 denitrification rate',' ','mol N m-3 s-1',1)
& 'no3denit','NO3 denitrification rate',' ','mol N m-2 s-1',1)
call ncdefvar3d(LYR_denit_NO2(iogrp),cmpflg,'p', &
& 'no2denit','NO2 denitrification rate',' ','mol N m-3 s-1',1)
& 'no2denit','NO2 denitrification rate',' ','mol N m-2 s-1',1)
call ncdefvar3d(LYR_denit_N2O(iogrp),cmpflg,'p', &
& 'n2odenit','N2O denitrification rate',' ','mol N2O m-3 s-1',1)
& 'n2odenit','N2O denitrification rate',' ','mol N2O m-2 s-1',1)
call ncdefvar3d(LYR_DNRA_NO2(iogrp),cmpflg,'p', &
& 'no2dnra','NO2 DNRA rate',' ','mol N m-3 s-1',1)
& 'no2dnra','NO2 DNRA rate',' ','mol N m-2 s-1',1)
call ncdefvar3d(LYR_anmx_N2_prod(iogrp),cmpflg,'p', &
& 'anmx_n2','Anammox N2 production rate',' ','mol N2 m-3 s-1',1)
& 'anmx_n2','Anammox N2 production rate',' ','mol N2 m-2 s-1',1)
call ncdefvar3d(LYR_anmx_OM_prod(iogrp),cmpflg,'p', &
& 'anmx_om','Anammox OM production rate',' ','mol P m-3 s-1',1)
& 'anmx_om','Anammox OM production rate',' ','mol P m-2 s-1',1)
call ncdefvar3d(LYR_phosy_NH4(iogrp),cmpflg,'p', &
& 'phosy_nh4','PP consumption rate of NH4',' ','mol N m-3 s-1',1)
& 'phosy_nh4','PP consumption rate of NH4',' ','mol N m-2 s-1',1)
call ncdefvar3d(LYR_phosy_NO3(iogrp),cmpflg,'p', &
& 'phosy_no3','PP consumption rate of NO3',' ','mol N m-3 s-1',1)
& 'phosy_no3','PP consumption rate of NO3',' ','mol N m-2 s-1',1)
call ncdefvar3d(LYR_remin_aerob(iogrp),cmpflg,'p', &
& 'remina','Aerob remineralization rate',' ','mol N m-3 s-1',1)
& 'remina','Aerob remineralization rate',' ','mol N m-2 s-1',1)
call ncdefvar3d(LYR_remin_sulf(iogrp),cmpflg,'p', &
& 'remins','Sulfate remineralization rate',' ','mol P m-3 s-1',1)
& 'remins','Sulfate remineralization rate',' ','mol P m-2 s-1',1)
endif
if (use_M4AGO) then
! M4AGO
Expand Down Expand Up @@ -2018,44 +2018,44 @@ subroutine hamoccvardef(iogrp,timeunits,calendar,cmpflg)
call ncdefvar3d(LVL_ANO2(iogrp),cmpflg,'p', &
& 'no2lvl','Nitrite',' ','mol N m-3',2)
call ncdefvar3d(LVL_nitr_NH4(iogrp),cmpflg,'p', &
& 'nh4nitrlvl','NH4 nitrification rate',' ','mol N m-3 s-1',2)
& 'nh4nitrlvl','NH4 nitrification rate',' ','mol N m-2 s-1',2)
call ncdefvar3d(LVL_nitr_NO2(iogrp),cmpflg,'p', &
& 'no2nitrlvl','NO2 nitrification rate',' ','mol N m-3 s-1',2)
& 'no2nitrlvl','NO2 nitrification rate',' ','mol N m-2 s-1',2)
call ncdefvar3d(LVL_nitr_N2O_prod(iogrp),cmpflg,'p', &
& 'nitr_n2olvl','N2O prod during NH4 nitrification',' ', &
& 'mol N2O m-3 s-1',2)
& 'mol N2O m-2 s-1',2)
call ncdefvar3d(LVL_nitr_NH4_OM(iogrp),cmpflg,'p', &
& 'nh4nitr_omlvl','OM production during NH4 nitrification',' ', &
& 'mol P m-3 s-1',2)
& 'mol P m-2 s-1',2)
call ncdefvar3d(LVL_nitr_NO2_OM(iogrp),cmpflg,'p', &
& 'no2nitr_omlvl','OM production during NO2 nitrification',' ', &
& 'mol P m-3 s-1',2)
& 'mol P m-2 s-1',2)
call ncdefvar3d(LVL_denit_NO3(iogrp),cmpflg,'p', &
& 'no3denitlvl','NO3 denitrification rate',' ','mol N m-3 s-1',2)
& 'no3denitlvl','NO3 denitrification rate',' ','mol N m-2 s-1',2)
call ncdefvar3d(LVL_denit_NO2(iogrp),cmpflg,'p', &
& 'no2denitlvl','NO2 denitrification rate',' ','mol N m-3 s-1',2)
& 'no2denitlvl','NO2 denitrification rate',' ','mol N m-2 s-1',2)
call ncdefvar3d(LVL_denit_N2O(iogrp),cmpflg,'p', &
& 'n2odenitlvl','N2O denitrification rate',' ', &
& 'mol N2O m-3 s-1',2)
& 'mol N2O m-2 s-1',2)
call ncdefvar3d(LVL_DNRA_NO2(iogrp),cmpflg,'p', &
& 'no2dnralvl','NO2 DNRA rate',' ','mol N m-3 s-1',2)
& 'no2dnralvl','NO2 DNRA rate',' ','mol N m-2 s-1',2)
call ncdefvar3d(LVL_anmx_N2_prod(iogrp),cmpflg,'p', &
& 'anmx_n2lvl','Anammox N2 production rate',' ', &
& 'mol N2 m-3 s-1',2)
& 'mol N2 m-2 s-1',2)
call ncdefvar3d(LVL_anmx_OM_prod(iogrp),cmpflg,'p', &
& 'anmx_omlvl','Anammox OM production rate',' ','mol P m-3 s-1',2)
& 'anmx_omlvl','Anammox OM production rate',' ','mol P m-2 s-1',2)
call ncdefvar3d(LVL_phosy_NH4(iogrp),cmpflg,'p', &
& 'phosy_nh4lvl','PP consumption rate of NH4',' ', &
& 'mol N m-3 s-1',2)
& 'mol N m-2 s-1',2)
call ncdefvar3d(LVL_phosy_NO3(iogrp),cmpflg,'p', &
& 'phosy_no3lvl','PP consumption rate of NO3',' ', &
& 'mol N m-3 s-1',2)
& 'mol N m-2 s-1',2)
call ncdefvar3d(LVL_remin_aerob(iogrp),cmpflg,'p', &
& 'reminalvl','Aerob remineralization rate',' ', &
& 'mol N m-3 s-1',2)
& 'mol N m-2 s-1',2)
call ncdefvar3d(LVL_remin_sulf(iogrp),cmpflg,'p', &
& 'reminslvl','Sulfate remineralization rate',' ', &
& 'mol P m-3 s-1',2)
& 'mol P m-2 s-1',2)
endif
if (use_M4AGO) then
! M4AGO
Expand Down
19 changes: 9 additions & 10 deletions hamocc/mo_ocprod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -320,6 +320,7 @@ subroutine ocprod(kpie,kpje,kpke,kbnd,pdlxp,pdlyp,pddpo,omask,ptho,pi_ph,psao,pp
do k = 1,merge(kpke,kwrbioz(i,j),lkwrbioz_off)

if(pddpo(i,j,k) > dp_min .and. omask(i,j) > 0.5) then
dz = pddpo(i,j,k)


if (use_AGG) then
Expand Down Expand Up @@ -484,9 +485,9 @@ subroutine ocprod(kpie,kpje,kpke,kbnd,pdlxp,pdlyp,pddpo,omask,ptho,pi_ph,psao,pp
& + (1.-nh4uptfrac)*phosy*ro2ut & ! NO3 uptake
& - (dtr+phosy)*ro2utammo ! Remin to NH4
! Output
phosy_NH4(i,j,k) = nh4uptfrac*phosy*rnit ! kmol N/m3/dtb - NH4 uptake during PP growth
phosy_NO3(i,j,k) = (1.-nh4uptfrac)*phosy*rnit ! kmol N/m3/dtb - NO3 uptake during PP growth
remin_aerob(i,j,k) = (dtr+phosy)*rnit ! kmol N/m3/dtb - Aerob remin to ammonium (var. sources)
phosy_NH4(i,j,k) = nh4uptfrac*phosy*rnit*dz ! kmol N/m2/dtb - NH4 uptake during PP growth
phosy_NO3(i,j,k) = (1.-nh4uptfrac)*phosy*rnit*dz ! kmol N/m2/dtb - NO3 uptake during PP growth
remin_aerob(i,j,k) = (dtr+phosy)*rnit*dz ! kmol NH4/m2/dtb - Aerob remin to ammonium (var. sources)
endif
ocetra(i,j,k,idet) = ocetra(i,j,k,idet)+export
ocetra(i,j,k,idms) = ocetra(i,j,k,idms)+dmsprod-dms_bac-dms_uv
Expand Down Expand Up @@ -579,8 +580,6 @@ subroutine ocprod(kpie,kpje,kpke,kbnd,pdlxp,pdlyp,pddpo,omask,ptho,pi_ph,psao,pp
endif

! add up for total inventory and output
dz = pddpo(i,j,k)

expoor(i,j) = expoor(i,j) +export*rcar*dz
expoca(i,j) = expoca(i,j) +delcar*dz
exposi(i,j) = exposi(i,j) +delsil*dz
Expand Down Expand Up @@ -624,6 +623,7 @@ subroutine ocprod(kpie,kpje,kpke,kbnd,pdlxp,pdlyp,pddpo,omask,ptho,pi_ph,psao,pp
do i = 1,kpie
do k = merge(1,kwrbioz(i,j)+1,lkwrbioz_off),kpke
if(pddpo(i,j,k) > dp_min .and. omask(i,j) > 0.5) then
dz = pddpo(i,j,k)

if (use_AGG) then
avmass = ocetra(i,j,k,iphy)+ocetra(i,j,k,idet)
Expand Down Expand Up @@ -727,7 +727,7 @@ subroutine ocprod(kpie,kpje,kpke,kbnd,pdlxp,pdlyp,pddpo,omask,ptho,pi_ph,psao,pp
ocetra(i,j,k,ianh4) = ocetra(i,j,k,ianh4) + remin*rnit
ocetra(i,j,k,ialkali) = ocetra(i,j,k,ialkali) + (rnit-1.)*remin
ocetra(i,j,k,ioxygen) = ocetra(i,j,k,ioxygen) - ro2utammo*remin
remin_aerob(i,j,k) = remin*rnit ! kmol/NH4/dtb - remin to NH4 from various sources
remin_aerob(i,j,k) = remin_aerob(i,j,k) + remin*rnit*dz ! kmol NH4/m2/dtb - remin to NH4 from various sources
endif
ocetra(i,j,k,isco212) = ocetra(i,j,k,isco212)+rcar*remin
ocetra(i,j,k,iiron) = ocetra(i,j,k,iiron)+remin*riron &
Expand Down Expand Up @@ -777,7 +777,6 @@ subroutine ocprod(kpie,kpje,kpke,kbnd,pdlxp,pdlyp,pddpo,omask,ptho,pi_ph,psao,pp
& * (ocetra(i,j,k,idms) / (dmsp6+ocetra(i,j,k,idms)))
ocetra(i,j,k,idms) = ocetra(i,j,k,idms)-dms_bac

dz = pddpo(i,j,k)
intdms_bac(i,j) = intdms_bac(i,j)+dms_bac*dz

if (use_AGG) then
Expand Down Expand Up @@ -908,13 +907,13 @@ subroutine ocprod(kpie,kpje,kpke,kbnd,pdlxp,pdlyp,pddpo,omask,ptho,pi_ph,psao,pp
! minimum in the equatorial pacific/atlantic
! does it make sense to check for oxygen and nitrate deficit?

!$OMP PARALLEL DO PRIVATE(remin,avmass,avnos,rem13,rem14,i,k)
!$OMP PARALLEL DO PRIVATE(remin,avmass,avnos,rem13,rem14,i,k,dz)
loop4: do j = 1,kpje
do i = 1,kpie
do k = merge(1,kwrbioz(i,j)+1,lkwrbioz_off),kpke
if(omask(i,j) > 0.5 .and. pddpo(i,j,k) > dp_min) then
if(ocetra(i,j,k,ioxygen) < O2thresh_hypoxic .and. ocetra(i,j,k,iano3) < NO3thresh_sulf ) then

dz = pddpo(i,j,k)
if (use_AGG) then
avmass = ocetra(i,j,k,iphy)+ocetra(i,j,k,idet)
endif
Expand All @@ -941,7 +940,7 @@ subroutine ocprod(kpie,kpje,kpke,kbnd,pdlxp,pdlyp,pddpo,omask,ptho,pi_ph,psao,pp
endif
if (use_extNcycle) then
! Output
remin_sulf(i,j,k) = remin ! kmol P/m3/dtb
remin_sulf(i,j,k) = remin*dz ! kmol P/m2/dtb
endif
if (use_AGG) then
!***********************************************************************
Expand Down