! $Id: soilnoxems.f,v 1.7 2006/11/07 19:02:03 bmy Exp $ SUBROUTINE SNOWNOXEMS(DIRRAD1, DIRRAD2, DIRRAD3, DIRRAD4, DIRRAD5, & DIRRAD7, DIFRAD1, DIFRAD2, DIFRAD3, DIFRAD4, DIFRAD5, & DIFRAD6, DIRRAD6, DIFRAD7) ! !****************************************************************************** ! Subroutine SNOWNOXEMS computes the emission of NOx from the Antarctic snowpack ! from photodenitrification for the GEOS-CHEM model. (bec, 10/06/11) ! ! Arguments as Input: ! ============================================================================ ! (1 ) SUNCOS (REAL*8) : Array for COSINE( solar zenith angle ) [unitless] ! ! Other Important variables (mostly via common blocks or F90 modules) ! ============================================================================ ! (1 ) IJLOOP (INTEGER) : Grid-box number ! (2 ) JLOP (INTEGER) : Index to IJLOOP; for a given I,J ! (13) SOILTEMP (REAL*8 ) : Temperature factor (external function) ! (14) TMMPK (REAL*8 ) : Local air temperature (K), w/ diurnal variation ! (18) BXHEIGHT (REAL*8 ) : Grid-box height [m] ! (19) SNOWNOX (REAL*8 ) : Output [molec NOx/cm2/s] ! ! References: ! ============================================================================ ! (1 ) France et al [2011] ! (2 ) Frey et al in prep ! ! NOTES: ! (1 ) Be sure to force double precision with the DBLE function and the "D" ! exponent, wherever necessary (bmy, 10/6/99) ! (2 ) Made JLOP a local variable, so as not to have to reference it from ! "comode.h". "comode.h" should be only for SMVGEAR. (bmy, 10/19/00) ! (3 ) Now save soil NOx into GEMISNOX2 array (bdf, bmy, 6/15/01) ! (4 ) Replaced IM with IIPAR and JM with JJPAR (bmy, 6/25/02) ! (5 ) Now reference BXHEIGHT from "dao_mod.f". Also updated comments and ! made cosmetic changes. (bmy, 9/18/02) !****************************************************************************** ! ! References to F90 modules USE DAO_MOD, ONLY : BXHEIGHT USE DAO_MOD, ONLY : ALBD, LWI, SUNCOS !bec (10/6/11), updated 4/19/2012 mcz USE DIAG_MOD, ONLY : AD32_ph !bec (10/6/11) USE GRID_MOD, ONLY : GET_XOFFSET, GET_YOFFSET USE UVALBEDO_MOD, ONLY : UVALBEDO !(mcz 4/24/2012) USE CMN_SIZE_MOD ! Size parameters USE CMN_DIAG_MOD ! Diagnostic switches & arrays USE CMN_NOX_MOD ! GEMISNOX2 IMPLICIT NONE # include "define.h" !=============== INPUT PARAMETERS ====================================== REAL*8, INTENT(IN) :: DIRRAD1, DIRRAD2, DIRRAD3, DIRRAD4, DIRRAD5 !(mcz 4/24/2012) REAL*8, INTENT(IN) :: DIFRAD1, DIFRAD2, DIFRAD3, DIFRAD4, DIFRAD5 !(mcz 4/24/2012) REAL*8, INTENT(IN) :: DIRRAD6, DIFRAD6, DIRRAD7, DIFRAD7 !(mcz 4/24/2012) ! Local variables ====================================================== INTEGER :: I, J, L INTEGER :: IJLOOP, I0, J0 INTEGER :: KBL, JLOP(IIPAR,JJPAR,1) REAL*8 :: ZBL REAL*8 :: SNOWNOX(IIPAR,JJPAR) !REAL*8 :: SNOWNOXA(IIPAR,JJPAR) !REAL*8 :: SNOWNOXG(IIPAR,JJPAR) !================================================================= ! SNOWNOXEMS begins here! !================================================================= write(6,*) 'in SNOWNOXEMS' ! Get nested-grid offsets (bmy, 2/11/03) I0 = GET_XOFFSET() J0 = GET_YOFFSET() ! Initalize IJLOOP = 0 DO J = 1, JJPAR DO I = 1, IIPAR SNOWNOX(I,J) = 0.D0 !SNOWNOXA(I,J) = 0.D0 !SNOWNOXG(I,J) = 0.D0 ENDDO ENDDO !SNOWNOX calculates NOx emissions in [molec NOx/cm2/s] !Antarctica and Greenland ======================================== !DO J = 1, 7 !only compute snow NOx emissions at latitudes south of ~60 deg S ! DO J = 1, JJPAR ! DO I = 1, IIPAR !IJLOOP is the 1-D grid box index for SUNCOS ! IJLOOP = ( (J-1) * IIPAR ) + I ! IF ( SUNCOS(IJLOOP) > 0.d0 .and. NINT( LWI(I,J) ) == 2 ! & .and. UVALBEDO(I,J) == 0.99d0) THEN ! write(6,*) 'in Antarctica and Greenland' ! write(6,*) 'SUNCOS = ', SUNCOS(IJLOOP) ! write(6,*) 'J = ', J ! SNOWNOX(I,J) = 5.0d8 !low value from Frey et al. manuscript in prep ! ELSE ! SNOWNOX(I,J) = 0.0d0 ! ENDIF ! END DO ! END DO !Greenland================================================================== !DO J = 38, 45 !roughly latitude and longitude bounds of Greenland !DO I = 22, 36 !-71.6 to -11.6 (longitude), 59-85.2N (latitude) !IJLOOP is the 1-D grid box index for SUNCOS !IJLOOP = ( (J-1) * IIPAR ) + I !IF ( SUNCOS(IJLOOP) > 0.d0 .and. NINT( LWI(I,J) ) == 2 !& .and. UVALBEDO(I,J) == 0.99d0) THEN !write(6,*) 'in Greenland' !write(6,*) 'SUNCOS = ', SUNCOS(IJLOOP) !write(6,*) 'J = ', J !SNOWNOXG(I,J) = 5.0d8 !low value from Frey et al. manuscript in prep !ELSE !SNOWNOXG(I,J) = 0.0d0 !ENDIF !========================================================================== ! Archive snow NOx emissions [molec NOx/cm2/s] ! IF ( ND32 > 0 ) THEN ! AD32_ph(I,J) = AD32_ph(I,J) + SNOWNOX(I,J) ! ENDIF ! Spread NOx emission into the boundary layer ! NOTE: BXHEIGHT is in m, so BXHEIGHT * 100 is in cm. ! ZBL = 0.D0 ! KBL = 1 ! DO L = 1, KBL ! ZBL = ZBL + BXHEIGHT(I,J,L)*100.D0 ! ENDDO ! Store soil NOx in GEMISNOX2, the global NOx emissions array, which ! gets passed to SMVGEAR. GEMISNOX2 has units of [molec NOx/cm3/s]. ! GEMISNOX2(I,J) = GEMISNOX2(I,J) + ( SNOWNOX(I,J) / ZBL ) !ENDDO !ENDDO ! Return to calling program END SUBROUTINE SNOWNOXEMS