annotate flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/minfo/SedimentLoadCalculation.java @ 4373:1fb224bb2c6b

Added sediment load calculation.
author Raimund Renkert <rrenkert@intevation.de>
date Fri, 02 Nov 2012 14:54:29 +0100
parents
children cc6323401643
rev   line source
4373
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
1 package de.intevation.flys.artifacts.model.minfo;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
2
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
3 import gnu.trove.TDoubleArrayList;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
4
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
5 import java.util.ArrayList;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
6 import java.util.Iterator;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
7 import java.util.List;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
8 import java.util.Set;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
9
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
10 import org.apache.log4j.Logger;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
11 import org.jfree.util.Log;
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 de.intevation.flys.artifacts.access.SedimentLoadAccess;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
14 import de.intevation.flys.artifacts.model.Calculation;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
15 import de.intevation.flys.artifacts.model.CalculationResult;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
16
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
17
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
18 public class SedimentLoadCalculation
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
19 extends Calculation
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
20 {
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 private static final Logger logger = Logger
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
23 .getLogger(SedimentLoadCalculation.class);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
24
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
25 protected String river;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
26 protected String yearEpoch;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
27 protected double kmUp;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
28 protected double kmLow;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
29 protected int[] period;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
30 protected int[][] epoch;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
31 protected String unit;
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 public SedimentLoadCalculation() {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
34 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
35
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
36 public CalculationResult calculate(SedimentLoadAccess access) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
37 logger.info("SedimentLoadCalculation.calculate");
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
38
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
39 String river = access.getRiver();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
40 String yearEpoch = access.getYearEpoch();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
41 String unit = access.getUnit();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
42 int[] period = null;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
43 int[][] epoch = null;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
44 double kmUp = access.getUpperKM();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
45 double kmLow = access.getLowerKM();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
46 if (yearEpoch.equals("year")) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
47 period = access.getPeriod();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
48 epoch = null;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
49 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
50 else if (yearEpoch.equals("epoch")) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
51 epoch = access.getEpochs();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
52 period = null;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
53 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
54 else {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
55 addProblem("minfo.missing.year_epoch");
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
56 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
57
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
58 if (river == null) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
59 // TODO: i18n
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
60 addProblem("minfo.missing.river");
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
61 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
62
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
63 if (period == null && epoch == null) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
64 addProblem("minfo.missing.time");
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
65 }
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 if (!hasProblems()) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
68 this.river = river;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
69 this.yearEpoch = yearEpoch;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
70 this.unit = unit;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
71 this.period = period;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
72 this.epoch = epoch;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
73 this.kmUp = kmUp;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
74 this.kmLow = kmLow;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
75 return internalCalculate();
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
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
78 return new CalculationResult();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
79 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
80
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
81 private CalculationResult internalCalculate() {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
82 logger.debug("internalCalulate; mode:" + yearEpoch);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
83 if (yearEpoch.equals("year")) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
84 List<SedimentLoadResult> results =
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
85 new ArrayList<SedimentLoadResult>();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
86 for (int i = period[0]; i <= period[1]; i++) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
87 logger.debug("calculating for year: " + i);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
88 SedimentLoadResult res = calculateYear(i);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
89 results.add(res);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
90 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
91 return new CalculationResult(
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
92 results.toArray(new SedimentLoadResult[results.size()]), this);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
93 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
94 else if (yearEpoch.equals("epoch")) {
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 = 0; i < epoch.length; i++) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
98 SedimentLoadResult res = calculateEpoch(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("off_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 = calculateOffEpoch(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 return null;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
115 }
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 private SedimentLoadResult calculateEpoch(int i) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
118 List<SedimentLoad> epochLoads = new ArrayList<SedimentLoad>();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
119 for (int j = epoch[i][0]; j < epoch[i][1]; j++) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
120 epochLoads.add(SedimentLoadFactory.getLoadwithData(
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
121 this.river,
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
122 this.yearEpoch,
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
123 this.kmLow,
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
124 this.kmUp,
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
125 j,
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
126 j));
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
127 }
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 SedimentLoad resLoad = new SedimentLoad();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
130 TDoubleArrayList kms = new TDoubleArrayList();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
131
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
132 for (SedimentLoad load : epochLoads) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
133 for (double km : load.getKms()) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
134 if (!kms.contains(km)) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
135 kms.add(km);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
136 }
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 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
139
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
140 for (int j = 0; j < kms.size(); j++) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
141 int cSum = 0;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
142 int fmSum = 0;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
143 int sSum = 0;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
144 int ssSum = 0;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
145 int ssbSum = 0;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
146 int sseSum = 0;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
147 double km = kms.get(j);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
148 for (SedimentLoad load : epochLoads) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
149 SedimentLoadFraction f = load.getFraction(km);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
150 if (f.getCoarse() > 0d) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
151 double c = resLoad.getFraction(km).getCoarse();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
152 resLoad.setCoarse(km, c + f.getCoarse());
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
153 cSum++;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
154 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
155 if (f.getFine_middle() > 0d) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
156 double fm = resLoad.getFraction(km).getFine_middle();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
157 resLoad.setFineMiddle(km, fm + f.getFine_middle());
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
158 fmSum++;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
159 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
160 if (f.getSand() > 0d) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
161 double s = resLoad.getFraction(km).getSand();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
162 resLoad.setSand(km, s + f.getSand());
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
163 sSum++;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
164 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
165 if (f.getSusp_sand() > 0d) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
166 double s = resLoad.getFraction(km).getSand();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
167 resLoad.setSuspSand(km, s + f.getSusp_sand());
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
168 ssSum++;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
169 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
170 if (f.getSusp_sand_bed() > 0d) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
171 double s = resLoad.getFraction(km).getSusp_sand_bed();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
172 resLoad.setSuspSandBed(km, s + f.getSusp_sand_bed());
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
173 ssbSum++;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
174 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
175 if (f.getSusp_sediment() > 0d) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
176 double s = resLoad.getFraction(km).getSusp_sediment();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
177 resLoad.setSuspSediment(km, s + f.getSusp_sediment());
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
178 sseSum++;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
179 }
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 SedimentLoadFraction fr = resLoad.getFraction(km);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
182 resLoad.setCoarse(km, fr.getCoarse()/cSum);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
183 resLoad.setFineMiddle(km, fr.getFine_middle()/fmSum);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
184 resLoad.setSand(km, fr.getSand()/sSum);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
185 resLoad.setSuspSand(km, fr.getSusp_sand()/ssSum);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
186 resLoad.setSuspSandBed(km, fr.getSusp_sand_bed()/ssbSum);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
187 resLoad.setSuspSediment(km, fr.getSusp_sediment()/sseSum);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
188 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
189 resLoad.setDescription("");
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
190 resLoad.setEpoch(true);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
191
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
192 SedimentLoad sl = calculateTotalLoad(resLoad);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
193 return new SedimentLoadResult(epoch[i][0], epoch[i][1], sl);
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
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
196 private SedimentLoadResult calculateOffEpoch(int i) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
197 return null;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
198 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
199
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
200 private SedimentLoadResult calculateYear(int y) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
201 SedimentLoad load = SedimentLoadFactory.getLoadwithData(
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
202 this.river,
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
203 this.yearEpoch,
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
204 this.kmLow,
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
205 this.kmUp,
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
206 y,
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
207 y);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
208
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
209 SedimentLoad sl = calculateTotalLoad(load);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
210 if (unit.equals("m3_per_a")) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
211 SedimentLoad slu = calculateUnit(sl);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
212 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
213
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
214 SedimentLoadResult result = new SedimentLoadResult(
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
215 y,
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
216 0,
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
217 sl);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
218 return result;
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
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
221 private SedimentLoad validateData(SedimentLoad load) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
222 SedimentLoad clean = new SedimentLoad();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
223 Set<Double> kms = load.getKms();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
224 for (double km : kms) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
225 SedimentLoadFraction fraction = load.getFraction(km);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
226 if (fraction.getCoarse() > 0 &&
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
227 fraction.getFine_middle() > 0 &&
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
228 fraction.getSand() > 0 &&
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
229 fraction.getSusp_sand() > 0&&
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
230 fraction.getSusp_sand_bed() > 0 &&
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
231 fraction.getSusp_sediment() > 0) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
232 clean.addKm(km, fraction);
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 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
235 return clean;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
236 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
237
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
238 private SedimentLoad calculateTotalLoad(SedimentLoad load) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
239 Log.debug("calculateTotalLoad");
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
240 SedimentLoad clean = validateData(load);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
241 if (clean.getKms().size() > 0) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
242 Iterator<Double> iter = clean.getKms().iterator();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
243 while (iter.hasNext()) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
244 double km = iter.next();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
245 SedimentLoadFraction f =clean.getFraction(km);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
246 double total = f.getCoarse() +
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
247 f.getFine_middle() +
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
248 f.getSand() +
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
249 f.getSusp_sand() +
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
250 f.getSusp_sediment();
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
251 load.setTotal(km, total);
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
252 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
253 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
254 return load;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
255 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
256
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
257 private SedimentLoad calculateUnit(SedimentLoad load) {
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
258 //TODO implement me!
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
259 return load;
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
260 }
1fb224bb2c6b Added sediment load calculation.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
261 }

http://dive4elements.wald.intevation.org