Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,8 @@ def microbial_groups_cfg():
reference_temperature = 12.0
c_n_ratio = 5.2
c_p_ratio = 16
enzyme_production.pom = 0.005
enzyme_production.maom = 0.005

[[soil.microbial_group_definition]]
name = "fungi"
Expand All @@ -121,6 +123,8 @@ def microbial_groups_cfg():
reference_temperature = 12.0
c_n_ratio = 6.5
c_p_ratio = 40.0
enzyme_production.pom = 0.005
enzyme_production.maom = 0.005

[[soil.enzyme_class_definition]]
source = "bacteria"
Expand All @@ -131,6 +135,8 @@ def microbial_groups_cfg():
activation_energy_saturation = 30000
reference_temperature = 12.0
turnover_rate = 2.4e-2
c_n_ratio = 5.2
c_p_ratio = 16

[[soil.enzyme_class_definition]]
source = "bacteria"
Expand All @@ -141,6 +147,8 @@ def microbial_groups_cfg():
activation_energy_saturation = 30000
reference_temperature = 12.0
turnover_rate = 2.4e-2
c_n_ratio = 5.2
c_p_ratio = 16

[[soil.enzyme_class_definition]]
source = "fungi"
Expand All @@ -151,6 +159,8 @@ def microbial_groups_cfg():
activation_energy_saturation = 30000
reference_temperature = 12.0
turnover_rate = 2.4e-2
c_n_ratio = 6.5
c_p_ratio = 40.0

[[soil.enzyme_class_definition]]
source = "fungi"
Expand All @@ -161,6 +171,8 @@ def microbial_groups_cfg():
activation_energy_saturation = 30000
reference_temperature = 12.0
turnover_rate = 2.4e-2
c_n_ratio = 6.5
c_p_ratio = 40.0
"""


Expand Down
113 changes: 82 additions & 31 deletions tests/models/soil/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@

import pytest

from virtual_ecosystem.models.soil.env_factors import EnvironmentalEffectFactors


@pytest.fixture
def fixture_soil_config(microbial_groups_cfg):
Expand Down Expand Up @@ -51,38 +49,16 @@ def environmental_factors(dummy_carbon_data, fixture_core_components):
"""Environmental factors based on dummy carbon data."""
from virtual_ecosystem.models.soil.constants import SoilConsts
from virtual_ecosystem.models.soil.env_factors import (
calculate_clay_impact_on_enzyme_saturation,
calculate_pH_suitability,
calculate_water_potential_impact_on_microbes,
calculate_environmental_effect_factors,
)

soil_constants = SoilConsts()

water_factors = calculate_water_potential_impact_on_microbes(
water_potential=dummy_carbon_data["matric_potential"][
return calculate_environmental_effect_factors(
soil_water_potential=dummy_carbon_data["matric_potential"][
fixture_core_components.layer_structure.index_topsoil_scalar
].to_numpy(),
water_potential_halt=soil_constants.soil_microbe_water_potential_halt,
water_potential_opt=soil_constants.soil_microbe_water_potential_optimum,
response_curvature=soil_constants.microbial_water_response_curvature,
)

pH_factors = calculate_pH_suitability(
soil_pH=dummy_carbon_data["pH"].to_numpy(),
maximum_pH=soil_constants.max_pH_microbes,
minimum_pH=soil_constants.min_pH_microbes,
lower_optimum_pH=soil_constants.lowest_optimal_pH_microbes,
upper_optimum_pH=soil_constants.highest_optimal_pH_microbes,
)

clay_saturation_factors = calculate_clay_impact_on_enzyme_saturation(
pH=dummy_carbon_data["pH"].to_numpy(),
clay_fraction=dummy_carbon_data["clay_fraction"].to_numpy(),
base_protection=soil_constants.base_soil_protection,
protection_with_clay=soil_constants.soil_protection_with_clay,
)

return EnvironmentalEffectFactors(
water=water_factors, pH=pH_factors, clay_saturation=clay_saturation_factors
constants=SoilConsts,
)


Expand Down Expand Up @@ -189,13 +165,15 @@ def maom_desorption(dummy_carbon_data):


@pytest.fixture
def functional_groups(fixture_config):
def functional_groups(fixture_config, enzyme_classes):
"""Set of functional groups based on the soil model constants."""
from virtual_ecosystem.models.soil.microbial_groups import (
make_full_set_of_microbial_groups,
)

return make_full_set_of_microbial_groups(config=fixture_config)
return make_full_set_of_microbial_groups(
config=fixture_config, enzyme_classes=enzyme_classes
)


@pytest.fixture
Expand All @@ -208,6 +186,20 @@ def enzyme_classes(fixture_config):
return make_full_set_of_enzymes(config=fixture_config)


@pytest.fixture
def enzyme_changes(soil_pool_data, enzyme_production, enzyme_classes):
"""Changes for each each enzyme class."""
from virtual_ecosystem.models.soil.pools import (
calculate_enzyme_changes,
)

return calculate_enzyme_changes(
pools=soil_pool_data,
enzyme_production=enzyme_production,
enzyme_classes=enzyme_classes,
)


@pytest.fixture
def biomass_losses(dummy_carbon_data, functional_groups, fixture_core_components):
"""Rates of biomass loss from each microbial pool."""
Expand All @@ -232,3 +224,62 @@ def biomass_losses(dummy_carbon_data, functional_groups, fixture_core_components
)

return {"bacteria": bacterial_biomass_loss, "fungi": fungal_biomass_loss}


@pytest.fixture
def growth_rates(
environmental_factors,
functional_groups,
soil_pool_data,
dummy_carbon_data,
fixture_core_components,
):
"""Fixture to store growth rates of all the microbial groups."""
from virtual_ecosystem.models.soil.constants import SoilConsts
from virtual_ecosystem.models.soil.pools import calculate_nutrient_uptake_rates

bacterial_growth, _ = calculate_nutrient_uptake_rates(
soil_c_pool_lmwc=soil_pool_data.soil_c_pool_lmwc,
soil_n_pool_don=soil_pool_data.soil_n_pool_don,
soil_n_pool_ammonium=soil_pool_data.soil_n_pool_ammonium,
soil_n_pool_nitrate=soil_pool_data.soil_n_pool_nitrate,
soil_p_pool_dop=soil_pool_data.soil_p_pool_dop,
soil_p_pool_labile=soil_pool_data.soil_p_pool_labile,
microbial_pool_size=soil_pool_data.soil_c_pool_bacteria,
water_factor=environmental_factors.water,
pH_factor=environmental_factors.pH,
soil_temp=dummy_carbon_data["soil_temperature"][
fixture_core_components.layer_structure.index_topsoil_scalar
],
constants=SoilConsts,
functional_group=functional_groups["bacteria"],
)
fungal_growth, _ = calculate_nutrient_uptake_rates(
soil_c_pool_lmwc=soil_pool_data.soil_c_pool_lmwc,
soil_n_pool_don=soil_pool_data.soil_n_pool_don,
soil_n_pool_ammonium=soil_pool_data.soil_n_pool_ammonium,
soil_n_pool_nitrate=soil_pool_data.soil_n_pool_nitrate,
soil_p_pool_dop=soil_pool_data.soil_p_pool_dop,
soil_p_pool_labile=soil_pool_data.soil_p_pool_labile,
microbial_pool_size=soil_pool_data.soil_c_pool_fungi,
water_factor=environmental_factors.water,
pH_factor=environmental_factors.pH,
soil_temp=dummy_carbon_data["soil_temperature"][
fixture_core_components.layer_structure.index_topsoil_scalar
],
constants=SoilConsts,
functional_group=functional_groups["fungi"],
)

return {"bacteria": bacterial_growth, "fungi": fungal_growth}


@pytest.fixture
def enzyme_production(functional_groups, growth_rates):
"""Fixture to store the total production rates for each enzyme class."""
from virtual_ecosystem.models.soil.pools import calculate_enzyme_production

return calculate_enzyme_production(
microbial_groups=functional_groups,
growth_rates=growth_rates,
)
6 changes: 3 additions & 3 deletions tests/models/soil/test_env_factors.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ def test_calculate_environmental_effect_factors(
)

expected_water = [1.0, 0.94414168, 0.62176357, 0.07747536]
expected_pH = [0.25, 1.0, 0.428571428, 1.0]
expected_pH = [0.25, 1.0, 0.57142857, 1.0]
expected_clay_sat = [1.782, 1.102, 0.83, 1.918]

env_factors = calculate_environmental_effect_factors(
Expand Down Expand Up @@ -131,8 +131,8 @@ def test_calculate_pH_suitability():
from virtual_ecosystem.models.soil.constants import SoilConsts
from virtual_ecosystem.models.soil.env_factors import calculate_pH_suitability

pH_values = np.array([3.0, 7.5, 9.0, 5.7, 2.0, 11.5])
expected_inhib = [0.25, 1.0, 0.428571428, 1.0, 0.0, 0.0]
pH_values = np.array([3.0, 7.5, 9.0, 10.0, 5.7, 2.0, 11.5])
expected_inhib = [0.25, 1.0, 0.57142857, 0.28571428, 1.0, 0.0, 0.0]

actual_inhib = calculate_pH_suitability(
soil_pH=pH_values,
Expand Down
Loading