diff --git a/hamocc/mo_extNwatercol.F90 b/hamocc/mo_extNwatercol.F90 index f646e2ca..c9fd8e97 100644 --- a/hamocc/mo_extNwatercol.F90 +++ b/hamocc/mo_extNwatercol.F90 @@ -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. @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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. @@ -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 @@ -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 diff --git a/hamocc/mo_ncout_hamocc.F90 b/hamocc/mo_ncout_hamocc.F90 index a6c88aee..2937a1f6 100644 --- a/hamocc/mo_ncout_hamocc.F90 +++ b/hamocc/mo_ncout_hamocc.F90 @@ -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 @@ -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 diff --git a/hamocc/mo_ocprod.F90 b/hamocc/mo_ocprod.F90 index f73df1b4..ae427f80 100644 --- a/hamocc/mo_ocprod.F90 +++ b/hamocc/mo_ocprod.F90 @@ -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 @@ -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 @@ -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 @@ -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) @@ -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 & @@ -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 @@ -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 @@ -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 !***********************************************************************