Mercurial > dive4elements > river
comparison artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentLoad.java @ 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.
author | Sascha L. Teichmann <teichmann@intevation.de> |
---|---|
date | Thu, 05 Sep 2013 17:15:04 +0200 |
parents | e6a8255d0764 |
children | 2b022ca95b3b |
comparison
equal
deleted
inserted
replaced
6969:c137f5028591 | 6970:7be97faf5848 |
---|---|
8 | 8 |
9 package org.dive4elements.river.artifacts.model.minfo; | 9 package org.dive4elements.river.artifacts.model.minfo; |
10 | 10 |
11 import java.util.Date; | 11 import java.util.Date; |
12 import java.util.HashMap; | 12 import java.util.HashMap; |
13 import java.util.Map; | |
13 import java.util.Set; | 14 import java.util.Set; |
15 import java.util.TreeMap; | |
14 | 16 |
15 import org.dive4elements.river.artifacts.model.NamedObjectImpl; | 17 import org.dive4elements.river.artifacts.model.NamedObjectImpl; |
16 import org.dive4elements.river.artifacts.model.Range; | 18 import org.dive4elements.river.artifacts.model.Range; |
19 import org.dive4elements.river.utils.EpsilonComparator; | |
17 | 20 |
18 | 21 |
19 /** Gives access to Fractions (at kms). */ | 22 /** Gives access to Fractions (at kms). */ |
20 public class SedimentLoad | 23 public class SedimentLoad |
21 extends NamedObjectImpl | 24 extends NamedObjectImpl |
24 protected Date start; | 27 protected Date start; |
25 protected Date end; | 28 protected Date end; |
26 protected boolean isEpoch; | 29 protected boolean isEpoch; |
27 protected String unit; | 30 protected String unit; |
28 | 31 |
29 protected HashMap<Double, SedimentLoadFraction> kms; | 32 protected Map<Double, SedimentLoadFraction> kms; |
30 | 33 |
31 public SedimentLoad() { | 34 public SedimentLoad() { |
32 kms = new HashMap<Double, SedimentLoadFraction>(); | 35 kms = new TreeMap<Double, SedimentLoadFraction>(EpsilonComparator.CMP); |
33 } | 36 } |
34 | 37 |
35 public SedimentLoad( | 38 public SedimentLoad( |
36 String description, | 39 String description, |
37 Date start, | 40 Date start, |
86 public void addKm(double km, SedimentLoadFraction fraction) { | 89 public void addKm(double km, SedimentLoadFraction fraction) { |
87 kms.put(km, fraction); | 90 kms.put(km, fraction); |
88 } | 91 } |
89 | 92 |
90 public SedimentLoadFraction getFraction(double km) { | 93 public SedimentLoadFraction getFraction(double km) { |
91 if (kms.get(km) == null) { | 94 SedimentLoadFraction f = kms.get(km); |
92 return new SedimentLoadFraction(); | 95 if (f == null) { |
93 } | 96 f = new SedimentLoadFraction(); |
94 return kms.get(km); | 97 kms.put(km, f); |
98 } | |
99 return f; | |
95 } | 100 } |
96 | 101 |
97 public void setCoarse(double km, double coarse, Range range) { | 102 public void setCoarse(double km, double coarse, Range range) { |
98 if (kms.containsKey(km)) { | 103 SedimentLoadFraction f = getFraction(km); |
99 kms.get(km).setCoarse(coarse); | 104 f.setCoarse(coarse); |
100 } | 105 f.setCoarseRange(range); |
101 else { | |
102 SedimentLoadFraction f = new SedimentLoadFraction(); | |
103 f.setCoarse(coarse); | |
104 f.setCoarseRange(range); | |
105 kms.put(km, f); | |
106 } | |
107 } | 106 } |
108 | 107 |
109 public void setFineMiddle(double km, double fine_middle, Range range) { | 108 public void setFineMiddle(double km, double fine_middle, Range range) { |
110 if (kms.containsKey(km)) { | 109 SedimentLoadFraction f = getFraction(km); |
111 kms.get(km).setFineMiddle(fine_middle); | 110 f.setFineMiddle(fine_middle); |
112 kms.get(km).setFineMiddleRange(range); | 111 f.setFineMiddleRange(range); |
113 } | 112 } |
114 else { | 113 |
115 SedimentLoadFraction f = new SedimentLoadFraction(); | |
116 f.setFineMiddle(fine_middle); | |
117 f.setFineMiddleRange(range); | |
118 kms.put(km, f); | |
119 } | |
120 } | |
121 | 114 |
122 public void setSand(double km, double sand, Range range) { | 115 public void setSand(double km, double sand, Range range) { |
123 if (kms.containsKey(km)) { | 116 SedimentLoadFraction f = getFraction(km); |
124 kms.get(km).setSand(sand); | 117 f.setSand(sand); |
125 kms.get(km).setSandRange(range); | 118 f.setSandRange(range); |
126 } | |
127 else { | |
128 SedimentLoadFraction f = new SedimentLoadFraction(); | |
129 f.setSand(sand); | |
130 f.setSandRange(range); | |
131 kms.put(km, f); | |
132 } | |
133 } | 119 } |
134 | 120 |
135 public void setSuspSand(double km, double susp_sand, Range range) { | 121 public void setSuspSand(double km, double susp_sand, Range range) { |
136 if (kms.containsKey(km)) { | 122 SedimentLoadFraction f = getFraction(km); |
137 kms.get(km).setSuspSand(susp_sand); | 123 f.setSuspSand(susp_sand); |
138 kms.get(km).setSuspSandRange(range); | 124 f.setSuspSandRange(range); |
139 } | |
140 else { | |
141 SedimentLoadFraction f = new SedimentLoadFraction(); | |
142 f.setSuspSand(susp_sand); | |
143 f.setSuspSandRange(range); | |
144 kms.put(km, f); | |
145 } | |
146 } | 125 } |
147 | 126 |
148 public void setSuspSandBed(double km, double susp_sand_bed, Range range) { | 127 public void setSuspSandBed(double km, double susp_sand_bed, Range range) { |
149 if (kms.containsKey(km)) { | 128 SedimentLoadFraction f = getFraction(km); |
150 kms.get(km).setSuspSandBed(susp_sand_bed); | 129 f.setSuspSandBed(susp_sand_bed); |
151 kms.get(km).setSuspSandBedRange(range); | 130 f.setSuspSandBedRange(range); |
152 } | |
153 else { | |
154 SedimentLoadFraction f = new SedimentLoadFraction(); | |
155 f.setSuspSandBed(susp_sand_bed); | |
156 f.setSuspSandBedRange(range); | |
157 kms.put(km, f); | |
158 } | |
159 } | 131 } |
160 | 132 |
161 public void setSuspSediment(double km, double susp_sediment, Range range) { | 133 public void setSuspSediment(double km, double susp_sediment, Range range) { |
162 if (kms.containsKey(km)) { | 134 SedimentLoadFraction f = getFraction(km); |
163 kms.get(km).setSuspSediment(susp_sediment); | 135 f.setSuspSediment(susp_sediment); |
164 kms.get(km).setSuspSedimentRange(range); | 136 f.setSuspSedimentRange(range); |
165 } | |
166 else { | |
167 SedimentLoadFraction f = new SedimentLoadFraction(); | |
168 f.setSuspSediment(susp_sediment); | |
169 f.setSuspSedimentRange(range); | |
170 kms.put(km, f); | |
171 } | |
172 } | 137 } |
173 | 138 |
174 public void setLoadTotal(double km, double total) { | 139 public void setLoadTotal(double km, double total) { |
175 setLoadTotal(km, total, null); | 140 setLoadTotal(km, total, null); |
176 } | 141 } |
177 | 142 |
178 public void setLoadTotal(double km, double total, Range range) { | 143 public void setLoadTotal(double km, double total, Range range) { |
179 if (kms.containsKey(km)) { | 144 SedimentLoadFraction f = getFraction(km); |
180 kms.get(km).setLoadTotal(total); | 145 f.setLoadTotal(total); |
181 kms.get(km).setLoadTotalRange(range); | 146 f.setLoadTotalRange(range); |
182 } | |
183 else { | |
184 SedimentLoadFraction f = new SedimentLoadFraction(); | |
185 f.setLoadTotal(total); | |
186 f.setLoadTotalRange(range); | |
187 kms.put(km, f); | |
188 } | |
189 } | 147 } |
190 | 148 |
191 public void setTotal(double km, double total, Range range) { | 149 public void setTotal(double km, double total, Range range) { |
192 if (kms.containsKey(km)) { | 150 SedimentLoadFraction f = getFraction(km); |
193 kms.get(km).setTotal(total); | 151 f.setTotal(total); |
194 kms.get(km).setTotalRange(range); | 152 f.setTotalRange(range); |
195 } | |
196 else { | |
197 SedimentLoadFraction f = new SedimentLoadFraction(); | |
198 f.setTotal(total); | |
199 f.setTotalRange(range); | |
200 kms.put(km, f); | |
201 } | |
202 } | 153 } |
203 | 154 |
204 public void setUnknown(double km, double unknown, Range range) { | 155 public void setUnknown(double km, double unknown, Range range) { |
205 if (kms.containsKey(km)) { | 156 SedimentLoadFraction f = getFraction(km); |
206 kms.get(km).setUnknown(unknown); | 157 f.setUnknown(unknown); |
207 kms.get(km).setUnknownRange(range); | 158 f.setUnknownRange(range); |
208 } | |
209 else { | |
210 SedimentLoadFraction f = new SedimentLoadFraction(); | |
211 f.setUnknown(unknown); | |
212 f.setUnknownRange(range); | |
213 kms.put(km, f); | |
214 } | |
215 } | 159 } |
216 | 160 |
217 public String getUnit() { | 161 public String getUnit() { |
218 return unit; | 162 return unit; |
219 } | 163 } |