From 25bf8a9f8d7d0ff3906e977ca9c058a61a11e773 Mon Sep 17 00:00:00 2001 From: Benjamin Sulman Date: Fri, 24 May 2024 10:07:16 -0400 Subject: [PATCH] EMI data exchange for alquimia --- .../emi/src/constants/CMakeLists.txt | 3 + .../EMI_CNCarbonFluxType_Constants.F90 | 17 + .../EMI_CNCarbonStateType_Constants.F90 | 4 + .../EMI_CNNitrogenFluxType_Constants.F90 | 22 + .../EMI_CNNitrogenStateType_Constants.F90 | 17 + .../constants/EMI_ChemStateType_Constants.F90 | 33 +- .../EMI_ColumnEnergyStateType_Constants.F90 | 16 + .../EMI_ColumnWaterFluxType_Constants.F90 | 10 + .../EMI_ColumnWaterStateType_Constants.F90 | 12 + .../src/constants/EMI_Filter_Constants.F90 | 2 + .../src/emi_data_definition/CMakeLists.txt | 3 + .../EMI_Atm2LndType_DataMod.F90 | 22 +- .../EMI_CNCarbonFluxType_DataMod.F90 | 175 +++++++ .../EMI_CNCarbonStateType_DataMod.F90 | 74 ++- .../EMI_CNNitrogenFluxType_DataMod.F90 | 234 ++++++++++ .../EMI_CNNitrogenStateType_DataMod.F90 | 181 +++++++ .../EMI_CanopyStateType_DataMod.F90 | 22 +- .../EMI_ChemStateType_DataMod.F90 | 442 +++++++++++++++++- .../EMI_ColumnEnergyStateType_DataMod.F90 | 158 +++++++ .../EMI_ColumnWaterFluxType_DataMod.F90 | 97 ++++ .../EMI_ColumnWaterStateType_DataMod.F90 | 96 ++++ .../src/emi_data_definition/EMI_DataMod.F90 | 116 ++++- .../EMI_EnergyFluxType_DataMod.F90 | 22 +- .../EMI_SoilHydrologyType_DataMod.F90 | 22 +- .../EMI_SoilStateType_DataMod.F90 | 28 +- .../EMI_TemperatureType_DataMod.F90 | 22 +- .../EMI_WaterFluxType_DataMod.F90 | 22 +- .../EMI_WaterStateType_DataMod.F90 | 22 +- .../emi/src/emi_data_exchange/CMakeLists.txt | 3 + .../EMI_Atm2LndType_ExchangeMod.F90 | 35 +- .../EMI_CNCarbonFluxType_ExchangeMod.F90 | 245 ++++++++++ .../EMI_CNCarbonStateType_ExchangeMod.F90 | 81 +++- .../EMI_CNNitrogenFluxType_ExchangeMod.F90 | 287 ++++++++++++ .../EMI_CNNitrogenStateType_ExchangeMod.F90 | 251 ++++++++++ .../EMI_CanopyStateType_ExchangeMod.F90 | 50 +- .../EMI_ChemStateType_ExchangeMod.F90 | 436 ++++++++++++++++- .../EMI_ColumnEnergyStateType_ExchangeMod.F90 | 229 +++++++++ .../EMI_ColumnWaterFluxType_ExchangeMod.F90 | 124 +++++ .../EMI_ColumnWaterStateType_ExchangeMod.F90 | 124 +++++ .../EMI_EnergyFluxType_ExchangeMod.F90 | 34 +- .../EMI_Filter_ExchangeMod.F90 | 4 +- .../EMI_SoilHydrologyType_ExchangeMod.F90 | 40 +- .../EMI_SoilStateType_ExchangeMod.F90 | 85 ++-- .../EMI_TemperatureType_ExchangeMod.F90 | 55 ++- .../EMI_WaterFluxType_ExchangeMod.F90 | 117 ++--- .../EMI_WaterStateType_ExchangeMod.F90 | 100 ++-- .../emi_data_types/EMI_DataDimensionMod.F90 | 32 +- 47 files changed, 3824 insertions(+), 402 deletions(-) create mode 100644 components/elm/src/external_models/emi/src/constants/EMI_CNCarbonFluxType_Constants.F90 create mode 100644 components/elm/src/external_models/emi/src/constants/EMI_CNNitrogenFluxType_Constants.F90 create mode 100644 components/elm/src/external_models/emi/src/constants/EMI_CNNitrogenStateType_Constants.F90 create mode 100644 components/elm/src/external_models/emi/src/constants/EMI_ColumnEnergyStateType_Constants.F90 create mode 100644 components/elm/src/external_models/emi/src/constants/EMI_ColumnWaterFluxType_Constants.F90 create mode 100644 components/elm/src/external_models/emi/src/constants/EMI_ColumnWaterStateType_Constants.F90 create mode 100644 components/elm/src/external_models/emi/src/emi_data_definition/EMI_CNCarbonFluxType_DataMod.F90 create mode 100644 components/elm/src/external_models/emi/src/emi_data_definition/EMI_CNNitrogenFluxType_DataMod.F90 create mode 100644 components/elm/src/external_models/emi/src/emi_data_definition/EMI_CNNitrogenStateType_DataMod.F90 create mode 100644 components/elm/src/external_models/emi/src/emi_data_definition/EMI_ColumnEnergyStateType_DataMod.F90 create mode 100644 components/elm/src/external_models/emi/src/emi_data_definition/EMI_ColumnWaterFluxType_DataMod.F90 create mode 100644 components/elm/src/external_models/emi/src/emi_data_definition/EMI_ColumnWaterStateType_DataMod.F90 create mode 100644 components/elm/src/external_models/emi/src/emi_data_exchange/EMI_CNCarbonFluxType_ExchangeMod.F90 create mode 100644 components/elm/src/external_models/emi/src/emi_data_exchange/EMI_CNNitrogenFluxType_ExchangeMod.F90 create mode 100644 components/elm/src/external_models/emi/src/emi_data_exchange/EMI_CNNitrogenStateType_ExchangeMod.F90 create mode 100644 components/elm/src/external_models/emi/src/emi_data_exchange/EMI_ColumnEnergyStateType_ExchangeMod.F90 create mode 100644 components/elm/src/external_models/emi/src/emi_data_exchange/EMI_ColumnWaterFluxType_ExchangeMod.F90 create mode 100644 components/elm/src/external_models/emi/src/emi_data_exchange/EMI_ColumnWaterStateType_ExchangeMod.F90 diff --git a/components/elm/src/external_models/emi/src/constants/CMakeLists.txt b/components/elm/src/external_models/emi/src/constants/CMakeLists.txt index aad541aeb66a..7ca84baa968c 100644 --- a/components/elm/src/external_models/emi/src/constants/CMakeLists.txt +++ b/components/elm/src/external_models/emi/src/constants/CMakeLists.txt @@ -3,7 +3,10 @@ set(EMI_CONSTANTS_SOURCES EMI_CanopyStateType_Constants.F90 EMI_ChemStateType_Constants.F90 EMI_CNCarbonStateType_Constants.F90 + EMI_CNNitrogenStateType_Constants.F90 + EMI_CNCarbonFluxType_Constants.F90 EMI_ColumnType_Constants.F90 + EMI_ColumnEnergyStateType_Constants.F90 EMI_EnergyFluxType_Constants.F90 EMI_Filter_Constants.F90 EMI_Landunit_Constants.F90 diff --git a/components/elm/src/external_models/emi/src/constants/EMI_CNCarbonFluxType_Constants.F90 b/components/elm/src/external_models/emi/src/constants/EMI_CNCarbonFluxType_Constants.F90 new file mode 100644 index 000000000000..559c8f67a467 --- /dev/null +++ b/components/elm/src/external_models/emi/src/constants/EMI_CNCarbonFluxType_Constants.F90 @@ -0,0 +1,17 @@ +module EMI_CNCarbonFluxType_Constants + ! + implicit none + private + ! + integer, parameter, public :: L2E_FLUX_HETEROTROPHIC_RESP_POOLS_VERTICALLY_RESOLVED = 2501 + integer, parameter, public :: L2E_FLUX_HETEROTROPHIC_RESP_VERTICALLY_RESOLVED = 2502 + integer, parameter, public :: L2E_FLUX_SOIL_POOL_DECOMP_K = 2503 + + integer, parameter, public :: E2L_FLUX_HETEROTROPHIC_RESP_POOLS_VERTICALLY_RESOLVED = 2504 + integer, parameter, public :: E2L_FLUX_HETEROTROPHIC_RESP_VERTICALLY_RESOLVED = 2505 + integer, parameter, public :: E2L_FLUX_HETEROTROPHIC_RESP = 2506 + integer, parameter, public :: E2L_FLUX_METHANE = 2507 + integer, parameter, public :: E2L_FLUX_DIC_RUNOFF = 2508 + integer, parameter, public :: E2L_FLUX_DOC_RUNOFF = 2509 + +end module EMI_CNCarbonFluxType_Constants diff --git a/components/elm/src/external_models/emi/src/constants/EMI_CNCarbonStateType_Constants.F90 b/components/elm/src/external_models/emi/src/constants/EMI_CNCarbonStateType_Constants.F90 index 108ada26f4d4..95a99a1bfaa6 100644 --- a/components/elm/src/external_models/emi/src/constants/EMI_CNCarbonStateType_Constants.F90 +++ b/components/elm/src/external_models/emi/src/constants/EMI_CNCarbonStateType_Constants.F90 @@ -6,5 +6,9 @@ module EMI_CNCarbonStateType_Constants integer, parameter, public :: L2E_STATE_CARBON_POOLS_VERTICALLY_RESOLVED = 2001 integer, parameter, public :: E2L_STATE_CARBON_POOLS_VERTICALLY_RESOLVED = 2002 + integer, parameter, public :: E2L_STATE_DOC_VERTICALLY_RESOLVED = 2003 + integer, parameter, public :: E2L_STATE_DIC_VERTICALLY_RESOLVED = 2004 + integer, parameter, public :: E2L_STATE_METHANE_VERTICALLY_RESOLVED = 2005 + integer, parameter, public :: E2L_STATE_SOIL_CARBONATE = 2006 end module EMI_CNCarbonStateType_Constants diff --git a/components/elm/src/external_models/emi/src/constants/EMI_CNNitrogenFluxType_Constants.F90 b/components/elm/src/external_models/emi/src/constants/EMI_CNNitrogenFluxType_Constants.F90 new file mode 100644 index 000000000000..b3a6fcf4db67 --- /dev/null +++ b/components/elm/src/external_models/emi/src/constants/EMI_CNNitrogenFluxType_Constants.F90 @@ -0,0 +1,22 @@ +module EMI_CNNitrogenFluxType_Constants + ! + implicit none + private + ! + integer, parameter, public :: L2E_FLUX_NIMM_VERTICALLY_RESOLVED = 2201 + integer, parameter, public :: L2E_FLUX_NIMP_VERTICALLY_RESOLVED = 2202 + integer, parameter, public :: L2E_FLUX_NMIN_VERTICALLY_RESOLVED = 2203 + integer, parameter, public :: L2E_FLUX_PLANT_NDEMAND_VERTICALLY_RESOLVED = 2204 + + integer, parameter, public :: E2L_FLUX_NIMM_VERTICALLY_RESOLVED = 2205 + integer, parameter, public :: E2L_FLUX_NIMP_VERTICALLY_RESOLVED = 2206 + integer, parameter, public :: E2L_FLUX_NMIN_VERTICALLY_RESOLVED = 2207 + integer, parameter, public :: E2L_FLUX_SMINN_TO_PLANT_VERTICALLY_RESOLVED = 2208 + integer, parameter, public :: E2L_FLUX_SMIN_NO3_TO_PLANT_VERTICALLY_RESOLVED = 2209 + integer, parameter, public :: E2L_FLUX_SMIN_NH4_TO_PLANT_VERTICALLY_RESOLVED = 2210 + integer, parameter, public :: E2L_FLUX_NO3_RUNOFF = 2211 + integer, parameter, public :: E2L_FLUX_DON_RUNOFF = 2212 + integer, parameter, public :: E2L_FLUX_N2O = 2213 + integer, parameter, public :: E2L_FLUX_N2 = 2214 + +end module EMI_CNNitrogenFluxType_Constants diff --git a/components/elm/src/external_models/emi/src/constants/EMI_CNNitrogenStateType_Constants.F90 b/components/elm/src/external_models/emi/src/constants/EMI_CNNitrogenStateType_Constants.F90 new file mode 100644 index 000000000000..0e0e83cfcd7f --- /dev/null +++ b/components/elm/src/external_models/emi/src/constants/EMI_CNNitrogenStateType_Constants.F90 @@ -0,0 +1,17 @@ +module EMI_CNNitrogenStateType_Constants + ! + implicit none + private + ! + integer, parameter, public :: L2E_STATE_NITROGEN_POOLS_VERTICALLY_RESOLVED = 2101 + integer, parameter, public :: L2E_STATE_NH4_VERTICALLY_RESOLVED = 2102 + integer, parameter, public :: L2E_STATE_NO3_VERTICALLY_RESOLVED = 2103 + + integer, parameter, public :: E2L_STATE_NITROGEN_POOLS_VERTICALLY_RESOLVED = 2104 + integer, parameter, public :: E2L_STATE_NH4_VERTICALLY_RESOLVED = 2105 + integer, parameter, public :: E2L_STATE_NO3_VERTICALLY_RESOLVED = 2106 + integer, parameter, public :: E2L_STATE_DON_VERTICALLY_RESOLVED = 2107 + integer, parameter, public :: E2L_STATE_N2O_VERTICALLY_RESOLVED = 2108 + integer, parameter, public :: E2L_STATE_N2_VERTICALLY_RESOLVED = 2109 + +end module EMI_CNNitrogenStateType_Constants diff --git a/components/elm/src/external_models/emi/src/constants/EMI_ChemStateType_Constants.F90 b/components/elm/src/external_models/emi/src/constants/EMI_ChemStateType_Constants.F90 index 6fa77d2823b7..bbcca9387da8 100644 --- a/components/elm/src/external_models/emi/src/constants/EMI_ChemStateType_Constants.F90 +++ b/components/elm/src/external_models/emi/src/constants/EMI_ChemStateType_Constants.F90 @@ -3,6 +3,37 @@ module EMI_ChemStateType_Constants implicit none private ! - integer, parameter, public :: L2E_STATE_SOIL_PH = 1801 + integer, parameter, public :: L2E_STATE_SOIL_PH = 1801 + integer, parameter, public :: L2E_STATE_WATER_DENSITY = 1802 + integer, parameter, public :: L2E_STATE_AQUEOUS_PRESSURE = 1803 + integer, parameter, public :: L2E_STATE_TOTAL_MOBILE = 1804 + integer, parameter, public :: L2E_STATE_TOTAL_IMMOBILE = 1805 + integer, parameter, public :: L2E_STATE_MINERAL_VOLUME_FRACTION = 1806 + integer, parameter, public :: L2E_STATE_MINERAL_SPECIFIC_SURFACE_AREA = 1807 + integer, parameter, public :: L2E_STATE_SURFACE_SITE_DENSITY = 1808 + integer, parameter, public :: L2E_STATE_CATION_EXCHANGE_CAPACITY = 1809 + integer, parameter, public :: L2E_STATE_AUX_DOUBLES = 1810 + integer, parameter, public :: L2E_STATE_AUX_INTS = 1811 + + integer, parameter, public :: E2L_STATE_SOIL_PH = 1812 + integer, parameter, public :: E2L_STATE_SOIL_SALINITY = 1813 + integer, parameter, public :: E2L_STATE_SOIL_O2 = 1814 + integer, parameter, public :: E2L_STATE_SOIL_SULFATE = 1815 + integer, parameter, public :: E2L_STATE_SOIL_SULFIDE = 1816 + integer, parameter, public :: E2L_STATE_SOIL_FE2 = 1817 + integer, parameter, public :: E2L_STATE_SOIL_FE_OXIDE = 1818 + integer, parameter, public :: E2L_STATE_SOIL_FE_SULFIDE = 1819 + integer, parameter, public :: E2L_STATE_SOIL_ACETATE = 1820 + integer, parameter, public :: E2L_STATE_WATER_DENSITY = 1821 + integer, parameter, public :: E2L_STATE_AQUEOUS_PRESSURE = 1822 + integer, parameter, public :: E2L_STATE_TOTAL_MOBILE = 1823 + integer, parameter, public :: E2L_STATE_TOTAL_IMMOBILE = 1824 + integer, parameter, public :: E2L_STATE_MINERAL_VOLUME_FRACTION = 1825 + integer, parameter, public :: E2L_STATE_MINERAL_SPECIFIC_SURFACE_AREA = 1826 + integer, parameter, public :: E2L_STATE_SURFACE_SITE_DENSITY = 1827 + integer, parameter, public :: E2L_STATE_CATION_EXCHANGE_CAPACITY = 1828 + integer, parameter, public :: E2L_STATE_AUX_DOUBLES = 1829 + integer, parameter, public :: E2L_STATE_AUX_INTS = 1830 + integer, parameter, public :: E2L_STATE_CHEM_DT = 1831 end module EMI_ChemStateType_Constants diff --git a/components/elm/src/external_models/emi/src/constants/EMI_ColumnEnergyStateType_Constants.F90 b/components/elm/src/external_models/emi/src/constants/EMI_ColumnEnergyStateType_Constants.F90 new file mode 100644 index 000000000000..b40f2395269c --- /dev/null +++ b/components/elm/src/external_models/emi/src/constants/EMI_ColumnEnergyStateType_Constants.F90 @@ -0,0 +1,16 @@ +module EMI_ColumnEnergyStateType_Constants + ! + implicit none + private + ! + integer, parameter, public :: L2E_STATE_TSOIL_NLEVGRND_COL = 0301 + integer, parameter, public :: L2E_STATE_TSNOW_COL = 0302 + integer, parameter, public :: L2E_STATE_TH2OSFC_COL = 0303 + integer, parameter, public :: L2E_STATE_TSOI10CM_COL = 0304 + integer, parameter, public :: L2E_STATE_TSOIL_NLEVSOI_COL = 0305 + + integer, parameter, public :: E2L_STATE_TSOIL_NLEVGRND_COL = 0306 + integer, parameter, public :: E2L_STATE_TSNOW_NLEVSNOW_COL = 0307 + integer, parameter, public :: E2L_STATE_TH2OSFC_COL = 0308 + +end module EMI_ColumnEnergyStateType_Constants diff --git a/components/elm/src/external_models/emi/src/constants/EMI_ColumnWaterFluxType_Constants.F90 b/components/elm/src/external_models/emi/src/constants/EMI_ColumnWaterFluxType_Constants.F90 new file mode 100644 index 000000000000..6a86c3d66d5d --- /dev/null +++ b/components/elm/src/external_models/emi/src/constants/EMI_ColumnWaterFluxType_Constants.F90 @@ -0,0 +1,10 @@ +module EMI_ColumnWaterFluxType_Constants + ! + implicit none + private + ! + integer, parameter, public :: L2E_FLUX_SOIL_QFLX_ADV_COL = 0501 + integer, parameter, public :: L2E_FLUX_SOIL_QFLX_DRAIN = 0502 + integer, parameter, public :: L2E_FLUX_SOIL_QFLX_DRAIN_VR = 0503 + +end module EMI_ColumnWaterFluxType_Constants diff --git a/components/elm/src/external_models/emi/src/constants/EMI_ColumnWaterStateType_Constants.F90 b/components/elm/src/external_models/emi/src/constants/EMI_ColumnWaterStateType_Constants.F90 new file mode 100644 index 000000000000..a7326cee7f78 --- /dev/null +++ b/components/elm/src/external_models/emi/src/constants/EMI_ColumnWaterStateType_Constants.F90 @@ -0,0 +1,12 @@ +module EMI_ColumnWaterStateType_Constants + ! + implicit none + private + ! + integer, parameter, public :: L2E_STATE_SOIL_LIQ_VOL_COL = 0401 + integer, parameter, public :: L2E_STATE_SOIL_ICE_VOL_COL = 0402 + integer, parameter, public :: L2E_STATE_H2OSFC_COL = 0403 + integer, parameter, public :: L2E_STATE_SALINITY_COL = 0404 + integer, parameter, public :: L2E_STATE_H2OSFC_TIDE_COL = 0405 + +end module EMI_ColumnWaterStateType_Constants diff --git a/components/elm/src/external_models/emi/src/constants/EMI_Filter_Constants.F90 b/components/elm/src/external_models/emi/src/constants/EMI_Filter_Constants.F90 index 492b7aef81dc..6f73f1a266ed 100644 --- a/components/elm/src/external_models/emi/src/constants/EMI_Filter_Constants.F90 +++ b/components/elm/src/external_models/emi/src/constants/EMI_Filter_Constants.F90 @@ -9,5 +9,7 @@ module EMI_Filter_Constants integer, parameter, public :: L2E_FILTER_NUM_NOLAKEC = 1204 integer, parameter, public :: L2E_FILTER_NOLAKEC_AND_NOURBANC = 1205 integer, parameter, public :: L2E_FILTER_NUM_NOLAKEC_AND_NOURBANC = 1206 + integer, parameter, public :: L2E_FILTER_SOILC = 1207 + integer, parameter, public :: L2E_FILTER_NUM_SOILC = 1208 end module EMI_Filter_Constants diff --git a/components/elm/src/external_models/emi/src/emi_data_definition/CMakeLists.txt b/components/elm/src/external_models/emi/src/emi_data_definition/CMakeLists.txt index d7ea079e5f31..1c6b04d43df8 100644 --- a/components/elm/src/external_models/emi/src/emi_data_definition/CMakeLists.txt +++ b/components/elm/src/external_models/emi/src/emi_data_definition/CMakeLists.txt @@ -3,6 +3,9 @@ set(EMI_EMI_DATA_DEFINITION_SOURCES EMI_CanopyStateType_DataMod.F90 EMI_ChemStateType_DataMod.F90 EMI_CNCarbonStateType_DataMod.F90 + EMI_CNNitrogenStateType_DataMod.F90 + EMI_CNCarbonFluxType_DataMod.F90 + EMI_ColumnEnergyStateType_DataMod.F90 EMI_EnergyFluxType_DataMod.F90 EMI_SoilHydrologyType_DataMod.F90 EMI_SoilStateType_DataMod.F90 diff --git a/components/elm/src/external_models/emi/src/emi_data_definition/EMI_Atm2LndType_DataMod.F90 b/components/elm/src/external_models/emi/src/emi_data_definition/EMI_Atm2LndType_DataMod.F90 index 85f8ebb72f7b..18340deadc1d 100644 --- a/components/elm/src/external_models/emi/src/emi_data_definition/EMI_Atm2LndType_DataMod.F90 +++ b/components/elm/src/external_models/emi/src/emi_data_definition/EMI_Atm2LndType_DataMod.F90 @@ -25,21 +25,21 @@ subroutine EMI_Atm2LndType_DataInfoByID(data_id, id_val, name_val, long_name_val ! !ARGUMENTS: integer , intent(in) :: data_id integer , intent(out) :: id_val - character (len=*) , intent(out) :: name_val + character (len=32) , intent(out) :: name_val character (len=128), intent(out) :: long_name_val - character (len=24) , intent(out) :: units_val + character (len=32) , intent(out) :: units_val logical , intent(out) :: is_int_type logical , intent(out) :: is_real_type integer , intent(out) :: ndim - character (len=24) , intent(out) :: dim1_beg_name - character (len=24) , intent(out) :: dim1_end_name - character (len=24) , intent(out) :: dim2_beg_name - character (len=24) , intent(out) :: dim2_end_name - character (len=24) , intent(out) :: dim3_beg_name - character (len=24) , intent(out) :: dim3_end_name - character (len=24) , intent(out) :: dim4_beg_name - character (len=24) , intent(out) :: dim4_end_name - logical , intent(out) :: data_found + character (len=32) , intent(out) :: dim1_beg_name + character (len=32) , intent(out) :: dim1_end_name + character (len=32) , intent(out) :: dim2_beg_name + character (len=32) , intent(out) :: dim2_end_name + character (len=32) , intent(out) :: dim3_beg_name + character (len=32) , intent(out) :: dim3_end_name + character (len=32) , intent(out) :: dim4_beg_name + character (len=32) , intent(out) :: dim4_end_name + logical , intent(inout) :: data_found is_int_type = .false. is_real_type = .false. diff --git a/components/elm/src/external_models/emi/src/emi_data_definition/EMI_CNCarbonFluxType_DataMod.F90 b/components/elm/src/external_models/emi/src/emi_data_definition/EMI_CNCarbonFluxType_DataMod.F90 new file mode 100644 index 000000000000..41c77e19704b --- /dev/null +++ b/components/elm/src/external_models/emi/src/emi_data_definition/EMI_CNCarbonFluxType_DataMod.F90 @@ -0,0 +1,175 @@ +module EMI_CNCarbonFluxType_DataMod + ! + use EMI_CNCarbonFluxType_Constants + ! + implicit none + ! + public :: EMI_CNCarbonFluxType_DataInfoByID + +contains + +!----------------------------------------------------------------------- + subroutine EMI_CNCarbonFluxType_DataInfoByID(data_id, id_val, name_val, long_name_val,& + units_val, is_int_type, is_real_type, ndim, & + dim1_beg_name, dim1_end_name, dim2_beg_name, dim2_end_name, & + dim3_beg_name, dim3_end_name, dim4_beg_name, dim4_end_name, & + data_found) + ! + ! !DESCRIPTION: + ! Defines information of data exchanged between ELM and EM + ! + ! !USES: + use EMI_DataDimensionMod + implicit none + ! + ! !ARGUMENTS: + integer , intent(in) :: data_id + integer , intent(out) :: id_val + character (len=32) , intent(out) :: name_val + character (len=128), intent(out) :: long_name_val + character (len=32) , intent(out) :: units_val + logical , intent(out) :: is_int_type + logical , intent(out) :: is_real_type + integer , intent(out) :: ndim + character (len=32) , intent(out) :: dim1_beg_name + character (len=32) , intent(out) :: dim1_end_name + character (len=32) , intent(out) :: dim2_beg_name + character (len=32) , intent(out) :: dim2_end_name + character (len=32) , intent(out) :: dim3_beg_name + character (len=32) , intent(out) :: dim3_end_name + character (len=32) , intent(out) :: dim4_beg_name + character (len=32) , intent(out) :: dim4_end_name + logical , intent(inout) :: data_found + + is_int_type = .false. + is_real_type = .false. + dim1_beg_name = '' + dim2_beg_name = '' + dim3_beg_name = '' + dim4_beg_name = '' + dim1_end_name = '' + dim2_end_name = '' + dim3_end_name = '' + dim4_end_name = '' + + select case(data_id) + + case(L2E_FLUX_HETEROTROPHIC_RESP_POOLS_VERTICALLY_RESOLVED) + id_val = L2E_FLUX_HETEROTROPHIC_RESP_POOLS_VERTICALLY_RESOLVED + name_val = 'decomp cascade hr vr' + long_name_val = 'decomp cascade hr vr: ELM to EM' + units_val = '[gC/m3/s]' + is_real_type = .true. + ndim = 3 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevdecomp_full + dim3_beg_name = dimname_one + dim3_end_name = dimname_ndecomp_pools + data_found = .true. + + case(L2E_FLUX_HETEROTROPHIC_RESP_VERTICALLY_RESOLVED) + id_val = L2E_FLUX_HETEROTROPHIC_RESP_VERTICALLY_RESOLVED + name_val = 'hr vr' + long_name_val = 'hr vr: ELM to EM' + units_val = '[gC/m3/s]' + is_real_type = .true. + ndim = 2 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevdecomp_full + data_found = .true. + + case(L2E_FLUX_SOIL_POOL_DECOMP_K) + id_val = L2E_FLUX_SOIL_POOL_DECOMP_K + name_val = 'decomp k constants' + long_name_val = 'decomp k constants: ELM to EM' + units_val = '[1/s]' + is_real_type = .true. + ndim = 3 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevdecomp_full + dim3_beg_name = dimname_one + dim3_end_name = dimname_ndecomp_pools + data_found = .true. + + case(E2L_FLUX_HETEROTROPHIC_RESP_POOLS_VERTICALLY_RESOLVED) + id_val = E2L_FLUX_HETEROTROPHIC_RESP_POOLS_VERTICALLY_RESOLVED + name_val = 'decomp cascade hr vr' + long_name_val = 'decomp cascade hr vr: EM to ELM' + units_val = '[gC/m3/s]' + is_real_type = .true. + ndim = 3 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevdecomp_full + dim3_beg_name = dimname_one + dim3_end_name = dimname_ndecomp_pools + data_found = .true. + + case(E2L_FLUX_HETEROTROPHIC_RESP_VERTICALLY_RESOLVED) + id_val = E2L_FLUX_HETEROTROPHIC_RESP_VERTICALLY_RESOLVED + name_val = 'hr vr' + long_name_val = 'hr vr: EM to ELM' + units_val = '[gC/m3/s]' + is_real_type = .true. + ndim = 2 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevdecomp_full + data_found = .true. + + case(E2L_FLUX_HETEROTROPHIC_RESP) + id_val = E2L_FLUX_HETEROTROPHIC_RESP + name_val = 'hr' + long_name_val = 'hr: EM to ELM' + units_val = '[gC/m2/s]' + is_real_type = .true. + ndim = 1 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + data_found = .true. + + case(E2L_FLUX_METHANE) + id_val = E2L_FLUX_METHANE + name_val = 'hr' + long_name_val = 'hr: EM to ELM' + units_val = '[gC/m2/s]' + is_real_type = .true. + ndim = 1 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + data_found = .true. + + case(E2L_FLUX_DIC_RUNOFF) + id_val = E2L_FLUX_DIC_RUNOFF + name_val = 'DIC_runoff' + long_name_val = 'DIC_runoff: EM to ELM' + units_val = '[gC/m2/s]' + is_real_type = .true. + ndim = 1 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + data_found = .true. + + case(E2L_FLUX_DOC_RUNOFF) + id_val = E2L_FLUX_DOC_RUNOFF + name_val = 'DOC_runoff' + long_name_val = 'DOC_runoff: EM to ELM' + units_val = '[gC/m2/s]' + is_real_type = .true. + ndim = 1 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + data_found = .true. + end select + + end subroutine EMI_CNCarbonFluxType_DataInfoByID + +end module EMI_CNCarbonFluxType_DataMod diff --git a/components/elm/src/external_models/emi/src/emi_data_definition/EMI_CNCarbonStateType_DataMod.F90 b/components/elm/src/external_models/emi/src/emi_data_definition/EMI_CNCarbonStateType_DataMod.F90 index f6714102817e..9c9d3100b37c 100644 --- a/components/elm/src/external_models/emi/src/emi_data_definition/EMI_CNCarbonStateType_DataMod.F90 +++ b/components/elm/src/external_models/emi/src/emi_data_definition/EMI_CNCarbonStateType_DataMod.F90 @@ -25,21 +25,21 @@ subroutine EMI_CNCarbonStateType_DataInfoByID(data_id, id_val, name_val, long_na ! !ARGUMENTS: integer , intent(in) :: data_id integer , intent(out) :: id_val - character (len=24) , intent(out) :: name_val + character (len=32) , intent(out) :: name_val character (len=128), intent(out) :: long_name_val - character (len=24) , intent(out) :: units_val + character (len=32) , intent(out) :: units_val logical , intent(out) :: is_int_type logical , intent(out) :: is_real_type integer , intent(out) :: ndim - character (len=24) , intent(out) :: dim1_beg_name - character (len=24) , intent(out) :: dim1_end_name - character (len=24) , intent(out) :: dim2_beg_name - character (len=24) , intent(out) :: dim2_end_name - character (len=24) , intent(out) :: dim3_beg_name - character (len=24) , intent(out) :: dim3_end_name - character (len=24) , intent(out) :: dim4_beg_name - character (len=24) , intent(out) :: dim4_end_name - logical , intent(out) :: data_found + character (len=32) , intent(out) :: dim1_beg_name + character (len=32) , intent(out) :: dim1_end_name + character (len=32) , intent(out) :: dim2_beg_name + character (len=32) , intent(out) :: dim2_end_name + character (len=32) , intent(out) :: dim3_beg_name + character (len=32) , intent(out) :: dim3_end_name + character (len=32) , intent(out) :: dim4_beg_name + character (len=32) , intent(out) :: dim4_end_name + logical , intent(inout) :: data_found is_int_type = .false. is_real_type = .false. @@ -83,6 +83,58 @@ subroutine EMI_CNCarbonStateType_DataInfoByID(data_id, id_val, name_val, long_na dim3_beg_name = dimname_one dim3_end_name = dimname_ndecomp_pools data_found = .true. + + case(E2L_STATE_DOC_VERTICALLY_RESOLVED) + id_val = E2L_STATE_DOC_VERTICALLY_RESOLVED + name_val = 'DOC vr' + long_name_val = 'DOC vr: EM to ELM' + units_val = '[gC/m2]' + is_real_type = .true. + ndim = 2 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevdecomp_full + data_found = .true. + + case(E2L_STATE_DIC_VERTICALLY_RESOLVED) + id_val = E2L_STATE_DIC_VERTICALLY_RESOLVED + name_val = 'DIC vr' + long_name_val = 'DIC vr: EM to ELM' + units_val = '[gC/m2]' + is_real_type = .true. + ndim = 2 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevdecomp_full + data_found = .true. + + case(E2L_STATE_METHANE_VERTICALLY_RESOLVED) + id_val = E2L_STATE_METHANE_VERTICALLY_RESOLVED + name_val = 'CH4 vr' + long_name_val = 'CH4 vr: EM to ELM' + units_val = '[gC/m2]' + is_real_type = .true. + ndim = 2 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevdecomp_full + data_found = .true. + + case(E2L_STATE_SOIL_CARBONATE) + id_val = E2L_STATE_SOIL_CARBONATE + name_val = 'Soil carbonate' + long_name_val = 'Soil carbonate: EM to ELM' + units_val = '[g C m^-3]' + is_real_type = .true. + ndim = 2 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevsoi + data_found = .true. end select end subroutine EMI_CNCarbonStateType_DataInfoByID diff --git a/components/elm/src/external_models/emi/src/emi_data_definition/EMI_CNNitrogenFluxType_DataMod.F90 b/components/elm/src/external_models/emi/src/emi_data_definition/EMI_CNNitrogenFluxType_DataMod.F90 new file mode 100644 index 000000000000..2fa539b0a948 --- /dev/null +++ b/components/elm/src/external_models/emi/src/emi_data_definition/EMI_CNNitrogenFluxType_DataMod.F90 @@ -0,0 +1,234 @@ +module EMI_CNNitrogenFluxType_DataMod + ! + use EMI_CNNitrogenFluxType_Constants + ! + implicit none + ! + public :: EMI_CNNitrogenFluxType_DataInfoByID + +contains + +!----------------------------------------------------------------------- + subroutine EMI_CNNitrogenFluxType_DataInfoByID(data_id, id_val, name_val, long_name_val,& + units_val, is_int_type, is_real_type, ndim, & + dim1_beg_name, dim1_end_name, dim2_beg_name, dim2_end_name, & + dim3_beg_name, dim3_end_name, dim4_beg_name, dim4_end_name, & + data_found) + ! + ! !DESCRIPTION: + ! Defines information of data exchanged between ELM and EM + ! + ! !USES: + use EMI_DataDimensionMod + implicit none + ! + ! !ARGUMENTS: + integer , intent(in) :: data_id + integer , intent(out) :: id_val + character (len=32) , intent(out) :: name_val + character (len=128), intent(out) :: long_name_val + character (len=32) , intent(out) :: units_val + logical , intent(out) :: is_int_type + logical , intent(out) :: is_real_type + integer , intent(out) :: ndim + character (len=32) , intent(out) :: dim1_beg_name + character (len=32) , intent(out) :: dim1_end_name + character (len=32) , intent(out) :: dim2_beg_name + character (len=32) , intent(out) :: dim2_end_name + character (len=32) , intent(out) :: dim3_beg_name + character (len=32) , intent(out) :: dim3_end_name + character (len=32) , intent(out) :: dim4_beg_name + character (len=32) , intent(out) :: dim4_end_name + logical , intent(inout) :: data_found + + is_int_type = .false. + is_real_type = .false. + dim1_beg_name = '' + dim2_beg_name = '' + dim3_beg_name = '' + dim4_beg_name = '' + dim1_end_name = '' + dim2_end_name = '' + dim3_end_name = '' + dim4_end_name = '' + + select case(data_id) + + case(L2E_FLUX_NIMM_VERTICALLY_RESOLVED) + id_val = L2E_FLUX_NIMM_VERTICALLY_RESOLVED + name_val = 'actual immob vr' + long_name_val = 'actual immob vr: ELM to EM' + units_val = '[gN/m3/s]' + is_real_type = .true. + ndim = 2 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevdecomp_full + data_found = .true. + + case(L2E_FLUX_NIMP_VERTICALLY_RESOLVED) + id_val = L2E_FLUX_NIMP_VERTICALLY_RESOLVED + name_val = 'potential immob vr' + long_name_val = 'potential immob vr: ELM to EM' + units_val = '[gN/m3/s]' + is_real_type = .true. + ndim = 2 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevdecomp_full + data_found = .true. + + case(L2E_FLUX_NMIN_VERTICALLY_RESOLVED) + id_val = L2E_FLUX_NMIN_VERTICALLY_RESOLVED + name_val = 'gross nmin vr' + long_name_val = 'gross nmin vr: ELM to EM' + units_val = '[gN/m3/s]' + is_real_type = .true. + ndim = 2 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevdecomp_full + data_found = .true. + + case(L2E_FLUX_PLANT_NDEMAND_VERTICALLY_RESOLVED) + id_val = L2E_FLUX_PLANT_NDEMAND_VERTICALLY_RESOLVED + name_val = 'plant ndemand vr' + long_name_val = 'plant ndemand vr: ELM to EM' + units_val = '[gN/m3/s]' + is_real_type = .true. + ndim = 2 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevdecomp_full + data_found = .true. + + case(E2L_FLUX_NIMM_VERTICALLY_RESOLVED) + id_val = E2L_FLUX_NIMM_VERTICALLY_RESOLVED + name_val = 'actual immob vr' + long_name_val = 'actual immob vr: EM to ELM' + units_val = '[gN/m3/s]' + is_real_type = .true. + ndim = 2 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevdecomp_full + data_found = .true. + + case(E2L_FLUX_NIMP_VERTICALLY_RESOLVED) + id_val = E2L_FLUX_NIMP_VERTICALLY_RESOLVED + name_val = 'potential immob vr' + long_name_val = 'potential immob vr: EM to ELM' + units_val = '[gN/m3/s]' + is_real_type = .true. + ndim = 2 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevdecomp_full + data_found = .true. + + case(E2L_FLUX_NMIN_VERTICALLY_RESOLVED) + id_val = E2L_FLUX_NMIN_VERTICALLY_RESOLVED + name_val = 'gross nmin vr' + long_name_val = 'gross nmin vr: EM to ELM' + units_val = '[gN/m3/s]' + is_real_type = .true. + ndim = 2 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevdecomp_full + data_found = .true. + + case(E2L_FLUX_SMINN_TO_PLANT_VERTICALLY_RESOLVED) + id_val = E2L_FLUX_SMINN_TO_PLANT_VERTICALLY_RESOLVED + name_val = 'sminn to plant vr' + long_name_val = 'sminn to plant vr: EM to ELM' + units_val = '[gN/m3/s]' + is_real_type = .true. + ndim = 2 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevdecomp_full + data_found = .true. + + case(E2L_FLUX_SMIN_NO3_TO_PLANT_VERTICALLY_RESOLVED) + id_val = E2L_FLUX_SMIN_NO3_TO_PLANT_VERTICALLY_RESOLVED + name_val = 'smin no3 to plant vr' + long_name_val = 'smin no3 to plant vr: EM to ELM' + units_val = '[gN/m3/s]' + is_real_type = .true. + ndim = 2 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevdecomp_full + data_found = .true. + + case(E2L_FLUX_SMIN_NH4_TO_PLANT_VERTICALLY_RESOLVED) + id_val = E2L_FLUX_SMIN_NH4_TO_PLANT_VERTICALLY_RESOLVED + name_val = 'smin nh4 to plant vr' + long_name_val = 'smin nh4 to plant vr: EM to ELM' + units_val = '[gN/m3/s]' + is_real_type = .true. + ndim = 2 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevdecomp_full + data_found = .true. + + case(E2L_FLUX_NO3_RUNOFF) + id_val = E2L_FLUX_NO3_RUNOFF + name_val = 'NO3 runoff' + long_name_val = 'NO3 runoff: EM to ELM' + units_val = '[gN/m2/s]' + is_real_type = .true. + ndim = 1 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + data_found = .true. + + case(E2L_FLUX_DON_RUNOFF) + id_val = E2L_FLUX_DON_RUNOFF + name_val = 'DON runoff' + long_name_val = 'DON runoff: EM to ELM' + units_val = '[gN/m2/s]' + is_real_type = .true. + ndim = 1 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + data_found = .true. + + case(E2L_FLUX_N2O) + id_val = E2L_FLUX_N2O + name_val = 'N2O flux' + long_name_val = 'N2O flux: EM to ELM' + units_val = '[gN/m2/s]' + is_real_type = .true. + ndim = 1 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + data_found = .true. + + case(E2L_FLUX_N2) + id_val = E2L_FLUX_N2 + name_val = 'N2 flux' + long_name_val = 'N2 flux: EM to ELM' + units_val = '[gN/m2/s]' + is_real_type = .true. + ndim = 1 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + data_found = .true. + end select + + end subroutine EMI_CNNitrogenFluxType_DataInfoByID + +end module EMI_CNNitrogenFluxType_DataMod diff --git a/components/elm/src/external_models/emi/src/emi_data_definition/EMI_CNNitrogenStateType_DataMod.F90 b/components/elm/src/external_models/emi/src/emi_data_definition/EMI_CNNitrogenStateType_DataMod.F90 new file mode 100644 index 000000000000..a3b91caa0af1 --- /dev/null +++ b/components/elm/src/external_models/emi/src/emi_data_definition/EMI_CNNitrogenStateType_DataMod.F90 @@ -0,0 +1,181 @@ +module EMI_CNNitrogenStateType_DataMod + ! + use EMI_CNNitrogenStateType_Constants + ! + implicit none + ! + public :: EMI_CNNitrogenStateType_DataInfoByID + +contains + +!----------------------------------------------------------------------- + subroutine EMI_CNNitrogenStateType_DataInfoByID(data_id, id_val, name_val, long_name_val,& + units_val, is_int_type, is_real_type, ndim, & + dim1_beg_name, dim1_end_name, dim2_beg_name, dim2_end_name, & + dim3_beg_name, dim3_end_name, dim4_beg_name, dim4_end_name, & + data_found) + ! + ! !DESCRIPTION: + ! Defines information of data exchanged between ELM and EM + ! + ! !USES: + use EMI_DataDimensionMod + implicit none + ! + ! !ARGUMENTS: + integer , intent(in) :: data_id + integer , intent(out) :: id_val + character (len=32) , intent(out) :: name_val + character (len=128), intent(out) :: long_name_val + character (len=32) , intent(out) :: units_val + logical , intent(out) :: is_int_type + logical , intent(out) :: is_real_type + integer , intent(out) :: ndim + character (len=32) , intent(out) :: dim1_beg_name + character (len=32) , intent(out) :: dim1_end_name + character (len=32) , intent(out) :: dim2_beg_name + character (len=32) , intent(out) :: dim2_end_name + character (len=32) , intent(out) :: dim3_beg_name + character (len=32) , intent(out) :: dim3_end_name + character (len=32) , intent(out) :: dim4_beg_name + character (len=32) , intent(out) :: dim4_end_name + logical , intent(inout) :: data_found + + is_int_type = .false. + is_real_type = .false. + dim1_beg_name = '' + dim2_beg_name = '' + dim3_beg_name = '' + dim4_beg_name = '' + dim1_end_name = '' + dim2_end_name = '' + dim3_end_name = '' + dim4_end_name = '' + + select case(data_id) + + case(L2E_STATE_NITROGEN_POOLS_VERTICALLY_RESOLVED) + id_val = L2E_STATE_NITROGEN_POOLS_VERTICALLY_RESOLVED + name_val = 'decomp npools vr' + long_name_val = 'decomp npools vr: ELM to EM' + units_val = '[gN/m3]' + is_real_type = .true. + ndim = 3 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevdecomp_full + dim3_beg_name = dimname_one + dim3_end_name = dimname_ndecomp_pools + data_found = .true. + + case(L2E_STATE_NH4_VERTICALLY_RESOLVED) + id_val = L2E_STATE_NH4_VERTICALLY_RESOLVED + name_val = 'NH4 vr' + long_name_val = 'NH4 vr: ELM to EM' + units_val = '[gN/m3]' + is_real_type = .true. + ndim = 2 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevdecomp_full + data_found = .true. + + case(L2E_STATE_NO3_VERTICALLY_RESOLVED) + id_val = L2E_STATE_NO3_VERTICALLY_RESOLVED + name_val = 'NO3 vr' + long_name_val = 'NO3 vr: ELM to EM' + units_val = '[gN/m3]' + is_real_type = .true. + ndim = 2 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevdecomp_full + data_found = .true. + + case(E2L_STATE_NITROGEN_POOLS_VERTICALLY_RESOLVED) + id_val = E2L_STATE_NITROGEN_POOLS_VERTICALLY_RESOLVED + name_val = 'decomp npools vr' + long_name_val = 'decomp npools vr: EM to ELM' + units_val = '[gN/m3]' + is_real_type = .true. + ndim = 3 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevdecomp_full + dim3_beg_name = dimname_one + dim3_end_name = dimname_ndecomp_pools + data_found = .true. + + case(E2L_STATE_NH4_VERTICALLY_RESOLVED) + id_val = E2L_STATE_NH4_VERTICALLY_RESOLVED + name_val = 'NH4 vr' + long_name_val = 'NH4 vr: EM to ELM' + units_val = '[gN/m3]' + is_real_type = .true. + ndim = 2 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevdecomp_full + data_found = .true. + + case(E2L_STATE_NO3_VERTICALLY_RESOLVED) + id_val = E2L_STATE_NO3_VERTICALLY_RESOLVED + name_val = 'decomp npools vr' + long_name_val = 'decomp npools vr: EM to ELM' + units_val = '[gN/m3]' + is_real_type = .true. + ndim = 2 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevdecomp_full + data_found = .true. + + case(E2L_STATE_DON_VERTICALLY_RESOLVED) + id_val = E2L_STATE_DON_VERTICALLY_RESOLVED + name_val = 'DON vr' + long_name_val = 'DON vr: EM to ELM' + units_val = '[gN/m2]' + is_real_type = .true. + ndim = 2 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevdecomp_full + data_found = .true. + + case(E2L_STATE_N2O_VERTICALLY_RESOLVED) + id_val = E2L_STATE_N2O_VERTICALLY_RESOLVED + name_val = 'N2O vr' + long_name_val = 'N2O vr: EM to ELM' + units_val = '[gN/m3]' + is_real_type = .true. + ndim = 2 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevdecomp_full + data_found = .true. + + case(E2L_STATE_N2_VERTICALLY_RESOLVED) + id_val = E2L_STATE_N2_VERTICALLY_RESOLVED + name_val = 'N2 vr' + long_name_val = 'N2 vr: EM to ELM' + units_val = '[gN/m3]' + is_real_type = .true. + ndim = 2 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevdecomp_full + data_found = .true. + end select + + end subroutine EMI_CNNitrogenStateType_DataInfoByID + +end module EMI_CNNitrogenStateType_DataMod diff --git a/components/elm/src/external_models/emi/src/emi_data_definition/EMI_CanopyStateType_DataMod.F90 b/components/elm/src/external_models/emi/src/emi_data_definition/EMI_CanopyStateType_DataMod.F90 index 47224701b365..76e7992799e8 100644 --- a/components/elm/src/external_models/emi/src/emi_data_definition/EMI_CanopyStateType_DataMod.F90 +++ b/components/elm/src/external_models/emi/src/emi_data_definition/EMI_CanopyStateType_DataMod.F90 @@ -25,21 +25,21 @@ subroutine EMI_CanopyStateType_DataInfoByID(data_id, id_val, name_val, long_name ! !ARGUMENTS: integer , intent(in) :: data_id integer , intent(out) :: id_val - character (len=*) , intent(out) :: name_val + character (len=32) , intent(out) :: name_val character (len=128), intent(out) :: long_name_val - character (len=24) , intent(out) :: units_val + character (len=32) , intent(out) :: units_val logical , intent(out) :: is_int_type logical , intent(out) :: is_real_type integer , intent(out) :: ndim - character (len=24) , intent(out) :: dim1_beg_name - character (len=24) , intent(out) :: dim1_end_name - character (len=24) , intent(out) :: dim2_beg_name - character (len=24) , intent(out) :: dim2_end_name - character (len=24) , intent(out) :: dim3_beg_name - character (len=24) , intent(out) :: dim3_end_name - character (len=24) , intent(out) :: dim4_beg_name - character (len=24) , intent(out) :: dim4_end_name - logical , intent(out) :: data_found + character (len=32) , intent(out) :: dim1_beg_name + character (len=32) , intent(out) :: dim1_end_name + character (len=32) , intent(out) :: dim2_beg_name + character (len=32) , intent(out) :: dim2_end_name + character (len=32) , intent(out) :: dim3_beg_name + character (len=32) , intent(out) :: dim3_end_name + character (len=32) , intent(out) :: dim4_beg_name + character (len=32) , intent(out) :: dim4_end_name + logical , intent(inout) :: data_found is_int_type = .false. is_real_type = .false. diff --git a/components/elm/src/external_models/emi/src/emi_data_definition/EMI_ChemStateType_DataMod.F90 b/components/elm/src/external_models/emi/src/emi_data_definition/EMI_ChemStateType_DataMod.F90 index 935f5990013e..a189e4365235 100644 --- a/components/elm/src/external_models/emi/src/emi_data_definition/EMI_ChemStateType_DataMod.F90 +++ b/components/elm/src/external_models/emi/src/emi_data_definition/EMI_ChemStateType_DataMod.F90 @@ -25,21 +25,21 @@ subroutine EMI_ChemStateType_DataInfoByID(data_id, id_val, name_val, long_name_v ! !ARGUMENTS: integer , intent(in) :: data_id integer , intent(out) :: id_val - character (len=*) , intent(out) :: name_val + character (len=32) , intent(out) :: name_val character (len=128), intent(out) :: long_name_val - character (len=24) , intent(out) :: units_val + character (len=32) , intent(out) :: units_val logical , intent(out) :: is_int_type logical , intent(out) :: is_real_type integer , intent(out) :: ndim - character (len=24) , intent(out) :: dim1_beg_name - character (len=24) , intent(out) :: dim1_end_name - character (len=24) , intent(out) :: dim2_beg_name - character (len=24) , intent(out) :: dim2_end_name - character (len=24) , intent(out) :: dim3_beg_name - character (len=24) , intent(out) :: dim3_end_name - character (len=24) , intent(out) :: dim4_beg_name - character (len=24) , intent(out) :: dim4_end_name - logical , intent(out) :: data_found + character (len=32) , intent(out) :: dim1_beg_name + character (len=32) , intent(out) :: dim1_end_name + character (len=32) , intent(out) :: dim2_beg_name + character (len=32) , intent(out) :: dim2_end_name + character (len=32) , intent(out) :: dim3_beg_name + character (len=32) , intent(out) :: dim3_end_name + character (len=32) , intent(out) :: dim4_beg_name + character (len=32) , intent(out) :: dim4_end_name + logical , intent(inout) :: data_found is_int_type = .false. is_real_type = .false. @@ -66,6 +66,426 @@ subroutine EMI_ChemStateType_DataInfoByID(data_id, id_val, name_val, long_name_v dim2_beg_name = dimname_one dim2_end_name = dimname_nlevsoi data_found = .true. + + case(L2E_STATE_WATER_DENSITY) + id_val = L2E_STATE_WATER_DENSITY + name_val = 'Water density' + long_name_val = 'Water density: ELM to EM' + units_val = '[kg/m^3]' + is_real_type = .true. + ndim = 2 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevsoi + data_found = .true. + + case(L2E_STATE_AQUEOUS_PRESSURE) + id_val = L2E_STATE_AQUEOUS_PRESSURE + name_val = 'aqueous pressure' + long_name_val = 'aqueous pressure: ELM to EM' + units_val = '[Pa]' + is_real_type = .true. + ndim = 2 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevsoi + data_found = .true. + + case(L2E_STATE_TOTAL_MOBILE) + id_val = L2E_STATE_TOTAL_MOBILE + name_val = 'total mobile' + long_name_val = 'total mobile: ELM to EM' + units_val = '[M]' + is_real_type = .true. + ndim = 3 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevsoi + dim3_beg_name = dimname_one + dim3_end_name = dimname_alquimia_num_primary + data_found = .true. + + case(L2E_STATE_TOTAL_IMMOBILE) + id_val = L2E_STATE_TOTAL_IMMOBILE + name_val = 'total immobile' + long_name_val = 'total immobile: ELM to EM' + units_val = '[mol/m^3]' + is_real_type = .true. + ndim = 3 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevsoi + dim3_beg_name = dimname_one + dim3_end_name = dimname_alquimia_num_primary + data_found = .true. + + case(L2E_STATE_MINERAL_VOLUME_FRACTION) + id_val = L2E_STATE_MINERAL_VOLUME_FRACTION + name_val = 'mineral volume fraction' + long_name_val = 'mineral volume fraction: ELM to EM' + units_val = '[-]' + is_real_type = .true. + ndim = 3 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevsoi + dim3_beg_name = dimname_one + dim3_end_name = dimname_alquimia_num_minerals + data_found = .true. + + case(L2E_STATE_MINERAL_SPECIFIC_SURFACE_AREA) + id_val = L2E_STATE_MINERAL_SPECIFIC_SURFACE_AREA + name_val = 'mineral specific surface area' + long_name_val = 'mineral specific surface area: ELM to EM' + units_val = '[m^2/m^3]' + is_real_type = .true. + ndim = 3 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevsoi + dim3_beg_name = dimname_one + dim3_end_name = dimname_alquimia_num_minerals + data_found = .true. + + case(L2E_STATE_SURFACE_SITE_DENSITY) + id_val = L2E_STATE_SURFACE_SITE_DENSITY + name_val = 'surface site density' + long_name_val = 'surface site density: ELM to EM' + units_val = '[moles/m^3]' + is_real_type = .true. + ndim = 3 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevsoi + dim3_beg_name = dimname_one + dim3_end_name = dimname_alquimia_num_surface_sites + data_found = .true. + + case(L2E_STATE_CATION_EXCHANGE_CAPACITY) + id_val = L2E_STATE_CATION_EXCHANGE_CAPACITY + name_val = 'cation exchange capacity' + long_name_val = 'cation exchange capacity: ELM to EM' + units_val = '[moles/m^3]' + is_real_type = .true. + ndim = 3 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevsoi + dim3_beg_name = dimname_one + dim3_end_name = dimname_alquimia_num_ion_exchange_sites + data_found = .true. + + case(L2E_STATE_AUX_DOUBLES) + id_val = L2E_STATE_AUX_DOUBLES + name_val = 'aux doubles' + long_name_val = 'aux doubles: ELM to EM' + units_val = '[-]' + is_real_type = .true. + ndim = 3 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevsoi + dim3_beg_name = dimname_one + dim3_end_name = dimname_alquimia_num_aux_doubles + data_found = .true. + + case(L2E_STATE_AUX_INTS) + id_val = L2E_STATE_AUX_INTS + name_val = 'aux ints' + long_name_val = 'aux ints: ELM to EM' + units_val = '[-]' + is_int_type = .true. + ndim = 3 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevsoi + dim3_beg_name = dimname_one + dim3_end_name = dimname_alquimia_num_aux_ints + data_found = .true. + + case(E2L_STATE_SOIL_PH) + id_val = E2L_STATE_SOIL_PH + name_val = 'Soil pH' + long_name_val = 'Soil pH: EM to ELM' + units_val = '[-]' + is_real_type = .true. + ndim = 2 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevsoi + data_found = .true. + + case(E2L_STATE_SOIL_SALINITY) + id_val = E2L_STATE_SOIL_SALINITY + name_val = 'Soil salinity' + long_name_val = 'Soil salinity: EM to ELM' + units_val = '[ppt]' + is_real_type = .true. + ndim = 2 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevsoi + data_found = .true. + + case(E2L_STATE_SOIL_O2) + id_val = E2L_STATE_SOIL_O2 + name_val = 'Soil oxygen' + long_name_val = 'Soil oxygen: EM to ELM' + units_val = '[mol m^-3]' + is_real_type = .true. + ndim = 2 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevsoi + data_found = .true. + + case(E2L_STATE_SOIL_SULFATE) + id_val = E2L_STATE_SOIL_SULFATE + name_val = 'Soil sulfate' + long_name_val = 'Soil sulfate: EM to ELM' + units_val = '[mol m^-3]' + is_real_type = .true. + ndim = 2 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevsoi + data_found = .true. + + case(E2L_STATE_SOIL_SULFIDE) + id_val = E2L_STATE_SOIL_SULFIDE + name_val = 'Soil sulfide' + long_name_val = 'Soil sulfide: EM to ELM' + units_val = '[mol m^-3]' + is_real_type = .true. + ndim = 2 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevsoi + data_found = .true. + + case(E2L_STATE_SOIL_FE2) + id_val = E2L_STATE_SOIL_FE2 + name_val = 'Soil Fe(II)' + long_name_val = 'Soil Fe(II): EM to ELM' + units_val = '[mol m^-3]' + is_real_type = .true. + ndim = 2 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevsoi + data_found = .true. + + case(E2L_STATE_SOIL_FE_OXIDE) + id_val = E2L_STATE_SOIL_FE_OXIDE + name_val = 'Soil iron oxide' + long_name_val = 'Soil iron oxide: EM to ELM' + units_val = '[mol Fe m^-3]' + is_real_type = .true. + ndim = 2 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevsoi + data_found = .true. + + case(E2L_STATE_SOIL_FE_SULFIDE) + id_val = E2L_STATE_SOIL_FE_SULFIDE + name_val = 'Soil iron sulfide' + long_name_val = 'Soil iron sulfide: EM to ELM' + units_val = '[mol Fe m^-3]' + is_real_type = .true. + ndim = 2 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevsoi + data_found = .true. + + case(E2L_STATE_SOIL_ACETATE) + id_val = E2L_STATE_SOIL_ACETATE + name_val = 'Soil acetate' + long_name_val = 'Soil acetate: EM to ELM' + units_val = '[mol m^-3]' + is_real_type = .true. + ndim = 2 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevsoi + data_found = .true. + + case(E2L_STATE_WATER_DENSITY) + id_val = E2L_STATE_WATER_DENSITY + name_val = 'Water density' + long_name_val = 'Water density: EM to ELM' + units_val = '[kg/m^3]' + is_real_type = .true. + ndim = 2 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevsoi + data_found = .true. + + case(E2L_STATE_AQUEOUS_PRESSURE) + id_val = E2L_STATE_AQUEOUS_PRESSURE + name_val = 'aqueous pressure' + long_name_val = 'aqueous pressure: EM to ELM' + units_val = '[Pa]' + is_real_type = .true. + ndim = 2 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevsoi + data_found = .true. + + case(E2L_STATE_TOTAL_MOBILE) + id_val = E2L_STATE_TOTAL_MOBILE + name_val = 'total mobile' + long_name_val = 'total mobile: EM to ELM' + units_val = '[M]' + is_real_type = .true. + ndim = 3 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevsoi + dim3_beg_name = dimname_one + dim3_end_name = dimname_alquimia_num_primary + data_found = .true. + + case(E2L_STATE_TOTAL_IMMOBILE) + id_val = E2L_STATE_TOTAL_IMMOBILE + name_val = 'total immobile' + long_name_val = 'total immobile: EM to ELM' + units_val = '[mol/m^3]' + is_real_type = .true. + ndim = 3 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevsoi + dim3_beg_name = dimname_one + dim3_end_name = dimname_alquimia_num_primary + data_found = .true. + + case(E2L_STATE_MINERAL_VOLUME_FRACTION) + id_val = E2L_STATE_MINERAL_VOLUME_FRACTION + name_val = 'mineral volume fraction' + long_name_val = 'mineral volume fraction: EM to ELM' + units_val = '[-]' + is_real_type = .true. + ndim = 3 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevsoi + dim3_beg_name = dimname_one + dim3_end_name = dimname_alquimia_num_minerals + data_found = .true. + + case(E2L_STATE_MINERAL_SPECIFIC_SURFACE_AREA) + id_val = E2L_STATE_MINERAL_SPECIFIC_SURFACE_AREA + name_val = 'mineral specific surface area' + long_name_val = 'mineral specific surface area: EM to ELM' + units_val = '[m^2/m^3]' + is_real_type = .true. + ndim = 3 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevsoi + dim3_beg_name = dimname_one + dim3_end_name = dimname_alquimia_num_minerals + data_found = .true. + + case(E2L_STATE_SURFACE_SITE_DENSITY) + id_val = E2L_STATE_SURFACE_SITE_DENSITY + name_val = 'surface site density' + long_name_val = 'surface site density: EM to ELM' + units_val = '[moles/m^3]' + is_real_type = .true. + ndim = 3 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevsoi + dim3_beg_name = dimname_one + dim3_end_name = dimname_alquimia_num_surface_sites + data_found = .true. + + case(E2L_STATE_CATION_EXCHANGE_CAPACITY) + id_val = E2L_STATE_CATION_EXCHANGE_CAPACITY + name_val = 'cation exchange capacity' + long_name_val = 'cation exchange capacity: EM to ELM' + units_val = '[moles/m^3]' + is_real_type = .true. + ndim = 3 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevsoi + dim3_beg_name = dimname_one + dim3_end_name = dimname_alquimia_num_ion_exchange_sites + data_found = .true. + + case(E2L_STATE_AUX_DOUBLES) + id_val = E2L_STATE_AUX_DOUBLES + name_val = 'aux doubles' + long_name_val = 'aux doubles: EM to ELM' + units_val = '[-]' + is_real_type = .true. + ndim = 3 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevsoi + dim3_beg_name = dimname_one + dim3_end_name = dimname_alquimia_num_aux_doubles + data_found = .true. + + case(E2L_STATE_AUX_INTS) + id_val = E2L_STATE_AUX_INTS + name_val = 'aux ints' + long_name_val = 'aux ints: EM to ELM' + units_val = '[-]' + is_int_type = .true. + ndim = 3 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevsoi + dim3_beg_name = dimname_one + dim3_end_name = dimname_alquimia_num_aux_ints + data_found = .true. + + case(E2L_STATE_CHEM_DT) + id_val = E2L_STATE_CHEM_DT + name_val = 'chem dt' + long_name_val = 'chem dt: EM to ELM' + units_val = '[-]' + is_real_type = .true. + ndim = 1 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + data_found = .true. end select end subroutine EMI_ChemStateType_DataInfoByID diff --git a/components/elm/src/external_models/emi/src/emi_data_definition/EMI_ColumnEnergyStateType_DataMod.F90 b/components/elm/src/external_models/emi/src/emi_data_definition/EMI_ColumnEnergyStateType_DataMod.F90 new file mode 100644 index 000000000000..7a434a927da0 --- /dev/null +++ b/components/elm/src/external_models/emi/src/emi_data_definition/EMI_ColumnEnergyStateType_DataMod.F90 @@ -0,0 +1,158 @@ +module EMI_ColumnEnergyStateType_DataMod + ! + use EMI_ColumnEnergyStateType_Constants + ! + implicit none + ! + public :: EMI_ColumnEnergyStateType_DataInfoByID + +contains + +!----------------------------------------------------------------------- + subroutine EMI_ColumnEnergyStateType_DataInfoByID(data_id, id_val, name_val, long_name_val,& + units_val, is_int_type, is_real_type, ndim, & + dim1_beg_name, dim1_end_name, dim2_beg_name, dim2_end_name, & + dim3_beg_name, dim3_end_name, dim4_beg_name, dim4_end_name, & + data_found) + ! + ! !DESCRIPTION: + ! Defines information of data exchanged between ELM and EM + ! + ! !USES: + use EMI_DataDimensionMod + implicit none + ! + ! !ARGUMENTS: + integer , intent(in) :: data_id + integer , intent(out) :: id_val + character (len=32) , intent(out) :: name_val + character (len=128), intent(out) :: long_name_val + character (len=32) , intent(out) :: units_val + logical , intent(out) :: is_int_type + logical , intent(out) :: is_real_type + integer , intent(out) :: ndim + character (len=32) , intent(out) :: dim1_beg_name + character (len=32) , intent(out) :: dim1_end_name + character (len=32) , intent(out) :: dim2_beg_name + character (len=32) , intent(out) :: dim2_end_name + character (len=32) , intent(out) :: dim3_beg_name + character (len=32) , intent(out) :: dim3_end_name + character (len=32) , intent(out) :: dim4_beg_name + character (len=32) , intent(out) :: dim4_end_name + logical , intent(inout) :: data_found + + is_int_type = .false. + is_real_type = .false. + dim1_beg_name = '' + dim2_beg_name = '' + dim3_beg_name = '' + dim4_beg_name = '' + dim1_end_name = '' + dim2_end_name = '' + dim3_end_name = '' + dim4_end_name = '' + + select case(data_id) + + case(L2E_STATE_TSOIL_NLEVGRND_COL) + id_val = L2E_STATE_TSOIL_NLEVGRND_COL + name_val = 'Soil temperature' + long_name_val = 'Soil temperature: ELM to EM' + units_val = '[K]' + is_real_type = .true. + ndim = 2 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevgrnd + data_found = .true. + + case(L2E_STATE_TSNOW_COL) + id_val = L2E_STATE_TSNOW_COL + name_val = 'Snow temperature' + long_name_val = 'Snow temperature: ELM to EM' + units_val = '[K]' + is_real_type = .true. + ndim = 2 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_nlevsno_plus_one + dim2_end_name = dimname_zero + data_found = .true. + + case(L2E_STATE_TH2OSFC_COL) + id_val = L2E_STATE_TH2OSFC_COL + name_val = 'Standing water temperature' + long_name_val = 'Standing water temperature: ELM to EM' + units_val = '[K]' + is_real_type = .true. + ndim = 1 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + data_found = .true. + + case(L2E_STATE_TSOI10CM_COL) + id_val = L2E_STATE_TSOI10CM_COL + name_val = 'Soil temperature in top 10cm' + long_name_val = 'Soil temperature in top 10cm: ELM to EM' + units_val = '[K]' + is_real_type = .true. + ndim = 1 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + data_found = .true. + + case(L2E_STATE_TSOIL_NLEVSOI_COL) + id_val = L2E_STATE_TSOIL_NLEVSOI_COL + name_val = 'Soil temperature in nlevsoi' + long_name_val = 'Soil temperature in nlevsoi: ELM to EM' + units_val = '[K]' + is_real_type = .true. + ndim = 2 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevsoi + data_found = .true. + + case(E2L_STATE_TSOIL_NLEVGRND_COL) + id_val = E2L_STATE_TSOIL_NLEVGRND_COL + name_val = 'Soil temperature' + long_name_val = 'Soil temperature: EM to ELM' + units_val = '[K]' + is_real_type = .true. + ndim = 2 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevgrnd + data_found = .true. + + case(E2L_STATE_TSNOW_NLEVSNOW_COL) + id_val = E2L_STATE_TSNOW_NLEVSNOW_COL + name_val = 'Snow temperature' + long_name_val = 'Snow temperature: EM to ELM' + units_val = '[K]' + is_real_type = .true. + ndim = 2 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_nlevsno_plus_one + dim2_end_name = dimname_zero + data_found = .true. + + case(E2L_STATE_TH2OSFC_COL) + id_val = E2L_STATE_TH2OSFC_COL + name_val = 'Standing water temperature' + long_name_val = 'Standing water temperature: EM to ELM' + units_val = '[K]' + is_real_type = .true. + ndim = 1 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + data_found = .true. + end select + + end subroutine EMI_ColumnEnergyStateType_DataInfoByID + +end module EMI_ColumnEnergyStateType_DataMod diff --git a/components/elm/src/external_models/emi/src/emi_data_definition/EMI_ColumnWaterFluxType_DataMod.F90 b/components/elm/src/external_models/emi/src/emi_data_definition/EMI_ColumnWaterFluxType_DataMod.F90 new file mode 100644 index 000000000000..953ad6c8e932 --- /dev/null +++ b/components/elm/src/external_models/emi/src/emi_data_definition/EMI_ColumnWaterFluxType_DataMod.F90 @@ -0,0 +1,97 @@ +module EMI_ColumnWaterFluxType_DataMod + ! + use EMI_ColumnWaterFluxType_Constants + ! + implicit none + ! + public :: EMI_ColumnWaterFluxType_DataInfoByID + +contains + +!----------------------------------------------------------------------- + subroutine EMI_ColumnWaterFluxType_DataInfoByID(data_id, id_val, name_val, long_name_val,& + units_val, is_int_type, is_real_type, ndim, & + dim1_beg_name, dim1_end_name, dim2_beg_name, dim2_end_name, & + dim3_beg_name, dim3_end_name, dim4_beg_name, dim4_end_name, & + data_found) + ! + ! !DESCRIPTION: + ! Defines information of data exchanged between ELM and EM + ! + ! !USES: + use EMI_DataDimensionMod + implicit none + ! + ! !ARGUMENTS: + integer , intent(in) :: data_id + integer , intent(out) :: id_val + character (len=32) , intent(out) :: name_val + character (len=128), intent(out) :: long_name_val + character (len=32) , intent(out) :: units_val + logical , intent(out) :: is_int_type + logical , intent(out) :: is_real_type + integer , intent(out) :: ndim + character (len=32) , intent(out) :: dim1_beg_name + character (len=32) , intent(out) :: dim1_end_name + character (len=32) , intent(out) :: dim2_beg_name + character (len=32) , intent(out) :: dim2_end_name + character (len=32) , intent(out) :: dim3_beg_name + character (len=32) , intent(out) :: dim3_end_name + character (len=32) , intent(out) :: dim4_beg_name + character (len=32) , intent(out) :: dim4_end_name + logical , intent(inout) :: data_found + + is_int_type = .false. + is_real_type = .false. + dim1_beg_name = '' + dim2_beg_name = '' + dim3_beg_name = '' + dim4_beg_name = '' + dim1_end_name = '' + dim2_end_name = '' + dim3_end_name = '' + dim4_end_name = '' + + select case(data_id) + + case(L2E_FLUX_SOIL_QFLX_ADV_COL) + id_val = L2E_FLUX_SOIL_QFLX_ADV_COL + name_val = 'Vertical water flow' + long_name_val = 'Vertical water flow: ELM to EM' + units_val = 'mm H2O/s' + is_real_type = .true. + ndim = 2 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_zero + dim2_end_name = dimname_nlevgrnd + data_found = .true. + + case(L2E_FLUX_SOIL_QFLX_DRAIN) + id_val = L2E_FLUX_SOIL_QFLX_DRAIN + name_val = 'Subsurface drainage water flow' + long_name_val = 'Subsurface drainage water flow: ELM to EM' + units_val = 'mm H2O/s' + is_real_type = .true. + ndim = 1 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + data_found = .true. + + case(L2E_FLUX_SOIL_QFLX_DRAIN_VR) + id_val = L2E_FLUX_SOIL_QFLX_DRAIN_VR + name_val = 'Subsurface drainage water flow vr' + long_name_val = 'Subsurface drainage water flow vr: ELM to EM' + units_val = 'mm H2O/time step' + is_real_type = .true. + ndim = 2 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevgrnd + data_found = .true. + end select + + end subroutine EMI_ColumnWaterFluxType_DataInfoByID + +end module EMI_ColumnWaterFluxType_DataMod diff --git a/components/elm/src/external_models/emi/src/emi_data_definition/EMI_ColumnWaterStateType_DataMod.F90 b/components/elm/src/external_models/emi/src/emi_data_definition/EMI_ColumnWaterStateType_DataMod.F90 new file mode 100644 index 000000000000..8e8508d482c1 --- /dev/null +++ b/components/elm/src/external_models/emi/src/emi_data_definition/EMI_ColumnWaterStateType_DataMod.F90 @@ -0,0 +1,96 @@ +module EMI_ColumnWaterStateType_DataMod + ! + use EMI_ColumnWaterStateType_Constants + ! + implicit none + ! + public :: EMI_ColumnWaterStateType_DataInfoByID + +contains + +!----------------------------------------------------------------------- + subroutine EMI_ColumnWaterStateType_DataInfoByID(data_id, id_val, name_val, long_name_val,& + units_val, is_int_type, is_real_type, ndim, & + dim1_beg_name, dim1_end_name, dim2_beg_name, dim2_end_name, & + dim3_beg_name, dim3_end_name, dim4_beg_name, dim4_end_name, & + data_found) + ! + ! !DESCRIPTION: + ! Defines information of data exchanged between ELM and EM + ! + ! !USES: + use EMI_DataDimensionMod + implicit none + ! + ! !ARGUMENTS: + integer , intent(in) :: data_id + integer , intent(out) :: id_val + character (len=32) , intent(out) :: name_val + character (len=128), intent(out) :: long_name_val + character (len=32) , intent(out) :: units_val + logical , intent(out) :: is_int_type + logical , intent(out) :: is_real_type + integer , intent(out) :: ndim + character (len=32) , intent(out) :: dim1_beg_name + character (len=32) , intent(out) :: dim1_end_name + character (len=32) , intent(out) :: dim2_beg_name + character (len=32) , intent(out) :: dim2_end_name + character (len=32) , intent(out) :: dim3_beg_name + character (len=32) , intent(out) :: dim3_end_name + character (len=32) , intent(out) :: dim4_beg_name + character (len=32) , intent(out) :: dim4_end_name + logical , intent(inout) :: data_found + + is_int_type = .false. + is_real_type = .false. + dim1_beg_name = '' + dim2_beg_name = '' + dim3_beg_name = '' + dim4_beg_name = '' + dim1_end_name = '' + dim2_end_name = '' + dim3_end_name = '' + dim4_end_name = '' + + select case(data_id) + + case(L2E_STATE_SOIL_LIQ_VOL_COL) + id_val = L2E_STATE_SOIL_LIQ_VOL_COL + name_val = 'Soil liquid water volume' + long_name_val = 'Soil liquid water volume: ELM to EM' + units_val = 'm3/m3' + is_real_type = .true. + ndim = 2 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevgrnd + data_found = .true. + + case(L2E_STATE_SOIL_ICE_VOL_COL) + id_val = L2E_STATE_SOIL_ICE_VOL_COL + name_val = 'Soil ice water volume' + long_name_val = 'Soil ice water volume: ELM to EM' + units_val = 'm3/m3' + is_real_type = .true. + ndim = 2 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + dim2_beg_name = dimname_one + dim2_end_name = dimname_nlevgrnd + data_found = .true. + + case(L2E_STATE_H2OSFC_COL) + id_val = L2E_STATE_H2OSFC_COL + name_val = 'Surface water' + long_name_val = 'Surface water: ELM to EM' + units_val = 'mm' + is_real_type = .true. + ndim = 1 + dim1_beg_name = dimname_begc + dim1_end_name = dimname_endc + data_found = .true. + end select + end subroutine EMI_ColumnWaterStateType_DataInfoByID + +end module EMI_ColumnWaterStateType_DataMod diff --git a/components/elm/src/external_models/emi/src/emi_data_definition/EMI_DataMod.F90 b/components/elm/src/external_models/emi/src/emi_data_definition/EMI_DataMod.F90 index d0e89f4d3e9d..398365ca3582 100644 --- a/components/elm/src/external_models/emi/src/emi_data_definition/EMI_DataMod.F90 +++ b/components/elm/src/external_models/emi/src/emi_data_definition/EMI_DataMod.F90 @@ -36,14 +36,14 @@ module EMI_DataMod character (len=10) :: dim3_name character (len=10) :: dim4_name - character (len=24) :: dim1_beg_name - character (len=24) :: dim2_beg_name - character (len=24) :: dim3_beg_name - character (len=24) :: dim4_beg_name - character (len=24) :: dim1_end_name - character (len=24) :: dim2_end_name - character (len=24) :: dim3_end_name - character (len=24) :: dim4_end_name + character (len=32) :: dim1_beg_name + character (len=32) :: dim2_beg_name + character (len=32) :: dim3_beg_name + character (len=32) :: dim4_beg_name + character (len=32) :: dim1_end_name + character (len=32) :: dim2_end_name + character (len=32) :: dim3_end_name + character (len=32) :: dim4_end_name integer :: dim1_beg, dim1_end integer :: dim2_beg, dim2_end @@ -1273,10 +1273,22 @@ subroutine EMIDListAddDataByID(this, data_id, num_em_stages_val, em_stage_ids_va use EMI_WaterStateType_DataMod use EMI_TemperatureType_DataMod use EMI_ColumnType_Constants + use EMI_ColumnEnergyStateType_Constants + use EMI_ColumnEnergyStateType_DataMod + use EMI_ColumnWaterStateType_Constants + use EMI_ColumnWaterStateType_DataMod + use EMI_ColumnWaterFluxType_Constants + use EMI_ColumnWaterFluxType_DataMod use EMI_Filter_Constants use EMI_Landunit_Constants use EMI_CNCarbonStateType_DataMod use EMI_CNCarbonStateType_Constants + use EMI_CNCarbonFluxType_DataMod + use EMI_CNCarbonFluxType_Constants + use EMI_CNNitrogenStateType_DataMod + use EMI_CNNitrogenStateType_Constants + use EMI_CNNitrogenFluxType_DataMod + use EMI_CNNitrogenFluxType_Constants use EMI_DataDimensionMod, only : dimname_begg use EMI_DataDimensionMod, only : dimname_endg use EMI_DataDimensionMod, only : dimname_begl @@ -1308,15 +1320,15 @@ subroutine EMIDListAddDataByID(this, data_id, num_em_stages_val, em_stage_ids_va integer :: ndim character (len=32) :: name_val character (len=128) :: long_name_val - character (len=24) :: units_val - character (len=24) :: dim1_beg_name - character (len=24) :: dim2_beg_name - character (len=24) :: dim3_beg_name - character (len=24) :: dim4_beg_name - character (len=24) :: dim1_end_name - character (len=24) :: dim2_end_name - character (len=24) :: dim3_end_name - character (len=24) :: dim4_end_name + character (len=32) :: units_val + character (len=32) :: dim1_beg_name + character (len=32) :: dim2_beg_name + character (len=32) :: dim3_beg_name + character (len=32) :: dim4_beg_name + character (len=32) :: dim1_end_name + character (len=32) :: dim2_end_name + character (len=32) :: dim3_end_name + character (len=32) :: dim4_end_name logical :: is_int_type logical :: is_real_type logical :: data_present @@ -1410,6 +1422,54 @@ subroutine EMIDListAddDataByID(this, data_id, num_em_stages_val, em_stage_ids_va dim3_beg_name, dim3_end_name, dim4_beg_name, dim4_end_name, & data_found) end if + + if (.not.data_found) then + call EMI_CNNitrogenStateType_DataInfoByID(data_id, id_val, & + name_val, long_name_val, units_val, is_int_type, is_real_type, ndim, & + dim1_beg_name, dim1_end_name, dim2_beg_name, dim2_end_name, & + dim3_beg_name, dim3_end_name, dim4_beg_name, dim4_end_name, & + data_found) + end if + + if (.not.data_found) then + call EMI_CNCarbonFluxType_DataInfoByID(data_id, id_val, & + name_val, long_name_val, units_val, is_int_type, is_real_type, ndim, & + dim1_beg_name, dim1_end_name, dim2_beg_name, dim2_end_name, & + dim3_beg_name, dim3_end_name, dim4_beg_name, dim4_end_name, & + data_found) + end if + + if (.not.data_found) then + call EMI_CNNitrogenFluxType_DataInfoByID(data_id, id_val, & + name_val, long_name_val, units_val, is_int_type, is_real_type, ndim, & + dim1_beg_name, dim1_end_name, dim2_beg_name, dim2_end_name, & + dim3_beg_name, dim3_end_name, dim4_beg_name, dim4_end_name, & + data_found) + end if + + if (.not.data_found) then + call EMI_ColumnEnergyStateType_DataInfoByID(data_id, id_val, & + name_val, long_name_val, units_val, is_int_type, is_real_type, ndim, & + dim1_beg_name, dim1_end_name, dim2_beg_name, dim2_end_name, & + dim3_beg_name, dim3_end_name, dim4_beg_name, dim4_end_name, & + data_found) + end if + + if (.not.data_found) then + call EMI_ColumnWaterStateType_DataInfoByID(data_id, id_val, & + name_val, long_name_val, units_val, is_int_type, is_real_type, ndim, & + dim1_beg_name, dim1_end_name, dim2_beg_name, dim2_end_name, & + dim3_beg_name, dim3_end_name, dim4_beg_name, dim4_end_name, & + data_found) + end if + + if (.not.data_found) then + call EMI_ColumnWaterFluxType_DataInfoByID(data_id, id_val, & + name_val, long_name_val, units_val, is_int_type, is_real_type, ndim, & + dim1_beg_name, dim1_end_name, dim2_beg_name, dim2_end_name, & + dim3_beg_name, dim3_end_name, dim4_beg_name, dim4_end_name, & + data_found) + end if if (.not.data_found) then select case(data_id) @@ -1438,6 +1498,28 @@ subroutine EMIDListAddDataByID(this, data_id, num_em_stages_val, em_stage_ids_va dim1_end_name = dimname_one data_found = .true. + case (L2E_FILTER_SOILC) + id_val = L2E_FILTER_SOILC + name_val = 'Soil filter' + long_name_val = 'Soil filter: ALM to External Model' + units_val = '[-]' + is_int_type = .true. + ndim = 1 + dim1_beg_name = dimname_one + dim1_end_name = dimname_col_one_based_idx + data_found = .true. + + case (L2E_FILTER_NUM_SOILC) + id_val = L2E_FILTER_NUM_SOILC + name_val = 'Number of soil filter' + long_name_val = 'Number of soil filter: ALM to External Model' + units_val = '[-]' + is_int_type = .true. + ndim = 1 + dim1_beg_name = dimname_one + dim1_end_name = dimname_one + data_found = .true. + case (L2E_FILTER_NOLAKEC) id_val = L2E_FILTER_HYDROLOGYC name_val = 'Non-lake filter' diff --git a/components/elm/src/external_models/emi/src/emi_data_definition/EMI_EnergyFluxType_DataMod.F90 b/components/elm/src/external_models/emi/src/emi_data_definition/EMI_EnergyFluxType_DataMod.F90 index 7bc63ec5d996..d21bb1b5f017 100644 --- a/components/elm/src/external_models/emi/src/emi_data_definition/EMI_EnergyFluxType_DataMod.F90 +++ b/components/elm/src/external_models/emi/src/emi_data_definition/EMI_EnergyFluxType_DataMod.F90 @@ -25,21 +25,21 @@ subroutine EMI_EnergyFluxType_DataInfoByID(data_id, id_val, name_val, long_name_ ! !ARGUMENTS: integer , intent(in) :: data_id integer , intent(out) :: id_val - character (len=*) , intent(out) :: name_val + character (len=32) , intent(out) :: name_val character (len=128), intent(out) :: long_name_val - character (len=24) , intent(out) :: units_val + character (len=32) , intent(out) :: units_val logical , intent(out) :: is_int_type logical , intent(out) :: is_real_type integer , intent(out) :: ndim - character (len=24) , intent(out) :: dim1_beg_name - character (len=24) , intent(out) :: dim1_end_name - character (len=24) , intent(out) :: dim2_beg_name - character (len=24) , intent(out) :: dim2_end_name - character (len=24) , intent(out) :: dim3_beg_name - character (len=24) , intent(out) :: dim3_end_name - character (len=24) , intent(out) :: dim4_beg_name - character (len=24) , intent(out) :: dim4_end_name - logical , intent(out) :: data_found + character (len=32) , intent(out) :: dim1_beg_name + character (len=32) , intent(out) :: dim1_end_name + character (len=32) , intent(out) :: dim2_beg_name + character (len=32) , intent(out) :: dim2_end_name + character (len=32) , intent(out) :: dim3_beg_name + character (len=32) , intent(out) :: dim3_end_name + character (len=32) , intent(out) :: dim4_beg_name + character (len=32) , intent(out) :: dim4_end_name + logical , intent(inout) :: data_found is_int_type = .false. is_real_type = .false. diff --git a/components/elm/src/external_models/emi/src/emi_data_definition/EMI_SoilHydrologyType_DataMod.F90 b/components/elm/src/external_models/emi/src/emi_data_definition/EMI_SoilHydrologyType_DataMod.F90 index 273d8b67e673..d16a1726fde6 100644 --- a/components/elm/src/external_models/emi/src/emi_data_definition/EMI_SoilHydrologyType_DataMod.F90 +++ b/components/elm/src/external_models/emi/src/emi_data_definition/EMI_SoilHydrologyType_DataMod.F90 @@ -25,21 +25,21 @@ subroutine EMI_SoilHydrologyType_DataInfoByID(data_id, id_val, name_val, long_na ! !ARGUMENTS: integer , intent(in) :: data_id integer , intent(out) :: id_val - character (len=*) , intent(out) :: name_val + character (len=32) , intent(out) :: name_val character (len=128), intent(out) :: long_name_val - character (len=24) , intent(out) :: units_val + character (len=32) , intent(out) :: units_val logical , intent(out) :: is_int_type logical , intent(out) :: is_real_type integer , intent(out) :: ndim - character (len=24) , intent(out) :: dim1_beg_name - character (len=24) , intent(out) :: dim1_end_name - character (len=24) , intent(out) :: dim2_beg_name - character (len=24) , intent(out) :: dim2_end_name - character (len=24) , intent(out) :: dim3_beg_name - character (len=24) , intent(out) :: dim3_end_name - character (len=24) , intent(out) :: dim4_beg_name - character (len=24) , intent(out) :: dim4_end_name - logical , intent(out) :: data_found + character (len=32) , intent(out) :: dim1_beg_name + character (len=32) , intent(out) :: dim1_end_name + character (len=32) , intent(out) :: dim2_beg_name + character (len=32) , intent(out) :: dim2_end_name + character (len=32) , intent(out) :: dim3_beg_name + character (len=32) , intent(out) :: dim3_end_name + character (len=32) , intent(out) :: dim4_beg_name + character (len=32) , intent(out) :: dim4_end_name + logical , intent(inout) :: data_found is_int_type = .false. is_real_type = .false. diff --git a/components/elm/src/external_models/emi/src/emi_data_definition/EMI_SoilStateType_DataMod.F90 b/components/elm/src/external_models/emi/src/emi_data_definition/EMI_SoilStateType_DataMod.F90 index 9cd91b9d9553..4b162e1e0f07 100644 --- a/components/elm/src/external_models/emi/src/emi_data_definition/EMI_SoilStateType_DataMod.F90 +++ b/components/elm/src/external_models/emi/src/emi_data_definition/EMI_SoilStateType_DataMod.F90 @@ -25,21 +25,21 @@ subroutine EMI_SoilStateType_DataInfoByID(data_id, id_val, name_val, long_name_v ! !ARGUMENTS: integer , intent(in) :: data_id integer , intent(out) :: id_val - character (len=*) , intent(out) :: name_val - character (len=*) , intent(out) :: long_name_val - character (len=*) , intent(out) :: units_val + character (len=32) , intent(out) :: name_val + character (len=128), intent(out) :: long_name_val + character (len=32) , intent(out) :: units_val logical , intent(out) :: is_int_type logical , intent(out) :: is_real_type integer , intent(out) :: ndim - character (len=24) , intent(out) :: dim1_beg_name - character (len=24) , intent(out) :: dim1_end_name - character (len=24) , intent(out) :: dim2_beg_name - character (len=24) , intent(out) :: dim2_end_name - character (len=24) , intent(out) :: dim3_beg_name - character (len=24) , intent(out) :: dim3_end_name - character (len=24) , intent(out) :: dim4_beg_name - character (len=24) , intent(out) :: dim4_end_name - logical , intent(out) :: data_found + character (len=32) , intent(out) :: dim1_beg_name + character (len=32) , intent(out) :: dim1_end_name + character (len=32) , intent(out) :: dim2_beg_name + character (len=32) , intent(out) :: dim2_end_name + character (len=32) , intent(out) :: dim3_beg_name + character (len=32) , intent(out) :: dim3_end_name + character (len=32) , intent(out) :: dim4_beg_name + character (len=32) , intent(out) :: dim4_end_name + logical , intent(inout) :: data_found is_int_type = .false. is_real_type = .false. @@ -238,9 +238,9 @@ subroutine EMI_SoilStateType_DataInfoByID(data_id, id_val, name_val, long_name_v case(E2L_STATE_SOIL_MATRIC_POTENTIAL) id_val = E2L_STATE_SOIL_MATRIC_POTENTIAL - name_val = 'Soil matric potential' + name_val = '' long_name_val = ': EM to ELM' - units_val = '[Pa]' + units_val = '[]' is_real_type = .true. ndim = 2 dim1_beg_name = dimname_begc diff --git a/components/elm/src/external_models/emi/src/emi_data_definition/EMI_TemperatureType_DataMod.F90 b/components/elm/src/external_models/emi/src/emi_data_definition/EMI_TemperatureType_DataMod.F90 index 45477ad6debd..885da6c9bbbd 100644 --- a/components/elm/src/external_models/emi/src/emi_data_definition/EMI_TemperatureType_DataMod.F90 +++ b/components/elm/src/external_models/emi/src/emi_data_definition/EMI_TemperatureType_DataMod.F90 @@ -25,21 +25,21 @@ subroutine EMI_TemperatureType_DataInfoByID(data_id, id_val, name_val, long_name ! !ARGUMENTS: integer , intent(in) :: data_id integer , intent(out) :: id_val - character (len=*) , intent(out) :: name_val + character (len=32) , intent(out) :: name_val character (len=128), intent(out) :: long_name_val - character (len=24) , intent(out) :: units_val + character (len=32) , intent(out) :: units_val logical , intent(out) :: is_int_type logical , intent(out) :: is_real_type integer , intent(out) :: ndim - character (len=24) , intent(out) :: dim1_beg_name - character (len=24) , intent(out) :: dim1_end_name - character (len=24) , intent(out) :: dim2_beg_name - character (len=24) , intent(out) :: dim2_end_name - character (len=24) , intent(out) :: dim3_beg_name - character (len=24) , intent(out) :: dim3_end_name - character (len=24) , intent(out) :: dim4_beg_name - character (len=24) , intent(out) :: dim4_end_name - logical , intent(out) :: data_found + character (len=32) , intent(out) :: dim1_beg_name + character (len=32) , intent(out) :: dim1_end_name + character (len=32) , intent(out) :: dim2_beg_name + character (len=32) , intent(out) :: dim2_end_name + character (len=32) , intent(out) :: dim3_beg_name + character (len=32) , intent(out) :: dim3_end_name + character (len=32) , intent(out) :: dim4_beg_name + character (len=32) , intent(out) :: dim4_end_name + logical , intent(inout) :: data_found is_int_type = .false. is_real_type = .false. diff --git a/components/elm/src/external_models/emi/src/emi_data_definition/EMI_WaterFluxType_DataMod.F90 b/components/elm/src/external_models/emi/src/emi_data_definition/EMI_WaterFluxType_DataMod.F90 index 981ed3d66bf6..6024a067242a 100644 --- a/components/elm/src/external_models/emi/src/emi_data_definition/EMI_WaterFluxType_DataMod.F90 +++ b/components/elm/src/external_models/emi/src/emi_data_definition/EMI_WaterFluxType_DataMod.F90 @@ -25,21 +25,21 @@ subroutine EMI_WaterFluxType_DataInfoByID(data_id, id_val, name_val, long_name_v ! !ARGUMENTS: integer , intent(in) :: data_id integer , intent(out) :: id_val - character (len=*) , intent(out) :: name_val + character (len=32) , intent(out) :: name_val character (len=128), intent(out) :: long_name_val - character (len=24) , intent(out) :: units_val + character (len=32) , intent(out) :: units_val logical , intent(out) :: is_int_type logical , intent(out) :: is_real_type integer , intent(out) :: ndim - character (len=24) , intent(out) :: dim1_beg_name - character (len=24) , intent(out) :: dim1_end_name - character (len=24) , intent(out) :: dim2_beg_name - character (len=24) , intent(out) :: dim2_end_name - character (len=24) , intent(out) :: dim3_beg_name - character (len=24) , intent(out) :: dim3_end_name - character (len=24) , intent(out) :: dim4_beg_name - character (len=24) , intent(out) :: dim4_end_name - logical , intent(out) :: data_found + character (len=32) , intent(out) :: dim1_beg_name + character (len=32) , intent(out) :: dim1_end_name + character (len=32) , intent(out) :: dim2_beg_name + character (len=32) , intent(out) :: dim2_end_name + character (len=32) , intent(out) :: dim3_beg_name + character (len=32) , intent(out) :: dim3_end_name + character (len=32) , intent(out) :: dim4_beg_name + character (len=32) , intent(out) :: dim4_end_name + logical , intent(inout) :: data_found is_int_type = .false. is_real_type = .false. diff --git a/components/elm/src/external_models/emi/src/emi_data_definition/EMI_WaterStateType_DataMod.F90 b/components/elm/src/external_models/emi/src/emi_data_definition/EMI_WaterStateType_DataMod.F90 index 82d42c3624cd..b8a92a8ec473 100644 --- a/components/elm/src/external_models/emi/src/emi_data_definition/EMI_WaterStateType_DataMod.F90 +++ b/components/elm/src/external_models/emi/src/emi_data_definition/EMI_WaterStateType_DataMod.F90 @@ -25,21 +25,21 @@ subroutine EMI_WaterStateType_DataInfoByID(data_id, id_val, name_val, long_name_ ! !ARGUMENTS: integer , intent(in) :: data_id integer , intent(out) :: id_val - character (len=*) , intent(out) :: name_val + character (len=32) , intent(out) :: name_val character (len=128), intent(out) :: long_name_val - character (len=24) , intent(out) :: units_val + character (len=32) , intent(out) :: units_val logical , intent(out) :: is_int_type logical , intent(out) :: is_real_type integer , intent(out) :: ndim - character (len=24) , intent(out) :: dim1_beg_name - character (len=24) , intent(out) :: dim1_end_name - character (len=24) , intent(out) :: dim2_beg_name - character (len=24) , intent(out) :: dim2_end_name - character (len=24) , intent(out) :: dim3_beg_name - character (len=24) , intent(out) :: dim3_end_name - character (len=24) , intent(out) :: dim4_beg_name - character (len=24) , intent(out) :: dim4_end_name - logical , intent(out) :: data_found + character (len=32) , intent(out) :: dim1_beg_name + character (len=32) , intent(out) :: dim1_end_name + character (len=32) , intent(out) :: dim2_beg_name + character (len=32) , intent(out) :: dim2_end_name + character (len=32) , intent(out) :: dim3_beg_name + character (len=32) , intent(out) :: dim3_end_name + character (len=32) , intent(out) :: dim4_beg_name + character (len=32) , intent(out) :: dim4_end_name + logical , intent(inout) :: data_found is_int_type = .false. is_real_type = .false. diff --git a/components/elm/src/external_models/emi/src/emi_data_exchange/CMakeLists.txt b/components/elm/src/external_models/emi/src/emi_data_exchange/CMakeLists.txt index 4e719ccff214..bd976ff9dc51 100644 --- a/components/elm/src/external_models/emi/src/emi_data_exchange/CMakeLists.txt +++ b/components/elm/src/external_models/emi/src/emi_data_exchange/CMakeLists.txt @@ -3,7 +3,10 @@ set(EMI_EMI_DATA_EXCHANGE_SOURCES EMI_CanopyStateType_ExchangeMod.F90 EMI_ChemStateType_ExchangeMod.F90 EMI_CNCarbonStateType_ExchangeMod.F90 + EMI_CNNitrogenStateType_ExchangeMod.F90 + EMI_CNCarbonFluxType_ExchangeMod.F90 EMI_ColumnType_ExchangeMod.F90 + EMI_ColumnEnergyStateType_ExchangeMod.F90 EMI_EnergyFluxType_ExchangeMod.F90 EMI_Filter_ExchangeMod.F90 EMI_Landunit_ExchangeMod.F90 diff --git a/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_Atm2LndType_ExchangeMod.F90 b/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_Atm2LndType_ExchangeMod.F90 index 44e95034e888..a094556f918d 100644 --- a/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_Atm2LndType_ExchangeMod.F90 +++ b/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_Atm2LndType_ExchangeMod.F90 @@ -6,12 +6,17 @@ module EMI_Atm2LndType_ExchangeMod use elm_varctl , only : iulog use EMI_DataMod , only : emi_data_list, emi_data use EMI_DataDimensionMod , only : emi_data_dimension_list_type - use Atm2LndType , only : atm2lnd_type - use TopounitDataType , only : top_as - use ColumnType , only : col_pp + use Atm2LndType , only : atm2lnd_type use EMI_Atm2LndType_Constants use EMI_CanopyStateType_Constants use EMI_ChemStateType_Constants + use EMI_CNCarbonStateType_Constants + use EMI_CNNitrogenStateType_Constants + use EMI_CNNitrogenFluxType_Constants + use EMI_CNCarbonFluxType_Constants + use EMI_ColumnEnergyStateType_Constants + use EMI_ColumnWaterStateType_Constants + use EMI_ColumnWaterFluxType_Constants use EMI_EnergyFluxType_Constants use EMI_SoilHydrologyType_Constants use EMI_SoilStateType_Constants @@ -38,7 +43,6 @@ subroutine EMI_Pack_Atm2LndType_at_Column_Level_for_EM(data_list, em_stage, & ! Pack data from ALM atm2lndtype_vars for EM ! ! !USES: - use elm_varpar , only : nlevsoi, nlevgrnd, nlevsno ! implicit none ! @@ -50,15 +54,15 @@ subroutine EMI_Pack_Atm2LndType_at_Column_Level_for_EM(data_list, em_stage, & type(atm2lnd_type) , intent(in) :: atm2lndtype_vars ! ! !LOCAL_VARIABLES: - integer :: fc,t,c,j + integer :: fc,c,j,k class(emi_data), pointer :: cur_data logical :: need_to_pack integer :: istage integer :: count associate(& - forc_pbot_downscaled => top_as%pbot , & - forc_t_downscaled => top_as%tbot & + forc_pbot_downscaled_col => atm2lndtype_vars%forc_pbot_downscaled_col , & + forc_t_downscaled_col => atm2lndtype_vars%forc_t_downscaled_col & ) count = 0 @@ -82,16 +86,14 @@ subroutine EMI_Pack_Atm2LndType_at_Column_Level_for_EM(data_list, em_stage, & case (L2E_STATE_FORC_PBOT_DOWNSCALED) do fc = 1, num_filter c = filter(fc) - t = col_pp%topounit(c) - cur_data%data_real_1d(c) = forc_pbot_downscaled(t) + cur_data%data_real_1d(c) = forc_pbot_downscaled_col(c) enddo cur_data%is_set = .true. case (L2E_STATE_FORC_T_DOWNSCALED) do fc = 1, num_filter c = filter(fc) - t = col_pp%topounit(c) - cur_data%data_real_1d(c) = forc_t_downscaled(t) + cur_data%data_real_1d(c) = forc_t_downscaled_col(c) enddo cur_data%is_set = .true. @@ -114,7 +116,6 @@ subroutine EMI_Pack_Atm2LndType_at_Grid_Level_for_EM(data_list, em_stage, & ! Pack data from ALM atm2lndtype_vars for EM ! ! !USES: - use elm_varpar , only : nlevsoi, nlevgrnd, nlevsno ! implicit none ! @@ -126,15 +127,15 @@ subroutine EMI_Pack_Atm2LndType_at_Grid_Level_for_EM(data_list, em_stage, & type(atm2lnd_type) , intent(in) :: atm2lndtype_vars ! ! !LOCAL_VARIABLES: - integer :: fg,g,j + integer :: fg,g,j,k class(emi_data), pointer :: cur_data logical :: need_to_pack integer :: istage integer :: count associate(& - forc_solad => atm2lndtype_vars%forc_solad_grc , & - forc_solai => atm2lndtype_vars%forc_solai_grc & + forc_solad_grc => atm2lndtype_vars%forc_solad_grc , & + forc_solai_grc => atm2lndtype_vars%forc_solai_grc & ) count = 0 @@ -159,7 +160,7 @@ subroutine EMI_Pack_Atm2LndType_at_Grid_Level_for_EM(data_list, em_stage, & do fg = 1, num_filter g = filter(fg) do j = 1, 2 - cur_data%data_real_2d(g,j) = forc_solad(g,j) + cur_data%data_real_2d(g,j) = forc_solad_grc(g,j) enddo enddo cur_data%is_set = .true. @@ -168,7 +169,7 @@ subroutine EMI_Pack_Atm2LndType_at_Grid_Level_for_EM(data_list, em_stage, & do fg = 1, num_filter g = filter(fg) do j = 1, 2 - cur_data%data_real_2d(g,j) = forc_solai(g,j) + cur_data%data_real_2d(g,j) = forc_solai_grc(g,j) enddo enddo cur_data%is_set = .true. diff --git a/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_CNCarbonFluxType_ExchangeMod.F90 b/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_CNCarbonFluxType_ExchangeMod.F90 new file mode 100644 index 000000000000..62deddeeda4c --- /dev/null +++ b/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_CNCarbonFluxType_ExchangeMod.F90 @@ -0,0 +1,245 @@ +module EMI_CNCarbonFluxType_ExchangeMod + ! + use shr_kind_mod , only : r8 => shr_kind_r8 + use shr_log_mod , only : errMsg => shr_log_errMsg + use abortutils , only : endrun + use elm_varctl , only : iulog + use EMI_DataMod , only : emi_data_list, emi_data + use EMI_DataDimensionMod , only : emi_data_dimension_list_type + use ColumnDataType , only : column_carbon_flux + use EMI_Atm2LndType_Constants + use EMI_CanopyStateType_Constants + use EMI_ChemStateType_Constants + use EMI_CNCarbonStateType_Constants + use EMI_CNNitrogenStateType_Constants + use EMI_CNNitrogenFluxType_Constants + use EMI_CNCarbonFluxType_Constants + use EMI_ColumnEnergyStateType_Constants + use EMI_ColumnWaterStateType_Constants + use EMI_ColumnWaterFluxType_Constants + use EMI_EnergyFluxType_Constants + use EMI_SoilHydrologyType_Constants + use EMI_SoilStateType_Constants + use EMI_TemperatureType_Constants + use EMI_WaterFluxType_Constants + use EMI_WaterStateType_Constants + use EMI_Filter_Constants + use EMI_ColumnType_Constants + use EMI_Landunit_Constants + ! + implicit none + ! + ! + public :: EMI_Pack_CNCarbonFluxType_at_Column_Level_for_EM + public :: EMI_Unpack_CNCarbonFluxType_at_Column_Level_from_EM + +contains + +!----------------------------------------------------------------------- + subroutine EMI_Pack_CNCarbonFluxType_at_Column_Level_for_EM(data_list, em_stage, & + num_filter, filter, col_cf) + ! + ! !DESCRIPTION: + ! Pack data from ALM col_cf for EM + ! + ! !USES: + use elm_varpar , only : nlevdecomp_full + use elm_varpar , only : ndecomp_pools + ! + implicit none + ! + ! !ARGUMENTS: + class(emi_data_list) , intent(in) :: data_list + integer , intent(in) :: em_stage + integer , intent(in) :: num_filter + integer , intent(in) :: filter(:) + type(column_carbon_flux) , intent(in) :: col_cf + ! + ! !LOCAL_VARIABLES: + integer :: fc,c,j,k + class(emi_data), pointer :: cur_data + logical :: need_to_pack + integer :: istage + integer :: count + + associate(& + decomp_cascade_hr_vr => col_cf%decomp_cascade_hr_vr , & + hr_vr => col_cf%hr_vr , & + decomp_k => col_cf%decomp_k & + ) + + count = 0 + cur_data => data_list%first + do + if (.not.associated(cur_data)) exit + count = count + 1 + + need_to_pack = .false. + do istage = 1, cur_data%num_em_stages + if (cur_data%em_stage_ids(istage) == em_stage) then + need_to_pack = .true. + exit + endif + enddo + + if (need_to_pack) then + + select case (cur_data%id) + + case (L2E_FLUX_HETEROTROPHIC_RESP_POOLS_VERTICALLY_RESOLVED) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevdecomp_full + do k = 1, ndecomp_pools + cur_data%data_real_3d(c,j,k) = decomp_cascade_hr_vr(c,j,k) + enddo + enddo + enddo + cur_data%is_set = .true. + + case (L2E_FLUX_HETEROTROPHIC_RESP_VERTICALLY_RESOLVED) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevdecomp_full + cur_data%data_real_2d(c,j) = hr_vr(c,j) + enddo + enddo + cur_data%is_set = .true. + + case (L2E_FLUX_SOIL_POOL_DECOMP_K) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevdecomp_full + do k = 1, ndecomp_pools + cur_data%data_real_3d(c,j,k) = decomp_k(c,j,k) + enddo + enddo + enddo + cur_data%is_set = .true. + + end select + + endif + + cur_data => cur_data%next + enddo + + end associate + + end subroutine EMI_Pack_CNCarbonFluxType_at_Column_Level_for_EM + +!----------------------------------------------------------------------- + subroutine EMI_Unpack_CNCarbonFluxType_at_Column_Level_from_EM(data_list, em_stage, & + num_filter, filter, col_cf) + ! + ! !DESCRIPTION: + ! Unpack data for ALM col_cf from EM + ! + ! !USES: + use elm_varpar , only : nlevdecomp_full + use elm_varpar , only : ndecomp_pools + ! + implicit none + ! + ! !ARGUMENTS: + class(emi_data_list) , intent(in) :: data_list + integer , intent(in) :: em_stage + integer , intent(in) :: num_filter + integer , intent(in) :: filter(:) + type(column_carbon_flux) , intent(in) :: col_cf + ! + ! !LOCAL_VARIABLES: + integer :: fc,c,j,k + class(emi_data), pointer :: cur_data + logical :: need_to_pack + integer :: istage + integer :: count + + associate(& + decomp_cascade_hr_vr => col_cf%decomp_cascade_hr_vr , & + hr_vr => col_cf%hr_vr , & + hr => col_cf%hr , & + ch4flux => col_cf%ch4flux , & + DIC_runoff => col_cf%DIC_runoff , & + DOC_runoff => col_cf%DOC_runoff & + ) + + count = 0 + cur_data => data_list%first + do + if (.not.associated(cur_data)) exit + count = count + 1 + + need_to_pack = .false. + do istage = 1, cur_data%num_em_stages + if (cur_data%em_stage_ids(istage) == em_stage) then + need_to_pack = .true. + exit + endif + enddo + + if (need_to_pack) then + + select case (cur_data%id) + + case (E2L_FLUX_HETEROTROPHIC_RESP_POOLS_VERTICALLY_RESOLVED) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevdecomp_full + do k = 1, ndecomp_pools + decomp_cascade_hr_vr(c,j,k) = cur_data%data_real_3d(c,j,k) + enddo + enddo + enddo + cur_data%is_set = .true. + + case (E2L_FLUX_HETEROTROPHIC_RESP_VERTICALLY_RESOLVED) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevdecomp_full + hr_vr(c,j) = cur_data%data_real_2d(c,j) + enddo + enddo + cur_data%is_set = .true. + + case (E2L_FLUX_HETEROTROPHIC_RESP) + do fc = 1, num_filter + c = filter(fc) + hr(c) = cur_data%data_real_1d(c) + enddo + cur_data%is_set = .true. + + case (E2L_FLUX_METHANE) + do fc = 1, num_filter + c = filter(fc) + ch4flux(c) = cur_data%data_real_1d(c) + enddo + cur_data%is_set = .true. + + case (E2L_FLUX_DIC_RUNOFF) + do fc = 1, num_filter + c = filter(fc) + DIC_runoff(c) = cur_data%data_real_1d(c) + enddo + cur_data%is_set = .true. + + case (E2L_FLUX_DOC_RUNOFF) + do fc = 1, num_filter + c = filter(fc) + DOC_runoff(c) = cur_data%data_real_1d(c) + enddo + cur_data%is_set = .true. + + end select + + endif + + cur_data => cur_data%next + enddo + + end associate + + end subroutine EMI_Unpack_CNCarbonFluxType_at_Column_Level_from_EM + + +end module EMI_CNCarbonFluxType_ExchangeMod diff --git a/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_CNCarbonStateType_ExchangeMod.F90 b/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_CNCarbonStateType_ExchangeMod.F90 index 981835b83515..d82b82a9b1c2 100644 --- a/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_CNCarbonStateType_ExchangeMod.F90 +++ b/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_CNCarbonStateType_ExchangeMod.F90 @@ -6,11 +6,17 @@ module EMI_CNCarbonStateType_ExchangeMod use elm_varctl , only : iulog use EMI_DataMod , only : emi_data_list, emi_data use EMI_DataDimensionMod , only : emi_data_dimension_list_type - use CNCarbonStateType , only : carbonstate_type + use ColumnDataType , only : column_carbon_state use EMI_Atm2LndType_Constants use EMI_CanopyStateType_Constants use EMI_ChemStateType_Constants use EMI_CNCarbonStateType_Constants + use EMI_CNNitrogenStateType_Constants + use EMI_CNNitrogenFluxType_Constants + use EMI_CNCarbonFluxType_Constants + use EMI_ColumnEnergyStateType_Constants + use EMI_ColumnWaterStateType_Constants + use EMI_ColumnWaterFluxType_Constants use EMI_EnergyFluxType_Constants use EMI_SoilHydrologyType_Constants use EMI_SoilStateType_Constants @@ -31,10 +37,10 @@ module EMI_CNCarbonStateType_ExchangeMod !----------------------------------------------------------------------- subroutine EMI_Pack_CNCarbonStateType_at_Column_Level_for_EM(data_list, em_stage, & - num_filter, filter, carbonstate_vars) + num_filter, filter, col_cs) ! ! !DESCRIPTION: - ! Pack data from ALM carbonstate_vars for EM + ! Pack data from ALM col_cs for EM ! ! !USES: use elm_varpar , only : nlevdecomp_full @@ -43,11 +49,11 @@ subroutine EMI_Pack_CNCarbonStateType_at_Column_Level_for_EM(data_list, em_stage implicit none ! ! !ARGUMENTS: - class(emi_data_list) , intent(in) :: data_list - integer , intent(in) :: em_stage - integer , intent(in) :: num_filter - integer , intent(in) :: filter(:) - type(carbonstate_type) , intent(in) :: carbonstate_vars + class(emi_data_list) , intent(in) :: data_list + integer , intent(in) :: em_stage + integer , intent(in) :: num_filter + integer , intent(in) :: filter(:) + type(column_carbon_state) , intent(in) :: col_cs ! ! !LOCAL_VARIABLES: integer :: fc,c,j,k @@ -57,7 +63,7 @@ subroutine EMI_Pack_CNCarbonStateType_at_Column_Level_for_EM(data_list, em_stage integer :: count associate(& - decomp_cpools_vr => carbonstate_vars%decomp_cpools_vr_col & + decomp_cpools_vr => col_cs%decomp_cpools_vr & ) count = 0 @@ -102,23 +108,24 @@ end subroutine EMI_Pack_CNCarbonStateType_at_Column_Level_for_EM !----------------------------------------------------------------------- subroutine EMI_Unpack_CNCarbonStateType_at_Column_Level_from_EM(data_list, em_stage, & - num_filter, filter, carbonstate_vars) + num_filter, filter, col_cs) ! ! !DESCRIPTION: - ! Unpack data for ALM carbonstate_vars from EM + ! Unpack data for ALM col_cs from EM ! ! !USES: use elm_varpar , only : nlevdecomp_full use elm_varpar , only : ndecomp_pools + use elm_varpar , only : nlevsoi ! implicit none ! ! !ARGUMENTS: - class(emi_data_list) , intent(in) :: data_list - integer , intent(in) :: em_stage - integer , intent(in) :: num_filter - integer , intent(in) :: filter(:) - type(carbonstate_type) , intent(in) :: carbonstate_vars + class(emi_data_list) , intent(in) :: data_list + integer , intent(in) :: em_stage + integer , intent(in) :: num_filter + integer , intent(in) :: filter(:) + type(column_carbon_state) , intent(in) :: col_cs ! ! !LOCAL_VARIABLES: integer :: fc,c,j,k @@ -128,7 +135,11 @@ subroutine EMI_Unpack_CNCarbonStateType_at_Column_Level_from_EM(data_list, em_st integer :: count associate(& - decomp_cpools_vr => carbonstate_vars%decomp_cpools_vr_col & + decomp_cpools_vr => col_cs%decomp_cpools_vr , & + DOC_vr => col_cs%DOC_vr , & + DIC_vr => col_cs%DIC_vr , & + CH4_vr => col_cs%CH4_vr , & + SIC_vr => col_cs%SIC_vr & ) count = 0 @@ -160,6 +171,42 @@ subroutine EMI_Unpack_CNCarbonStateType_at_Column_Level_from_EM(data_list, em_st enddo cur_data%is_set = .true. + case (E2L_STATE_DOC_VERTICALLY_RESOLVED) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevdecomp_full + DOC_vr(c,j) = cur_data%data_real_2d(c,j) + enddo + enddo + cur_data%is_set = .true. + + case (E2L_STATE_DIC_VERTICALLY_RESOLVED) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevdecomp_full + DIC_vr(c,j) = cur_data%data_real_2d(c,j) + enddo + enddo + cur_data%is_set = .true. + + case (E2L_STATE_METHANE_VERTICALLY_RESOLVED) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevdecomp_full + CH4_vr(c,j) = cur_data%data_real_2d(c,j) + enddo + enddo + cur_data%is_set = .true. + + case (E2L_STATE_SOIL_CARBONATE) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevsoi + SIC_vr(c,j) = cur_data%data_real_2d(c,j) + enddo + enddo + cur_data%is_set = .true. + end select endif diff --git a/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_CNNitrogenFluxType_ExchangeMod.F90 b/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_CNNitrogenFluxType_ExchangeMod.F90 new file mode 100644 index 000000000000..3f2602ff8a9e --- /dev/null +++ b/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_CNNitrogenFluxType_ExchangeMod.F90 @@ -0,0 +1,287 @@ +module EMI_CNNitrogenFluxType_ExchangeMod + ! + use shr_kind_mod , only : r8 => shr_kind_r8 + use shr_log_mod , only : errMsg => shr_log_errMsg + use abortutils , only : endrun + use elm_varctl , only : iulog + use EMI_DataMod , only : emi_data_list, emi_data + use EMI_DataDimensionMod , only : emi_data_dimension_list_type + use ColumnDataType , only : column_nitrogen_flux + use EMI_Atm2LndType_Constants + use EMI_CanopyStateType_Constants + use EMI_ChemStateType_Constants + use EMI_CNCarbonStateType_Constants + use EMI_CNNitrogenStateType_Constants + use EMI_CNNitrogenFluxType_Constants + use EMI_CNCarbonFluxType_Constants + use EMI_ColumnEnergyStateType_Constants + use EMI_ColumnWaterStateType_Constants + use EMI_ColumnWaterFluxType_Constants + use EMI_EnergyFluxType_Constants + use EMI_SoilHydrologyType_Constants + use EMI_SoilStateType_Constants + use EMI_TemperatureType_Constants + use EMI_WaterFluxType_Constants + use EMI_WaterStateType_Constants + use EMI_Filter_Constants + use EMI_ColumnType_Constants + use EMI_Landunit_Constants + ! + implicit none + ! + ! + public :: EMI_Pack_CNNitrogenFluxType_at_Column_Level_for_EM + public :: EMI_Unpack_CNNitrogenFluxType_at_Column_Level_from_EM + +contains + +!----------------------------------------------------------------------- + subroutine EMI_Pack_CNNitrogenFluxType_at_Column_Level_for_EM(data_list, em_stage, & + num_filter, filter, col_nf) + ! + ! !DESCRIPTION: + ! Pack data from ALM col_nf for EM + ! + ! !USES: + use elm_varpar , only : nlevdecomp_full + ! + implicit none + ! + ! !ARGUMENTS: + class(emi_data_list) , intent(in) :: data_list + integer , intent(in) :: em_stage + integer , intent(in) :: num_filter + integer , intent(in) :: filter(:) + type(column_nitrogen_flux) , intent(in) :: col_nf + ! + ! !LOCAL_VARIABLES: + integer :: fc,c,j,k + class(emi_data), pointer :: cur_data + logical :: need_to_pack + integer :: istage + integer :: count + + associate(& + actual_immob_vr => col_nf%actual_immob_vr , & + potential_immob_vr => col_nf%potential_immob_vr , & + gross_nmin_vr => col_nf%gross_nmin_vr , & + plant_ndemand_vr => col_nf%plant_ndemand_vr & + ) + + count = 0 + cur_data => data_list%first + do + if (.not.associated(cur_data)) exit + count = count + 1 + + need_to_pack = .false. + do istage = 1, cur_data%num_em_stages + if (cur_data%em_stage_ids(istage) == em_stage) then + need_to_pack = .true. + exit + endif + enddo + + if (need_to_pack) then + + select case (cur_data%id) + + case (L2E_FLUX_NIMM_VERTICALLY_RESOLVED) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevdecomp_full + cur_data%data_real_2d(c,j) = actual_immob_vr(c,j) + enddo + enddo + cur_data%is_set = .true. + + case (L2E_FLUX_NIMP_VERTICALLY_RESOLVED) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevdecomp_full + cur_data%data_real_2d(c,j) = potential_immob_vr(c,j) + enddo + enddo + cur_data%is_set = .true. + + case (L2E_FLUX_NMIN_VERTICALLY_RESOLVED) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevdecomp_full + cur_data%data_real_2d(c,j) = gross_nmin_vr(c,j) + enddo + enddo + cur_data%is_set = .true. + + case (L2E_FLUX_PLANT_NDEMAND_VERTICALLY_RESOLVED) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevdecomp_full + cur_data%data_real_2d(c,j) = plant_ndemand_vr(c,j) + enddo + enddo + cur_data%is_set = .true. + + end select + + endif + + cur_data => cur_data%next + enddo + + end associate + + end subroutine EMI_Pack_CNNitrogenFluxType_at_Column_Level_for_EM + +!----------------------------------------------------------------------- + subroutine EMI_Unpack_CNNitrogenFluxType_at_Column_Level_from_EM(data_list, em_stage, & + num_filter, filter, col_nf) + ! + ! !DESCRIPTION: + ! Unpack data for ALM col_nf from EM + ! + ! !USES: + use elm_varpar , only : nlevdecomp_full + ! + implicit none + ! + ! !ARGUMENTS: + class(emi_data_list) , intent(in) :: data_list + integer , intent(in) :: em_stage + integer , intent(in) :: num_filter + integer , intent(in) :: filter(:) + type(column_nitrogen_flux) , intent(in) :: col_nf + ! + ! !LOCAL_VARIABLES: + integer :: fc,c,j,k + class(emi_data), pointer :: cur_data + logical :: need_to_pack + integer :: istage + integer :: count + + associate(& + actual_immob_vr => col_nf%actual_immob_vr , & + potential_immob_vr => col_nf%potential_immob_vr , & + gross_nmin_vr => col_nf%gross_nmin_vr , & + sminn_to_plant_vr => col_nf%sminn_to_plant_vr , & + smin_no3_to_plant_vr => col_nf%smin_no3_to_plant_vr , & + smin_nh4_to_plant_vr => col_nf%smin_nh4_to_plant_vr , & + smin_no3_runoff => col_nf%smin_no3_runoff , & + DON_runoff => col_nf%DON_runoff , & + f_n2o_soil => col_nf%f_n2o_soil , & + f_n2_soil => col_nf%f_n2_soil & + ) + + count = 0 + cur_data => data_list%first + do + if (.not.associated(cur_data)) exit + count = count + 1 + + need_to_pack = .false. + do istage = 1, cur_data%num_em_stages + if (cur_data%em_stage_ids(istage) == em_stage) then + need_to_pack = .true. + exit + endif + enddo + + if (need_to_pack) then + + select case (cur_data%id) + + case (E2L_FLUX_NIMM_VERTICALLY_RESOLVED) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevdecomp_full + actual_immob_vr(c,j) = cur_data%data_real_2d(c,j) + enddo + enddo + cur_data%is_set = .true. + + case (E2L_FLUX_NIMP_VERTICALLY_RESOLVED) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevdecomp_full + potential_immob_vr(c,j) = cur_data%data_real_2d(c,j) + enddo + enddo + cur_data%is_set = .true. + + case (E2L_FLUX_NMIN_VERTICALLY_RESOLVED) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevdecomp_full + gross_nmin_vr(c,j) = cur_data%data_real_2d(c,j) + enddo + enddo + cur_data%is_set = .true. + + case (E2L_FLUX_SMINN_TO_PLANT_VERTICALLY_RESOLVED) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevdecomp_full + sminn_to_plant_vr(c,j) = cur_data%data_real_2d(c,j) + enddo + enddo + cur_data%is_set = .true. + + case (E2L_FLUX_SMIN_NO3_TO_PLANT_VERTICALLY_RESOLVED) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevdecomp_full + smin_no3_to_plant_vr(c,j) = cur_data%data_real_2d(c,j) + enddo + enddo + cur_data%is_set = .true. + + case (E2L_FLUX_SMIN_NH4_TO_PLANT_VERTICALLY_RESOLVED) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevdecomp_full + smin_nh4_to_plant_vr(c,j) = cur_data%data_real_2d(c,j) + enddo + enddo + cur_data%is_set = .true. + + case (E2L_FLUX_NO3_RUNOFF) + do fc = 1, num_filter + c = filter(fc) + smin_no3_runoff(c) = cur_data%data_real_1d(c) + enddo + cur_data%is_set = .true. + + case (E2L_FLUX_DON_RUNOFF) + do fc = 1, num_filter + c = filter(fc) + DON_runoff(c) = cur_data%data_real_1d(c) + enddo + cur_data%is_set = .true. + + case (E2L_FLUX_N2O) + do fc = 1, num_filter + c = filter(fc) + f_n2o_soil(c) = cur_data%data_real_1d(c) + enddo + cur_data%is_set = .true. + + case (E2L_FLUX_N2) + do fc = 1, num_filter + c = filter(fc) + f_n2_soil(c) = cur_data%data_real_1d(c) + enddo + cur_data%is_set = .true. + + end select + + endif + + cur_data => cur_data%next + enddo + + end associate + + end subroutine EMI_Unpack_CNNitrogenFluxType_at_Column_Level_from_EM + + +end module EMI_CNNitrogenFluxType_ExchangeMod diff --git a/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_CNNitrogenStateType_ExchangeMod.F90 b/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_CNNitrogenStateType_ExchangeMod.F90 new file mode 100644 index 000000000000..00104d47de48 --- /dev/null +++ b/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_CNNitrogenStateType_ExchangeMod.F90 @@ -0,0 +1,251 @@ +module EMI_CNNitrogenStateType_ExchangeMod + ! + use shr_kind_mod , only : r8 => shr_kind_r8 + use shr_log_mod , only : errMsg => shr_log_errMsg + use abortutils , only : endrun + use elm_varctl , only : iulog + use EMI_DataMod , only : emi_data_list, emi_data + use EMI_DataDimensionMod , only : emi_data_dimension_list_type + use ColumnDataType , only : column_nitrogen_state + use EMI_Atm2LndType_Constants + use EMI_CanopyStateType_Constants + use EMI_ChemStateType_Constants + use EMI_CNCarbonStateType_Constants + use EMI_CNNitrogenStateType_Constants + use EMI_CNNitrogenFluxType_Constants + use EMI_CNCarbonFluxType_Constants + use EMI_ColumnEnergyStateType_Constants + use EMI_ColumnWaterStateType_Constants + use EMI_ColumnWaterFluxType_Constants + use EMI_EnergyFluxType_Constants + use EMI_SoilHydrologyType_Constants + use EMI_SoilStateType_Constants + use EMI_TemperatureType_Constants + use EMI_WaterFluxType_Constants + use EMI_WaterStateType_Constants + use EMI_Filter_Constants + use EMI_ColumnType_Constants + use EMI_Landunit_Constants + ! + implicit none + ! + ! + public :: EMI_Pack_CNNitrogenStateType_at_Column_Level_for_EM + public :: EMI_Unpack_CNNitrogenStateType_at_Column_Level_from_EM + +contains + +!----------------------------------------------------------------------- + subroutine EMI_Pack_CNNitrogenStateType_at_Column_Level_for_EM(data_list, em_stage, & + num_filter, filter, col_ns) + ! + ! !DESCRIPTION: + ! Pack data from ALM col_ns for EM + ! + ! !USES: + use elm_varpar , only : nlevdecomp_full + use elm_varpar , only : ndecomp_pools + ! + implicit none + ! + ! !ARGUMENTS: + class(emi_data_list) , intent(in) :: data_list + integer , intent(in) :: em_stage + integer , intent(in) :: num_filter + integer , intent(in) :: filter(:) + type(column_nitrogen_state) , intent(in) :: col_ns + ! + ! !LOCAL_VARIABLES: + integer :: fc,c,j,k + class(emi_data), pointer :: cur_data + logical :: need_to_pack + integer :: istage + integer :: count + + associate(& + decomp_npools_vr => col_ns%decomp_npools_vr , & + smin_nh4_vr => col_ns%smin_nh4_vr , & + smin_no3_vr => col_ns%smin_no3_vr & + ) + + count = 0 + cur_data => data_list%first + do + if (.not.associated(cur_data)) exit + count = count + 1 + + need_to_pack = .false. + do istage = 1, cur_data%num_em_stages + if (cur_data%em_stage_ids(istage) == em_stage) then + need_to_pack = .true. + exit + endif + enddo + + if (need_to_pack) then + + select case (cur_data%id) + + case (L2E_STATE_NITROGEN_POOLS_VERTICALLY_RESOLVED) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevdecomp_full + do k = 1, ndecomp_pools + cur_data%data_real_3d(c,j,k) = decomp_npools_vr(c,j,k) + enddo + enddo + enddo + cur_data%is_set = .true. + + case (L2E_STATE_NH4_VERTICALLY_RESOLVED) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevdecomp_full + cur_data%data_real_2d(c,j) = smin_nh4_vr(c,j) + enddo + enddo + cur_data%is_set = .true. + + case (L2E_STATE_NO3_VERTICALLY_RESOLVED) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevdecomp_full + cur_data%data_real_2d(c,j) = smin_no3_vr(c,j) + enddo + enddo + cur_data%is_set = .true. + + end select + + endif + + cur_data => cur_data%next + enddo + + end associate + + end subroutine EMI_Pack_CNNitrogenStateType_at_Column_Level_for_EM + +!----------------------------------------------------------------------- + subroutine EMI_Unpack_CNNitrogenStateType_at_Column_Level_from_EM(data_list, em_stage, & + num_filter, filter, col_ns) + ! + ! !DESCRIPTION: + ! Unpack data for ALM col_ns from EM + ! + ! !USES: + use elm_varpar , only : nlevdecomp_full + use elm_varpar , only : ndecomp_pools + ! + implicit none + ! + ! !ARGUMENTS: + class(emi_data_list) , intent(in) :: data_list + integer , intent(in) :: em_stage + integer , intent(in) :: num_filter + integer , intent(in) :: filter(:) + type(column_nitrogen_state) , intent(in) :: col_ns + ! + ! !LOCAL_VARIABLES: + integer :: fc,c,j,k + class(emi_data), pointer :: cur_data + logical :: need_to_pack + integer :: istage + integer :: count + + associate(& + decomp_npools_vr => col_ns%decomp_npools_vr , & + smin_nh4_vr => col_ns%smin_nh4_vr , & + smin_no3_vr => col_ns%smin_no3_vr , & + DON_vr => col_ns%DON_vr , & + N2O_vr => col_ns%N2O_vr , & + N2_vr => col_ns%N2_vr & + ) + + count = 0 + cur_data => data_list%first + do + if (.not.associated(cur_data)) exit + count = count + 1 + + need_to_pack = .false. + do istage = 1, cur_data%num_em_stages + if (cur_data%em_stage_ids(istage) == em_stage) then + need_to_pack = .true. + exit + endif + enddo + + if (need_to_pack) then + + select case (cur_data%id) + + case (E2L_STATE_NITROGEN_POOLS_VERTICALLY_RESOLVED) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevdecomp_full + do k = 1, ndecomp_pools + decomp_npools_vr(c,j,k) = cur_data%data_real_3d(c,j,k) + enddo + enddo + enddo + cur_data%is_set = .true. + + case (E2L_STATE_NH4_VERTICALLY_RESOLVED) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevdecomp_full + smin_nh4_vr(c,j) = cur_data%data_real_2d(c,j) + enddo + enddo + cur_data%is_set = .true. + + case (E2L_STATE_NO3_VERTICALLY_RESOLVED) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevdecomp_full + smin_no3_vr(c,j) = cur_data%data_real_2d(c,j) + enddo + enddo + cur_data%is_set = .true. + + case (E2L_STATE_DON_VERTICALLY_RESOLVED) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevdecomp_full + DON_vr(c,j) = cur_data%data_real_2d(c,j) + enddo + enddo + cur_data%is_set = .true. + + case (E2L_STATE_N2O_VERTICALLY_RESOLVED) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevdecomp_full + N2O_vr(c,j) = cur_data%data_real_2d(c,j) + enddo + enddo + cur_data%is_set = .true. + + case (E2L_STATE_N2_VERTICALLY_RESOLVED) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevdecomp_full + N2_vr(c,j) = cur_data%data_real_2d(c,j) + enddo + enddo + cur_data%is_set = .true. + + end select + + endif + + cur_data => cur_data%next + enddo + + end associate + + end subroutine EMI_Unpack_CNNitrogenStateType_at_Column_Level_from_EM + + +end module EMI_CNNitrogenStateType_ExchangeMod diff --git a/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_CanopyStateType_ExchangeMod.F90 b/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_CanopyStateType_ExchangeMod.F90 index e7a63aab6607..ebd24a73c09c 100644 --- a/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_CanopyStateType_ExchangeMod.F90 +++ b/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_CanopyStateType_ExchangeMod.F90 @@ -4,12 +4,19 @@ module EMI_CanopyStateType_ExchangeMod use shr_log_mod , only : errMsg => shr_log_errMsg use abortutils , only : endrun use elm_varctl , only : iulog - use EMI_DataMod , only : emi_data_list, emi_data - use EMI_DataDimensionMod , only : emi_data_dimension_list_type - use CanopyStateType , only : canopystate_type + use EMI_DataMod , only : emi_data_list, emi_data + use EMI_DataDimensionMod , only : emi_data_dimension_list_type + use CanopyStateType , only : canopystate_type use EMI_Atm2LndType_Constants use EMI_CanopyStateType_Constants use EMI_ChemStateType_Constants + use EMI_CNCarbonStateType_Constants + use EMI_CNNitrogenStateType_Constants + use EMI_CNNitrogenFluxType_Constants + use EMI_CNCarbonFluxType_Constants + use EMI_ColumnEnergyStateType_Constants + use EMI_ColumnWaterStateType_Constants + use EMI_ColumnWaterFluxType_Constants use EMI_EnergyFluxType_Constants use EMI_SoilHydrologyType_Constants use EMI_SoilStateType_Constants @@ -37,7 +44,6 @@ subroutine EMI_Pack_CanopyStateType_at_Column_Level_for_EM(data_list, em_stage, ! Pack data from ALM canopystate_vars for EM ! ! !USES: - use elm_varpar , only : nlevsoi, nlevgrnd, nlevsno ! implicit none ! @@ -49,15 +55,15 @@ subroutine EMI_Pack_CanopyStateType_at_Column_Level_for_EM(data_list, em_stage, type(canopystate_type) , intent(in) :: canopystate_vars ! ! !LOCAL_VARIABLES: - integer :: fc,c,j + integer :: fc,c,j,k class(emi_data), pointer :: cur_data logical :: need_to_pack integer :: istage integer :: count associate(& - altmax => canopystate_vars%altmax_col , & - altmax_lastyear => canopystate_vars%altmax_lastyear_col & + altmax_col => canopystate_vars%altmax_col , & + altmax_lastyear_col => canopystate_vars%altmax_lastyear_col & ) count = 0 @@ -81,14 +87,14 @@ subroutine EMI_Pack_CanopyStateType_at_Column_Level_for_EM(data_list, em_stage, case (L2E_STATE_ALTMAX) do fc = 1, num_filter c = filter(fc) - cur_data%data_real_1d(c) = altmax(c) + cur_data%data_real_1d(c) = altmax_col(c) enddo cur_data%is_set = .true. case (L2E_STATE_ALTMAX_LASTYEAR) do fc = 1, num_filter c = filter(fc) - cur_data%data_real_1d(c) = altmax_lastyear(c) + cur_data%data_real_1d(c) = altmax_lastyear_col(c) enddo cur_data%is_set = .true. @@ -111,7 +117,6 @@ subroutine EMI_Pack_CanopyStateType_at_Patch_Level_for_EM(data_list, em_stage, & ! Pack data from ALM canopystate_vars for EM ! ! !USES: - use elm_varpar , only : nlevsoi, nlevgrnd, nlevsno ! implicit none ! @@ -123,15 +128,15 @@ subroutine EMI_Pack_CanopyStateType_at_Patch_Level_for_EM(data_list, em_stage, & type(canopystate_type) , intent(in) :: canopystate_vars ! ! !LOCAL_VARIABLES: - integer :: fp,p,j + integer :: fp,p,j,k class(emi_data), pointer :: cur_data logical :: need_to_pack integer :: istage integer :: count associate(& - lbl_rsc_h2o => canopystate_vars%lbl_rsc_h2o_patch , & - elai => canopystate_vars%elai_patch & + lbl_rsc_h2o_patch => canopystate_vars%lbl_rsc_h2o_patch , & + elai_patch => canopystate_vars%elai_patch & ) count = 0 @@ -155,14 +160,14 @@ subroutine EMI_Pack_CanopyStateType_at_Patch_Level_for_EM(data_list, em_stage, & case (L2E_STATE_LBL_RSC_H2O) do fp = 1, num_filter p = filter(fp) - cur_data%data_real_1d(p) = lbl_rsc_h2o(p) + cur_data%data_real_1d(p) = lbl_rsc_h2o_patch(p) enddo cur_data%is_set = .true. case (L2E_STATE_ELAI) do fp = 1, num_filter p = filter(fp) - cur_data%data_real_1d(p) = elai(p) + cur_data%data_real_1d(p) = elai_patch(p) enddo cur_data%is_set = .true. @@ -185,7 +190,6 @@ subroutine EMI_Unpack_CanopyStateType_at_Patch_Level_from_EM(data_list, em_stage ! Unpack data for ALM canopystate_vars from EM ! ! !USES: - use elm_varpar , only : nlevsoi, nlevgrnd, nlevsno ! implicit none ! @@ -197,16 +201,16 @@ subroutine EMI_Unpack_CanopyStateType_at_Patch_Level_from_EM(data_list, em_stage type(canopystate_type) , intent(in) :: canopystate_vars ! ! !LOCAL_VARIABLES: - integer :: fp,p,j + integer :: fp,p,j,k class(emi_data), pointer :: cur_data logical :: need_to_pack integer :: istage integer :: count associate(& - fsun => canopystate_vars%fsun_patch , & - laisun => canopystate_vars%laisun_patch , & - laisha => canopystate_vars%laisha_patch & + fsun_patch => canopystate_vars%fsun_patch , & + laisun_patch => canopystate_vars%laisun_patch , & + laisha_patch => canopystate_vars%laisha_patch & ) count = 0 @@ -230,21 +234,21 @@ subroutine EMI_Unpack_CanopyStateType_at_Patch_Level_from_EM(data_list, em_stage case (E2L_STATE_FSUN) do fp = 1, num_filter p = filter(fp) - fsun(p) = cur_data%data_real_1d(p) + fsun_patch(p) = cur_data%data_real_1d(p) enddo cur_data%is_set = .true. case (E2L_STATE_LAISUN) do fp = 1, num_filter p = filter(fp) - laisun(p) = cur_data%data_real_1d(p) + laisun_patch(p) = cur_data%data_real_1d(p) enddo cur_data%is_set = .true. case (E2L_STATE_LAISHA) do fp = 1, num_filter p = filter(fp) - laisha(p) = cur_data%data_real_1d(p) + laisha_patch(p) = cur_data%data_real_1d(p) enddo cur_data%is_set = .true. diff --git a/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_ChemStateType_ExchangeMod.F90 b/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_ChemStateType_ExchangeMod.F90 index 47da9205f540..f17c5b5f6c24 100644 --- a/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_ChemStateType_ExchangeMod.F90 +++ b/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_ChemStateType_ExchangeMod.F90 @@ -4,12 +4,19 @@ module EMI_ChemStateType_ExchangeMod use shr_log_mod , only : errMsg => shr_log_errMsg use abortutils , only : endrun use elm_varctl , only : iulog - use EMI_DataMod , only : emi_data_list, emi_data - use EMI_DataDimensionMod , only : emi_data_dimension_list_type - use ChemStateType , only : chemstate_type + use EMI_DataMod , only : emi_data_list, emi_data + use EMI_DataDimensionMod , only : emi_data_dimension_list_type + use ColumnDataType , only : column_chem_state use EMI_Atm2LndType_Constants use EMI_CanopyStateType_Constants use EMI_ChemStateType_Constants + use EMI_CNCarbonStateType_Constants + use EMI_CNNitrogenStateType_Constants + use EMI_CNNitrogenFluxType_Constants + use EMI_CNCarbonFluxType_Constants + use EMI_ColumnEnergyStateType_Constants + use EMI_ColumnWaterStateType_Constants + use EMI_ColumnWaterFluxType_Constants use EMI_EnergyFluxType_Constants use EMI_SoilHydrologyType_Constants use EMI_SoilStateType_Constants @@ -24,37 +31,54 @@ module EMI_ChemStateType_ExchangeMod ! ! public :: EMI_Pack_ChemStateType_at_Column_Level_for_EM + public :: EMI_Unpack_ChemStateType_at_Column_Level_from_EM contains !----------------------------------------------------------------------- subroutine EMI_Pack_ChemStateType_at_Column_Level_for_EM(data_list, em_stage, & - num_filter, filter, chemstate_vars) + num_filter, filter, col_chem) ! ! !DESCRIPTION: - ! Pack data from ALM chemstate_vars for EM + ! Pack data from ALM col_chem for EM ! ! !USES: - use elm_varpar , only : nlevsoi, nlevgrnd, nlevsno + use elm_varpar , only : nlevsoi + use elm_varpar , only : alquimia_num_primary + use elm_varpar , only : alquimia_num_minerals + use elm_varpar , only : alquimia_num_surface_sites + use elm_varpar , only : alquimia_num_ion_exchange_sites + use elm_varpar , only : alquimia_num_aux_doubles + use elm_varpar , only : alquimia_num_aux_ints ! implicit none ! ! !ARGUMENTS: - class(emi_data_list) , intent(in) :: data_list - integer , intent(in) :: em_stage - integer , intent(in) :: num_filter - integer , intent(in) :: filter(:) - type(chemstate_type) , intent(in) :: chemstate_vars + class(emi_data_list) , intent(in) :: data_list + integer , intent(in) :: em_stage + integer , intent(in) :: num_filter + integer , intent(in) :: filter(:) + type(column_chem_state) , intent(in) :: col_chem ! ! !LOCAL_VARIABLES: - integer :: fc,c,j + integer :: fc,c,j,k class(emi_data), pointer :: cur_data logical :: need_to_pack integer :: istage integer :: count associate(& - soil => chemstate_vars%soil_ph & + soil_ph => col_chem%soil_ph , & + water_density => col_chem%water_density , & + aqueous_pressure => col_chem%aqueous_pressure , & + total_mobile => col_chem%total_mobile , & + total_immobile => col_chem%total_immobile , & + mineral_volume_fraction => col_chem%mineral_volume_fraction , & + mineral_specific_surface_area => col_chem%mineral_specific_surface_area , & + surface_site_density => col_chem%surface_site_density , & + cation_exchange_capacity => col_chem%cation_exchange_capacity , & + aux_doubles => col_chem%aux_doubles , & + aux_ints => col_chem%aux_ints & ) count = 0 @@ -79,7 +103,113 @@ subroutine EMI_Pack_ChemStateType_at_Column_Level_for_EM(data_list, em_stage, & do fc = 1, num_filter c = filter(fc) do j = 1, nlevsoi - cur_data%data_real_2d(c,j) = soil(c,j) + cur_data%data_real_2d(c,j) = soil_ph(c,j) + enddo + enddo + cur_data%is_set = .true. + + case (L2E_STATE_WATER_DENSITY) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevsoi + cur_data%data_real_2d(c,j) = water_density(c,j) + enddo + enddo + cur_data%is_set = .true. + + case (L2E_STATE_AQUEOUS_PRESSURE) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevsoi + cur_data%data_real_2d(c,j) = aqueous_pressure(c,j) + enddo + enddo + cur_data%is_set = .true. + + case (L2E_STATE_TOTAL_MOBILE) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevsoi + do k = 1, alquimia_num_primary + cur_data%data_real_3d(c,j,k) = total_mobile(c,j,k) + enddo + enddo + enddo + cur_data%is_set = .true. + + case (L2E_STATE_TOTAL_IMMOBILE) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevsoi + do k = 1, alquimia_num_primary + cur_data%data_real_3d(c,j,k) = total_immobile(c,j,k) + enddo + enddo + enddo + cur_data%is_set = .true. + + case (L2E_STATE_MINERAL_VOLUME_FRACTION) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevsoi + do k = 1, alquimia_num_minerals + cur_data%data_real_3d(c,j,k) = mineral_volume_fraction(c,j,k) + enddo + enddo + enddo + cur_data%is_set = .true. + + case (L2E_STATE_MINERAL_SPECIFIC_SURFACE_AREA) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevsoi + do k = 1, alquimia_num_minerals + cur_data%data_real_3d(c,j,k) = mineral_specific_surface_area(c,j,k) + enddo + enddo + enddo + cur_data%is_set = .true. + + case (L2E_STATE_SURFACE_SITE_DENSITY) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevsoi + do k = 1, alquimia_num_surface_sites + cur_data%data_real_3d(c,j,k) = surface_site_density(c,j,k) + enddo + enddo + enddo + cur_data%is_set = .true. + + case (L2E_STATE_CATION_EXCHANGE_CAPACITY) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevsoi + do k = 1, alquimia_num_ion_exchange_sites + cur_data%data_real_3d(c,j,k) = cation_exchange_capacity(c,j,k) + enddo + enddo + enddo + cur_data%is_set = .true. + + case (L2E_STATE_AUX_DOUBLES) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevsoi + do k = 1, alquimia_num_aux_doubles + cur_data%data_real_3d(c,j,k) = aux_doubles(c,j,k) + enddo + enddo + enddo + cur_data%is_set = .true. + + case (L2E_STATE_AUX_INTS) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevsoi + do k = 1, alquimia_num_aux_ints + cur_data%data_int_3d(c,j,k) = aux_ints(c,j,k) + enddo enddo enddo cur_data%is_set = .true. @@ -95,5 +225,283 @@ subroutine EMI_Pack_ChemStateType_at_Column_Level_for_EM(data_list, em_stage, & end subroutine EMI_Pack_ChemStateType_at_Column_Level_for_EM +!----------------------------------------------------------------------- + subroutine EMI_Unpack_ChemStateType_at_Column_Level_from_EM(data_list, em_stage, & + num_filter, filter, col_chem) + ! + ! !DESCRIPTION: + ! Unpack data for ALM col_chem from EM + ! + ! !USES: + use elm_varpar , only : nlevsoi + use elm_varpar , only : alquimia_num_primary + use elm_varpar , only : alquimia_num_minerals + use elm_varpar , only : alquimia_num_surface_sites + use elm_varpar , only : alquimia_num_ion_exchange_sites + use elm_varpar , only : alquimia_num_aux_doubles + use elm_varpar , only : alquimia_num_aux_ints + ! + implicit none + ! + ! !ARGUMENTS: + class(emi_data_list) , intent(in) :: data_list + integer , intent(in) :: em_stage + integer , intent(in) :: num_filter + integer , intent(in) :: filter(:) + type(column_chem_state) , intent(in) :: col_chem + ! + ! !LOCAL_VARIABLES: + integer :: fc,c,j,k + class(emi_data), pointer :: cur_data + logical :: need_to_pack + integer :: istage + integer :: count + + associate(& + soil_ph => col_chem%soil_ph , & + soil_salinity => col_chem%soil_salinity , & + soil_O2 => col_chem%soil_O2 , & + soil_sulfate => col_chem%soil_sulfate , & + soil_sulfide => col_chem%soil_sulfide , & + soil_Fe2 => col_chem%soil_Fe2 , & + soil_FeOxide => col_chem%soil_FeOxide , & + soil_FeS => col_chem%soil_FeS , & + soil_acetate => col_chem%soil_acetate , & + water_density => col_chem%water_density , & + aqueous_pressure => col_chem%aqueous_pressure , & + total_mobile => col_chem%total_mobile , & + total_immobile => col_chem%total_immobile , & + mineral_volume_fraction => col_chem%mineral_volume_fraction , & + mineral_specific_surface_area => col_chem%mineral_specific_surface_area , & + surface_site_density => col_chem%surface_site_density , & + cation_exchange_capacity => col_chem%cation_exchange_capacity , & + aux_doubles => col_chem%aux_doubles , & + aux_ints => col_chem%aux_ints , & + chem_dt => col_chem%chem_dt & + ) + + count = 0 + cur_data => data_list%first + do + if (.not.associated(cur_data)) exit + count = count + 1 + + need_to_pack = .false. + do istage = 1, cur_data%num_em_stages + if (cur_data%em_stage_ids(istage) == em_stage) then + need_to_pack = .true. + exit + endif + enddo + + if (need_to_pack) then + + select case (cur_data%id) + + case (E2L_STATE_SOIL_PH) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevsoi + soil_ph(c,j) = cur_data%data_real_2d(c,j) + enddo + enddo + cur_data%is_set = .true. + + case (E2L_STATE_SOIL_SALINITY) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevsoi + soil_salinity(c,j) = cur_data%data_real_2d(c,j) + enddo + enddo + cur_data%is_set = .true. + + case (E2L_STATE_SOIL_O2) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevsoi + soil_O2(c,j) = cur_data%data_real_2d(c,j) + enddo + enddo + cur_data%is_set = .true. + + case (E2L_STATE_SOIL_SULFATE) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevsoi + soil_sulfate(c,j) = cur_data%data_real_2d(c,j) + enddo + enddo + cur_data%is_set = .true. + + case (E2L_STATE_SOIL_SULFIDE) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevsoi + soil_sulfide(c,j) = cur_data%data_real_2d(c,j) + enddo + enddo + cur_data%is_set = .true. + + case (E2L_STATE_SOIL_FE2) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevsoi + soil_Fe2(c,j) = cur_data%data_real_2d(c,j) + enddo + enddo + cur_data%is_set = .true. + + case (E2L_STATE_SOIL_FE_OXIDE) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevsoi + soil_FeOxide(c,j) = cur_data%data_real_2d(c,j) + enddo + enddo + cur_data%is_set = .true. + + case (E2L_STATE_SOIL_FE_SULFIDE) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevsoi + soil_FeS(c,j) = cur_data%data_real_2d(c,j) + enddo + enddo + cur_data%is_set = .true. + + case (E2L_STATE_SOIL_ACETATE) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevsoi + soil_acetate(c,j) = cur_data%data_real_2d(c,j) + enddo + enddo + cur_data%is_set = .true. + + case (E2L_STATE_WATER_DENSITY) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevsoi + water_density(c,j) = cur_data%data_real_2d(c,j) + enddo + enddo + cur_data%is_set = .true. + + case (E2L_STATE_AQUEOUS_PRESSURE) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevsoi + aqueous_pressure(c,j) = cur_data%data_real_2d(c,j) + enddo + enddo + cur_data%is_set = .true. + + case (E2L_STATE_TOTAL_MOBILE) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevsoi + do k = 1, alquimia_num_primary + total_mobile(c,j,k) = cur_data%data_real_3d(c,j,k) + enddo + enddo + enddo + cur_data%is_set = .true. + + case (E2L_STATE_TOTAL_IMMOBILE) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevsoi + do k = 1, alquimia_num_primary + total_immobile(c,j,k) = cur_data%data_real_3d(c,j,k) + enddo + enddo + enddo + cur_data%is_set = .true. + + case (E2L_STATE_MINERAL_VOLUME_FRACTION) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevsoi + do k = 1, alquimia_num_minerals + mineral_volume_fraction(c,j,k) = cur_data%data_real_3d(c,j,k) + enddo + enddo + enddo + cur_data%is_set = .true. + + case (E2L_STATE_MINERAL_SPECIFIC_SURFACE_AREA) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevsoi + do k = 1, alquimia_num_minerals + mineral_specific_surface_area(c,j,k) = cur_data%data_real_3d(c,j,k) + enddo + enddo + enddo + cur_data%is_set = .true. + + case (E2L_STATE_SURFACE_SITE_DENSITY) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevsoi + do k = 1, alquimia_num_surface_sites + surface_site_density(c,j,k) = cur_data%data_real_3d(c,j,k) + enddo + enddo + enddo + cur_data%is_set = .true. + + case (E2L_STATE_CATION_EXCHANGE_CAPACITY) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevsoi + do k = 1, alquimia_num_ion_exchange_sites + cation_exchange_capacity(c,j,k) = cur_data%data_real_3d(c,j,k) + enddo + enddo + enddo + cur_data%is_set = .true. + + case (E2L_STATE_AUX_DOUBLES) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevsoi + do k = 1, alquimia_num_aux_doubles + aux_doubles(c,j,k) = cur_data%data_real_3d(c,j,k) + enddo + enddo + enddo + cur_data%is_set = .true. + + case (E2L_STATE_AUX_INTS) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevsoi + do k = 1, alquimia_num_aux_ints + aux_ints(c,j,k) = cur_data%data_int_3d(c,j,k) + enddo + enddo + enddo + cur_data%is_set = .true. + + case (E2L_STATE_CHEM_DT) + do fc = 1, num_filter + c = filter(fc) + chem_dt(c) = cur_data%data_real_1d(c) + enddo + cur_data%is_set = .true. + + end select + + endif + + cur_data => cur_data%next + enddo + + end associate + + end subroutine EMI_Unpack_ChemStateType_at_Column_Level_from_EM + end module EMI_ChemStateType_ExchangeMod diff --git a/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_ColumnEnergyStateType_ExchangeMod.F90 b/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_ColumnEnergyStateType_ExchangeMod.F90 new file mode 100644 index 000000000000..50d7d998df30 --- /dev/null +++ b/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_ColumnEnergyStateType_ExchangeMod.F90 @@ -0,0 +1,229 @@ +module EMI_ColumnEnergyStateType_ExchangeMod + ! + use shr_kind_mod , only : r8 => shr_kind_r8 + use shr_log_mod , only : errMsg => shr_log_errMsg + use abortutils , only : endrun + use elm_varctl , only : iulog + use EMI_DataMod , only : emi_data_list, emi_data + use EMI_DataDimensionMod , only : emi_data_dimension_list_type + use ColumnDataType , only : column_energy_state + use EMI_Atm2LndType_Constants + use EMI_CanopyStateType_Constants + use EMI_ChemStateType_Constants + use EMI_CNCarbonStateType_Constants + use EMI_CNNitrogenStateType_Constants + use EMI_CNNitrogenFluxType_Constants + use EMI_CNCarbonFluxType_Constants + use EMI_ColumnEnergyStateType_Constants + use EMI_ColumnWaterStateType_Constants + use EMI_ColumnWaterFluxType_Constants + use EMI_EnergyFluxType_Constants + use EMI_SoilHydrologyType_Constants + use EMI_SoilStateType_Constants + use EMI_TemperatureType_Constants + use EMI_WaterFluxType_Constants + use EMI_WaterStateType_Constants + use EMI_Filter_Constants + use EMI_ColumnType_Constants + use EMI_Landunit_Constants + ! + implicit none + ! + ! + public :: EMI_Pack_ColumnEnergyStateType_at_Column_Level_for_EM + public :: EMI_Unpack_ColumnEnergyStateType_at_Column_Level_from_EM + +contains + +!----------------------------------------------------------------------- + subroutine EMI_Pack_ColumnEnergyStateType_at_Column_Level_for_EM(data_list, em_stage, & + num_filter, filter, col_es) + ! + ! !DESCRIPTION: + ! Pack data from ALM col_es for EM + ! + ! !USES: + use elm_varpar , only : nlevgrnd + use elm_varpar , only : nlevsno + use elm_varpar , only : nlevsoi + ! + implicit none + ! + ! !ARGUMENTS: + class(emi_data_list) , intent(in) :: data_list + integer , intent(in) :: em_stage + integer , intent(in) :: num_filter + integer , intent(in) :: filter(:) + type(column_energy_state) , intent(in) :: col_es + ! + ! !LOCAL_VARIABLES: + integer :: fc,c,j,k + class(emi_data), pointer :: cur_data + logical :: need_to_pack + integer :: istage + integer :: count + + associate(& + t_soisno => col_es%t_soisno , & + t_h2osfc => col_es%t_h2osfc , & + t_soi10cm => col_es%t_soi10cm & + ) + + count = 0 + cur_data => data_list%first + do + if (.not.associated(cur_data)) exit + count = count + 1 + + need_to_pack = .false. + do istage = 1, cur_data%num_em_stages + if (cur_data%em_stage_ids(istage) == em_stage) then + need_to_pack = .true. + exit + endif + enddo + + if (need_to_pack) then + + select case (cur_data%id) + + case (L2E_STATE_TSOIL_NLEVGRND_COL) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevgrnd + cur_data%data_real_2d(c,j) = t_soisno(c,j) + enddo + enddo + cur_data%is_set = .true. + + case (L2E_STATE_TSNOW_COL) + do fc = 1, num_filter + c = filter(fc) + do j = -nlevsno + 1, 0 + cur_data%data_real_2d(c,j) = t_soisno(c,j) + enddo + enddo + cur_data%is_set = .true. + + case (L2E_STATE_TH2OSFC_COL) + do fc = 1, num_filter + c = filter(fc) + cur_data%data_real_1d(c) = t_h2osfc(c) + enddo + cur_data%is_set = .true. + + case (L2E_STATE_TSOI10CM_COL) + do fc = 1, num_filter + c = filter(fc) + cur_data%data_real_1d(c) = t_soi10cm(c) + enddo + cur_data%is_set = .true. + + case (L2E_STATE_TSOIL_NLEVSOI_COL) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevsoi + cur_data%data_real_2d(c,j) = t_soisno(c,j) + enddo + enddo + cur_data%is_set = .true. + + end select + + endif + + cur_data => cur_data%next + enddo + + end associate + + end subroutine EMI_Pack_ColumnEnergyStateType_at_Column_Level_for_EM + +!----------------------------------------------------------------------- + subroutine EMI_Unpack_ColumnEnergyStateType_at_Column_Level_from_EM(data_list, em_stage, & + num_filter, filter, col_es) + ! + ! !DESCRIPTION: + ! Unpack data for ALM col_es from EM + ! + ! !USES: + use elm_varpar , only : nlevgrnd + use elm_varpar , only : nlevsno + ! + implicit none + ! + ! !ARGUMENTS: + class(emi_data_list) , intent(in) :: data_list + integer , intent(in) :: em_stage + integer , intent(in) :: num_filter + integer , intent(in) :: filter(:) + type(column_energy_state) , intent(in) :: col_es + ! + ! !LOCAL_VARIABLES: + integer :: fc,c,j,k + class(emi_data), pointer :: cur_data + logical :: need_to_pack + integer :: istage + integer :: count + + associate(& + t_soisno => col_es%t_soisno , & + t_h2osfc => col_es%t_h2osfc & + ) + + count = 0 + cur_data => data_list%first + do + if (.not.associated(cur_data)) exit + count = count + 1 + + need_to_pack = .false. + do istage = 1, cur_data%num_em_stages + if (cur_data%em_stage_ids(istage) == em_stage) then + need_to_pack = .true. + exit + endif + enddo + + if (need_to_pack) then + + select case (cur_data%id) + + case (E2L_STATE_TSOIL_NLEVGRND_COL) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevgrnd + t_soisno(c,j) = cur_data%data_real_2d(c,j) + enddo + enddo + cur_data%is_set = .true. + + case (E2L_STATE_TSNOW_NLEVSNOW_COL) + do fc = 1, num_filter + c = filter(fc) + do j = -nlevsno + 1, 0 + t_soisno(c,j) = cur_data%data_real_2d(c,j) + enddo + enddo + cur_data%is_set = .true. + + case (E2L_STATE_TH2OSFC_COL) + do fc = 1, num_filter + c = filter(fc) + t_h2osfc(c) = cur_data%data_real_1d(c) + enddo + cur_data%is_set = .true. + + end select + + endif + + cur_data => cur_data%next + enddo + + end associate + + end subroutine EMI_Unpack_ColumnEnergyStateType_at_Column_Level_from_EM + + +end module EMI_ColumnEnergyStateType_ExchangeMod diff --git a/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_ColumnWaterFluxType_ExchangeMod.F90 b/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_ColumnWaterFluxType_ExchangeMod.F90 new file mode 100644 index 000000000000..fe27b4132a8c --- /dev/null +++ b/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_ColumnWaterFluxType_ExchangeMod.F90 @@ -0,0 +1,124 @@ +module EMI_ColumnWaterFluxType_ExchangeMod + ! + use shr_kind_mod , only : r8 => shr_kind_r8 + use shr_log_mod , only : errMsg => shr_log_errMsg + use abortutils , only : endrun + use elm_varctl , only : iulog + use EMI_DataMod , only : emi_data_list, emi_data + use EMI_DataDimensionMod , only : emi_data_dimension_list_type + use ColumnDataType , only : column_water_flux + use EMI_Atm2LndType_Constants + use EMI_CanopyStateType_Constants + use EMI_ChemStateType_Constants + use EMI_CNCarbonStateType_Constants + use EMI_CNNitrogenStateType_Constants + use EMI_CNNitrogenFluxType_Constants + use EMI_CNCarbonFluxType_Constants + use EMI_ColumnEnergyStateType_Constants + use EMI_ColumnWaterStateType_Constants + use EMI_ColumnWaterFluxType_Constants + use EMI_EnergyFluxType_Constants + use EMI_SoilHydrologyType_Constants + use EMI_SoilStateType_Constants + use EMI_TemperatureType_Constants + use EMI_WaterFluxType_Constants + use EMI_WaterStateType_Constants + use EMI_Filter_Constants + use EMI_ColumnType_Constants + use EMI_Landunit_Constants + ! + implicit none + ! + ! + public :: EMI_Pack_ColumnWaterFluxType_at_Column_Level_for_EM + +contains + +!----------------------------------------------------------------------- + subroutine EMI_Pack_ColumnWaterFluxType_at_Column_Level_for_EM(data_list, em_stage, & + num_filter, filter, col_wf) + ! + ! !DESCRIPTION: + ! Pack data from ALM col_wf for EM + ! + ! !USES: + use elm_varpar , only : nlevgrnd + ! + implicit none + ! + ! !ARGUMENTS: + class(emi_data_list) , intent(in) :: data_list + integer , intent(in) :: em_stage + integer , intent(in) :: num_filter + integer , intent(in) :: filter(:) + type(column_water_flux) , intent(in) :: col_wf + ! + ! !LOCAL_VARIABLES: + integer :: fc,c,j,k + class(emi_data), pointer :: cur_data + logical :: need_to_pack + integer :: istage + integer :: count + + associate(& + qflx_adv => col_wf%qflx_adv , & + qflx_drain => col_wf%qflx_drain , & + qflx_drain_vr => col_wf%qflx_drain_vr & + ) + + count = 0 + cur_data => data_list%first + do + if (.not.associated(cur_data)) exit + count = count + 1 + + need_to_pack = .false. + do istage = 1, cur_data%num_em_stages + if (cur_data%em_stage_ids(istage) == em_stage) then + need_to_pack = .true. + exit + endif + enddo + + if (need_to_pack) then + + select case (cur_data%id) + + case (L2E_FLUX_SOIL_QFLX_ADV_COL) + do fc = 1, num_filter + c = filter(fc) + do j = 0, nlevgrnd + cur_data%data_real_2d(c,j) = qflx_adv(c,j) + enddo + enddo + cur_data%is_set = .true. + + case (L2E_FLUX_SOIL_QFLX_DRAIN) + do fc = 1, num_filter + c = filter(fc) + cur_data%data_real_1d(c) = qflx_drain(c) + enddo + cur_data%is_set = .true. + + case (L2E_FLUX_SOIL_QFLX_DRAIN_VR) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevgrnd + cur_data%data_real_2d(c,j) = qflx_drain_vr(c,j) + enddo + enddo + cur_data%is_set = .true. + + end select + + endif + + cur_data => cur_data%next + enddo + + end associate + + end subroutine EMI_Pack_ColumnWaterFluxType_at_Column_Level_for_EM + + +end module EMI_ColumnWaterFluxType_ExchangeMod diff --git a/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_ColumnWaterStateType_ExchangeMod.F90 b/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_ColumnWaterStateType_ExchangeMod.F90 new file mode 100644 index 000000000000..d38a204764a0 --- /dev/null +++ b/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_ColumnWaterStateType_ExchangeMod.F90 @@ -0,0 +1,124 @@ +module EMI_ColumnWaterStateType_ExchangeMod + ! + use shr_kind_mod , only : r8 => shr_kind_r8 + use shr_log_mod , only : errMsg => shr_log_errMsg + use abortutils , only : endrun + use elm_varctl , only : iulog + use EMI_DataMod , only : emi_data_list, emi_data + use EMI_DataDimensionMod , only : emi_data_dimension_list_type + use ColumnDataType , only : column_water_state + use EMI_Atm2LndType_Constants + use EMI_CanopyStateType_Constants + use EMI_ChemStateType_Constants + use EMI_CNCarbonStateType_Constants + use EMI_CNNitrogenStateType_Constants + use EMI_CNNitrogenFluxType_Constants + use EMI_CNCarbonFluxType_Constants + use EMI_ColumnEnergyStateType_Constants + use EMI_ColumnWaterStateType_Constants + use EMI_ColumnWaterFluxType_Constants + use EMI_EnergyFluxType_Constants + use EMI_SoilHydrologyType_Constants + use EMI_SoilStateType_Constants + use EMI_TemperatureType_Constants + use EMI_WaterFluxType_Constants + use EMI_WaterStateType_Constants + use EMI_Filter_Constants + use EMI_ColumnType_Constants + use EMI_Landunit_Constants + ! + implicit none + ! + ! + public :: EMI_Pack_ColumnWaterStateType_at_Column_Level_for_EM + +contains + +!----------------------------------------------------------------------- + subroutine EMI_Pack_ColumnWaterStateType_at_Column_Level_for_EM(data_list, em_stage, & + num_filter, filter, col_ws) + ! + ! !DESCRIPTION: + ! Pack data from ALM col_ws for EM + ! + ! !USES: + use elm_varpar , only : nlevgrnd + ! + implicit none + ! + ! !ARGUMENTS: + class(emi_data_list) , intent(in) :: data_list + integer , intent(in) :: em_stage + integer , intent(in) :: num_filter + integer , intent(in) :: filter(:) + type(column_water_state) , intent(in) :: col_ws + ! + ! !LOCAL_VARIABLES: + integer :: fc,c,j,k + class(emi_data), pointer :: cur_data + logical :: need_to_pack + integer :: istage + integer :: count + + associate(& + h2osoi_liqvol => col_ws%h2osoi_liqvol , & + h2osoi_icevol => col_ws%h2osoi_icevol , & + h2osfc => col_ws%h2osfc & + ) + + count = 0 + cur_data => data_list%first + do + if (.not.associated(cur_data)) exit + count = count + 1 + + need_to_pack = .false. + do istage = 1, cur_data%num_em_stages + if (cur_data%em_stage_ids(istage) == em_stage) then + need_to_pack = .true. + exit + endif + enddo + + if (need_to_pack) then + + select case (cur_data%id) + + case (L2E_STATE_SOIL_LIQ_VOL_COL) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevgrnd + cur_data%data_real_2d(c,j) = h2osoi_liqvol(c,j) + enddo + enddo + cur_data%is_set = .true. + + case (L2E_STATE_SOIL_ICE_VOL_COL) + do fc = 1, num_filter + c = filter(fc) + do j = 1, nlevgrnd + cur_data%data_real_2d(c,j) = h2osoi_icevol(c,j) + enddo + enddo + cur_data%is_set = .true. + + case (L2E_STATE_H2OSFC_COL) + do fc = 1, num_filter + c = filter(fc) + cur_data%data_real_1d(c) = h2osfc(c) + enddo + cur_data%is_set = .true. + + end select + + endif + + cur_data => cur_data%next + enddo + + end associate + + end subroutine EMI_Pack_ColumnWaterStateType_at_Column_Level_for_EM + + +end module EMI_ColumnWaterStateType_ExchangeMod diff --git a/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_EnergyFluxType_ExchangeMod.F90 b/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_EnergyFluxType_ExchangeMod.F90 index 5f31b6dce78a..9a38181609f4 100644 --- a/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_EnergyFluxType_ExchangeMod.F90 +++ b/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_EnergyFluxType_ExchangeMod.F90 @@ -6,11 +6,17 @@ module EMI_EnergyFluxType_ExchangeMod use elm_varctl , only : iulog use EMI_DataMod , only : emi_data_list, emi_data use EMI_DataDimensionMod , only : emi_data_dimension_list_type - use EnergyFluxType , only : energyflux_type - use ColumnDataType , only : col_ef + use EnergyFluxType , only : energyflux_type use EMI_Atm2LndType_Constants use EMI_CanopyStateType_Constants use EMI_ChemStateType_Constants + use EMI_CNCarbonStateType_Constants + use EMI_CNNitrogenStateType_Constants + use EMI_CNNitrogenFluxType_Constants + use EMI_CNCarbonFluxType_Constants + use EMI_ColumnEnergyStateType_Constants + use EMI_ColumnWaterStateType_Constants + use EMI_ColumnWaterFluxType_Constants use EMI_EnergyFluxType_Constants use EMI_SoilHydrologyType_Constants use EMI_SoilStateType_Constants @@ -36,7 +42,7 @@ subroutine EMI_Pack_EnergyFluxType_at_Column_Level_for_EM(data_list, em_stage, & ! Pack data from ALM energyflux_vars for EM ! ! !USES: - use elm_varpar , only : nlevsoi, nlevgrnd, nlevsno + use elm_varpar , only : nlevsno ! implicit none ! @@ -48,18 +54,18 @@ subroutine EMI_Pack_EnergyFluxType_at_Column_Level_for_EM(data_list, em_stage, & type(energyflux_type) , intent(in) :: energyflux_vars ! ! !LOCAL_VARIABLES: - integer :: fc,c,j + integer :: fc,c,j,k class(emi_data), pointer :: cur_data logical :: need_to_pack integer :: istage integer :: count associate(& - eflx_sabg_lyr => col_ef%eflx_sabg_lyr , & - eflx_hs_soil => col_ef%eflx_hs_soil , & - eflx_hs_top_snow => col_ef%eflx_hs_top_snow , & - eflx_hs_h2osfc => col_ef%eflx_hs_h2osfc , & - eflx_dhsdT => col_ef%eflx_dhsdT & + eflx_sabg_lyr_col => energyflux_vars%eflx_sabg_lyr_col , & + eflx_hs_soil_col => energyflux_vars%eflx_hs_soil_col , & + eflx_hs_top_snow_col => energyflux_vars%eflx_hs_top_snow_col , & + eflx_hs_h2osfc_col => energyflux_vars%eflx_hs_h2osfc_col , & + eflx_dhsdT_col => energyflux_vars%eflx_dhsdT_col & ) count = 0 @@ -84,7 +90,7 @@ subroutine EMI_Pack_EnergyFluxType_at_Column_Level_for_EM(data_list, em_stage, & do fc = 1, num_filter c = filter(fc) do j = -nlevsno+1, 1 - cur_data%data_real_2d(c,j) = eflx_sabg_lyr(c,j) + cur_data%data_real_2d(c,j) = eflx_sabg_lyr_col(c,j) enddo enddo cur_data%is_set = .true. @@ -92,28 +98,28 @@ subroutine EMI_Pack_EnergyFluxType_at_Column_Level_for_EM(data_list, em_stage, & case (L2E_FLUX_SOIL_HEAT_FLUX) do fc = 1, num_filter c = filter(fc) - cur_data%data_real_1d(c) = eflx_hs_soil(c) + cur_data%data_real_1d(c) = eflx_hs_soil_col(c) enddo cur_data%is_set = .true. case (L2E_FLUX_SNOW_HEAT_FLUX) do fc = 1, num_filter c = filter(fc) - cur_data%data_real_1d(c) = eflx_hs_top_snow(c) + cur_data%data_real_1d(c) = eflx_hs_top_snow_col(c) enddo cur_data%is_set = .true. case (L2E_FLUX_H2OSFC_HEAT_FLUX) do fc = 1, num_filter c = filter(fc) - cur_data%data_real_1d(c) = eflx_hs_h2osfc(c) + cur_data%data_real_1d(c) = eflx_hs_h2osfc_col(c) enddo cur_data%is_set = .true. case (L2E_FLUX_DERIVATIVE_OF_HEAT_FLUX) do fc = 1, num_filter c = filter(fc) - cur_data%data_real_1d(c) = eflx_dhsdT(c) + cur_data%data_real_1d(c) = eflx_dhsdT_col(c) enddo cur_data%is_set = .true. diff --git a/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_Filter_ExchangeMod.F90 b/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_Filter_ExchangeMod.F90 index c41de1016056..8b6ab7592aef 100644 --- a/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_Filter_ExchangeMod.F90 +++ b/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_Filter_ExchangeMod.F90 @@ -52,13 +52,13 @@ subroutine EMI_Pack_Filter_for_EM(data_list, em_stage, & select case (cur_data%id) - case (L2E_FILTER_HYDROLOGYC, L2E_FILTER_NOLAKEC, L2E_FILTER_NOLAKEC_AND_NOURBANC) + case (L2E_FILTER_HYDROLOGYC, L2E_FILTER_NOLAKEC, L2E_FILTER_NOLAKEC_AND_NOURBANC, L2E_FILTER_SOILC) do i = 1, num_filter cur_data%data_int_1d(i) = filter(i) enddo cur_data%is_set = .true. - case (L2E_FILTER_NUM_HYDROLOGYC, L2E_FILTER_NUM_NOLAKEC, L2E_FILTER_NUM_NOLAKEC_AND_NOURBANC) + case (L2E_FILTER_NUM_HYDROLOGYC, L2E_FILTER_NUM_NOLAKEC, L2E_FILTER_NUM_NOLAKEC_AND_NOURBANC, L2E_FILTER_NUM_SOILC) cur_data%data_int_1d(1) = num_filter cur_data%is_set = .true. diff --git a/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_SoilHydrologyType_ExchangeMod.F90 b/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_SoilHydrologyType_ExchangeMod.F90 index 84c32c7d3353..126dd6a60a0c 100644 --- a/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_SoilHydrologyType_ExchangeMod.F90 +++ b/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_SoilHydrologyType_ExchangeMod.F90 @@ -4,12 +4,19 @@ module EMI_SoilHydrologyType_ExchangeMod use shr_log_mod , only : errMsg => shr_log_errMsg use abortutils , only : endrun use elm_varctl , only : iulog - use EMI_DataMod , only : emi_data_list, emi_data - use EMI_DataDimensionMod , only : emi_data_dimension_list_type - use SoilHydrologyType , only : soilhydrology_type + use EMI_DataMod , only : emi_data_list, emi_data + use EMI_DataDimensionMod , only : emi_data_dimension_list_type + use SoilHydrologyType , only : soilhydrology_type use EMI_Atm2LndType_Constants use EMI_CanopyStateType_Constants use EMI_ChemStateType_Constants + use EMI_CNCarbonStateType_Constants + use EMI_CNNitrogenStateType_Constants + use EMI_CNNitrogenFluxType_Constants + use EMI_CNCarbonFluxType_Constants + use EMI_ColumnEnergyStateType_Constants + use EMI_ColumnWaterStateType_Constants + use EMI_ColumnWaterFluxType_Constants use EMI_EnergyFluxType_Constants use EMI_SoilHydrologyType_Constants use EMI_SoilStateType_Constants @@ -36,7 +43,7 @@ subroutine EMI_Pack_SoilHydrologyType_at_Column_Level_for_EM(data_list, em_stage ! Pack data from ALM soilhydrology_vars for EM ! ! !USES: - use elm_varpar , only : nlevsoi, nlevgrnd, nlevsno + use elm_varpar , only : nlevgrnd ! implicit none ! @@ -48,16 +55,16 @@ subroutine EMI_Pack_SoilHydrologyType_at_Column_Level_for_EM(data_list, em_stage type(soilhydrology_type) , intent(in) :: soilhydrology_vars ! ! !LOCAL_VARIABLES: - integer :: fc,c,j + integer :: fc,c,j,k class(emi_data), pointer :: cur_data logical :: need_to_pack integer :: istage integer :: count associate(& - zwt => soilhydrology_vars%zwt_col , & - qflx_bot => soilhydrology_vars%qflx_bot_col , & - fracice => soilhydrology_vars%fracice_col & + zwt_col => soilhydrology_vars%zwt_col , & + qflx_bot_col => soilhydrology_vars%qflx_bot_col , & + fracice_col => soilhydrology_vars%fracice_col & ) count = 0 @@ -81,14 +88,14 @@ subroutine EMI_Pack_SoilHydrologyType_at_Column_Level_for_EM(data_list, em_stage case (L2E_STATE_WTD) do fc = 1, num_filter c = filter(fc) - cur_data%data_real_1d(c) = zwt(c) + cur_data%data_real_1d(c) = zwt_col(c) enddo cur_data%is_set = .true. case (L2E_STATE_QCHARGE) do fc = 1, num_filter c = filter(fc) - cur_data%data_real_1d(c) = qflx_bot(c) + cur_data%data_real_1d(c) = qflx_bot_col(c) enddo cur_data%is_set = .true. @@ -96,7 +103,7 @@ subroutine EMI_Pack_SoilHydrologyType_at_Column_Level_for_EM(data_list, em_stage do fc = 1, num_filter c = filter(fc) do j = 1, nlevgrnd - cur_data%data_real_2d(c,j) = fracice(c,j) + cur_data%data_real_2d(c,j) = fracice_col(c,j) enddo enddo cur_data%is_set = .true. @@ -120,7 +127,6 @@ subroutine EMI_Unpack_SoilHydrologyType_at_Column_Level_from_EM(data_list, em_st ! Unpack data for ALM soilhydrology_vars from EM ! ! !USES: - use elm_varpar , only : nlevsoi, nlevgrnd, nlevsno ! implicit none ! @@ -132,15 +138,15 @@ subroutine EMI_Unpack_SoilHydrologyType_at_Column_Level_from_EM(data_list, em_st type(soilhydrology_type) , intent(in) :: soilhydrology_vars ! ! !LOCAL_VARIABLES: - integer :: fc,c,j + integer :: fc,c,j,k class(emi_data), pointer :: cur_data logical :: need_to_pack integer :: istage integer :: count associate(& - zwt => soilhydrology_vars%zwt_col , & - qcharge => soilhydrology_vars%qcharge_col & + zwt_col => soilhydrology_vars%zwt_col , & + qcharge_col => soilhydrology_vars%qcharge_col & ) count = 0 @@ -164,14 +170,14 @@ subroutine EMI_Unpack_SoilHydrologyType_at_Column_Level_from_EM(data_list, em_st case (E2L_STATE_WTD) do fc = 1, num_filter c = filter(fc) - zwt(c) = cur_data%data_real_1d(c) + zwt_col(c) = cur_data%data_real_1d(c) enddo cur_data%is_set = .true. case (E2L_FLUX_AQUIFER_RECHARGE) do fc = 1, num_filter c = filter(fc) - qcharge(c) = cur_data%data_real_1d(c) + qcharge_col(c) = cur_data%data_real_1d(c) enddo cur_data%is_set = .true. diff --git a/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_SoilStateType_ExchangeMod.F90 b/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_SoilStateType_ExchangeMod.F90 index 0cdf7b6f4454..4d7fde4e4c87 100644 --- a/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_SoilStateType_ExchangeMod.F90 +++ b/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_SoilStateType_ExchangeMod.F90 @@ -4,12 +4,19 @@ module EMI_SoilStateType_ExchangeMod use shr_log_mod , only : errMsg => shr_log_errMsg use abortutils , only : endrun use elm_varctl , only : iulog - use EMI_DataMod , only : emi_data_list, emi_data - use EMI_DataDimensionMod , only : emi_data_dimension_list_type - use SoilStateType , only : soilstate_type + use EMI_DataMod , only : emi_data_list, emi_data + use EMI_DataDimensionMod , only : emi_data_dimension_list_type + use SoilStateType , only : soilstate_type use EMI_Atm2LndType_Constants use EMI_CanopyStateType_Constants use EMI_ChemStateType_Constants + use EMI_CNCarbonStateType_Constants + use EMI_CNNitrogenStateType_Constants + use EMI_CNNitrogenFluxType_Constants + use EMI_CNCarbonFluxType_Constants + use EMI_ColumnEnergyStateType_Constants + use EMI_ColumnWaterStateType_Constants + use EMI_ColumnWaterFluxType_Constants use EMI_EnergyFluxType_Constants use EMI_SoilHydrologyType_Constants use EMI_SoilStateType_Constants @@ -37,7 +44,7 @@ subroutine EMI_Pack_SoilStateType_at_Column_Level_for_EM(data_list, em_stage, & ! Pack data from ALM soilstate_vars for EM ! ! !USES: - use elm_varpar , only : nlevsoi, nlevgrnd, nlevsno + use elm_varpar , only : nlevgrnd ! implicit none ! @@ -49,26 +56,26 @@ subroutine EMI_Pack_SoilStateType_at_Column_Level_for_EM(data_list, em_stage, & type(soilstate_type) , intent(in) :: soilstate_vars ! ! !LOCAL_VARIABLES: - integer :: fc,c,j + integer :: fc,c,j,k class(emi_data), pointer :: cur_data logical :: need_to_pack integer :: istage integer :: count associate(& - watsat => soilstate_vars%watsat_col , & - hksat => soilstate_vars%hksat_col , & - bsw => soilstate_vars%bsw_col , & - sucsat => soilstate_vars%sucsat_col , & - eff_porosity => soilstate_vars%eff_porosity_col , & - csol => soilstate_vars%csol_col , & - tkmg => soilstate_vars%tkmg_col , & - tkdry => soilstate_vars%tkdry_col , & - cellorg => soilstate_vars%cellorg_col , & - cellclay => soilstate_vars%cellclay_col , & - cellsand => soilstate_vars%cellsand_col , & - bd => soilstate_vars%bd_col , & - watfc => soilstate_vars%watfc_col & + watsat_col => soilstate_vars%watsat_col , & + hksat_col => soilstate_vars%hksat_col , & + bsw_col => soilstate_vars%bsw_col , & + sucsat_col => soilstate_vars%sucsat_col , & + eff_porosity_col => soilstate_vars%eff_porosity_col , & + csol_col => soilstate_vars%csol_col , & + tkmg_col => soilstate_vars%tkmg_col , & + tkdry_col => soilstate_vars%tkdry_col , & + cellorg_col => soilstate_vars%cellorg_col , & + cellclay_col => soilstate_vars%cellclay_col , & + cellsand_col => soilstate_vars%cellsand_col , & + bd_col => soilstate_vars%bd_col , & + watfc_col => soilstate_vars%watfc_col & ) count = 0 @@ -93,7 +100,7 @@ subroutine EMI_Pack_SoilStateType_at_Column_Level_for_EM(data_list, em_stage, & do fc = 1, num_filter c = filter(fc) do j = 1, nlevgrnd - cur_data%data_real_2d(c,j) = watsat(c,j) + cur_data%data_real_2d(c,j) = watsat_col(c,j) enddo enddo cur_data%is_set = .true. @@ -102,7 +109,7 @@ subroutine EMI_Pack_SoilStateType_at_Column_Level_for_EM(data_list, em_stage, & do fc = 1, num_filter c = filter(fc) do j = 1, nlevgrnd - cur_data%data_real_2d(c,j) = hksat(c,j) + cur_data%data_real_2d(c,j) = hksat_col(c,j) enddo enddo cur_data%is_set = .true. @@ -111,7 +118,7 @@ subroutine EMI_Pack_SoilStateType_at_Column_Level_for_EM(data_list, em_stage, & do fc = 1, num_filter c = filter(fc) do j = 1, nlevgrnd - cur_data%data_real_2d(c,j) = bsw(c,j) + cur_data%data_real_2d(c,j) = bsw_col(c,j) enddo enddo cur_data%is_set = .true. @@ -120,7 +127,7 @@ subroutine EMI_Pack_SoilStateType_at_Column_Level_for_EM(data_list, em_stage, & do fc = 1, num_filter c = filter(fc) do j = 1, nlevgrnd - cur_data%data_real_2d(c,j) = sucsat(c,j) + cur_data%data_real_2d(c,j) = sucsat_col(c,j) enddo enddo cur_data%is_set = .true. @@ -129,7 +136,7 @@ subroutine EMI_Pack_SoilStateType_at_Column_Level_for_EM(data_list, em_stage, & do fc = 1, num_filter c = filter(fc) do j = 1, nlevgrnd - cur_data%data_real_2d(c,j) = eff_porosity(c,j) + cur_data%data_real_2d(c,j) = eff_porosity_col(c,j) enddo enddo cur_data%is_set = .true. @@ -138,7 +145,7 @@ subroutine EMI_Pack_SoilStateType_at_Column_Level_for_EM(data_list, em_stage, & do fc = 1, num_filter c = filter(fc) do j = 1, nlevgrnd - cur_data%data_real_2d(c,j) = csol(c,j) + cur_data%data_real_2d(c,j) = csol_col(c,j) enddo enddo cur_data%is_set = .true. @@ -147,7 +154,7 @@ subroutine EMI_Pack_SoilStateType_at_Column_Level_for_EM(data_list, em_stage, & do fc = 1, num_filter c = filter(fc) do j = 1, nlevgrnd - cur_data%data_real_2d(c,j) = tkmg(c,j) + cur_data%data_real_2d(c,j) = tkmg_col(c,j) enddo enddo cur_data%is_set = .true. @@ -156,7 +163,7 @@ subroutine EMI_Pack_SoilStateType_at_Column_Level_for_EM(data_list, em_stage, & do fc = 1, num_filter c = filter(fc) do j = 1, nlevgrnd - cur_data%data_real_2d(c,j) = tkdry(c,j) + cur_data%data_real_2d(c,j) = tkdry_col(c,j) enddo enddo cur_data%is_set = .true. @@ -165,7 +172,7 @@ subroutine EMI_Pack_SoilStateType_at_Column_Level_for_EM(data_list, em_stage, & do fc = 1, num_filter c = filter(fc) do j = 1, nlevgrnd - cur_data%data_real_2d(c,j) = cellorg(c,j) + cur_data%data_real_2d(c,j) = cellorg_col(c,j) enddo enddo cur_data%is_set = .true. @@ -174,7 +181,7 @@ subroutine EMI_Pack_SoilStateType_at_Column_Level_for_EM(data_list, em_stage, & do fc = 1, num_filter c = filter(fc) do j = 1, nlevgrnd - cur_data%data_real_2d(c,j) = cellclay(c,j) + cur_data%data_real_2d(c,j) = cellclay_col(c,j) enddo enddo cur_data%is_set = .true. @@ -183,7 +190,7 @@ subroutine EMI_Pack_SoilStateType_at_Column_Level_for_EM(data_list, em_stage, & do fc = 1, num_filter c = filter(fc) do j = 1, nlevgrnd - cur_data%data_real_2d(c,j) = cellsand(c,j) + cur_data%data_real_2d(c,j) = cellsand_col(c,j) enddo enddo cur_data%is_set = .true. @@ -192,7 +199,7 @@ subroutine EMI_Pack_SoilStateType_at_Column_Level_for_EM(data_list, em_stage, & do fc = 1, num_filter c = filter(fc) do j = 1, nlevgrnd - cur_data%data_real_2d(c,j) = bd(c,j) + cur_data%data_real_2d(c,j) = bd_col(c,j) enddo enddo cur_data%is_set = .true. @@ -201,7 +208,7 @@ subroutine EMI_Pack_SoilStateType_at_Column_Level_for_EM(data_list, em_stage, & do fc = 1, num_filter c = filter(fc) do j = 1, nlevgrnd - cur_data%data_real_2d(c,j) = watfc(c,j) + cur_data%data_real_2d(c,j) = watfc_col(c,j) enddo enddo cur_data%is_set = .true. @@ -225,7 +232,7 @@ subroutine EMI_Pack_SoilStateType_at_Patch_Level_for_EM(data_list, em_stage, & ! Pack data from ALM soilstate_vars for EM ! ! !USES: - use elm_varpar , only : nlevsoi, nlevgrnd, nlevsno + use elm_varpar , only : nlevgrnd ! implicit none ! @@ -237,14 +244,14 @@ subroutine EMI_Pack_SoilStateType_at_Patch_Level_for_EM(data_list, em_stage, & type(soilstate_type) , intent(in) :: soilstate_vars ! ! !LOCAL_VARIABLES: - integer :: fp,p,j + integer :: fp,p,j,k class(emi_data), pointer :: cur_data logical :: need_to_pack integer :: istage integer :: count associate(& - rootfr => soilstate_vars%rootfr_patch & + rootfr_patch => soilstate_vars%rootfr_patch & ) count = 0 @@ -269,7 +276,7 @@ subroutine EMI_Pack_SoilStateType_at_Patch_Level_for_EM(data_list, em_stage, & do fp = 1, num_filter p = filter(fp) do j = 1, nlevgrnd - cur_data%data_real_2d(p,j) = rootfr(p,j) + cur_data%data_real_2d(p,j) = rootfr_patch(p,j) enddo enddo cur_data%is_set = .true. @@ -293,7 +300,7 @@ subroutine EMI_Unpack_SoilStateType_at_Column_Level_from_EM(data_list, em_stage, ! Unpack data for ALM soilstate_vars from EM ! ! !USES: - use elm_varpar , only : nlevsoi, nlevgrnd, nlevsno + use elm_varpar , only : nlevgrnd ! implicit none ! @@ -305,14 +312,14 @@ subroutine EMI_Unpack_SoilStateType_at_Column_Level_from_EM(data_list, em_stage, type(soilstate_type) , intent(in) :: soilstate_vars ! ! !LOCAL_VARIABLES: - integer :: fc,c,j + integer :: fc,c,j,k class(emi_data), pointer :: cur_data logical :: need_to_pack integer :: istage integer :: count associate(& - smp_l => soilstate_vars%smp_l_col & + smp_l_col => soilstate_vars%smp_l_col & ) count = 0 @@ -337,7 +344,7 @@ subroutine EMI_Unpack_SoilStateType_at_Column_Level_from_EM(data_list, em_stage, do fc = 1, num_filter c = filter(fc) do j = 1, nlevgrnd - smp_l(c,j) = cur_data%data_real_2d(c,j) + smp_l_col(c,j) = cur_data%data_real_2d(c,j) enddo enddo cur_data%is_set = .true. diff --git a/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_TemperatureType_ExchangeMod.F90 b/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_TemperatureType_ExchangeMod.F90 index 2591f0c43df8..24f72261440c 100644 --- a/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_TemperatureType_ExchangeMod.F90 +++ b/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_TemperatureType_ExchangeMod.F90 @@ -6,12 +6,17 @@ module EMI_TemperatureType_ExchangeMod use elm_varctl , only : iulog use EMI_DataMod , only : emi_data_list, emi_data use EMI_DataDimensionMod , only : emi_data_dimension_list_type - use TemperatureType , only : temperature_type - use ColumnDataType , only : col_es - use VegetationDataType , only : veg_es + use TemperatureType , only : temperature_type use EMI_Atm2LndType_Constants use EMI_CanopyStateType_Constants use EMI_ChemStateType_Constants + use EMI_CNCarbonStateType_Constants + use EMI_CNNitrogenStateType_Constants + use EMI_CNNitrogenFluxType_Constants + use EMI_CNCarbonFluxType_Constants + use EMI_ColumnEnergyStateType_Constants + use EMI_ColumnWaterStateType_Constants + use EMI_ColumnWaterFluxType_Constants use EMI_EnergyFluxType_Constants use EMI_SoilHydrologyType_Constants use EMI_SoilStateType_Constants @@ -39,7 +44,9 @@ subroutine EMI_Pack_TemperatureType_at_Column_Level_for_EM(data_list, em_stage, ! Pack data from ALM temperature_vars for EM ! ! !USES: - use elm_varpar , only : nlevsoi, nlevgrnd, nlevsno + use elm_varpar , only : nlevgrnd + use elm_varpar , only : nlevsno + use elm_varpar , only : nlevsoi ! implicit none ! @@ -51,16 +58,16 @@ subroutine EMI_Pack_TemperatureType_at_Column_Level_for_EM(data_list, em_stage, type(temperature_type) , intent(in) :: temperature_vars ! ! !LOCAL_VARIABLES: - integer :: fc,c,j + integer :: fc,c,j,k class(emi_data), pointer :: cur_data logical :: need_to_pack integer :: istage integer :: count associate(& - t_soisno => col_es%t_soisno , & - t_h2osfc => col_es%t_h2osfc , & - t_soi10cm => col_es%t_soi10cm & + t_soisno_col => temperature_vars%t_soisno_col , & + t_h2osfc_col => temperature_vars%t_h2osfc_col , & + t_soi10cm_col => temperature_vars%t_soi10cm_col & ) count = 0 @@ -85,7 +92,7 @@ subroutine EMI_Pack_TemperatureType_at_Column_Level_for_EM(data_list, em_stage, do fc = 1, num_filter c = filter(fc) do j = 1, nlevgrnd - cur_data%data_real_2d(c,j) = t_soisno(c,j) + cur_data%data_real_2d(c,j) = t_soisno_col(c,j) enddo enddo cur_data%is_set = .true. @@ -94,7 +101,7 @@ subroutine EMI_Pack_TemperatureType_at_Column_Level_for_EM(data_list, em_stage, do fc = 1, num_filter c = filter(fc) do j = -nlevsno + 1, 0 - cur_data%data_real_2d(c,j) = t_soisno(c,j) + cur_data%data_real_2d(c,j) = t_soisno_col(c,j) enddo enddo cur_data%is_set = .true. @@ -102,14 +109,14 @@ subroutine EMI_Pack_TemperatureType_at_Column_Level_for_EM(data_list, em_stage, case (L2E_STATE_TH2OSFC) do fc = 1, num_filter c = filter(fc) - cur_data%data_real_1d(c) = t_h2osfc(c) + cur_data%data_real_1d(c) = t_h2osfc_col(c) enddo cur_data%is_set = .true. case (L2E_STATE_TSOI10CM) do fc = 1, num_filter c = filter(fc) - cur_data%data_real_1d(c) = t_soi10cm(c) + cur_data%data_real_1d(c) = t_soi10cm_col(c) enddo cur_data%is_set = .true. @@ -117,7 +124,7 @@ subroutine EMI_Pack_TemperatureType_at_Column_Level_for_EM(data_list, em_stage, do fc = 1, num_filter c = filter(fc) do j = 1, nlevsoi - cur_data%data_real_2d(c,j) = t_soisno(c,j) + cur_data%data_real_2d(c,j) = t_soisno_col(c,j) enddo enddo cur_data%is_set = .true. @@ -141,7 +148,6 @@ subroutine EMI_Pack_TemperatureType_at_Patch_Level_for_EM(data_list, em_stage, & ! Pack data from ALM temperature_vars for EM ! ! !USES: - use elm_varpar , only : nlevsoi, nlevgrnd, nlevsno ! implicit none ! @@ -153,14 +159,14 @@ subroutine EMI_Pack_TemperatureType_at_Patch_Level_for_EM(data_list, em_stage, & type(temperature_type) , intent(in) :: temperature_vars ! ! !LOCAL_VARIABLES: - integer :: fp,p,j + integer :: fp,p,j,k class(emi_data), pointer :: cur_data logical :: need_to_pack integer :: istage integer :: count associate(& - t_veg => veg_es%t_veg & + t_veg_patch => temperature_vars%t_veg_patch & ) count = 0 @@ -184,7 +190,7 @@ subroutine EMI_Pack_TemperatureType_at_Patch_Level_for_EM(data_list, em_stage, & case (L2E_STATE_TVEG) do fp = 1, num_filter p = filter(fp) - cur_data%data_real_1d(p) = t_veg(p) + cur_data%data_real_1d(p) = t_veg_patch(p) enddo cur_data%is_set = .true. @@ -207,7 +213,8 @@ subroutine EMI_Unpack_TemperatureType_at_Column_Level_from_EM(data_list, em_stag ! Unpack data for ALM temperature_vars from EM ! ! !USES: - use elm_varpar , only : nlevsoi, nlevgrnd, nlevsno + use elm_varpar , only : nlevgrnd + use elm_varpar , only : nlevsno ! implicit none ! @@ -219,15 +226,15 @@ subroutine EMI_Unpack_TemperatureType_at_Column_Level_from_EM(data_list, em_stag type(temperature_type) , intent(in) :: temperature_vars ! ! !LOCAL_VARIABLES: - integer :: fc,c,j + integer :: fc,c,j,k class(emi_data), pointer :: cur_data logical :: need_to_pack integer :: istage integer :: count associate(& - t_soisno => col_es%t_soisno , & - t_h2osfc => col_es%t_h2osfc & + t_soisno_col => temperature_vars%t_soisno_col , & + t_h2osfc_col => temperature_vars%t_h2osfc_col & ) count = 0 @@ -252,7 +259,7 @@ subroutine EMI_Unpack_TemperatureType_at_Column_Level_from_EM(data_list, em_stag do fc = 1, num_filter c = filter(fc) do j = 1, nlevgrnd - t_soisno(c,j) = cur_data%data_real_2d(c,j) + t_soisno_col(c,j) = cur_data%data_real_2d(c,j) enddo enddo cur_data%is_set = .true. @@ -261,7 +268,7 @@ subroutine EMI_Unpack_TemperatureType_at_Column_Level_from_EM(data_list, em_stag do fc = 1, num_filter c = filter(fc) do j = -nlevsno + 1, 0 - t_soisno(c,j) = cur_data%data_real_2d(c,j) + t_soisno_col(c,j) = cur_data%data_real_2d(c,j) enddo enddo cur_data%is_set = .true. @@ -269,7 +276,7 @@ subroutine EMI_Unpack_TemperatureType_at_Column_Level_from_EM(data_list, em_stag case (E2L_STATE_TH2OSFC) do fc = 1, num_filter c = filter(fc) - t_h2osfc(c) = cur_data%data_real_1d(c) + t_h2osfc_col(c) = cur_data%data_real_1d(c) enddo cur_data%is_set = .true. diff --git a/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_WaterFluxType_ExchangeMod.F90 b/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_WaterFluxType_ExchangeMod.F90 index 1b8a96924696..72382eaefa36 100644 --- a/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_WaterFluxType_ExchangeMod.F90 +++ b/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_WaterFluxType_ExchangeMod.F90 @@ -4,14 +4,19 @@ module EMI_WaterFluxType_ExchangeMod use shr_log_mod , only : errMsg => shr_log_errMsg use abortutils , only : endrun use elm_varctl , only : iulog - use EMI_DataMod , only : emi_data_list, emi_data - use EMI_DataDimensionMod , only : emi_data_dimension_list_type - use WaterFluxType , only : waterflux_type - use ColumnDataType , only : col_wf - use VegetationDataType , only : veg_wf + use EMI_DataMod , only : emi_data_list, emi_data + use EMI_DataDimensionMod , only : emi_data_dimension_list_type + use WaterFluxType , only : waterflux_type use EMI_Atm2LndType_Constants use EMI_CanopyStateType_Constants use EMI_ChemStateType_Constants + use EMI_CNCarbonStateType_Constants + use EMI_CNNitrogenStateType_Constants + use EMI_CNNitrogenFluxType_Constants + use EMI_CNCarbonFluxType_Constants + use EMI_ColumnEnergyStateType_Constants + use EMI_ColumnWaterStateType_Constants + use EMI_ColumnWaterFluxType_Constants use EMI_EnergyFluxType_Constants use EMI_SoilHydrologyType_Constants use EMI_SoilStateType_Constants @@ -38,7 +43,8 @@ subroutine EMI_Pack_WaterFluxType_at_Column_Level_for_EM(data_list, em_stage, & ! Pack data from ALM waterflux_vars for EM ! ! !USES: - use elm_varpar , only : nlevsoi, nlevgrnd, nlevsno + use elm_varpar , only : nlevgrnd + use elm_varpar , only : nlevsoi ! implicit none ! @@ -50,35 +56,35 @@ subroutine EMI_Pack_WaterFluxType_at_Column_Level_for_EM(data_list, em_stage, & type(waterflux_type) , intent(in) :: waterflux_vars ! ! !LOCAL_VARIABLES: - integer :: fc,c,j + integer :: fc,c,j,k class(emi_data), pointer :: cur_data logical :: need_to_pack integer :: istage integer :: count associate(& - mflx_infl => col_wf%mflx_infl , & - mflx_et => col_wf%mflx_et , & - mflx_dew => col_wf%mflx_dew , & - mflx_sub_snow => col_wf%mflx_sub_snow , & - mflx_snowlyr_disp => col_wf%mflx_snowlyr_disp , & - mflx_snowlyr => col_wf%mflx_snowlyr , & - mflx_drain => col_wf%mflx_drain , & - qflx_infl => col_wf%qflx_infl , & - qflx_totdrain => col_wf%qflx_totdrain , & - qflx_gross_evap_soil => col_wf%qflx_gross_evap_soil , & - qflx_gross_infl_soil => col_wf%qflx_gross_infl_soil , & - qflx_surf => col_wf%qflx_surf , & - qflx_dew_grnd => col_wf%qflx_dew_grnd , & - qflx_dew_snow => col_wf%qflx_dew_snow , & - qflx_h2osfc2topsoi => col_wf%qflx_h2osfc2topsoi , & - qflx_sub_snow => col_wf%qflx_sub_snow , & - qflx_snow2topsoi => col_wf%qflx_snow2topsoi , & - qflx_rootsoi => col_wf%qflx_rootsoi , & - qflx_adv => col_wf%qflx_adv , & - qflx_drain_vr => col_wf%qflx_drain_vr , & - qflx_tran_veg => col_wf%qflx_tran_veg , & - qflx_rootsoi_frac => veg_wf%qflx_rootsoi_frac & + mflx_infl_col => waterflux_vars%mflx_infl_col , & + mflx_et_col => waterflux_vars%mflx_et_col , & + mflx_dew_col => waterflux_vars%mflx_dew_col , & + mflx_sub_snow_col => waterflux_vars%mflx_sub_snow_col , & + mflx_snowlyr_disp_col => waterflux_vars%mflx_snowlyr_disp_col , & + mflx_snowlyr_col => waterflux_vars%mflx_snowlyr_col , & + mflx_drain_col => waterflux_vars%mflx_drain_col , & + qflx_infl_col => waterflux_vars%qflx_infl_col , & + qflx_totdrain_col => waterflux_vars%qflx_totdrain_col , & + qflx_gross_evap_soil_col => waterflux_vars%qflx_gross_evap_soil_col , & + qflx_gross_infl_soil_col => waterflux_vars%qflx_gross_infl_soil_col , & + qflx_surf_col => waterflux_vars%qflx_surf_col , & + qflx_dew_grnd_col => waterflux_vars%qflx_dew_grnd_col , & + qflx_dew_snow_col => waterflux_vars%qflx_dew_snow_col , & + qflx_h2osfc2topsoi_col => waterflux_vars%qflx_h2osfc2topsoi_col , & + qflx_sub_snow_col => waterflux_vars%qflx_sub_snow_col , & + qflx_snow2topsoi_col => waterflux_vars%qflx_snow2topsoi_col , & + qflx_rootsoi_col => waterflux_vars%qflx_rootsoi_col , & + qflx_adv_col => waterflux_vars%qflx_adv_col , & + qflx_drain_vr_col => waterflux_vars%qflx_drain_vr_col , & + qflx_tran_veg_col => waterflux_vars%qflx_tran_veg_col , & + qflx_rootsoi_frac_patch => waterflux_vars%qflx_rootsoi_frac_patch & ) count = 0 @@ -102,7 +108,7 @@ subroutine EMI_Pack_WaterFluxType_at_Column_Level_for_EM(data_list, em_stage, & case (L2E_FLUX_INFIL_MASS_FLUX) do fc = 1, num_filter c = filter(fc) - cur_data%data_real_1d(c) = mflx_infl(c) + cur_data%data_real_1d(c) = mflx_infl_col(c) enddo cur_data%is_set = .true. @@ -110,7 +116,7 @@ subroutine EMI_Pack_WaterFluxType_at_Column_Level_for_EM(data_list, em_stage, & do fc = 1, num_filter c = filter(fc) do j = 1, nlevgrnd - cur_data%data_real_2d(c,j) = mflx_et(c,j) + cur_data%data_real_2d(c,j) = mflx_et_col(c,j) enddo enddo cur_data%is_set = .true. @@ -118,28 +124,28 @@ subroutine EMI_Pack_WaterFluxType_at_Column_Level_for_EM(data_list, em_stage, & case (L2E_FLUX_DEW_MASS_FLUX) do fc = 1, num_filter c = filter(fc) - cur_data%data_real_1d(c) = mflx_dew(c) + cur_data%data_real_1d(c) = mflx_dew_col(c) enddo cur_data%is_set = .true. case (L2E_FLUX_SNOW_SUBLIMATION_MASS_FLUX) do fc = 1, num_filter c = filter(fc) - cur_data%data_real_1d(c) = mflx_sub_snow(c) + cur_data%data_real_1d(c) = mflx_sub_snow_col(c) enddo cur_data%is_set = .true. case (L2E_FLUX_SNOW_LYR_DISAPPERANCE_MASS_FLUX) do fc = 1, num_filter c = filter(fc) - cur_data%data_real_1d(c) = mflx_snowlyr_disp(c) + cur_data%data_real_1d(c) = mflx_snowlyr_disp_col(c) enddo cur_data%is_set = .true. case (L2E_FLUX_RESTART_SNOW_LYR_DISAPPERANCE_MASS_FLUX) do fc = 1, num_filter c = filter(fc) - cur_data%data_real_1d(c) = mflx_snowlyr(c) + cur_data%data_real_1d(c) = mflx_snowlyr_col(c) enddo cur_data%is_set = .true. @@ -147,7 +153,7 @@ subroutine EMI_Pack_WaterFluxType_at_Column_Level_for_EM(data_list, em_stage, & do fc = 1, num_filter c = filter(fc) do j = 1, nlevgrnd - cur_data%data_real_2d(c,j) = mflx_drain(c,j) + cur_data%data_real_2d(c,j) = mflx_drain_col(c,j) enddo enddo cur_data%is_set = .true. @@ -155,77 +161,77 @@ subroutine EMI_Pack_WaterFluxType_at_Column_Level_for_EM(data_list, em_stage, & case (L2E_FLUX_INFL) do fc = 1, num_filter c = filter(fc) - cur_data%data_real_1d(c) = qflx_infl(c) + cur_data%data_real_1d(c) = qflx_infl_col(c) enddo cur_data%is_set = .true. case (L2E_FLUX_TOTDRAIN) do fc = 1, num_filter c = filter(fc) - cur_data%data_real_1d(c) = qflx_totdrain(c) + cur_data%data_real_1d(c) = qflx_totdrain_col(c) enddo cur_data%is_set = .true. case (L2E_FLUX_GROSS_EVAP_SOIL) do fc = 1, num_filter c = filter(fc) - cur_data%data_real_1d(c) = qflx_gross_evap_soil(c) + cur_data%data_real_1d(c) = qflx_gross_evap_soil_col(c) enddo cur_data%is_set = .true. case (L2E_FLUX_GROSS_INFL_SOIL) do fc = 1, num_filter c = filter(fc) - cur_data%data_real_1d(c) = qflx_gross_infl_soil(c) + cur_data%data_real_1d(c) = qflx_gross_infl_soil_col(c) enddo cur_data%is_set = .true. case (L2E_FLUX_SURF) do fc = 1, num_filter c = filter(fc) - cur_data%data_real_1d(c) = qflx_surf(c) + cur_data%data_real_1d(c) = qflx_surf_col(c) enddo cur_data%is_set = .true. case (L2E_FLUX_DEW_GRND) do fc = 1, num_filter c = filter(fc) - cur_data%data_real_1d(c) = qflx_dew_grnd(c) + cur_data%data_real_1d(c) = qflx_dew_grnd_col(c) enddo cur_data%is_set = .true. case (L2E_FLUX_DEW_SNOW) do fc = 1, num_filter c = filter(fc) - cur_data%data_real_1d(c) = qflx_dew_snow(c) + cur_data%data_real_1d(c) = qflx_dew_snow_col(c) enddo cur_data%is_set = .true. case (L2E_FLUX_SUB_SNOW_VOL) do fc = 1, num_filter c = filter(fc) - cur_data%data_real_1d(c) = qflx_h2osfc2topsoi(c) + cur_data%data_real_1d(c) = qflx_h2osfc2topsoi_col(c) enddo cur_data%is_set = .true. case (L2E_FLUX_SUB_SNOW) do fc = 1, num_filter c = filter(fc) - cur_data%data_real_1d(c) = qflx_sub_snow(c) + cur_data%data_real_1d(c) = qflx_sub_snow_col(c) enddo cur_data%is_set = .true. case (L2E_FLUX_H2OSFC2TOPSOI) do fc = 1, num_filter c = filter(fc) - cur_data%data_real_1d(c) = qflx_h2osfc2topsoi(c) + cur_data%data_real_1d(c) = qflx_h2osfc2topsoi_col(c) enddo cur_data%is_set = .true. case (L2E_FLUX_SNOW2TOPSOI) do fc = 1, num_filter c = filter(fc) - cur_data%data_real_1d(c) = qflx_snow2topsoi(c) + cur_data%data_real_1d(c) = qflx_snow2topsoi_col(c) enddo cur_data%is_set = .true. @@ -233,7 +239,7 @@ subroutine EMI_Pack_WaterFluxType_at_Column_Level_for_EM(data_list, em_stage, & do fc = 1, num_filter c = filter(fc) do j = 1, nlevgrnd - cur_data%data_real_2d(c,j) = qflx_rootsoi(c,j) + cur_data%data_real_2d(c,j) = qflx_rootsoi_col(c,j) enddo enddo cur_data%is_set = .true. @@ -242,7 +248,7 @@ subroutine EMI_Pack_WaterFluxType_at_Column_Level_for_EM(data_list, em_stage, & do fc = 1, num_filter c = filter(fc) do j = 0, nlevgrnd - cur_data%data_real_2d(c,j) = qflx_adv(c,j) + cur_data%data_real_2d(c,j) = qflx_adv_col(c,j) enddo enddo cur_data%is_set = .true. @@ -251,7 +257,7 @@ subroutine EMI_Pack_WaterFluxType_at_Column_Level_for_EM(data_list, em_stage, & do fc = 1, num_filter c = filter(fc) do j = 1, nlevgrnd - cur_data%data_real_2d(c,j) = qflx_drain_vr(c,j) + cur_data%data_real_2d(c,j) = qflx_drain_vr_col(c,j) enddo enddo cur_data%is_set = .true. @@ -259,7 +265,7 @@ subroutine EMI_Pack_WaterFluxType_at_Column_Level_for_EM(data_list, em_stage, & case (L2E_FLUX_TRAN_VEG) do fc = 1, num_filter c = filter(fc) - cur_data%data_real_1d(c) = qflx_tran_veg(c) + cur_data%data_real_1d(c) = qflx_tran_veg_col(c) enddo cur_data%is_set = .true. @@ -267,7 +273,7 @@ subroutine EMI_Pack_WaterFluxType_at_Column_Level_for_EM(data_list, em_stage, & do fc = 1, num_filter c = filter(fc) do j = 1, nlevsoi - cur_data%data_real_2d(c,j) = qflx_rootsoi_frac(c,j) + cur_data%data_real_2d(c,j) = qflx_rootsoi_frac_patch(c,j) enddo enddo cur_data%is_set = .true. @@ -291,7 +297,6 @@ subroutine EMI_Unpack_WaterFluxType_at_Column_Level_from_EM(data_list, em_stage, ! Unpack data for ALM waterflux_vars from EM ! ! !USES: - use elm_varpar , only : nlevsoi, nlevgrnd, nlevsno ! implicit none ! @@ -303,14 +308,14 @@ subroutine EMI_Unpack_WaterFluxType_at_Column_Level_from_EM(data_list, em_stage, type(waterflux_type) , intent(in) :: waterflux_vars ! ! !LOCAL_VARIABLES: - integer :: fc,c,j + integer :: fc,c,j,k class(emi_data), pointer :: cur_data logical :: need_to_pack integer :: istage integer :: count associate(& - mflx_snowlyr => col_wf%mflx_snowlyr & + mflx_snowlyr_col => waterflux_vars%mflx_snowlyr_col & ) count = 0 @@ -334,7 +339,7 @@ subroutine EMI_Unpack_WaterFluxType_at_Column_Level_from_EM(data_list, em_stage, case (E2L_FLUX_SNOW_LYR_DISAPPERANCE_MASS_FLUX) do fc = 1, num_filter c = filter(fc) - mflx_snowlyr(c) = cur_data%data_real_1d(c) + mflx_snowlyr_col(c) = cur_data%data_real_1d(c) enddo cur_data%is_set = .true. diff --git a/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_WaterStateType_ExchangeMod.F90 b/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_WaterStateType_ExchangeMod.F90 index 3b5c1c61f8d3..d730a10433f8 100644 --- a/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_WaterStateType_ExchangeMod.F90 +++ b/components/elm/src/external_models/emi/src/emi_data_exchange/EMI_WaterStateType_ExchangeMod.F90 @@ -6,11 +6,17 @@ module EMI_WaterStateType_ExchangeMod use elm_varctl , only : iulog use EMI_DataMod , only : emi_data_list, emi_data use EMI_DataDimensionMod , only : emi_data_dimension_list_type - use WaterStateType , only : waterstate_type - use ColumnDataType , only : col_ws + use WaterStateType , only : waterstate_type use EMI_Atm2LndType_Constants use EMI_CanopyStateType_Constants use EMI_ChemStateType_Constants + use EMI_CNCarbonStateType_Constants + use EMI_CNNitrogenStateType_Constants + use EMI_CNNitrogenFluxType_Constants + use EMI_CNCarbonFluxType_Constants + use EMI_ColumnEnergyStateType_Constants + use EMI_ColumnWaterStateType_Constants + use EMI_ColumnWaterFluxType_Constants use EMI_EnergyFluxType_Constants use EMI_SoilHydrologyType_Constants use EMI_SoilStateType_Constants @@ -37,7 +43,9 @@ subroutine EMI_Pack_WaterStateType_at_Column_Level_for_EM(data_list, em_stage, & ! Pack data from ALM waterstate_vars for EM ! ! !USES: - use elm_varpar , only : nlevsoi, nlevgrnd, nlevsno + use elm_varpar , only : nlevgrnd + use elm_varpar , only : nlevsoi + use elm_varpar , only : nlevsno ! implicit none ! @@ -49,28 +57,28 @@ subroutine EMI_Pack_WaterStateType_at_Column_Level_for_EM(data_list, em_stage, & type(waterstate_type) , intent(in) :: waterstate_vars ! ! !LOCAL_VARIABLES: - integer :: fc,c,j + integer :: fc,c,j,k class(emi_data), pointer :: cur_data logical :: need_to_pack integer :: istage integer :: count associate(& - h2osoi_liq => col_ws%h2osoi_liq , & - h2osoi_ice => col_ws%h2osoi_ice , & - soilp => col_ws%soilp , & - frac_h2osfc => col_ws%frac_h2osfc , & - finundated => col_ws%finundated , & - h2osoi_liqvol => col_ws%h2osoi_liqvol , & - h2osoi_icevol => col_ws%h2osoi_icevol , & - h2osoi_vol => col_ws%h2osoi_vol , & - air_vol => col_ws%air_vol , & - rho_vap => waterstate_vars%rho_vap_col , & - rhvap_soi => waterstate_vars%rhvap_soi_col , & - smp_l => col_ws%smp_l , & - h2osno => col_ws%h2osno , & - h2osfc => col_ws%h2osfc , & - frac_sno_eff => col_ws%frac_sno_eff & + h2osoi_liq_col => waterstate_vars%h2osoi_liq_col , & + h2osoi_ice_col => waterstate_vars%h2osoi_ice_col , & + soilp_col => waterstate_vars%soilp_col , & + frac_h2osfc_col => waterstate_vars%frac_h2osfc_col , & + finundated_col => waterstate_vars%finundated_col , & + h2osoi_liqvol_col => waterstate_vars%h2osoi_liqvol_col , & + h2osoi_icevol_col => waterstate_vars%h2osoi_icevol_col , & + h2osoi_vol_col => waterstate_vars%h2osoi_vol_col , & + air_vol_col => waterstate_vars%air_vol_col , & + rho_vap_col => waterstate_vars%rho_vap_col , & + rhvap_soi_col => waterstate_vars%rhvap_soi_col , & + smp_l_col => waterstate_vars%smp_l_col , & + h2osno_col => waterstate_vars%h2osno_col , & + h2osfc_col => waterstate_vars%h2osfc_col , & + frac_sno_eff_col => waterstate_vars%frac_sno_eff_col & ) count = 0 @@ -95,7 +103,7 @@ subroutine EMI_Pack_WaterStateType_at_Column_Level_for_EM(data_list, em_stage, & do fc = 1, num_filter c = filter(fc) do j = 1, nlevgrnd - cur_data%data_real_2d(c,j) = h2osoi_liq(c,j) + cur_data%data_real_2d(c,j) = h2osoi_liq_col(c,j) enddo enddo cur_data%is_set = .true. @@ -104,7 +112,7 @@ subroutine EMI_Pack_WaterStateType_at_Column_Level_for_EM(data_list, em_stage, & do fc = 1, num_filter c = filter(fc) do j = 1, nlevgrnd - cur_data%data_real_2d(c,j) = h2osoi_ice(c,j) + cur_data%data_real_2d(c,j) = h2osoi_ice_col(c,j) enddo enddo cur_data%is_set = .true. @@ -113,7 +121,7 @@ subroutine EMI_Pack_WaterStateType_at_Column_Level_for_EM(data_list, em_stage, & do fc = 1, num_filter c = filter(fc) do j = 1, nlevgrnd - cur_data%data_real_2d(c,j) = soilp(c,j) + cur_data%data_real_2d(c,j) = soilp_col(c,j) enddo enddo cur_data%is_set = .true. @@ -121,14 +129,14 @@ subroutine EMI_Pack_WaterStateType_at_Column_Level_for_EM(data_list, em_stage, & case (L2E_STATE_FRAC_H2OSFC) do fc = 1, num_filter c = filter(fc) - cur_data%data_real_1d(c) = frac_h2osfc(c) + cur_data%data_real_1d(c) = frac_h2osfc_col(c) enddo cur_data%is_set = .true. case (L2E_STATE_FRAC_INUNDATED) do fc = 1, num_filter c = filter(fc) - cur_data%data_real_1d(c) = finundated(c) + cur_data%data_real_1d(c) = finundated_col(c) enddo cur_data%is_set = .true. @@ -136,7 +144,7 @@ subroutine EMI_Pack_WaterStateType_at_Column_Level_for_EM(data_list, em_stage, & do fc = 1, num_filter c = filter(fc) do j = 1, nlevsoi - cur_data%data_real_2d(c,j) = h2osoi_liqvol(c,j) + cur_data%data_real_2d(c,j) = h2osoi_liqvol_col(c,j) enddo enddo cur_data%is_set = .true. @@ -145,7 +153,7 @@ subroutine EMI_Pack_WaterStateType_at_Column_Level_for_EM(data_list, em_stage, & do fc = 1, num_filter c = filter(fc) do j = 1, nlevsoi - cur_data%data_real_2d(c,j) = h2osoi_icevol(c,j) + cur_data%data_real_2d(c,j) = h2osoi_icevol_col(c,j) enddo enddo cur_data%is_set = .true. @@ -154,7 +162,7 @@ subroutine EMI_Pack_WaterStateType_at_Column_Level_for_EM(data_list, em_stage, & do fc = 1, num_filter c = filter(fc) do j = 1, nlevsoi - cur_data%data_real_2d(c,j) = h2osoi_vol(c,j) + cur_data%data_real_2d(c,j) = h2osoi_vol_col(c,j) enddo enddo cur_data%is_set = .true. @@ -163,7 +171,7 @@ subroutine EMI_Pack_WaterStateType_at_Column_Level_for_EM(data_list, em_stage, & do fc = 1, num_filter c = filter(fc) do j = 1, nlevsoi - cur_data%data_real_2d(c,j) = air_vol(c,j) + cur_data%data_real_2d(c,j) = air_vol_col(c,j) enddo enddo cur_data%is_set = .true. @@ -172,7 +180,7 @@ subroutine EMI_Pack_WaterStateType_at_Column_Level_for_EM(data_list, em_stage, & do fc = 1, num_filter c = filter(fc) do j = 1, nlevsoi - cur_data%data_real_2d(c,j) = rho_vap(c,j) + cur_data%data_real_2d(c,j) = rho_vap_col(c,j) enddo enddo cur_data%is_set = .true. @@ -181,7 +189,7 @@ subroutine EMI_Pack_WaterStateType_at_Column_Level_for_EM(data_list, em_stage, & do fc = 1, num_filter c = filter(fc) do j = 1, nlevsoi - cur_data%data_real_2d(c,j) = rhvap_soi(c,j) + cur_data%data_real_2d(c,j) = rhvap_soi_col(c,j) enddo enddo cur_data%is_set = .true. @@ -190,7 +198,7 @@ subroutine EMI_Pack_WaterStateType_at_Column_Level_for_EM(data_list, em_stage, & do fc = 1, num_filter c = filter(fc) do j = 1, nlevsoi - cur_data%data_real_2d(c,j) = smp_l(c,j) + cur_data%data_real_2d(c,j) = smp_l_col(c,j) enddo enddo cur_data%is_set = .true. @@ -199,7 +207,7 @@ subroutine EMI_Pack_WaterStateType_at_Column_Level_for_EM(data_list, em_stage, & do fc = 1, num_filter c = filter(fc) do j = 1, nlevsoi - cur_data%data_real_2d(c,j) = h2osoi_liq(c,j) + cur_data%data_real_2d(c,j) = h2osoi_liq_col(c,j) enddo enddo cur_data%is_set = .true. @@ -208,7 +216,7 @@ subroutine EMI_Pack_WaterStateType_at_Column_Level_for_EM(data_list, em_stage, & do fc = 1, num_filter c = filter(fc) do j = 1, nlevsoi - cur_data%data_real_2d(c,j) = h2osoi_ice(c,j) + cur_data%data_real_2d(c,j) = h2osoi_ice_col(c,j) enddo enddo cur_data%is_set = .true. @@ -217,7 +225,7 @@ subroutine EMI_Pack_WaterStateType_at_Column_Level_for_EM(data_list, em_stage, & do fc = 1, num_filter c = filter(fc) do j = -nlevsno + 1, 0 - cur_data%data_real_2d(c,j) = h2osoi_liq(c,j) + cur_data%data_real_2d(c,j) = h2osoi_liq_col(c,j) enddo enddo cur_data%is_set = .true. @@ -226,7 +234,7 @@ subroutine EMI_Pack_WaterStateType_at_Column_Level_for_EM(data_list, em_stage, & do fc = 1, num_filter c = filter(fc) do j = -nlevsno + 1, 0 - cur_data%data_real_2d(c,j) = h2osoi_ice(c,j) + cur_data%data_real_2d(c,j) = h2osoi_ice_col(c,j) enddo enddo cur_data%is_set = .true. @@ -234,21 +242,21 @@ subroutine EMI_Pack_WaterStateType_at_Column_Level_for_EM(data_list, em_stage, & case (L2E_STATE_H2OSNOW) do fc = 1, num_filter c = filter(fc) - cur_data%data_real_1d(c) = h2osno(c) + cur_data%data_real_1d(c) = h2osno_col(c) enddo cur_data%is_set = .true. case (L2E_STATE_H2OSFC) do fc = 1, num_filter c = filter(fc) - cur_data%data_real_1d(c) = h2osfc(c) + cur_data%data_real_1d(c) = h2osfc_col(c) enddo cur_data%is_set = .true. case (L2E_STATE_FRAC_SNOW_EFFECTIVE) do fc = 1, num_filter c = filter(fc) - cur_data%data_real_1d(c) = frac_sno_eff(c) + cur_data%data_real_1d(c) = frac_sno_eff_col(c) enddo cur_data%is_set = .true. @@ -271,7 +279,7 @@ subroutine EMI_Unpack_WaterStateType_at_Column_Level_from_EM(data_list, em_stage ! Unpack data for ALM waterstate_vars from EM ! ! !USES: - use elm_varpar , only : nlevsoi, nlevgrnd, nlevsno + use elm_varpar , only : nlevgrnd ! implicit none ! @@ -283,16 +291,16 @@ subroutine EMI_Unpack_WaterStateType_at_Column_Level_from_EM(data_list, em_stage type(waterstate_type) , intent(in) :: waterstate_vars ! ! !LOCAL_VARIABLES: - integer :: fc,c,j + integer :: fc,c,j,k class(emi_data), pointer :: cur_data logical :: need_to_pack integer :: istage integer :: count associate(& - h2osoi_liq => col_ws%h2osoi_liq , & - h2osoi_ice => col_ws%h2osoi_ice , & - soilp => col_ws%soilp & + h2osoi_liq_col => waterstate_vars%h2osoi_liq_col , & + h2osoi_ice_col => waterstate_vars%h2osoi_ice_col , & + soilp_col => waterstate_vars%soilp_col & ) count = 0 @@ -317,7 +325,7 @@ subroutine EMI_Unpack_WaterStateType_at_Column_Level_from_EM(data_list, em_stage do fc = 1, num_filter c = filter(fc) do j = 1, nlevgrnd - h2osoi_liq(c,j) = cur_data%data_real_2d(c,j) + h2osoi_liq_col(c,j) = cur_data%data_real_2d(c,j) enddo enddo cur_data%is_set = .true. @@ -326,7 +334,7 @@ subroutine EMI_Unpack_WaterStateType_at_Column_Level_from_EM(data_list, em_stage do fc = 1, num_filter c = filter(fc) do j = 1, nlevgrnd - h2osoi_ice(c,j) = cur_data%data_real_2d(c,j) + h2osoi_ice_col(c,j) = cur_data%data_real_2d(c,j) enddo enddo cur_data%is_set = .true. @@ -335,7 +343,7 @@ subroutine EMI_Unpack_WaterStateType_at_Column_Level_from_EM(data_list, em_stage do fc = 1, num_filter c = filter(fc) do j = 1, nlevgrnd - soilp(c,j) = cur_data%data_real_2d(c,j) + soilp_col(c,j) = cur_data%data_real_2d(c,j) enddo enddo cur_data%is_set = .true. diff --git a/components/elm/src/external_models/emi/src/emi_data_types/EMI_DataDimensionMod.F90 b/components/elm/src/external_models/emi/src/emi_data_types/EMI_DataDimensionMod.F90 index f33d01a604dc..d35621c4d327 100644 --- a/components/elm/src/external_models/emi/src/emi_data_types/EMI_DataDimensionMod.F90 +++ b/components/elm/src/external_models/emi/src/emi_data_types/EMI_DataDimensionMod.F90 @@ -10,6 +10,9 @@ module EMI_DataDimensionMod use elm_varpar, only : nlevsno use elm_varpar, only : ndecomp_pools use elm_varpar, only : nlevdecomp_full + use elm_varpar, only : alquimia_num_primary, alquimia_num_minerals,& + alquimia_num_surface_sites, alquimia_num_ion_exchange_sites, & + alquimia_num_aux_doubles, alquimia_num_aux_ints use abortutils, only : endrun use elm_varctl, only : iulog @@ -33,9 +36,15 @@ module EMI_DataDimensionMod character(*), parameter :: dimname_col_one_based_idx = 'endc - begc + 1' character(*), parameter :: dimname_nlevdecomp_full = 'nlevdecomp_full'; character(*), parameter :: dimname_ndecomp_pools = 'ndecomp_pools'; + character(*), parameter :: dimname_alquimia_num_primary = 'alquimia_num_primary'; + character(*), parameter :: dimname_alquimia_num_minerals = 'alquimia_num_minerals'; + character(*), parameter :: dimname_alquimia_num_surface_sites = 'alquimia_num_surface_sites'; + character(*), parameter :: dimname_alquimia_num_ion_exchange_sites = 'alquimia_num_ion_exchange_sites'; + character(*), parameter :: dimname_alquimia_num_aux_doubles = 'alquimia_num_aux_doubles'; + character(*), parameter :: dimname_alquimia_num_aux_ints = 'alquimia_num_aux_ints'; type emi_data_dimension_type - character(len=24) :: name ! String labelling this IO type + character(len=32) :: name ! String labelling this IO type type(emi_data_dimension_type), pointer :: next contains @@ -143,6 +152,19 @@ subroutine EMID_Dim_GetDimValue(this, bounds_clump, dim_name, dim_value) case (dimname_nlevdecomp_full) dim_value = nlevdecomp_full; + case (dimname_alquimia_num_primary) + dim_value = alquimia_num_primary + case (dimname_alquimia_num_minerals) + dim_value = alquimia_num_minerals + case (dimname_alquimia_num_surface_sites) + dim_value = alquimia_num_surface_sites + case (dimname_alquimia_num_ion_exchange_sites) + dim_value = alquimia_num_ion_exchange_sites + case (dimname_alquimia_num_aux_doubles) + dim_value = alquimia_num_aux_doubles + case (dimname_alquimia_num_aux_ints) + dim_value = alquimia_num_aux_ints + case default write(iulog,*)'dim_name = ',dim_name call endrun(msg='Unknown dim_name while trying to get dimension value.') @@ -187,6 +209,13 @@ subroutine EMID_Dim_List_Init(this) call this%AddDimByName(dimname_nlevdecomp_full) call this%AddDimByName(dimname_ndecomp_pools) + call this%AddDimByName(dimname_alquimia_num_primary) + call this%AddDimByName(dimname_alquimia_num_minerals) + call this%AddDimByName(dimname_alquimia_num_surface_sites) + call this%AddDimByName(dimname_alquimia_num_ion_exchange_sites) + call this%AddDimByName(dimname_alquimia_num_aux_doubles) + call this%AddDimByName(dimname_alquimia_num_aux_ints) + end subroutine EMID_Dim_List_Init !------------------------------------------------------------------------ @@ -258,7 +287,6 @@ subroutine EMID_Dim_List_GetDimValue(this, bounds_clump, dim_name, dim_value) cur_dim => this%first do if (.not.associated(cur_dim)) exit - if (trim(cur_dim%name) .eq. dim_name) then call cur_dim%GetDimValue(bounds_clump, dim_name, dim_value) dim_found = .true.