annotate artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentLoadCalculation.java @ 7031:7ee382b3f839

Doc.
author Felix Wolfsteller <felix.wolfsteller@intevation.de>
date Tue, 17 Sep 2013 11:45:44 +0200
parents a18a43764793
children f4d6ef50665a
rev   line source
5863
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
1 /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
2 * Software engineering by Intevation GmbH
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
3 *
5994
af13ceeba52a Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5863
diff changeset
4 * This file is Free Software under the GNU AGPL (>=v3)
5863
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the
5994
af13ceeba52a Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5863
diff changeset
6 * documentation coming with Dive4Elements River for details.
5863
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
7 */
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
8
5831
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5788
diff changeset
9 package org.dive4elements.river.artifacts.model.minfo;
4373
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
10
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
11 import gnu.trove.TDoubleArrayList;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
12
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
13 import java.util.ArrayList;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
14 import java.util.List;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
15
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
16 import org.apache.log4j.Logger;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
17
5831
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5788
diff changeset
18 import org.dive4elements.river.artifacts.access.SedimentLoadAccess;
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5788
diff changeset
19 import org.dive4elements.river.artifacts.model.Calculation;
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5788
diff changeset
20 import org.dive4elements.river.artifacts.model.CalculationResult;
6381
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
21 import org.dive4elements.river.artifacts.model.Range;
4373
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
22
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
23
4483
cc6323401643 Cosmetics: Removed some WSP, obsolete imports. Documentation added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4373
diff changeset
24 /** Calculate sediment load. */
4373
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
25 public class SedimentLoadCalculation
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
26 extends Calculation
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
27 {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
28
4483
cc6323401643 Cosmetics: Removed some WSP, obsolete imports. Documentation added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4373
diff changeset
29 /** Private logger. */
4373
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
30 private static final Logger logger = Logger
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
31 .getLogger(SedimentLoadCalculation.class);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
32
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
33 protected String river;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
34 protected String yearEpoch;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
35 protected double kmUp;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
36 protected double kmLow;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
37 protected int[] period;
6740
68c7b5811c4f Cosmetics, docs, in range of issue1393.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6678
diff changeset
38 /** Years of chosen epochs. */
4373
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
39 protected int[][] epoch;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
40 protected String unit;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
41
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
42 public SedimentLoadCalculation() {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
43 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
44
6678
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6543
diff changeset
45 /** Returns CalculationResult with array of SedimentLoadResults. */
4373
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
46 public CalculationResult calculate(SedimentLoadAccess access) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
47 logger.info("SedimentLoadCalculation.calculate");
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
48
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
49 String river = access.getRiver();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
50 String yearEpoch = access.getYearEpoch();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
51 String unit = access.getUnit();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
52 int[] period = null;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
53 int[][] epoch = null;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
54 double kmUp = access.getUpperKM();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
55 double kmLow = access.getLowerKM();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
56 if (yearEpoch.equals("year")) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
57 period = access.getPeriod();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
58 epoch = null;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
59 }
4522
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
60 else if (yearEpoch.equals("epoch") || yearEpoch.equals("off_epoch")) {
4373
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
61 epoch = access.getEpochs();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
62 period = null;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
63 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
64 else {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
65 addProblem("minfo.missing.year_epoch");
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
66 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
67
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
68 if (river == null) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
69 // TODO: i18n
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
70 addProblem("minfo.missing.river");
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
71 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
72
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
73 if (period == null && epoch == null) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
74 addProblem("minfo.missing.time");
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
75 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
76
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
77 if (!hasProblems()) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
78 this.river = river;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
79 this.yearEpoch = yearEpoch;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
80 this.unit = unit;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
81 this.period = period;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
82 this.epoch = epoch;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
83 this.kmUp = kmUp;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
84 this.kmLow = kmLow;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
85 return internalCalculate();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
86 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
87
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
88 return new CalculationResult();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
89 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
90
6678
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6543
diff changeset
91 /** Returns CalculationResult with array of SedimentLoadResults. */
4373
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
92 private CalculationResult internalCalculate() {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
93 logger.debug("internalCalulate; mode:" + yearEpoch);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
94 if (yearEpoch.equals("year")) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
95 List<SedimentLoadResult> results =
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
96 new ArrayList<SedimentLoadResult>();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
97 for (int i = period[0]; i <= period[1]; i++) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
98 SedimentLoadResult res = calculateYear(i);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
99 results.add(res);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
100 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
101 return new CalculationResult(
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
102 results.toArray(new SedimentLoadResult[results.size()]), this);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
103 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
104 else if (yearEpoch.equals("epoch")) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
105 List<SedimentLoadResult> results =
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
106 new ArrayList<SedimentLoadResult>();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
107 for (int i = 0; i < epoch.length; i++) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
108 SedimentLoadResult res = calculateEpoch(i);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
109 results.add(res);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
110 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
111 return new CalculationResult(
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
112 results.toArray(new SedimentLoadResult[results.size()]), this);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
113 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
114 else if (yearEpoch.equals("off_epoch")) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
115 List<SedimentLoadResult> results =
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
116 new ArrayList<SedimentLoadResult>();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
117 for (int i = 0; i < epoch.length; i++) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
118 SedimentLoadResult res = calculateOffEpoch(i);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
119 results.add(res);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
120 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
121 return new CalculationResult(
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
122 results.toArray(new SedimentLoadResult[results.size()]), this);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
123 }
6950
40da4a6e2cfb SedimentLoadCalculation: Log an error on unknown mode.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6948
diff changeset
124 else {
40da4a6e2cfb SedimentLoadCalculation: Log an error on unknown mode.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6948
diff changeset
125 logger.error("Unknown mode " + yearEpoch);
40da4a6e2cfb SedimentLoadCalculation: Log an error on unknown mode.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6948
diff changeset
126 }
4373
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
127 return null;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
128 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
129
6948
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6928
diff changeset
130 /**
7031
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7023
diff changeset
131 * Take Loads and build average of all fractions at given km.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7023
diff changeset
132 * The average fractions value is set in resLoad.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7023
diff changeset
133 *
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7023
diff changeset
134 * @param km km at which to build fractions average.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7023
diff changeset
135 * @param epochLoads the loads to build average over.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7023
diff changeset
136 * @param[out] resLoad resulting SedimentLoad.
6948
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6928
diff changeset
137 */
6928
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
138 private void calculateEpochKm(
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
139 List<SedimentLoad> epochLoads,
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
140 SedimentLoad resLoad,
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
141 double km
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
142 ) {
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
143 int cSum = 0;
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
144 int fmSum = 0;
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
145 int sSum = 0;
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
146 int ssSum = 0;
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
147 int ssbSum = 0;
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
148 int sseSum = 0;
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
149 for (SedimentLoad load : epochLoads) {
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
150 SedimentLoadFraction f = load.getFraction(km);
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
151 if (f.getCoarse() > 0d) {
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
152 double c = resLoad.getFraction(km).getCoarse();
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
153 resLoad.setCoarse(km, c + f.getCoarse(), f.getCoarseRange());
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
154 cSum++;
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
155 }
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
156 if (f.getFineMiddle() > 0d) {
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
157 double fm = resLoad.getFraction(km).getFineMiddle();
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
158 resLoad.setFineMiddle(km, fm + f.getFineMiddle(), f.getFineMiddleRange());
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
159 fmSum++;
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
160 }
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
161 if (f.getSand() > 0d) {
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
162 double s = resLoad.getFraction(km).getSand();
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
163 resLoad.setSand(km, s + f.getSand(), f.getSandRange());
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
164 sSum++;
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
165 }
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
166 if (f.getSuspSand() > 0d) {
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
167 double s = resLoad.getFraction(km).getSuspSand();
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
168 resLoad.setSuspSand(km, s + f.getSuspSand(), f.getSuspSandRange());
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
169 ssSum++;
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
170 }
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
171 if (f.getSuspSandBed() > 0d) {
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
172 double s = resLoad.getFraction(km).getSuspSandBed();
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
173 resLoad.setSuspSandBed(km, s + f.getSuspSandBed(), f.getSuspSandBedRange());
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
174 ssbSum++;
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
175 }
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
176 if (f.getSuspSediment() > 0d) {
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
177 double s = resLoad.getFraction(km).getSuspSediment();
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
178 resLoad.setSuspSediment(km, s + f.getSuspSediment(), f.getSuspSedimentRange());
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
179 sseSum++;
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
180 }
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
181 }
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
182
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
183 SedimentLoadFraction fr = resLoad.getFraction(km);
7031
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7023
diff changeset
184 // Prevent divisions by zero.
6928
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
185 if (cSum != 0) {
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
186 resLoad.setCoarse(km, fr.getCoarse()/cSum, fr.getCoarseRange());
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
187 }
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
188 if (fmSum != 0) {
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
189 resLoad.setFineMiddle(km, fr.getFineMiddle()/fmSum,
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
190 fr.getFineMiddleRange());
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
191 }
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
192 if (sSum != 0) {
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
193 resLoad.setSand(km, fr.getSand()/sSum, fr.getSandRange());
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
194 }
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
195 if (ssSum != 0) {
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
196 resLoad.setSuspSand(km, fr.getSuspSand()/ssSum,
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
197 fr.getSuspSandRange());
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
198 }
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
199 if (ssbSum != 0) {
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
200 resLoad.setSuspSandBed(km, fr.getSuspSandBed()/ssbSum,
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
201 fr.getSuspSandBedRange());
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
202 }
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
203 if (sseSum != 0) {
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
204 resLoad.setSuspSediment(km, fr.getSuspSediment()/sseSum, fr.getSuspSedimentRange());
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
205 }
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
206 }
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
207
4373
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
208 private SedimentLoadResult calculateEpoch(int i) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
209 List<SedimentLoad> epochLoads = new ArrayList<SedimentLoad>();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
210 for (int j = epoch[i][0]; j < epoch[i][1]; j++) {
5661
b6297a67823e SedimentLoadFactory: Renamed getLoadwithData to getLoadWithData, update callers.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4543
diff changeset
211 epochLoads.add(SedimentLoadFactory.getLoadWithData(
4373
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
212 this.river,
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
213 this.yearEpoch,
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
214 this.kmLow,
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
215 this.kmUp,
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
216 j,
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
217 j));
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
218 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
219
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
220 SedimentLoad resLoad = new SedimentLoad();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
221 TDoubleArrayList kms = new TDoubleArrayList();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
222
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
223 for (SedimentLoad load : epochLoads) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
224 for (double km : load.getKms()) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
225 if (!kms.contains(km)) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
226 kms.add(km);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
227 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
228 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
229 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
230
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
231 for (int j = 0; j < kms.size(); j++) {
6928
2119f13f95ab SedimentLoadCalculation: Refactoring, extracted method.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6740
diff changeset
232 calculateEpochKm(epochLoads, resLoad, kms.get(j));
4373
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
233 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
234 resLoad.setDescription("");
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
235 resLoad.setEpoch(true);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
236
4522
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
237 SedimentLoadResult result;
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
238 SedimentLoad sl = calculateTotalLoad(resLoad, this.epoch[i][0]);
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
239 if (this.unit.equals("m3_per_a")) {
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
240 SedimentLoad slu = calculateUnit(sl, this.epoch[i][0]);
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
241 result = new SedimentLoadResult(
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
242 this.epoch[i][0],
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
243 this.epoch[i][1],
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
244 slu);
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
245 }
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
246 else {
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
247 result = new SedimentLoadResult(
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
248 this.epoch[i][0],
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
249 this.epoch[i][1],
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
250 sl);
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
251 }
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
252
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
253 return result;
4373
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
254 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
255
6948
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6928
diff changeset
256 /**
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6928
diff changeset
257 * Calculate/Fetch values at off. epochs.
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6928
diff changeset
258 * @param i index in epochs.
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6928
diff changeset
259 */
4373
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
260 private SedimentLoadResult calculateOffEpoch(int i) {
5661
b6297a67823e SedimentLoadFactory: Renamed getLoadwithData to getLoadWithData, update callers.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4543
diff changeset
261 SedimentLoad load = SedimentLoadFactory.getLoadWithData(
4522
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
262 this.river,
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
263 this.yearEpoch,
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
264 kmLow,
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
265 kmUp,
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
266 this.epoch[i][0],
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
267 this.epoch[i][1]);
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
268 SedimentLoadResult result;
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
269 SedimentLoad sl = calculateTotalLoad(load, this.epoch[i][0]);
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
270 if (unit.equals("m3_per_a")) {
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
271 SedimentLoad slu = calculateUnit(sl, epoch[i][0]);
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
272 result = new SedimentLoadResult(
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
273 this.epoch[i][0],
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
274 this.epoch[i][1],
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
275 slu);
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
276 }
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
277 else {
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
278 result = new SedimentLoadResult(
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
279 this.epoch[i][0],
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
280 this.epoch[i][1],
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
281 sl);
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
282 }
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
283
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
284 return result;
4373
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
285 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
286
6678
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6543
diff changeset
287 /**
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6543
diff changeset
288 * Fetch loads for a single year, calculate total and
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6543
diff changeset
289 * return the result containing both.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6543
diff changeset
290 * @param y year, e.g. 1980
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6543
diff changeset
291 */
4373
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
292 private SedimentLoadResult calculateYear(int y) {
5661
b6297a67823e SedimentLoadFactory: Renamed getLoadwithData to getLoadWithData, update callers.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4543
diff changeset
293 SedimentLoad load = SedimentLoadFactory.getLoadWithData(
4373
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
294 this.river,
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
295 this.yearEpoch,
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
296 this.kmLow,
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
297 this.kmUp,
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
298 y,
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
299 y);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
300
4522
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
301 SedimentLoadResult result;
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
302 SedimentLoad sl = calculateTotalLoad(load, y);
4373
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
303 if (unit.equals("m3_per_a")) {
4522
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
304 SedimentLoad slu = calculateUnit(sl, y);
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
305 result = new SedimentLoadResult(y, 0, slu);
4373
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
306 }
4522
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
307 else {
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
308 result = new SedimentLoadResult(y, 0, sl);
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
309 }
4373
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
310 return result;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
311 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
312
6374
48e92ff57f23 SedimentLoad*: Set range to fraction/fractions values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5994
diff changeset
313 /** Add up the loads of a year. */
4522
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
314 private SedimentLoad calculateTotalLoad(SedimentLoad load, int year) {
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
315 logger.debug("calculateTotalLoad");
5685
756df79274e1 SedimentLoadCalculation: Partly fix 1250 (calculate more than one total if possible).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5661
diff changeset
316 boolean problemThisYear = false;
4522
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
317 if (!load.hasCoarse()) {
5742
a4a894b15c35 Minor part of issue1235: dont show decimals of years.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5685
diff changeset
318 addProblem("missing.fraction.coarse", Integer.toString(year));
5685
756df79274e1 SedimentLoadCalculation: Partly fix 1250 (calculate more than one total if possible).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5661
diff changeset
319 problemThisYear = true;
4373
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
320 }
4522
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
321 if (!load.hasFineMiddle()) {
5742
a4a894b15c35 Minor part of issue1235: dont show decimals of years.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5685
diff changeset
322 addProblem("missing.fraction.fine_middle", Integer.toString(year));
5685
756df79274e1 SedimentLoadCalculation: Partly fix 1250 (calculate more than one total if possible).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5661
diff changeset
323 problemThisYear = true;
4522
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
324 }
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
325 if (!load.hasSand()) {
5742
a4a894b15c35 Minor part of issue1235: dont show decimals of years.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5685
diff changeset
326 addProblem("missing.fraction.sand", Integer.toString(year));
5685
756df79274e1 SedimentLoadCalculation: Partly fix 1250 (calculate more than one total if possible).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5661
diff changeset
327 problemThisYear = true;
4522
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
328 }
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
329 if (!load.hasSuspSand()) {
5742
a4a894b15c35 Minor part of issue1235: dont show decimals of years.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5685
diff changeset
330 addProblem("missing.fraction.susp_sand", Integer.toString(year));
5685
756df79274e1 SedimentLoadCalculation: Partly fix 1250 (calculate more than one total if possible).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5661
diff changeset
331 problemThisYear = true;
4522
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
332 }
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
333 if (!load.hasSuspSediment()) {
5742
a4a894b15c35 Minor part of issue1235: dont show decimals of years.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5685
diff changeset
334 addProblem("missing.fraction.susp_sediment", Integer.toString(year));
5685
756df79274e1 SedimentLoadCalculation: Partly fix 1250 (calculate more than one total if possible).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5661
diff changeset
335 problemThisYear = true;
4522
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
336 }
5685
756df79274e1 SedimentLoadCalculation: Partly fix 1250 (calculate more than one total if possible).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5661
diff changeset
337 if (problemThisYear) {
756df79274e1 SedimentLoadCalculation: Partly fix 1250 (calculate more than one total if possible).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5661
diff changeset
338 logger.warn("Some problem, not calculating total load.");
4522
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
339 return load;
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
340 }
6381
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
341 return partialTotal(load);
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
342 }
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
343
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
344
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
345
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
346 /**
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
347 * Set total values in load.
6678
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6543
diff changeset
348 *
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6543
diff changeset
349 * Therefore, run over the sorted kms and find ranges where either all
6381
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
350 * or all Geschiebe or just the Schwebstoff fractions are set.
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
351 * Merge these ranges and add (maybe new) respective fractions to
6678
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6543
diff changeset
352 * load. In the process, remember any 'unfished' ends from measurements
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6543
diff changeset
353 * where the km-ranges did not completely match.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6543
diff changeset
354 *
6381
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
355 * @param load SedimentLoad to add total values (and ranges) to.
6678
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6543
diff changeset
356 * @return input param load, with total values set.
6381
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
357 */
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
358 private SedimentLoad partialTotal(SedimentLoad load) {
7022
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6989
diff changeset
359 // The load with balanced ranges, will be returned.
6381
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
360 SedimentLoad fairLoad = load;
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
361
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
362 Range lastOtherRange = null;
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
363 double lastOtherValue = 0d;
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
364
6404
e6ceab9e3091 prep issue1235: Rename functions and variable to indicate use of other susp values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6381
diff changeset
365 Range lastSuspRange = null;
e6ceab9e3091 prep issue1235: Rename functions and variable to indicate use of other susp values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6381
diff changeset
366 double lastSuspValue = 0d;
6381
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
367
6970
7be97faf5848 flys/issue1235: Same kicks against a few inconsistencies and bugs in the calculation of sediment loads. I believe it _do_not_ delivers the right results.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6953
diff changeset
368 for (double km: load.getKms()) { // kms are already sorted!
6381
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
369 logger.debug ("Trying to add at km " + km);
4522
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
370 SedimentLoadFraction fraction = load.getFraction(km);
6970
7be97faf5848 flys/issue1235: Same kicks against a few inconsistencies and bugs in the calculation of sediment loads. I believe it _do_not_ delivers the right results.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6953
diff changeset
371 if (fraction.isComplete()) {
6381
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
372 double total = fraction.getCoarse() +
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
373 fraction.getFineMiddle() +
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
374 fraction.getSand() +
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
375 fraction.getSuspSand() +
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
376 fraction.getSuspSediment();
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
377 // Easiest case. Add values up and set'em.
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
378 if (fraction.getCoarseRange().equals(
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
379 fraction.getSuspSedimentRange())) {
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
380 lastOtherRange = null;
6404
e6ceab9e3091 prep issue1235: Rename functions and variable to indicate use of other susp values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6381
diff changeset
381 lastSuspRange = null;
6381
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
382 fairLoad.setTotal(km, total, fraction.getCoarseRange());
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
383 }
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
384 else {
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
385 // Need to split a range.
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
386 if (fraction.getCoarseRange().getEnd()
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
387 < fraction.getSuspSedimentRange().getEnd()) {
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
388 // Schwebstoff is longer.
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
389 // Adjust and remember schwebstoffs range and value.
6404
e6ceab9e3091 prep issue1235: Rename functions and variable to indicate use of other susp values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6381
diff changeset
390 lastSuspRange = (Range) fraction.getSuspSedimentRange().clone();
e6ceab9e3091 prep issue1235: Rename functions and variable to indicate use of other susp values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6381
diff changeset
391 lastSuspRange.setStart(fraction.getCoarseRange().getEnd());
6411
a21f7a3e4be5 Revert to rev 6404 for issue1235
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6405
diff changeset
392 lastSuspValue = fraction.getSuspSediment();
6381
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
393 lastOtherRange = null;
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
394 fairLoad.setTotal(km, total, fraction.getCoarseRange());
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
395 }
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
396 else {
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
397 // Geschiebe is longer.
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
398 // Adjust and remember other values.
7023
a18a43764793 issue1235: Do not add 'other' values twice to suspended sed. values, fix range.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7022
diff changeset
399 lastOtherRange = (Range) fraction.getCoarseRange().clone();
6381
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
400 lastOtherRange.setStart(fraction.getSuspSedimentRange().getEnd());
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
401 lastOtherValue = (total - fraction.getSuspSediment());
6404
e6ceab9e3091 prep issue1235: Rename functions and variable to indicate use of other susp values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6381
diff changeset
402 lastSuspRange = null;
6381
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
403 fairLoad.setTotal(km, total, fraction.getSuspSedimentRange());
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
404 }
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
405 }
4522
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
406 }
6970
7be97faf5848 flys/issue1235: Same kicks against a few inconsistencies and bugs in the calculation of sediment loads. I believe it _do_not_ delivers the right results.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6953
diff changeset
407 else if (fraction.hasOnlySuspValues() && lastOtherRange != null) {
6381
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
408 // Split stuff.
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
409 Range suspSedimentRange = fraction.getSuspSedimentRange();
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
410 // if intersects with last other range, cool! merge and add!
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
411 if (lastOtherRange.contains(km)) {
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
412 double maxStart = 0d;
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
413 double minEnd = 0d;
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
414 maxStart = Math.max(suspSedimentRange.getStart(),
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
415 lastOtherRange.getStart());
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
416
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
417 minEnd = Math.min(suspSedimentRange.getEnd(),
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
418 lastOtherRange.getEnd());
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
419 double total = lastOtherValue + fraction.getSuspSediment();
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
420 Range totalRange = new Range(maxStart, minEnd);
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
421 if (suspSedimentRange.getEnd() > lastOtherRange.getEnd()) {
6404
e6ceab9e3091 prep issue1235: Rename functions and variable to indicate use of other susp values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6381
diff changeset
422 lastSuspRange = (Range) suspSedimentRange.clone();
e6ceab9e3091 prep issue1235: Rename functions and variable to indicate use of other susp values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6381
diff changeset
423 lastSuspRange.setStart(lastOtherRange.getEnd());
6411
a21f7a3e4be5 Revert to rev 6404 for issue1235
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6405
diff changeset
424 lastSuspValue = fraction.getSuspSediment();
6381
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
425 lastOtherRange = null;
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
426 }
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
427 else {
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
428 // Other is "longer".
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
429 lastOtherRange.setStart(suspSedimentRange.getEnd());
6404
e6ceab9e3091 prep issue1235: Rename functions and variable to indicate use of other susp values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6381
diff changeset
430 lastSuspRange = null;
6381
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
431 }
6970
7be97faf5848 flys/issue1235: Same kicks against a few inconsistencies and bugs in the calculation of sediment loads. I believe it _do_not_ delivers the right results.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6953
diff changeset
432 if (lastOtherRange != null
7be97faf5848 flys/issue1235: Same kicks against a few inconsistencies and bugs in the calculation of sediment loads. I believe it _do_not_ delivers the right results.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6953
diff changeset
433 && Math.abs(suspSedimentRange.getEnd() - lastOtherRange.getEnd()) < 0.1d) {
6381
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
434 lastOtherRange = null;
6404
e6ceab9e3091 prep issue1235: Rename functions and variable to indicate use of other susp values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6381
diff changeset
435 lastSuspRange = null;
6381
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
436 }
7023
a18a43764793 issue1235: Do not add 'other' values twice to suspended sed. values, fix range.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7022
diff changeset
437 fairLoad.setTotal(km, total, totalRange);
6381
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
438 }
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
439 else {
6404
e6ceab9e3091 prep issue1235: Rename functions and variable to indicate use of other susp values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6381
diff changeset
440 lastSuspRange = suspSedimentRange;
6411
a21f7a3e4be5 Revert to rev 6404 for issue1235
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6405
diff changeset
441 lastSuspValue = fraction.getSuspSediment();
6381
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
442 lastOtherRange = null;
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
443 }
4522
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
444 }
6970
7be97faf5848 flys/issue1235: Same kicks against a few inconsistencies and bugs in the calculation of sediment loads. I believe it _do_not_ delivers the right results.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6953
diff changeset
445 else if (fraction.hasButSuspValues() && lastSuspRange != null) {
6381
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
446 // If intersects with last suspsed range, merge and add
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
447 double total = fraction.getCoarse() +
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
448 fraction.getFineMiddle() +
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
449 fraction.getSand() +
6411
a21f7a3e4be5 Revert to rev 6404 for issue1235
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6405
diff changeset
450 fraction.getSuspSand() +
6404
e6ceab9e3091 prep issue1235: Rename functions and variable to indicate use of other susp values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6381
diff changeset
451 lastSuspValue;
6381
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
452 double maxStart = Math.max(fraction.getCoarseRange().getStart(),
6404
e6ceab9e3091 prep issue1235: Rename functions and variable to indicate use of other susp values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6381
diff changeset
453 lastSuspRange.getStart());
e6ceab9e3091 prep issue1235: Rename functions and variable to indicate use of other susp values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6381
diff changeset
454 if (lastSuspRange.contains(km)) {
6381
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
455 double minEnd = Math.min(fraction.getCoarseRange().getEnd(),
6404
e6ceab9e3091 prep issue1235: Rename functions and variable to indicate use of other susp values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6381
diff changeset
456 lastSuspRange.getEnd());
6381
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
457 Range totalRange = new Range(maxStart, minEnd);
6404
e6ceab9e3091 prep issue1235: Rename functions and variable to indicate use of other susp values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6381
diff changeset
458 if (lastSuspRange.getEnd() > fraction.getCoarseRange().getEnd()) {
6381
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
459 // SuspSed longer.
6404
e6ceab9e3091 prep issue1235: Rename functions and variable to indicate use of other susp values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6381
diff changeset
460 lastSuspRange.setStart(fraction.getCoarseRange().getEnd());
6381
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
461 lastOtherRange = null;
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
462 }
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
463 else {
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
464 // Other longer
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
465 lastOtherRange = (Range) fraction.getCoarseRange().clone();
6404
e6ceab9e3091 prep issue1235: Rename functions and variable to indicate use of other susp values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6381
diff changeset
466 lastOtherRange.setStart(lastSuspRange.getEnd());
e6ceab9e3091 prep issue1235: Rename functions and variable to indicate use of other susp values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6381
diff changeset
467 lastSuspRange = null;
e6ceab9e3091 prep issue1235: Rename functions and variable to indicate use of other susp values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6381
diff changeset
468 lastOtherValue = total - lastSuspValue;
6381
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
469 }
6970
7be97faf5848 flys/issue1235: Same kicks against a few inconsistencies and bugs in the calculation of sediment loads. I believe it _do_not_ delivers the right results.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6953
diff changeset
470 if (lastSuspRange != null
7be97faf5848 flys/issue1235: Same kicks against a few inconsistencies and bugs in the calculation of sediment loads. I believe it _do_not_ delivers the right results.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6953
diff changeset
471 && lastOtherRange != null
7be97faf5848 flys/issue1235: Same kicks against a few inconsistencies and bugs in the calculation of sediment loads. I believe it _do_not_ delivers the right results.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6953
diff changeset
472 && Math.abs(lastSuspRange.getEnd() - lastOtherRange.getEnd()) < 0.1d) {
6381
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
473 lastOtherRange = null;
6404
e6ceab9e3091 prep issue1235: Rename functions and variable to indicate use of other susp values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6381
diff changeset
474 lastSuspRange = null;
6381
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
475 }
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
476 fairLoad.setTotal(km, total, totalRange);
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
477 }
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
478 else {
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
479 // Ranges are disjoint.
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
480 lastOtherRange = fraction.getCoarseRange();
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
481 lastOtherValue = total - fraction.getSuspSediment();
6404
e6ceab9e3091 prep issue1235: Rename functions and variable to indicate use of other susp values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6381
diff changeset
482 lastSuspRange = null;
6381
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
483 }
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
484 }
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
485 else {
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
486 // Some values are missing or no intersection with former values.
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
487 // Stay as we are.
6970
7be97faf5848 flys/issue1235: Same kicks against a few inconsistencies and bugs in the calculation of sediment loads. I believe it _do_not_ delivers the right results.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6953
diff changeset
488 if (fraction.hasButSuspValues()) {
6500
f3b3742fbdad SedimentLoadCalculation: Handle boring cases in total sed load calculation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6499
diff changeset
489 double total = fraction.getCoarse() +
f3b3742fbdad SedimentLoadCalculation: Handle boring cases in total sed load calculation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6499
diff changeset
490 fraction.getFineMiddle() +
f3b3742fbdad SedimentLoadCalculation: Handle boring cases in total sed load calculation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6499
diff changeset
491 fraction.getSand() +
f3b3742fbdad SedimentLoadCalculation: Handle boring cases in total sed load calculation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6499
diff changeset
492 fraction.getSuspSand();
f3b3742fbdad SedimentLoadCalculation: Handle boring cases in total sed load calculation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6499
diff changeset
493 lastOtherRange = fraction.getCoarseRange();
f3b3742fbdad SedimentLoadCalculation: Handle boring cases in total sed load calculation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6499
diff changeset
494 lastOtherValue = total;
f3b3742fbdad SedimentLoadCalculation: Handle boring cases in total sed load calculation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6499
diff changeset
495 lastSuspRange = null;
f3b3742fbdad SedimentLoadCalculation: Handle boring cases in total sed load calculation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6499
diff changeset
496 }
6970
7be97faf5848 flys/issue1235: Same kicks against a few inconsistencies and bugs in the calculation of sediment loads. I believe it _do_not_ delivers the right results.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6953
diff changeset
497 else if (fraction.hasOnlySuspValues()) {
6500
f3b3742fbdad SedimentLoadCalculation: Handle boring cases in total sed load calculation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6499
diff changeset
498 lastSuspRange = fraction.getSuspSedimentRange();
f3b3742fbdad SedimentLoadCalculation: Handle boring cases in total sed load calculation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6499
diff changeset
499 lastSuspValue = fraction.getSuspSediment();
f3b3742fbdad SedimentLoadCalculation: Handle boring cases in total sed load calculation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6499
diff changeset
500 lastOtherRange = null;
f3b3742fbdad SedimentLoadCalculation: Handle boring cases in total sed load calculation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6499
diff changeset
501 }
6381
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
502 }
4373
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
503 }
6381
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
504 return fairLoad;
4373
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
505 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
506
6381
df1a3826c691 SedimentLoadCalculation: Calculate and set Total Load values ind a brutal range merging manner.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6377
diff changeset
507
6678
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6543
diff changeset
508 /**
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6543
diff changeset
509 * Transform values in load.
6948
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6928
diff changeset
510 * Background is to transform values measured in
6951
f5f60b3d9180 Doc fix.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6950
diff changeset
511 * t/a to m^3/a using the specific measured densities.
6948
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6928
diff changeset
512 *
6678
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6543
diff changeset
513 * @param load The load of which values should be transformed.
6948
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6928
diff changeset
514 * @param year The year at which to look at density (e.g. 2003).
d4108d6c4000 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6928
diff changeset
515 *
6678
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6543
diff changeset
516 * @return parameter load with transformed values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6543
diff changeset
517 */
4522
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
518 private SedimentLoad calculateUnit(SedimentLoad load, int year) {
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
519 SedimentDensity density =
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
520 SedimentDensityFactory.getSedimentDensity(river, kmLow, kmUp, year);
6951
f5f60b3d9180 Doc fix.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6950
diff changeset
521
4522
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
522 for (double km: load.getKms()) {
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
523 double dens = density.getDensity(km, year);
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
524 SedimentLoadFraction fraction = load.getFraction(km);
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
525 double coarse = fraction.getCoarse();
6376
8d6f23243d1d SedimentLoad*: Switch from snake_case to camelCase.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6375
diff changeset
526 double fineMiddle = fraction.getFineMiddle();
4522
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
527 double sand = fraction.getSand();
6376
8d6f23243d1d SedimentLoad*: Switch from snake_case to camelCase.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6375
diff changeset
528 double suspSand = fraction.getSuspSand();
8d6f23243d1d SedimentLoad*: Switch from snake_case to camelCase.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6375
diff changeset
529 double bedSand = fraction.getSuspSandBed();
8d6f23243d1d SedimentLoad*: Switch from snake_case to camelCase.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6375
diff changeset
530 double sediment = fraction.getSuspSediment();
4522
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
531 double total = fraction.getTotal();
6953
733c35239fe7 issue1462/3: When changing units (t/a -> m^3/a), also change total load.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6951
diff changeset
532 double loadTotal = fraction.getLoadTotal();
6374
48e92ff57f23 SedimentLoad*: Set range to fraction/fractions values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5994
diff changeset
533 load.setCoarse(km, (coarse * dens), fraction.getCoarseRange());
48e92ff57f23 SedimentLoad*: Set range to fraction/fractions values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5994
diff changeset
534 load.setFineMiddle(km, (fineMiddle * dens), fraction.getFineMiddleRange());
48e92ff57f23 SedimentLoad*: Set range to fraction/fractions values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5994
diff changeset
535 load.setSand(km, (sand * dens), fraction.getSandRange());
48e92ff57f23 SedimentLoad*: Set range to fraction/fractions values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5994
diff changeset
536 load.setSuspSand(km, (suspSand * dens), fraction.getSuspSandRange());
48e92ff57f23 SedimentLoad*: Set range to fraction/fractions values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5994
diff changeset
537 load.setSuspSandBed(km, (bedSand * dens), fraction.getSuspSandBedRange());
48e92ff57f23 SedimentLoad*: Set range to fraction/fractions values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5994
diff changeset
538 load.setSuspSediment(km, (sediment * dens), fraction.getSuspSedimentRange());
48e92ff57f23 SedimentLoad*: Set range to fraction/fractions values.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5994
diff changeset
539 load.setTotal(km, (total * dens), fraction.getTotalRange());
6953
733c35239fe7 issue1462/3: When changing units (t/a -> m^3/a), also change total load.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6951
diff changeset
540 load.setLoadTotal(km, (loadTotal * dens), fraction.getLoadTotalRange());
4522
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
541 }
4373
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
542 return load;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
543 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
544 }
4483
cc6323401643 Cosmetics: Removed some WSP, obsolete imports. Documentation added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4373
diff changeset
545 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :

http://dive4elements.wald.intevation.org