Skip to content

Commit 7b3420c

Browse files
authored
Change events.out to pool amounts instead of fluxes (#349)
* Change events.out to pool amounts instead of fluxes * Update events.out example * events.out change * Update events.out after change to pool amounts * Update for calcLeafOnOff format change in events.out * Updates for events.out format change
1 parent af5f3b8 commit 7b3420c

9 files changed

Lines changed: 399 additions & 393 deletions

File tree

docs/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ sections to include in release notes:
3737
### Changed
3838

3939
- Renamed the CLI option `--file-name` to `--file-prefix` for clarity while keeping `--file-name` as a backward-compatible alias (#320)
40+
- Values in `events.out` changed to pool deltas rather than flux amounts (#349)
4041

4142
### Removed
4243

docs/user-guide/model-outputs.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ When event handling is enabled, SIPNET will create `events.out` by default, or
6565
This file is designed primarily for _testing and debugging_.
6666
It contains one row for each agronomic event that is processed.
6767
Each row lists the year, day, event type, and parameter name/value pairs.
68-
The name/value pairs represent the state variables that are directly changed by an event, recording the change (delta) applied to each.
68+
The name/value pairs represent the change to a pool directly calculated from an event.
6969

7070
Information in the events output file can, in principle, be reconstructed or
7171
inferred from the corresponding events input file and `sipnet.out` though this
@@ -78,10 +78,10 @@ Note the delimiters: spaces separate columns, commas separate name/value pairs,
7878

7979
```
8080
year day type param_name=delta[,param_name=delta,...]
81-
2023 65 plant envi.plantLeafC=3.00,envi.plantWoodC=4.00,envi.fineRootC=5.00,envi.coarseRootC=6.00
82-
2023 70 irrig envi.soilWater=5.00
83-
2023 200 harv env.litter=5.46,envi.plantLeafC=-5.93,envi.plantWoodC=-4.75,envi.fineRootC=-3.73,envi.coarseRootC=-3.89
84-
2024 65 plant envi.plantLeafC=3.00,envi.plantWoodC=5.00,envi.fineRootC=7.00,envi.coarseRootC=9.00
85-
2024 70 irrig fluxes.immedEvap=2.50,envi.soilWater=2.50
86-
2024 200 harv env.litter=4.25,envi.plantLeafC=-1.39,envi.plantWoodC=-1.63,envi.fineRootC=-2.52,envi.coarseRootC=-2.97
81+
2023 65 plant eventLeafC=3.00,eventWoodC=4.00,eventFineRootC=5.00,eventCoarseRootC=6.00,eventInputC=18.00,eventInputN=0.00
82+
2023 70 irrig eventSoilWater=5.00,eventEvap=0.00
83+
2023 200 harv eventSoilC=1.90,eventLitterC=3.56,eventLeafC=-5.93,eventWoodC=-4.75,eventFineRootC=-3.73,eventCoarseRootC=-3.89,eventSoilOrgN=0.00,eventLitterN=0.00,eventOutputC=12.83,eventOutputN=0.00
84+
2024 65 plant eventLeafC=3.00,eventWoodC=5.00,eventFineRootC=7.00,eventCoarseRootC=9.00,eventInputC=24.00,eventInputN=0.00
85+
2024 70 irrig eventSoilWater=2.50,eventEvap=2.50
86+
2024 200 harv eventSoilC=2.74,eventLitterC=1.51,eventLeafC=-1.39,eventWoodC=-1.63,eventFineRootC=-2.52,eventCoarseRootC=-2.97,eventSoilOrgN=0.00,eventLitterN=0.00,eventOutputC=4.25,eventOutputN=0.00
8787
```

src/sipnet/events.c

Lines changed: 30 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -486,8 +486,8 @@ void processEvents(void) {
486486
}
487487
fluxes.eventEvap += evapAmount / climLen;
488488
fluxes.eventSoilWater += soilAmount / climLen;
489-
writeEventOut(gEvent, 2, "fluxes.eventSoilWater", soilAmount / climLen,
490-
"fluxes.eventEvap", evapAmount / climLen);
489+
writeEventOut(gEvent, 2, "eventSoilWater", soilAmount, "eventEvap",
490+
evapAmount);
491491
} break;
492492
case PLANTING: {
493493
const PlantingParams *plantParams = gEvent->eventParams;
@@ -515,12 +515,15 @@ void processEvents(void) {
515515
fluxes.eventInputN += inputN / climLen;
516516
}
517517

518-
writeEventOut(gEvent, 6, "fluxes.eventLeafC", leafC / climLen,
519-
"fluxes.eventWoodC", woodC / climLen,
520-
"fluxes.eventFineRootC", fineRootC / climLen,
521-
"fluxes.eventCoarseRootC", coarseRootC / climLen,
522-
"fluxes.eventInputC", inputC / climLen,
523-
"fluxes.eventInputN", inputN / climLen);
518+
// clang-format off
519+
writeEventOut(gEvent, 6,
520+
"eventLeafC", leafC,
521+
"eventWoodC", woodC,
522+
"eventFineRootC", fineRootC,
523+
"eventCoarseRootC", coarseRootC,
524+
"eventInputC", inputC,
525+
"eventInputN", inputN);
526+
// clang-format on
524527
} break;
525528
case HARVEST: {
526529
// Harvest can both remove biomass and move biomass to the soil/litter
@@ -592,16 +595,16 @@ void processEvents(void) {
592595
// clang-format off
593596
writeEventOut(
594597
gEvent, 10,
595-
"fluxes.eventSoilC", soilAdd / climLen,
596-
"fluxes.eventLitterC", litterAdd / climLen,
597-
"fluxes.eventLeafC", leafDelta / climLen,
598-
"fluxes.eventWoodC", woodDelta / climLen,
599-
"fluxes.eventFineRootC", fineDelta / climLen,
600-
"fluxes.eventCoarseRootC", coarseDelta / climLen,
601-
"fluxes.eventSoilOrgN", soilNAdd / climLen,
602-
"fluxes.eventLitterN", litterNAdd / climLen,
603-
"fluxes.eventOutputC", outputC / climLen,
604-
"fluxes.eventOutputN", outputN / climLen);
598+
"eventSoilC", soilAdd,
599+
"eventLitterC", litterAdd,
600+
"eventLeafC", leafDelta,
601+
"eventWoodC", woodDelta,
602+
"eventFineRootC", fineDelta,
603+
"eventCoarseRootC", coarseDelta,
604+
"eventSoilOrgN", soilNAdd,
605+
"eventLitterN", litterNAdd,
606+
"eventOutputC", outputC,
607+
"eventOutputN", outputN);
605608
// clang-format on
606609
} break;
607610
case TILLAGE: {
@@ -646,12 +649,12 @@ void processEvents(void) {
646649

647650
// clang-format off
648651
writeEventOut(gEvent, 6,
649-
"fluxes.eventLitterC", ctx.litterPool ? orgC / climLen : 0.0,
650-
"fluxes.eventSoilC", ctx.litterPool ? 0.0 : orgC / climLen,
651-
"fluxes.eventMinN", minN / climLen,
652-
"fluxes.eventLitterN", orgN / climLen,
653-
"fluxes.eventInputC", orgC / climLen,
654-
"fluxes.eventInputN", (orgN + minN) / climLen);
652+
"eventLitterC", ctx.litterPool ? orgC : 0.0,
653+
"eventSoilC", ctx.litterPool ? 0.0 : orgC,
654+
"eventMinN", minN,
655+
"eventLitterN", orgN,
656+
"eventInputC", orgC,
657+
"eventInputN", (orgN + minN));
655658
// clang-format on
656659
} break;
657660
case LEAFON: {
@@ -692,9 +695,9 @@ void processEvents(void) {
692695

693696
// clang-format off
694697
writeEventOut(gEvent, 3,
695-
"fluxes.eventLeafOffLitter", leafOff / climLen,
696-
"fluxes.eventLeafOffNResorption", leafNResorption / climLen,
697-
"fluxes.eventLitterN", litterNAdd / climLen);
698+
"eventLeafOffLitter", leafOff,
699+
"eventLeafOffNResorption", leafNResorption,
700+
"eventLitterN", litterNAdd);
698701
// clang-format on
699702
} break;
700703
default:

src/sipnet/sipnet.c

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -836,7 +836,8 @@ void calcLeafOnOffFluxes(double *leafOnCreation, double *leafOnFromWood,
836836
// check for end of growing season:
837837
if (!phenologyTrackers.didLeafFall && pastLeafFall()) {
838838
// we just reached the end of the growing season
839-
double leafOff = (plantLeafC * params.fracLeafFall) / climate->length;
839+
double len = climate->length;
840+
double leafOff = (plantLeafC * params.fracLeafFall) / len;
840841
*leafLitter += leafOff;
841842
phenologyTrackers.didLeafFall = 1;
842843
if (leafOff > TINY && ctx.events) {
@@ -846,8 +847,8 @@ void calcLeafOnOffFluxes(double *leafOnCreation, double *leafOnFromWood,
846847
*leafOffNResorption += nResorp;
847848
}
848849
writeComputedEventOut(climate->year, climate->day,
849-
eventTypeToString(LEAFOFF), 2, "fluxes.leafLitter",
850-
leafOff, "fluxes.leafOffNResorption", nResorp);
850+
eventTypeToString(LEAFOFF), 2, "leafLitter",
851+
leafOff * len, "leafOffNResorption", nResorp * len);
851852
}
852853
}
853854
}
@@ -1250,19 +1251,20 @@ void resetFluxes(void) { fluxes = (struct FluxVars){0}; }
12501251
*/
12511252
void writeLeafOnEventIfNeeded(void) {
12521253
const char *type = eventTypeToString(LEAFON);
1254+
const double len = climate->length;
12531255
if (fluxes.leafOnCreation > TINY && ctx.events) {
12541256
writeComputedEventOut(climate->year, climate->day, type, 2,
1255-
"fluxes.leafOnCreation", fluxes.leafOnCreation,
1256-
"fluxes.leafOnCreationFromWood",
1257-
fluxes.leafOnCreationFromWood);
1257+
"leafOnCreation", fluxes.leafOnCreation * len,
1258+
"leafOnCreationFromWood",
1259+
fluxes.leafOnCreationFromWood * len);
12581260
}
12591261
if (fluxes.eventLeafOnCreation > TINY && ctx.events) {
12601262
// Not really a computed event, but we don't have the event object here, so
12611263
// we use this mechanism
12621264
writeComputedEventOut(
1263-
climate->year, climate->day, type, 2, "fluxes.eventLeafOnCreation",
1264-
fluxes.eventLeafOnCreation, "fluxes.eventLeafOnCreationFromWood",
1265-
fluxes.eventLeafOnCreationFromWood);
1265+
climate->year, climate->day, type, 2, "eventLeafOnCreation",
1266+
fluxes.eventLeafOnCreation * len, "eventLeafOnCreationFromWood",
1267+
fluxes.eventLeafOnCreationFromWood * len);
12661268
}
12671269
}
12681270

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
year day type param_name=delta[,param_name=delta,...]
2-
2023 65 plant fluxes.eventLeafC=6.00,fluxes.eventWoodC=8.00,fluxes.eventFineRootC=10.00,fluxes.eventCoarseRootC=12.00,fluxes.eventInputC=36.00,fluxes.eventInputN=0.00
3-
2023 70 irrig fluxes.eventSoilWater=10.00,fluxes.eventEvap=0.00
4-
2023 200 harv fluxes.eventSoilC=3.81,fluxes.eventLitterC=7.12,fluxes.eventLeafC=-11.86,fluxes.eventWoodC=-9.50,fluxes.eventFineRootC=-7.46,fluxes.eventCoarseRootC=-7.78,fluxes.eventSoilOrgN=0.00,fluxes.eventLitterN=0.00,fluxes.eventOutputC=25.66,fluxes.eventOutputN=0.00
5-
2024 65 plant fluxes.eventLeafC=6.00,fluxes.eventWoodC=10.00,fluxes.eventFineRootC=14.00,fluxes.eventCoarseRootC=18.00,fluxes.eventInputC=48.00,fluxes.eventInputN=0.00
6-
2024 70 irrig fluxes.eventSoilWater=5.00,fluxes.eventEvap=5.00
7-
2024 200 harv fluxes.eventSoilC=5.48,fluxes.eventLitterC=3.02,fluxes.eventLeafC=-2.78,fluxes.eventWoodC=-3.27,fluxes.eventFineRootC=-5.04,fluxes.eventCoarseRootC=-5.93,fluxes.eventSoilOrgN=0.00,fluxes.eventLitterN=0.00,fluxes.eventOutputC=8.51,fluxes.eventOutputN=0.00
2+
2023 65 plant eventLeafC=3.00,eventWoodC=4.00,eventFineRootC=5.00,eventCoarseRootC=6.00,eventInputC=18.00,eventInputN=0.00
3+
2023 70 irrig eventSoilWater=5.00,eventEvap=0.00
4+
2023 200 harv eventSoilC=1.90,eventLitterC=3.56,eventLeafC=-5.93,eventWoodC=-4.75,eventFineRootC=-3.73,eventCoarseRootC=-3.89,eventSoilOrgN=0.00,eventLitterN=0.00,eventOutputC=12.83,eventOutputN=0.00
5+
2024 65 plant eventLeafC=3.00,eventWoodC=5.00,eventFineRootC=7.00,eventCoarseRootC=9.00,eventInputC=24.00,eventInputN=0.00
6+
2024 70 irrig eventSoilWater=2.50,eventEvap=2.50
7+
2024 200 harv eventSoilC=2.74,eventLitterC=1.51,eventLeafC=-1.39,eventWoodC=-1.63,eventFineRootC=-2.52,eventCoarseRootC=-2.97,eventSoilOrgN=0.00,eventLitterN=0.00,eventOutputC=4.25,eventOutputN=0.00
Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
2023 65 plant fluxes.eventLeafC=20.00,fluxes.eventWoodC=10.00,fluxes.eventFineRootC=8.00,fluxes.eventCoarseRootC=6.00,fluxes.eventInputC=44.00,fluxes.eventInputN=0.00
2-
2023 70 irrig fluxes.eventSoilWater=10.00,fluxes.eventEvap=0.00
3-
2023 200 harv fluxes.eventSoilC=24.80,fluxes.eventLitterC=0.00,fluxes.eventLeafC=-9.60,fluxes.eventWoodC=-6.40,fluxes.eventFineRootC=-9.60,fluxes.eventCoarseRootC=-9.60,fluxes.eventSoilOrgN=0.00,fluxes.eventLitterN=0.00,fluxes.eventOutputC=10.40,fluxes.eventOutputN=0.00
4-
2024 65 plant fluxes.eventLeafC=20.00,fluxes.eventWoodC=10.00,fluxes.eventFineRootC=8.00,fluxes.eventCoarseRootC=6.00,fluxes.eventInputC=44.00,fluxes.eventInputN=0.00
5-
2024 70 irrig fluxes.eventSoilWater=5.00,fluxes.eventEvap=5.00
6-
2024 200 harv fluxes.eventSoilC=24.28,fluxes.eventLitterC=0.00,fluxes.eventLeafC=-20.64,fluxes.eventWoodC=-11.76,fluxes.eventFineRootC=-5.76,fluxes.eventCoarseRootC=-4.96,fluxes.eventSoilOrgN=0.00,fluxes.eventLitterN=0.00,fluxes.eventOutputC=18.84,fluxes.eventOutputN=0.00
1+
2023 65 plant eventLeafC=10.00,eventWoodC=5.00,eventFineRootC=4.00,eventCoarseRootC=3.00,eventInputC=22.00,eventInputN=0.00
2+
2023 70 irrig eventSoilWater=5.00,eventEvap=0.00
3+
2023 200 harv eventSoilC=12.40,eventLitterC=0.00,eventLeafC=-4.80,eventWoodC=-3.20,eventFineRootC=-4.80,eventCoarseRootC=-4.80,eventSoilOrgN=0.00,eventLitterN=0.00,eventOutputC=5.20,eventOutputN=0.00
4+
2024 65 plant eventLeafC=10.00,eventWoodC=5.00,eventFineRootC=4.00,eventCoarseRootC=3.00,eventInputC=22.00,eventInputN=0.00
5+
2024 70 irrig eventSoilWater=2.50,eventEvap=2.50
6+
2024 200 harv eventSoilC=12.14,eventLitterC=0.00,eventLeafC=-10.32,eventWoodC=-5.88,eventFineRootC=-2.88,eventCoarseRootC=-2.48,eventSoilOrgN=0.00,eventLitterN=0.00,eventOutputC=9.42,eventOutputN=0.00

0 commit comments

Comments
 (0)