LCOV - code coverage report
Current view: top level - hemco/HEMCO/src/Extensions - drydep_toolbox_mod.F90 (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 50 0.0 %
Date: 2024-12-17 22:39:59 Functions: 0 4 0.0 %

          Line data    Source code
       1             : !------------------------------------------------------------------------------
       2             : !                   Harmonized Emissions Component (HEMCO)                    !
       3             : !------------------------------------------------------------------------------
       4             : !BOP
       5             : !
       6             : ! !MODULE: drydep_toolbox_mod.F90
       7             : !
       8             : ! !DESCRIPTION: Module DryEep\_ToolBox\_Mod contains routines used for dry
       9             : ! deposition (and soil NOx emissions) calculations, as implemented into!
      10             : ! the GEOS-Chem model.
      11             : !\\
      12             : !\\
      13             : ! !INTERFACE:
      14             : !
      15             : MODULE DryDep_ToolBox_Mod
      16             : !
      17             : ! !USES:
      18             : !
      19             :   USE HCO_ERROR_MOD, ONLY : hp     ! Precision (hp)
      20             : 
      21             :   IMPLICIT NONE
      22             :   PRIVATE
      23             : !
      24             : ! !PUBLIC MEMBER FUNCTIONS:
      25             : !
      26             :   PUBLIC  :: BioFit
      27             :   INTERFACE BioFit
      28             :     MODULE PROCEDURE BioFit_R4
      29             :     MODULE PROCEDURE BioFit_R8
      30             :   END INTERFACE
      31             : 
      32             : !
      33             : ! !PRIVATE MEMBER FUNCTIONS:
      34             : !
      35             :   PRIVATE :: SunParam_R4
      36             :   PRIVATE :: SunParam_R8
      37             : !
      38             : ! !REVISION HISTORY:
      39             : !  14 Nov 2013 - C. Keller   - Created from BIOFIT.F and SUNPARAM.F
      40             : !  See https://github.com/geoschem/hemco for complete history
      41             : !EOP
      42             : !------------------------------------------------------------------------------
      43             : !BOC
      44             : CONTAINS
      45             : !EOC
      46             : !------------------------------------------------------------------------------
      47             : !                   Harmonized Emissions Component (HEMCO)                    !
      48             : !------------------------------------------------------------------------------
      49             : !BOP
      50             : !
      51             : ! !ROUTINE: BIOFIT_R4
      52             : !
      53             : ! !DESCRIPTION: Function BioFit computes the light correction used in the
      54             : !  dry deposition and canopy NOx modules.
      55             : !\\
      56             : !\\
      57             : ! !INTERFACE:
      58             : !
      59           0 :   FUNCTION BioFit_R4( COEFF1, XLAI1, SUNCOS1, CFRAC1, NPOLY ) RESULT( BIO_FIT )
      60             : !
      61             : ! !INPUT PARAMETERS:
      62             : !
      63             :     INTEGER, INTENT(IN) :: NPOLY           ! # of drydep coefficients
      64             :     REAL*4,  INTENT(IN) :: COEFF1(NPOLY)   ! Baldocchi drydep coefficients
      65             :     REAL*4,  INTENT(IN) :: XLAI1           ! Leaf area index [cm2/cm2]
      66             :     REAL*4,  INTENT(IN) :: SUNCOS1         ! Cosine( Solar Zenith Angle )
      67             :     REAL*4,  INTENT(IN) :: CFRAC1          ! Cloud fraction [unitless]
      68             : !
      69             : ! !RETURN VALUE:
      70             : !
      71             :     REAL*4              :: BIO_FIT         ! Resultant light correction
      72             : !
      73             : ! !REMARKS:
      74             : !  This routine is ancient code from Yuhang Wang.  It was part of the old
      75             : !  Harvard-GISS CTM and was ported into GEOS-Chem.  See this reference for
      76             : !  more information:
      77             : !                                                                             .
      78             : !    Wang, Y., D.J. Jacob, and J.A. Logan, "Global simulation of tropospheric
      79             : !     O3-NOx-hydrocarbon chemistry, 1. Model formulation", J. Geophys. Res.,
      80             : !     103/D9, 10,713-10,726, 1998.
      81             : !
      82             : ! !REVISION HISTORY:
      83             : !  13 Dec 2012 - R. Yantosca - Added ProTeX headers
      84             : !  See https://github.com/geoschem/hemco for complete history
      85             : !EOP
      86             : !------------------------------------------------------------------------------
      87             : !BOC
      88             : !
      89             : ! !DEFINED PARAMETERS:
      90             : !
      91             :     INTEGER, PARAMETER :: KK = 4
      92             : !
      93             : ! !LOCAL VARIABLES:
      94             : !
      95             :     REAL*4             :: TERM(KK)
      96           0 :     REAL*4             :: REALTERM(NPOLY)
      97             :     INTEGER            :: K,K1,K2,K3
      98             : 
      99             :     !=================================================================
     100             :     ! BIOFIT begins here!
     101             :     !=================================================================
     102           0 :     TERM(1) = 1.0e0
     103           0 :     TERM(2) = XLAI1
     104           0 :     TERM(3) = SUNCOS1
     105           0 :     TERM(4) = CFRAC1
     106           0 :     CALL SUNPARAM_R4( TERM(2:4) )
     107           0 :     K = 0
     108           0 :     DO K3 = 1, KK
     109           0 :        DO K2 = K3, KK
     110           0 :           DO K1 = K2, KK
     111           0 :              K = K + 1
     112           0 :              REALTERM(K)=TERM(K1)*TERM(K2)*TERM(K3)
     113             :           ENDDO
     114             :        ENDDO
     115             :     ENDDO
     116             : 
     117             :     ! Now explicitly use REAL*4 precision.  This will cause very small
     118             :     ! differences at the level of numerical noise when comparing to
     119             :     ! prior states of the code like v10-01e.  But this is something that
     120             :     ! we can live with.  Stick with REAL*8 precision for now, but we'll
     121             :     ! try to implement flexible precision into this routine at a later
     122             :     ! point. (bmy, myannetti, 12/10/14)
     123             :     BIO_FIT = 0e0
     124           0 :     DO K = 1, NPOLY
     125           0 :        BIO_FIT = BIO_FIT + COEFF1(K)*REALTERM(K)
     126             :     END DO
     127           0 :     IF ( BIO_FIT .LT. 0.1e0 ) BIO_FIT = 0.1e0
     128             : 
     129           0 :   END FUNCTION BioFit_R4
     130             : !EOC
     131             : !------------------------------------------------------------------------------
     132             : !                   Harmonized Emissions Component (HEMCO)                    !
     133             : !------------------------------------------------------------------------------
     134             : !BOP
     135             : !
     136             : ! !ROUTINE: BIOFIT_R8
     137             : !
     138             : ! !DESCRIPTION: Function BioFit computes the light correction used in the
     139             : !  dry deposition and canopy NOx modules.
     140             : !\\
     141             : !\\
     142             : ! !INTERFACE:
     143             : !
     144           0 :   FUNCTION BioFit_R8( COEFF1, XLAI1, SUNCOS1, CFRAC1, NPOLY ) RESULT( BIO_FIT )
     145             : !
     146             : ! !INPUT PARAMETERS:
     147             : !
     148             :     INTEGER, INTENT(IN) :: NPOLY           ! # of drydep coefficients
     149             :     REAL*8,  INTENT(IN) :: COEFF1(NPOLY)   ! Baldocchi drydep coefficients
     150             :     REAL*8,  INTENT(IN) :: XLAI1           ! Leaf area index [cm2/cm2]
     151             :     REAL*8,  INTENT(IN) :: SUNCOS1         ! Cosine( Solar Zenith Angle )
     152             :     REAL*8,  INTENT(IN) :: CFRAC1          ! Cloud fraction [unitless]
     153             : !
     154             : ! !RETURN VALUE:
     155             : !
     156             :     REAL*8              :: BIO_FIT         ! Resultant light correction
     157             : !
     158             : ! !REMARKS:
     159             : !  This routine is ancient code from Yuhang Wang.  It was part of the old
     160             : !  Harvard-GISS CTM and was ported into GEOS-Chem.  See this reference for
     161             : !  more information:
     162             : !                                                                             .
     163             : !    Wang, Y., D.J. Jacob, and J.A. Logan, "Global simulation of tropospheric
     164             : !     O3-NOx-hydrocarbon chemistry, 1. Model formulation", J. Geophys. Res.,
     165             : !     103/D9, 10,713-10,726, 1998.
     166             : !
     167             : ! !REVISION HISTORY:
     168             : !  13 Dec 2012 - R. Yantosca - Added ProTeX headers
     169             : !  See https://github.com/geoschem/hemco for complete history
     170             : !EOP
     171             : !------------------------------------------------------------------------------
     172             : !BOC
     173             : !
     174             : ! !DEFINED PARAMETERS:
     175             : !
     176             :     INTEGER, PARAMETER :: KK = 4
     177             : !
     178             : ! !LOCAL VARIABLES:
     179             : !
     180             :     REAL*8             :: TERM(KK)
     181           0 :     REAL*8             :: REALTERM(NPOLY)
     182             :     INTEGER            :: K,K1,K2,K3
     183             : 
     184             :     !=================================================================
     185             :     ! BIOFIT begins here!
     186             :     !=================================================================
     187           0 :     TERM(1) = 1.0d0
     188           0 :     TERM(2) = XLAI1
     189           0 :     TERM(3) = SUNCOS1
     190           0 :     TERM(4) = CFRAC1
     191           0 :     CALL SUNPARAM_R8(TERM(2:4))
     192           0 :     K=0
     193           0 :     DO K3 = 1, KK
     194           0 :        DO K2 = K3, KK
     195           0 :           DO K1 = K2, KK
     196           0 :              K = K + 1
     197           0 :              REALTERM(K)=TERM(K1)*TERM(K2)*TERM(K3)
     198             :           ENDDO
     199             :        ENDDO
     200             :     ENDDO
     201             : 
     202             :     ! Now explicitly use REAL*8 precision.  This will cause very small
     203             :     ! differences at the level of numerical noise when comparing to
     204             :     ! prior states of the code like v10-01e.  But this is something that
     205             :     ! we can live with.  Stick with REAL*8 precision for now, but we'll
     206             :     ! try to implement flexible precision into this routine at a later
     207             :     ! point. (bmy, myannetti, 12/10/14)
     208             :     BIO_FIT = 0d0
     209           0 :     DO K = 1, NPOLY
     210           0 :        BIO_FIT = BIO_FIT + COEFF1(K)*REALTERM(K)
     211             :     END DO
     212           0 :     IF ( BIO_FIT .LT. 0.1d0 ) BIO_FIT = 0.1d0
     213             : 
     214           0 :   END FUNCTION BIOFIT_R8
     215             : !EOC
     216             : !------------------------------------------------------------------------------
     217             : !                   Harmonized Emissions Component (HEMCO)                    !
     218             : !------------------------------------------------------------------------------
     219             : !BOP
     220             : !
     221             : ! !IROUTINE: SunParam_R4
     222             : !
     223             : ! !DESCRIPTION: Subroutine SUNPARAM is called by BIOFIT to perform the
     224             : !  light correction used in the dry deposition and canopy NOx modules.
     225             : !\\
     226             : !\\
     227             : ! !INTERFACE:
     228             : !
     229           0 :   SUBROUTINE SunParam_R4( X )
     230             : !
     231             : ! !DEFINED PARAMETERS:
     232             : !
     233             :     INTEGER, PARAMETER    :: NN = 3  ! # of variables (LAI, SUNCOS, CLDFRC)
     234             : !
     235             : ! !INPUT/OUTPUT PARAMETERS:
     236             : !
     237             :     REAL*4, INTENT(INOUT) :: X(NN)   ! LAI, SUNCOS, or cloud fraction
     238             : !
     239             : ! !REMARKS:
     240             : !  This routine is ancient code from Yuhang Wang.  It was part of the old
     241             : !  Harvard-GISS CTM and was ported into GEOS-Chem.  See this reference for
     242             : !  more information:
     243             : !                                                                             .
     244             : !    Wang, Y., D.J. Jacob, and J.A. Logan, "Global simulation of tropospheric
     245             : !     O3-NOx-hydrocarbon chemistry, 1. Model formulation", J. Geophys. Res.,
     246             : !     103/D9, 10,713-10,726, 1998.
     247             : !
     248             : ! !REVISION HISTORY:
     249             : !  13 Dec 2012 - R. Yantosca - Added ProTeX headers
     250             : !  See https://github.com/geoschem/hemco for complete history
     251             : !EOP
     252             : !------------------------------------------------------------------------------
     253             : !BOC
     254             : 
     255             :     !===============================================
     256             :     ! the sequence is lai,suncos,cloud fraction
     257             :     !===============================================
     258             : 
     259             :     ! ND = scaling factor for each variable
     260             :     INTEGER :: I
     261             :     REAL*4  :: ND(NN) = (/ 55.0e0, 20.0e0, 11.0e0 /)
     262             :     REAL*4  :: X0(NN) = (/ 11.0e0,  1.0e0,  1.0e0 /)
     263             : 
     264             :     !  X0 = maximum for each variable
     265             :     REAL*4  :: XLOW
     266             : 
     267           0 :     DO I = 1, NN
     268           0 :        X(I) = MIN( X(I), X0(I) )
     269             :        ! XLOW = minimum for each variable
     270           0 :        IF ( I .NE. 3 ) THEN
     271           0 :           XLOW = X0(I) / ND(I)
     272             :        ELSE
     273             :           XLOW = 0.0e0
     274             :        ENDIF
     275           0 :        X(I) = MAX( X(I), XLOW )
     276           0 :        X(I) = X(I) / X0(I)
     277             :     ENDDO
     278             : 
     279           0 :   END SUBROUTINE SunParam_R4
     280             : !EOC
     281             : !------------------------------------------------------------------------------
     282             : !                   Harmonized Emissions Component (HEMCO)                    !
     283             : !------------------------------------------------------------------------------
     284             : !BOP
     285             : !
     286             : ! !IROUTINE: SunParam_r8
     287             : !
     288             : ! !DESCRIPTION: Subroutine SUNPARAM is called by BIOFIT to perform the
     289             : !  light correction used in the dry deposition and canopy NOx modules.
     290             : !\\
     291             : !\\
     292             : ! !INTERFACE:
     293             : !
     294           0 :   SUBROUTINE SunParam_R8( X )
     295             : !
     296             : ! !DEFINED PARAMETERS:
     297             : !
     298             :     INTEGER, PARAMETER    :: NN = 3  ! # of variables (LAI, SUNCOS, CLDFRC)
     299             : !
     300             : ! !INPUT/OUTPUT PARAMETERS:
     301             : !
     302             :     REAL*8, INTENT(INOUT) :: X(NN)   ! LAI, SUNCOS, or cloud fraction
     303             : !
     304             : ! !REMARKS:
     305             : !  This routine is ancient code from Yuhang Wang.  It was part of the old
     306             : !  Harvard-GISS CTM and was ported into GEOS-Chem.  See this reference for
     307             : !  more information:
     308             : !                                                                             .
     309             : !    Wang, Y., D.J. Jacob, and J.A. Logan, "Global simulation of tropospheric
     310             : !     O3-NOx-hydrocarbon chemistry, 1. Model formulation", J. Geophys. Res.,
     311             : !     103/D9, 10,713-10,726, 1998.
     312             : !
     313             : ! !REVISION HISTORY:
     314             : !  13 Dec 2012 - R. Yantosca - Added ProTeX headers
     315             : !  See https://github.com/geoschem/hemco for complete history
     316             : !EOP
     317             : !------------------------------------------------------------------------------
     318             : !BOC
     319             : 
     320             :     !===============================================
     321             :     ! the sequence is lai,suncos,cloud fraction
     322             :     !===============================================
     323             : 
     324             :     !  ND = scaling factor for each variable
     325             :     INTEGER :: I
     326             :     REAL*8  :: ND(NN) = (/ 55.0d0, 20.0d0, 11.0d0 /)
     327             :     REAL*8  :: X0(NN) = (/ 11.0e0,  1.0e0,  1.0e0 /)
     328             : 
     329             :     !  X0 = maximum for each variable
     330             :     REAL*8  :: XLOW
     331             : 
     332           0 :     DO I = 1, NN
     333           0 :        X(I) = MIN( X(I), X0(I) )
     334             :        ! XLOW = minimum for each variable
     335           0 :        IF ( I .NE. 3 ) THEN
     336           0 :           XLOW = X0(I) / ND(I)
     337             :        ELSE
     338             :           XLOW = 0.0d0
     339             :        END IF
     340           0 :        X(I) = MAX( X(I), XLOW )
     341           0 :        X(I) = X(I) / X0(I)
     342             :     END DO
     343             : 
     344           0 :   END SUBROUTINE SunParam_R8
     345             : !EOC
     346             : END MODULE DryDep_ToolBox_Mod

Generated by: LCOV version 1.14