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 }

http://dive4elements.wald.intevation.org