Skip to content

File canopy_canvars_mod.F90

File List > src > canopy_canvars_mod.F90

Go to the documentation of this file

MODULE canopy_canvars_mod

!-------------------------------------------------------------------------------
! Name:     Canopy Variables Descriptions
! Purpose:  Contains canopy variables descriptions.
!           03 Oct 2022  Initial Version. (P. C. Campbell)
!-------------------------------------------------------------------------------
    use canopy_const_mod, ONLY: rk

    IMPLICIT NONE

!-------------------------------------------------------------------------------
! Canopy scalars in the model
!-------------------------------------------------------------------------------


    integer        ::    firetype

    integer        ::    cansublays

    integer        ::    midflamepoint

    real(rk)       ::    cdrag

    real(rk)       ::    pai

    real(rk)       ::    zcanmax

    real(rk)       ::    sigmau

    real(rk)       ::    sigma1

!-------------------------------------------------------------------------------
! Allocatable canopy variable arrays
!-------------------------------------------------------------------------------

    real(rk), allocatable :: zk                  ( : )

    real(rk), allocatable :: zhc                 ( : )

    real(rk), allocatable :: fainc               ( : )

    real(rk), allocatable :: fafracz             ( : )

    real(rk), allocatable :: fafraczint          ( : )

    real(rk), allocatable :: fsun                ( : )

    real(rk), allocatable :: tleaf_sun           ( : )

    real(rk), allocatable :: tleaf_shade         ( : )

    real(rk), allocatable :: tleaf_ave           ( : )

    real(rk), allocatable :: ppfd_sun            ( : )

    real(rk), allocatable :: ppfd_shade          ( : )

    real(rk), allocatable :: ppfd_ave            ( : )

    real(rk), allocatable :: tleaf_sun24_tmp     ( : , :, : )

    real(rk), allocatable :: tleaf_shade24_tmp   ( : , :, : )

    real(rk), allocatable :: tleaf_ave24_tmp     ( : , :, : )

    real(rk), allocatable :: ppfd_sun24_tmp      ( : , :, : )

    real(rk), allocatable :: ppfd_shade24_tmp    ( : , :, : )

    real(rk), allocatable :: tleaf_sun240_tmp    ( : , :, : )

    real(rk), allocatable :: tleaf_shade240_tmp  ( : , :, : )

    real(rk), allocatable :: tleaf_ave240_tmp    ( : , :, : )

    real(rk), allocatable :: ppfd_sun240_tmp     ( : , :, : )

    real(rk), allocatable :: ppfd_shade240_tmp   ( : , :, : )
    real(rk), allocatable :: tmp2mref_tmp        ( : , : )          ! 2-meter (AGL) input reference air temperature (K)
    real(rk), allocatable :: ubzref_tmp          ( : , : )          ! 10-meter (AGL) input reference wind speed (m/s)
    real(rk), allocatable :: tleaf_sun24         ( : , : )          ! Leaf temp for sunlit leaves (K)
    real(rk), allocatable :: tleaf_shade24       ( : , : )          ! Leaf temp for shaded leaves (K)
    real(rk), allocatable :: tleaf_ave24         ( : , : )          ! Average Leaf temp for sunlit and shaded leaves (K)
    real(rk), allocatable :: ppfd_sun24          ( : , : )          ! PPFD for sunlit leaves (umol phot/m2 s)
    real(rk), allocatable :: ppfd_shade24        ( : , : )          ! PPFD for shaded leaves (umol phot/m2 s)
    real(rk), allocatable :: tleaf_sun240        ( : , : )          ! Leaf temp for sunlit leaves (K)
    real(rk), allocatable :: tleaf_shade240      ( : , : )          ! Leaf temp for shaded leaves (K)
    real(rk), allocatable :: tleaf_ave240        ( : , : )          ! Average Leaf temp for sunlit and shaded leaves (K)
    real(rk), allocatable :: ppfd_sun240         ( : , : )          ! PPFD for sunlit leaves (umol phot/m2 s)
    real(rk), allocatable :: ppfd_shade240       ( : , : )          ! PPFD for shaded leaves (umol phot/m2 s)
    real(rk), allocatable :: daily_maxt2m        ( : )              ! Daily maximum 2-meter (AGL) input reference air temperature (K)
    real(rk), allocatable :: daily_mint2m        ( : )              ! Daily minimum 2-meter (AGL) input reference air temperature (K)
    real(rk), allocatable :: daily_maxws10m        ( : )            ! Daily maximum 10-meter (AGL) input wind speed (m/s)
    real(rk), allocatable :: tleaf_sun24_tmp_3d     ( : , : , : , : )          ! Leaf temp for sunlit leaves (K)
    real(rk), allocatable :: tleaf_shade24_tmp_3d   ( : , : , : , : )          ! Leaf temp for shaded leaves (K)
    real(rk), allocatable :: tleaf_ave24_tmp_3d     ( : , : , : , : )          ! Average Leaf temp for sunlit and shaded leaves (K)
    real(rk), allocatable :: ppfd_sun24_tmp_3d      ( : , : , : , : )          ! PPFD for sunlit leaves (umol phot/m2 s)
    real(rk), allocatable :: ppfd_shade24_tmp_3d    ( : , : , : , : )          ! PPFD for shaded leaves (umol phot/m2 s)
    real(rk), allocatable :: tleaf_sun240_tmp_3d    ( : , : , : , : )          ! Leaf temp for sunlit leaves (K)
    real(rk), allocatable :: tleaf_shade240_tmp_3d  ( : , : , : , : )          ! Leaf temp for shaded leaves (K)
    real(rk), allocatable :: tleaf_ave240_tmp_3d    ( : , : , : , : )          ! Average Leaf temp for sunlit and shaded leaves (K)
    real(rk), allocatable :: ppfd_sun240_tmp_3d     ( : , : , : , : )          ! PPFD for sunlit leaves (umol phot/m2 s)
    real(rk), allocatable :: ppfd_shade240_tmp_3d   ( : , : , : , : )          ! PPFD for shaded leaves (umol phot/m2 s)
    real(rk), allocatable :: tmp2mref_tmp_3d        ( : , : , : )              ! 2-meter (AGL) input reference air temperature (K)
    real(rk), allocatable :: ubzref_tmp_3d          ( : , : , : )              ! 10-meter (AGL) input reference wind speed (m/s)
    real(rk), allocatable :: tleaf_sun24_3d         ( : , : , : )          ! Leaf temp for sunlit leaves (K)
    real(rk), allocatable :: tleaf_shade24_3d       ( : , : , : )          ! Leaf temp for shaded leaves (K)
    real(rk), allocatable :: tleaf_ave24_3d         ( : , : , : )          ! Average Leaf temp for sunlit and shaded leaves (K)
    real(rk), allocatable :: ppfd_sun24_3d          ( : , : , : )          ! PPFD for sunlit leaves (umol phot/m2 s)
    real(rk), allocatable :: ppfd_shade24_3d        ( : , : , : )          ! PPFD for shaded leaves (umol phot/m2 s)
    real(rk), allocatable :: tleaf_sun240_3d        ( : , : , : )          ! Leaf temp for sunlit leaves (K)
    real(rk), allocatable :: tleaf_shade240_3d      ( : , : , : )          ! Leaf temp for shaded leaves (K)
    real(rk), allocatable :: tleaf_ave240_3d        ( : , : , : )          ! Average Leaf temp for sunlit and shaded leaves (K)
    real(rk), allocatable :: ppfd_sun240_3d         ( : , : , : )          ! PPFD for sunlit leaves (umol phot/m2 s)
    real(rk), allocatable :: ppfd_shade240_3d       ( : , : , : )          ! PPFD for shaded leaves (umol phot/m2 s)
    real(rk), allocatable :: daily_maxt2m_2d        ( : , : )                  ! Daily maximum 2-meter (AGL) input reference air temperature (K)
    real(rk), allocatable :: daily_mint2m_2d        ( : , : )                  ! Daily minimum 2-meter (AGL) input reference air temperature (K)
    real(rk), allocatable :: daily_maxws10m_2d      ( : , : )                  ! Daily maximum 10-meter (AGL) input wind speed (m/s)

    real(rk), allocatable :: canbot                 ( : )                  ! Canopy bottom wind reduction factors
    real(rk), allocatable :: cantop                 ( : )                  ! Canopy top wind reduction factors
    real(rk), allocatable :: canwind                ( : , : )              ! canopy wind speeds (m/s)
    real(rk), allocatable :: canwind_3d             ( : , : , : )          ! canopy wind speeds -- 3D (m/s)
    real(rk), allocatable :: lad                    ( : , : )              ! Leaf Area Density calculated from foliage shape function (m2/m3)
    real(rk), allocatable :: lad_3d                 ( : , : , : )          ! Leaf Area Density calculated from foliage shape function (m2/m3)
    real(rk), allocatable :: tka                    ( : , : )              ! Ambient temperature within/above canopy (K)
    real(rk), allocatable :: tka_3d                 ( : , : , : )          ! Ambient temperature within/above canopy (K)
    real(rk), allocatable :: pressa                 ( : , : )              ! Ambient pressure within/above canopy (mb)
    real(rk), allocatable :: pressa_3d              ( : , : , : )          ! Ambient pressure within/above canopy (mb)
    real(rk), allocatable :: relhuma                ( : , : )              ! Ambient relative humidity within/above canopy (%)
    real(rk), allocatable :: relhuma_3d             ( : , : , : )          ! Ambient relative humidity within/above canopy (%)
    real(rk), allocatable :: spechuma               ( : , : )              ! Ambient specific humidity within/above canopy (g/kg)
    real(rk), allocatable :: spechuma_3d            ( : , : , : )          ! Ambient specific humidity within/above canopy (g/kg)

    real(rk), allocatable :: dx                  ( : )          ! Model grid cell distance/resolution (m)
    real(rk), allocatable :: dx_2d               ( : , : )      ! Model grid cell distance/resolution -- 2D (m)
    real(rk), allocatable :: waf                 ( : )          ! Calculated Wind Adjustment Factor
    real(rk), allocatable :: waf_2d              ( : , : )      ! Calculated Wind Adjustment Factor -- 2D
    real(rk), allocatable :: d_h                 ( : )          ! Zero plane displacement heights (z/h)
    real(rk), allocatable :: d_h_2d              ( : , : )      ! Zero plane displacement heights (z/h) -- 2D
    real(rk), allocatable :: zo_h                ( : )          ! Surface (soil+veg) roughness lengths (z/h)
    real(rk), allocatable :: zo_h_2d             ( : , : )      ! Surface (soil+veg) roughness lengths (z/h) -- 2D
    real(rk), allocatable :: kz                  ( :, : )       ! Eddy Diffusivities (m2/s)
    real(rk), allocatable :: kz_3d               ( : , : , : )  ! Eddy Diffusivities -- 3D (m2/s)
    real(rk), allocatable :: rjcf                ( :, : )       ! Photolysis Attenuation Correction Factors
    real(rk), allocatable :: rjcf_3d             ( : , : , : )  ! Photolysis Attenuation Correction Factors -- 3D
    real(rk), allocatable :: flameh              ( : )          ! Flame Height (m)
    real(rk), allocatable :: flameh_2d           ( : , : )      ! Flame Height -- 2D (m)
    real(rk), allocatable :: emi_isop            ( :, : )       ! Isoprene biogenic emissions (kg/m2 s)
    real(rk), allocatable :: emi_isop_3d         ( : , : , : )  ! Isoprene biogenic emissions (kg/m2 s) -- 3D
    real(rk), allocatable :: emi_myrc            ( :, : )       ! Myrcene biogenic emissions (kg/m2 s)
    real(rk), allocatable :: emi_myrc_3d         ( : , : , : )  ! Myrcene biogenic emissions (kg/m2 s) -- 3D
    real(rk), allocatable :: emi_sabi            ( :, : )       ! Sabinene biogenic emissions (kg/m2 s)
    real(rk), allocatable :: emi_sabi_3d         ( : , : , : )  ! Sabinene biogenic emissions (kg/m2 s) -- 3D
    real(rk), allocatable :: emi_limo            ( :, : )       ! Limonene biogenic emissions (kg/m2 s)
    real(rk), allocatable :: emi_limo_3d         ( : , : , : )  ! Limonene biogenic emissions (kg/m2 s) -- 3D
    real(rk), allocatable :: emi_care            ( :, : )       ! Carene biogenic emissions (kg/m2 s)
    real(rk), allocatable :: emi_care_3d         ( : , : , : )  ! Carene biogenic emissions (kg/m2 s) -- 3D
    real(rk), allocatable :: emi_ocim            ( :, : )       ! Ocimene biogenic emissions (kg/m2 s)
    real(rk), allocatable :: emi_ocim_3d         ( : , : , : )  ! Ocimene biogenic emissions (kg/m2 s) -- 3D
    real(rk), allocatable :: emi_bpin            ( :, : )       ! Beta-Pinene biogenic emissions (kg/m2 s)
    real(rk), allocatable :: emi_bpin_3d         ( : , : , : )  ! Beta-Pinene biogenic emissions (kg/m2 s) -- 3D
    real(rk), allocatable :: emi_apin            ( :, : )       ! Alpha-Pinene biogenic emissions (kg/m2 s)
    real(rk), allocatable :: emi_apin_3d         ( : , : , : )  ! Alpha-Pinene biogenic emissions (kg/m2 s) -- 3D
    real(rk), allocatable :: emi_mono            ( :, : )       ! Other Monoterpenes biogenic emissions (kg/m2 s)
    real(rk), allocatable :: emi_mono_3d         ( : , : , : )  ! Other Mononterpenes biogenic emissions (kg/m2 s) -- 3D
    real(rk), allocatable :: emi_farn            ( :, : )       ! Farnesene biogenic emissions (kg/m2 s)
    real(rk), allocatable :: emi_farn_3d         ( : , : , : )  ! Farnesene biogenic emissions (kg/m2 s) -- 3D
    real(rk), allocatable :: emi_cary            ( :, : )       ! Caryophyllene biogenic emissions (kg/m2 s)
    real(rk), allocatable :: emi_cary_3d         ( : , : , : )  ! Caryophyllene biogenic emissions (kg/m2 s) -- 3D
    real(rk), allocatable :: emi_sesq            ( :, : )       ! Other Sesquiterpenes biogenic emissions (kg/m2 s)
    real(rk), allocatable :: emi_sesq_3d         ( : , : , : )  ! Other Sesquiterpenes biogenic emissions (kg/m2 s) -- 3D
    real(rk), allocatable :: emi_mbol            ( :, : )       ! 232-MBO biogenic emissions (kg/m2 s)
    real(rk), allocatable :: emi_mbol_3d         ( : , : , : )  ! 232-MBO biogenic emissions (kg/m2 s) -- 3D
    real(rk), allocatable :: emi_meth            ( :, : )       ! Methanol biogenic emissions (kg/m2 s)
    real(rk), allocatable :: emi_meth_3d         ( : , : , : )  ! Methanol biogenic emissions (kg/m2 s) -- 3D
    real(rk), allocatable :: emi_acet            ( :, : )       ! Acetone biogenic emissions (kg/m2 s)
    real(rk), allocatable :: emi_acet_3d         ( : , : , : )  ! Acetone biogenic emissions (kg/m2 s) -- 3D
    real(rk), allocatable :: emi_co              ( :, : )       ! CO biogenic emissions (kg/m2 s)
    real(rk), allocatable :: emi_co_3d           ( : , : , : )  ! CO biogenic emissions (kg/m2 s) -- 3D
    real(rk), allocatable :: emi_bvoc            ( :, : )       ! BIDI VOC biogenic emissions (kg/m2 s)
    real(rk), allocatable :: emi_bvoc_3d         ( : , : , : )  ! BIDI VOC biogenic emissions (kg/m2 s) -- 3D
    real(rk), allocatable :: emi_svoc            ( :, : )       ! Stress VOC biogenic emissions (kg/m2 s)
    real(rk), allocatable :: emi_svoc_3d         ( : , : , : )  ! Stress VOC biogenic emissions (kg/m2 s) -- 3D
    real(rk), allocatable :: emi_ovoc            ( :, : )       ! Other VOC biogenic emissions (kg/m2 s)
    real(rk), allocatable :: emi_ovoc_3d         ( : , : , : )  ! Other VOC biogenic emissions (kg/m2 s) -- 3D


    real(rk), allocatable :: ddep_no             ( :, : )       ! Dry Deposition velocity for NO (m/s)
    real(rk), allocatable :: ddep_no_3d          ( : , : , : )  ! Dry Deposition velocity for NO (m/s) -- 3D
    real(rk), allocatable :: ddep_no2            ( :, : )       ! Dry Deposition velocity for NO2 (m/s)
    real(rk), allocatable :: ddep_no2_3d         ( : , : , : )  ! Dry Deposition velocity for NO2 (m/s) -- 3D
    real(rk), allocatable :: ddep_o3             ( :, : )       ! Dry Deposition velocity for O3 (m/s)
    real(rk), allocatable :: ddep_o3_3d          ( : , : , : )  ! Dry Deposition velocity for O3 (m/s) -- 3D
    real(rk), allocatable :: ddep_hono           ( :, : )       ! Dry Deposition velocity for HONO (m/s)
    real(rk), allocatable :: ddep_hono_3d        ( : , : , : )  ! Dry Deposition velocity for HONO (m/s) -- 3D
    real(rk), allocatable :: ddep_hno4           ( :, : )       ! Dry Deposition velocity for HNO4 (m/s)
    real(rk), allocatable :: ddep_hno4_3d        ( : , : , : )  ! Dry Deposition velocity for HNO4 (m/s) -- 3D
    real(rk), allocatable :: ddep_hno3           ( :, : )       ! Dry Deposition velocity for HNO3 (m/s)
    real(rk), allocatable :: ddep_hno3_3d        ( : , : , : )  ! Dry Deposition velocity for HNO3 (m/s) -- 3D
    real(rk), allocatable :: ddep_n2o5           ( :, : )       ! Dry Deposition velocity for N2O5 (m/s)
    real(rk), allocatable :: ddep_n2o5_3d        ( : , : , : )  ! Dry Deposition velocity for N2O5 (m/s) -- 3D
    real(rk), allocatable :: ddep_co             ( :, : )       ! Dry Deposition velocity for CO (m/s)
    real(rk), allocatable :: ddep_co_3d          ( : , : , : )  ! Dry Deposition velocity for CO (m/s) -- 3D
    real(rk), allocatable :: ddep_h2o2           ( :, : )       ! Dry Deposition velocity for H2O2 (m/s)
    real(rk), allocatable :: ddep_h2o2_3d        ( : , : , : )  ! Dry Deposition velocity for H2O2 (m/s) -- 3D
    real(rk), allocatable :: ddep_ch4            ( :, : )       ! Dry Deposition velocity for CH4 (m/s)
    real(rk), allocatable :: ddep_ch4_3d         ( : , : , : )  ! Dry Deposition velocity for CH4 (m/s) -- 3D
    real(rk), allocatable :: ddep_mo2            ( :, : )       ! Dry Deposition velocity for MO2 (m/s)
    real(rk), allocatable :: ddep_mo2_3d         ( : , : , : )  ! Dry Deposition velocity for MO2 (m/s) -- 3D
    real(rk), allocatable :: ddep_op1            ( :, : )       ! Dry Deposition velocity for OP1 (m/s)
    real(rk), allocatable :: ddep_op1_3d         ( : , : , : )  ! Dry Deposition velocity for OP1 (m/s) -- 3D
    real(rk), allocatable :: ddep_moh            ( :, : )       ! Dry Deposition velocity for MOH (m/s)
    real(rk), allocatable :: ddep_moh_3d         ( : , : , : )  ! Dry Deposition velocity for MOH (m/s) -- 3D
    real(rk), allocatable :: ddep_no3            ( :, : )       ! Dry Deposition velocity for NO3 (m/s)
    real(rk), allocatable :: ddep_no3_3d         ( : , : , : )  ! Dry Deposition velocity for NO3 (m/s) -- 3D
    real(rk), allocatable :: ddep_o3p            ( :, : )       ! Dry Deposition velocity for O3P (m/s)
    real(rk), allocatable :: ddep_o3p_3d         ( : , : , : )  ! Dry Deposition velocity for O3P (m/s) -- 3D
    real(rk), allocatable :: ddep_o1d            ( :, : )       ! Dry Deposition velocity for O1D (m/s)
    real(rk), allocatable :: ddep_o1d_3d         ( : , : , : )  ! Dry Deposition velocity for O1D (m/s) -- 3D
    real(rk), allocatable :: ddep_ho             ( :, : )       ! Dry Deposition velocity for HO (m/s)
    real(rk), allocatable :: ddep_ho_3d          ( : , : , : )  ! Dry Deposition velocity for HO (m/s) -- 3D
    real(rk), allocatable :: ddep_ho2            ( :, : )       ! Dry Deposition velocity for HO2 (m/s)
    real(rk), allocatable :: ddep_ho2_3d         ( : , : , : )  ! Dry Deposition velocity for HO2 (m/s) -- 3D
    real(rk), allocatable :: ddep_ora1           ( :, : )       ! Dry Deposition velocity for ORA1 (m/s)
    real(rk), allocatable :: ddep_ora1_3d        ( : , : , : )  ! Dry Deposition velocity for ORA1 (m/s) -- 3D
    real(rk), allocatable :: ddep_hac            ( :, : )       ! Dry Deposition velocity for HAC (m/s)
    real(rk), allocatable :: ddep_hac_3d         ( : , : , : )  ! Dry Deposition velocity for HAC (m/s) -- 3D
    real(rk), allocatable :: ddep_paa            ( :, : )       ! Dry Deposition velocity for PAA (m/s)
    real(rk), allocatable :: ddep_paa_3d         ( : , : , : )  ! Dry Deposition velocity for PAA (m/s) -- 3D
    real(rk), allocatable :: ddep_dhmob          ( :, : )       ! Dry Deposition velocity for DHMOB (m/s)
    real(rk), allocatable :: ddep_dhmob_3d       ( : , : , : )  ! Dry Deposition velocity for DHMOB (m/s) -- 3D
    real(rk), allocatable :: ddep_hpald          ( :, : )       ! Dry Deposition velocity for HPALD (m/s)
    real(rk), allocatable :: ddep_hpald_3d       ( : , : , : )  ! Dry Deposition velocity for HPALD (m/s) -- 3D
    real(rk), allocatable :: ddep_ishp           ( :, : )       ! Dry Deposition velocity for ISHP (m/s)
    real(rk), allocatable :: ddep_ishp_3d        ( : , : , : )  ! Dry Deposition velocity for ISHP (m/s) -- 3D
    real(rk), allocatable :: ddep_iepox          ( :, : )       ! Dry Deposition velocity for IEPOX (m/s)
    real(rk), allocatable :: ddep_iepox_3d       ( : , : , : )  ! Dry Deposition velocity for IEPOX (m/s) -- 3D
    real(rk), allocatable :: ddep_propnn         ( :, : )       ! Dry Deposition velocity for PROPNN (m/s)
    real(rk), allocatable :: ddep_propnn_3d      ( : , : , : )  ! Dry Deposition velocity for PROPNN (m/s) -- 3D
    real(rk), allocatable :: ddep_isopnb         ( :, : )       ! Dry Deposition velocity for ISOPNB (m/s)
    real(rk), allocatable :: ddep_isopnb_3d      ( : , : , : )  ! Dry Deposition velocity for ISOPNB (m/s) -- 3D
    real(rk), allocatable :: ddep_isopnd         ( :, : )       ! Dry Deposition velocity for ISOPND (m/s)
    real(rk), allocatable :: ddep_isopnd_3d      ( : , : , : )  ! Dry Deposition velocity for ISOPND (m/s) -- 3D
    real(rk), allocatable :: ddep_macrn          ( :, : )       ! Dry Deposition velocity for MACRN (m/s)
    real(rk), allocatable :: ddep_macrn_3d       ( : , : , : )  ! Dry Deposition velocity for MACRN (m/s) -- 3D
    real(rk), allocatable :: ddep_mvkn           ( :, : )       ! Dry Deposition velocity for MVKN (m/s)
    real(rk), allocatable :: ddep_mvkn_3d        ( : , : , : )  ! Dry Deposition velocity for MVKN (m/s) -- 3D
    real(rk), allocatable :: ddep_isnp           ( :, : )       ! Dry Deposition velocity for ISNP (m/s)
    real(rk), allocatable :: ddep_isnp_3d        ( : , : , : )  ! Dry Deposition velocity for ISNP (m/s) -- 3D

!-------------------------------------------------------------------------------
! Canopy-App Program and version descriptors.
!-------------------------------------------------------------------------------

    CHARACTER(LEN=16),  PARAMETER     :: progname   = 'Canopy-App'
    CHARACTER(LEN=10),  PARAMETER     :: vdate      = '02/13/2022'
    CHARACTER(LEN=8),   PARAMETER     :: ver        = 'V1.0.0'

!-------------------------------------------------------------------------------
! Define output NETCDF data structures.
!-------------------------------------------------------------------------------

    TYPE fld1dtdata
        REAL(rk),        POINTER   :: fld        ( : )
        CHARACTER(LEN=16)          :: fldname
        CHARACTER(LEN=80)          :: long_name
        CHARACTER(LEN=80)          :: units
        CHARACTER(LEN=80)          :: cartesian_axis = "T"
        CHARACTER(LEN=80)          :: calendar_type = "JULIAN"
        CHARACTER(LEN=80)          :: calendar = "JULIAN"
        REAL                       :: fillvalue
        CHARACTER(LEN=16)          :: dimnames   ( 4 )
        INTEGER                    :: istart     ( 4 )
        INTEGER                    :: iend       ( 4 )
    END TYPE fld1dtdata

    TYPE fld1ddata
        REAL(rk),        POINTER   :: fld        ( : )
        CHARACTER(LEN=16)          :: fldname
        CHARACTER(LEN=80)          :: long_name
        CHARACTER(LEN=80)          :: units
        REAL                       :: fillvalue
        CHARACTER(LEN=16)          :: dimnames   ( 4 )
        INTEGER                    :: istart     ( 4 )
        INTEGER                    :: iend       ( 4 )
    END TYPE fld1ddata

    TYPE fld2ddata
        REAL(rk),        POINTER   :: fld        ( : , : )
        CHARACTER(LEN=16)          :: fldname
        CHARACTER(LEN=80)          :: long_name
        CHARACTER(LEN=16)          :: units
        REAL                       :: fillvalue
        CHARACTER(LEN=16)          :: dimnames   ( 4 )
        INTEGER                    :: istart     ( 4 )
        INTEGER                    :: iend       ( 4 )
    END TYPE fld2ddata

    TYPE fld3ddata
        REAL(rk),        POINTER   :: fld        ( : , : , : )
        CHARACTER(LEN=16)          :: fldname
        CHARACTER(LEN=80)          :: long_name
        CHARACTER(LEN=16)          :: units
        REAL                       :: fillvalue
        CHARACTER(LEN=16)          :: dimnames   ( 4 )
        INTEGER                    :: istart     ( 4 )
        INTEGER                    :: iend       ( 4 )
    END TYPE fld3ddata

!-------------------------------------------------------------------------------
! Assign number of time independent and varying 2D/3D fields at cell centers.
!-------------------------------------------------------------------------------

    INTEGER           :: nfld1dt

    INTEGER           :: nfld1dz

    INTEGER           :: nfld2dxy

    INTEGER           :: nfld2dxyt
    INTEGER           :: nfld3dxyzt     ! time-varying 3d cell centers


!-------------------------------------------------------------------------------
! Time field.
!-------------------------------------------------------------------------------

    TYPE(fld1dtdata), ALLOCATABLE, TARGET :: fld1dt ( : )
    TYPE(fld1dtdata), POINTER     :: g_time

!-------------------------------------------------------------------------------
! Time-independent 1d fields at cell centers.
!-------------------------------------------------------------------------------

    TYPE(fld1ddata), ALLOCATABLE, TARGET :: fld1dz ( : )
    TYPE(fld1ddata), POINTER     :: g_level

!-------------------------------------------------------------------------------
! Time-independent 2d fields at cell centers.
!-------------------------------------------------------------------------------

    TYPE(fld2ddata), ALLOCATABLE, TARGET :: fld2dxy ( : )
    TYPE(fld2ddata), POINTER     :: g_lat
    TYPE(fld2ddata), POINTER     :: g_lon

!-------------------------------------------------------------------------------
! Time-varying 2d fields at cell centers for output NETCDF
!-------------------------------------------------------------------------------

    TYPE(fld2ddata), ALLOCATABLE, TARGET :: fld2dxyt ( : )
    TYPE(fld2ddata), POINTER     :: c_waf
    TYPE(fld2ddata), POINTER     :: c_flameh
    TYPE(fld2ddata), POINTER     :: c_canheight
    TYPE(fld2ddata), POINTER     :: c_dh
    TYPE(fld2ddata), POINTER     :: c_zoh

!-------------------------------------------------------------------------------
! Time-varying 3d fields at cell centers for output NETCDF
!-------------------------------------------------------------------------------

    TYPE(fld3ddata), ALLOCATABLE, TARGET :: fld3dxyzt ( : )
    TYPE(fld3ddata), POINTER     :: c_lad
    TYPE(fld3ddata), POINTER     :: c_canwind
    TYPE(fld3ddata), POINTER     :: c_kz
    TYPE(fld3ddata), POINTER     :: c_rjcf
    TYPE(fld3ddata), POINTER     :: c_emi_isop
    TYPE(fld3ddata), POINTER     :: c_emi_myrc
    TYPE(fld3ddata), POINTER     :: c_emi_sabi
    TYPE(fld3ddata), POINTER     :: c_emi_limo
    TYPE(fld3ddata), POINTER     :: c_emi_care
    TYPE(fld3ddata), POINTER     :: c_emi_ocim
    TYPE(fld3ddata), POINTER     :: c_emi_bpin
    TYPE(fld3ddata), POINTER     :: c_emi_apin
    TYPE(fld3ddata), POINTER     :: c_emi_mono
    TYPE(fld3ddata), POINTER     :: c_emi_farn
    TYPE(fld3ddata), POINTER     :: c_emi_cary
    TYPE(fld3ddata), POINTER     :: c_emi_sesq
    TYPE(fld3ddata), POINTER     :: c_emi_mbol
    TYPE(fld3ddata), POINTER     :: c_emi_meth
    TYPE(fld3ddata), POINTER     :: c_emi_acet
    TYPE(fld3ddata), POINTER     :: c_emi_co
    TYPE(fld3ddata), POINTER     :: c_emi_bvoc
    TYPE(fld3ddata), POINTER     :: c_emi_svoc
    TYPE(fld3ddata), POINTER     :: c_emi_ovoc
    TYPE(fld3ddata), POINTER     :: c_ddep_no
    TYPE(fld3ddata), POINTER     :: c_ddep_no2
    TYPE(fld3ddata), POINTER     :: c_ddep_o3
    TYPE(fld3ddata), POINTER     :: c_ddep_hono
    TYPE(fld3ddata), POINTER     :: c_ddep_hno4
    TYPE(fld3ddata), POINTER     :: c_ddep_hno3
    TYPE(fld3ddata), POINTER     :: c_ddep_n2o5
    TYPE(fld3ddata), POINTER     :: c_ddep_co
    TYPE(fld3ddata), POINTER     :: c_ddep_h2o2
    TYPE(fld3ddata), POINTER     :: c_ddep_ch4
    TYPE(fld3ddata), POINTER     :: c_ddep_mo2
    TYPE(fld3ddata), POINTER     :: c_ddep_op1
    TYPE(fld3ddata), POINTER     :: c_ddep_moh
    TYPE(fld3ddata), POINTER     :: c_ddep_no3
    TYPE(fld3ddata), POINTER     :: c_ddep_o3p
    TYPE(fld3ddata), POINTER     :: c_ddep_o1d
    TYPE(fld3ddata), POINTER     :: c_ddep_ho
    TYPE(fld3ddata), POINTER     :: c_ddep_ho2
    TYPE(fld3ddata), POINTER     :: c_ddep_ora1
    TYPE(fld3ddata), POINTER     :: c_ddep_hac
    TYPE(fld3ddata), POINTER     :: c_ddep_paa
    TYPE(fld3ddata), POINTER     :: c_ddep_dhmob
    TYPE(fld3ddata), POINTER     :: c_ddep_hpald
    TYPE(fld3ddata), POINTER     :: c_ddep_ishp
    TYPE(fld3ddata), POINTER     :: c_ddep_iepox
    TYPE(fld3ddata), POINTER     :: c_ddep_propnn
    TYPE(fld3ddata), POINTER     :: c_ddep_isopnb
    TYPE(fld3ddata), POINTER     :: c_ddep_isopnd
    TYPE(fld3ddata), POINTER     :: c_ddep_macrn
    TYPE(fld3ddata), POINTER     :: c_ddep_mvkn
    TYPE(fld3ddata), POINTER     :: c_ddep_isnp


END MODULE canopy_canvars_mod