annotate artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentLoadCalculation.java @ 5994:af13ceeba52a

Removed trailing whitespace.
author Sascha L. Teichmann <teichmann@intevation.de>
date Sun, 12 May 2013 18:13:50 +0200
parents 4897a58c8746
children 48e92ff57f23
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;
4373
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
21
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
22
4483
cc6323401643 Cosmetics: Removed some WSP, obsolete imports. Documentation added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4373
diff changeset
23 /** Calculate sediment load. */
4373
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
24 public class SedimentLoadCalculation
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
25 extends Calculation
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
26 {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
27
4483
cc6323401643 Cosmetics: Removed some WSP, obsolete imports. Documentation added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4373
diff changeset
28 /** Private logger. */
4373
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
29 private static final Logger logger = Logger
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
30 .getLogger(SedimentLoadCalculation.class);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
31
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
32 protected String river;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
33 protected String yearEpoch;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
34 protected double kmUp;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
35 protected double kmLow;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
36 protected int[] period;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
37 protected int[][] epoch;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
38 protected String unit;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
39
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
40 public SedimentLoadCalculation() {
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
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
43 public CalculationResult calculate(SedimentLoadAccess access) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
44 logger.info("SedimentLoadCalculation.calculate");
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
45
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
46 String river = access.getRiver();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
47 String yearEpoch = access.getYearEpoch();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
48 String unit = access.getUnit();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
49 int[] period = null;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
50 int[][] epoch = null;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
51 double kmUp = access.getUpperKM();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
52 double kmLow = access.getLowerKM();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
53 if (yearEpoch.equals("year")) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
54 period = access.getPeriod();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
55 epoch = null;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
56 }
4522
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
57 else if (yearEpoch.equals("epoch") || yearEpoch.equals("off_epoch")) {
4373
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
58 epoch = access.getEpochs();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
59 period = null;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
60 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
61 else {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
62 addProblem("minfo.missing.year_epoch");
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
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
65 if (river == null) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
66 // TODO: i18n
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
67 addProblem("minfo.missing.river");
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
68 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
69
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
70 if (period == null && epoch == null) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
71 addProblem("minfo.missing.time");
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
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
74 if (!hasProblems()) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
75 this.river = river;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
76 this.yearEpoch = yearEpoch;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
77 this.unit = unit;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
78 this.period = period;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
79 this.epoch = epoch;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
80 this.kmUp = kmUp;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
81 this.kmLow = kmLow;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
82 return internalCalculate();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
83 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
84
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
85 return new CalculationResult();
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 private CalculationResult internalCalculate() {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
89 logger.debug("internalCalulate; mode:" + yearEpoch);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
90 if (yearEpoch.equals("year")) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
91 List<SedimentLoadResult> results =
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
92 new ArrayList<SedimentLoadResult>();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
93 for (int i = period[0]; i <= period[1]; i++) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
94 SedimentLoadResult res = calculateYear(i);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
95 results.add(res);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
96 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
97 return new CalculationResult(
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
98 results.toArray(new SedimentLoadResult[results.size()]), this);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
99 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
100 else if (yearEpoch.equals("epoch")) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
101 List<SedimentLoadResult> results =
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
102 new ArrayList<SedimentLoadResult>();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
103 for (int i = 0; i < epoch.length; i++) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
104 SedimentLoadResult res = calculateEpoch(i);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
105 results.add(res);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
106 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
107 return new CalculationResult(
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
108 results.toArray(new SedimentLoadResult[results.size()]), this);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
109 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
110 else if (yearEpoch.equals("off_epoch")) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
111 List<SedimentLoadResult> results =
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
112 new ArrayList<SedimentLoadResult>();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
113 for (int i = 0; i < epoch.length; i++) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
114 SedimentLoadResult res = calculateOffEpoch(i);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
115 results.add(res);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
116 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
117 return new CalculationResult(
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
118 results.toArray(new SedimentLoadResult[results.size()]), this);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
119 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
120 return null;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
121 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
122
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
123 private SedimentLoadResult calculateEpoch(int i) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
124 List<SedimentLoad> epochLoads = new ArrayList<SedimentLoad>();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
125 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
126 epochLoads.add(SedimentLoadFactory.getLoadWithData(
4373
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
127 this.river,
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
128 this.yearEpoch,
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
129 this.kmLow,
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
130 this.kmUp,
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
131 j,
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
132 j));
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
133 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
134
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
135 SedimentLoad resLoad = new SedimentLoad();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
136 TDoubleArrayList kms = new TDoubleArrayList();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
137
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
138 for (SedimentLoad load : epochLoads) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
139 for (double km : load.getKms()) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
140 if (!kms.contains(km)) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
141 kms.add(km);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
142 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
143 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
144 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
145
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
146 for (int j = 0; j < kms.size(); j++) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
147 int cSum = 0;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
148 int fmSum = 0;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
149 int sSum = 0;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
150 int ssSum = 0;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
151 int ssbSum = 0;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
152 int sseSum = 0;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
153 double km = kms.get(j);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
154 for (SedimentLoad load : epochLoads) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
155 SedimentLoadFraction f = load.getFraction(km);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
156 if (f.getCoarse() > 0d) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
157 double c = resLoad.getFraction(km).getCoarse();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
158 resLoad.setCoarse(km, c + f.getCoarse());
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
159 cSum++;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
160 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
161 if (f.getFine_middle() > 0d) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
162 double fm = resLoad.getFraction(km).getFine_middle();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
163 resLoad.setFineMiddle(km, fm + f.getFine_middle());
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
164 fmSum++;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
165 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
166 if (f.getSand() > 0d) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
167 double s = resLoad.getFraction(km).getSand();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
168 resLoad.setSand(km, s + f.getSand());
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
169 sSum++;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
170 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
171 if (f.getSusp_sand() > 0d) {
4522
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
172 double s = resLoad.getFraction(km).getSusp_sand();
4373
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
173 resLoad.setSuspSand(km, s + f.getSusp_sand());
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
174 ssSum++;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
175 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
176 if (f.getSusp_sand_bed() > 0d) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
177 double s = resLoad.getFraction(km).getSusp_sand_bed();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
178 resLoad.setSuspSandBed(km, s + f.getSusp_sand_bed());
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
179 ssbSum++;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
180 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
181 if (f.getSusp_sediment() > 0d) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
182 double s = resLoad.getFraction(km).getSusp_sediment();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
183 resLoad.setSuspSediment(km, s + f.getSusp_sediment());
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
184 sseSum++;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
185 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
186 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
187 SedimentLoadFraction fr = resLoad.getFraction(km);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
188 resLoad.setCoarse(km, fr.getCoarse()/cSum);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
189 resLoad.setFineMiddle(km, fr.getFine_middle()/fmSum);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
190 resLoad.setSand(km, fr.getSand()/sSum);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
191 resLoad.setSuspSand(km, fr.getSusp_sand()/ssSum);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
192 resLoad.setSuspSandBed(km, fr.getSusp_sand_bed()/ssbSum);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
193 resLoad.setSuspSediment(km, fr.getSusp_sediment()/sseSum);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
194 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
195 resLoad.setDescription("");
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
196 resLoad.setEpoch(true);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
197
4522
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
198 SedimentLoadResult result;
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
199 SedimentLoad sl = calculateTotalLoad(resLoad, this.epoch[i][0]);
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
200 if (this.unit.equals("m3_per_a")) {
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
201 SedimentLoad slu = calculateUnit(sl, this.epoch[i][0]);
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
202 result = new SedimentLoadResult(
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
203 this.epoch[i][0],
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
204 this.epoch[i][1],
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
205 slu);
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
206 }
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
207 else {
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
208 result = new SedimentLoadResult(
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
209 this.epoch[i][0],
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
210 this.epoch[i][1],
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
211 sl);
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
212 }
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
213
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
214 return result;
4373
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
215 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
216
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
217 private SedimentLoadResult calculateOffEpoch(int i) {
5661
b6297a67823e SedimentLoadFactory: Renamed getLoadwithData to getLoadWithData, update callers.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4543
diff changeset
218 SedimentLoad load = SedimentLoadFactory.getLoadWithData(
4522
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
219 this.river,
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
220 this.yearEpoch,
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
221 kmLow,
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
222 kmUp,
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
223 this.epoch[i][0],
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
224 this.epoch[i][1]);
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
225 SedimentLoadResult result;
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
226 SedimentLoad sl = calculateTotalLoad(load, this.epoch[i][0]);
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
227 if (unit.equals("m3_per_a")) {
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
228 SedimentLoad slu = calculateUnit(sl, epoch[i][0]);
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
229 result = new SedimentLoadResult(
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
230 this.epoch[i][0],
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
231 this.epoch[i][1],
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
232 slu);
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
233 }
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
234 else {
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
235 result = new SedimentLoadResult(
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
236 this.epoch[i][0],
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
237 this.epoch[i][1],
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
238 sl);
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
239 }
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
240
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
241 return result;
4373
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
242 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
243
5788
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5742
diff changeset
244 /** Fetch loads for a single year, calculate total and
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5742
diff changeset
245 * return the result containing both. */
4373
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
246 private SedimentLoadResult calculateYear(int y) {
5661
b6297a67823e SedimentLoadFactory: Renamed getLoadwithData to getLoadWithData, update callers.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4543
diff changeset
247 SedimentLoad load = SedimentLoadFactory.getLoadWithData(
4373
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
248 this.river,
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
249 this.yearEpoch,
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
250 this.kmLow,
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
251 this.kmUp,
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
252 y,
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
253 y);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
254
4522
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
255 SedimentLoadResult result;
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
256 SedimentLoad sl = calculateTotalLoad(load, y);
4373
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
257 if (unit.equals("m3_per_a")) {
4522
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
258 SedimentLoad slu = calculateUnit(sl, y);
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
259 result = new SedimentLoadResult(y, 0, slu);
4373
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
260 }
4522
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
261 else {
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
262 result = new SedimentLoadResult(y, 0, sl);
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
263 }
4373
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
264 return result;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
265 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
266
4522
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
267 private SedimentLoad calculateTotalLoad(SedimentLoad load, int year) {
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
268 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
269 boolean problemThisYear = false;
4522
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
270 if (!load.hasCoarse()) {
5742
a4a894b15c35 Minor part of issue1235: dont show decimals of years.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5685
diff changeset
271 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
272 problemThisYear = true;
4373
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
273 }
4522
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
274 if (!load.hasFineMiddle()) {
5742
a4a894b15c35 Minor part of issue1235: dont show decimals of years.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5685
diff changeset
275 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
276 problemThisYear = true;
4522
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
277 }
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
278 if (!load.hasSand()) {
5742
a4a894b15c35 Minor part of issue1235: dont show decimals of years.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5685
diff changeset
279 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
280 problemThisYear = true;
4522
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
281 }
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
282 if (!load.hasSuspSand()) {
5742
a4a894b15c35 Minor part of issue1235: dont show decimals of years.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5685
diff changeset
283 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
284 problemThisYear = true;
4522
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
285 }
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
286 if (!load.hasSuspSediment()) {
5742
a4a894b15c35 Minor part of issue1235: dont show decimals of years.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5685
diff changeset
287 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
288 problemThisYear = true;
4522
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
289 }
5685
756df79274e1 SedimentLoadCalculation: Partly fix 1250 (calculate more than one total if possible).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5661
diff changeset
290 if (problemThisYear) {
756df79274e1 SedimentLoadCalculation: Partly fix 1250 (calculate more than one total if possible).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5661
diff changeset
291 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
292 return load;
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
293 }
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
294 for(double km : load.getKms()) {
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
295 SedimentLoadFraction fraction = load.getFraction(km);
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
296 double total = 0d;
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
297 if ((fraction.getCoarse() <= 0d && load.hasCoarse())){
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
298 addProblem(km, "missing.data.coarse");
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
299 continue;
4373
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 if (fraction.getFine_middle() <= 0d && load.hasFineMiddle()) {
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
302 addProblem(km, "missing.data.fine_middle");
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
303 continue;
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
304 }
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
305 if (fraction.getSand() <= 0d && load.hasSand()) {
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
306 addProblem(km, "missing data.sand");
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
307 continue;
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
308 }
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
309 if (fraction.getSusp_sand() <= 0d && load.hasSuspSand()) {
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
310 addProblem(km, "missing.data.susp_sand");
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
311 continue;
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
312 }
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
313 if (fraction.getSusp_sediment() <= 0d && load.hasSuspSediment()) {
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
314 addProblem(km, "missing.data.susp_sediment");
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
315 continue;
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
316 }
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
317 total += fraction.getCoarse() +
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
318 fraction.getFine_middle() +
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
319 fraction.getSand() +
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
320 fraction.getSusp_sand() +
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
321 fraction.getSusp_sediment();
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
322 load.setTotal(km, total);
4373
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
323 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
324 return load;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
325 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
326
4522
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
327 private SedimentLoad calculateUnit(SedimentLoad load, int year) {
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
328 SedimentDensity density =
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
329 SedimentDensityFactory.getSedimentDensity(river, kmLow, kmUp, year);
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
330 for (double km: load.getKms()) {
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
331 double dens = density.getDensity(km, year);
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
332 SedimentLoadFraction fraction = load.getFraction(km);
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
333 double coarse = fraction.getCoarse();
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
334 double fineMiddle = fraction.getFine_middle();
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
335 double sand = fraction.getSand();
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
336 double suspSand = fraction.getSusp_sand();
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
337 double bedSand = fraction.getSusp_sand_bed();
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
338 double sediment = fraction.getSusp_sediment();
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
339 double total = fraction.getTotal();
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
340 load.setCoarse(km, (coarse * dens));
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
341 load.setFineMiddle(km, (fineMiddle * dens));
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
342 load.setSand(km, (sand * dens));
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
343 load.setSuspSand(km, (suspSand * dens));
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
344 load.setSuspSandBed(km, (bedSand * dens));
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
345 load.setSuspSediment(km, (sediment * dens));
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
346 load.setTotal(km, (total * dens));
a9753f717b3d Completed and fixed sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4483
diff changeset
347 }
4373
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
348 return load;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
349 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
350 }
4483
cc6323401643 Cosmetics: Removed some WSP, obsolete imports. Documentation added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4373
diff changeset
351 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :

http://dive4elements.wald.intevation.org