[Simulation Engine] Create manure only simulation type - #3217
Conversation
54218a5 to
277da38
Compare
277da38 to
de7a99b
Compare
|
Current Coverage: 99% Mypy errors on manure-only branch: 1134 |
1 similar comment
|
Current Coverage: 99% Mypy errors on manure-only branch: 1134 |
# Conflicts: # changelog_WIP.md # input/data/end_to_end_testing/animals_only/e2e_json_animal_filter.json # input/data/end_to_end_testing/field_and_feed/e2e_json_crop_soil_filter.json # input/data/end_to_end_testing/field_and_feed/e2e_json_feed_filter.json # input/data/end_to_end_testing/field_and_feed/e2e_json_manure_filter.json # input/data/end_to_end_testing/freestall/e2e_json_animal_filter.json # input/data/end_to_end_testing/freestall/e2e_json_crop_soil_filter.json # input/data/end_to_end_testing/freestall/e2e_json_feed_filter.json # input/data/end_to_end_testing/freestall/e2e_json_manure_filter.json # input/data/end_to_end_testing/open_lot/e2e_json_animal_filter.json # input/data/end_to_end_testing/open_lot/e2e_json_crop_soil_filter.json # input/data/end_to_end_testing/open_lot/e2e_json_feed_filter.json # input/data/end_to_end_testing/open_lot/e2e_json_manure_filter.json
|
Current Coverage: 99% Mypy errors on manure-only branch: 1133 |
|
Current Coverage: 99% Mypy errors on manure-only branch: 1133 |
|
Current Coverage: 99% Mypy errors on manure-only branch: 1133 |
|
Current Coverage: 99% Mypy errors on manure-only branch: 1164 |
ew3361zh
left a comment
There was a problem hiding this comment.
This seems mostly good and ran as expected (with the qualifier of no scientific evaluation of outputs from me as a SWE) but I think there needs to be stronger guardrails around the inputs given the limited scope of what a manure-only simulation is supposed to do. It could be CV guidelines in the future but within the scope of this PR, I think there are several places where warnings are raised for what seem like should be simulation-stopping data-issues.
Happy to discuss further if there are specific reasons for the way the current guardrails are set up.
|
Current Coverage: 99% Mypy errors on manure-only branch: 1164 |
|
Current Coverage: 99% Mypy errors on manure-only branch: 1164 |
ew3361zh
left a comment
There was a problem hiding this comment.
LGTM, nice work! I had a couple wording/formatting suggestions for clarity but otherwise worked great and raised errors as expected.
|
Current Coverage: 99% Mypy errors on manure-only branch: 1164 |
|
Follow up from the dev team wt today: I think it would be helpful to add the |
|
Current Coverage: 99% Mypy errors on manure-only branch: 1164 |
|
Current Coverage: % Mypy errors on manure-only branch: 1164 |
|
🚨 Some tests have failed. |
elle-andreen
left a comment
There was a problem hiding this comment.
This looks good - the default manure inputs I added are pretty similar to the example freestall scenario in amount/composition, and the resulting outputs make sense. Thanks for your work on this Matthew, very exciting step for the manure module!
Adds a
manure_onlysimulation type so the Manure Module can be run on its own.Context
Issue(s) closed by this pull request: closes #2896
What
SimulationType.MANURE_ONLYand its daily routine.DailyManureSupplier, which builds the daily manure streams from user input instead of from pens.manure_onlyexample scenario, registered as the sixth task inavailable_simulation_tasks.json.Why
The Manure Module could not be run by itself. Without the Animal Module nothing puts manure into the system, so every processor would sit empty for the whole simulation. Issue #2896 notes that a way of adding manure to the module throughout the year has to be defined before a manure-only scenario is possible.
How
The manure module already sets itself up from the existing
manure_managementandmanure_processor_connectioninputs, so the only missing piece was the manure supply. That supply is now stated directly as an input, following the same approach as the existingFieldManureSupplierstand-in on the manure to field boundary.Each entry in
daily_manure_streamsdescribes one stream: its first processor, the animals producing it, and the masses it carries per day.DailyManureSuppliervalidates the entries once at start-up and then rebuilds freshManureStreamobjects every simulated day, because processors consume and mutate the streams they receive. Water is the difference between total manure mass and total solids, and volume is derived from the slurry manure density, matching howPenbuilds a stream.Start-up validation rejects a parlor stream that is not from lactating cows and a stream whose total solids exceed its total manure mass, and warns on duplicate stream names.
Test plan
DailyManureSupplierand three for the simulation engine. Existing simulation type tests updated for the new type.manure_onlyexample scenario runs seven simulated years with 0 errors.Input Changes
Added:
daily_manure_supply_properties: a new optional input describing the manure streams entering the manure system each day. Only read when manure is simulated without animals.manure_onlyadded to thesimulation_typepattern inconfig_properties.example_manure_only_config.json,example_manure_only_daily_manure_supply.json,example_manure_only_metadata.json, andexample_manure_only_task.json.available_simulation_tasks.jsonregisters the newmanure_onlytask.No existing input files or schemas were changed.
Output Changes
Existing scenarios are unaffected. The new scenario reports the usual Manure Module variables.
Filter
N/A