Mercurial > dive4elements > river
annotate artifacts/src/main/java/org/dive4elements/river/exports/fixings/FixATWriter.java @ 6209:1642e08d14d2
Fix empty column logic in FixAT export
This fixes issue1155
author | Andre Heinecke <aheinecke@intevation.de> |
---|---|
date | Wed, 05 Jun 2013 18:03:21 +0200 |
parents | 715e010d40de |
children | ee701de9c875 |
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:
3905
diff
changeset
|
9 package org.dive4elements.river.exports.fixings; |
3220
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
10 |
5831
bd047b71ab37
Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents:
3905
diff
changeset
|
11 import org.dive4elements.artifacts.CallMeta; |
3220
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
12 |
5831
bd047b71ab37
Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents:
3905
diff
changeset
|
13 import org.dive4elements.river.artifacts.math.fitting.Function; |
3220
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
14 |
5831
bd047b71ab37
Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents:
3905
diff
changeset
|
15 import org.dive4elements.river.artifacts.model.Parameters; |
3220
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
16 |
5831
bd047b71ab37
Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents:
3905
diff
changeset
|
17 import org.dive4elements.river.artifacts.resources.Resources; |
bd047b71ab37
Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents:
3905
diff
changeset
|
18 |
bd047b71ab37
Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents:
3905
diff
changeset
|
19 import org.dive4elements.river.exports.ATWriter; |
3220
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
20 |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
21 import java.io.IOException; |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
22 import java.io.PrintWriter; |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
23 import java.io.Writer; |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
24 |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
25 import java.util.Locale; |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
26 |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
27 import org.apache.log4j.Logger; |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
28 |
3905
8bbb9e173297
Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
3643
diff
changeset
|
29 /** Export Fixation Analysis Results to AT. */ |
3220
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
30 public class FixATWriter |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
31 { |
3905
8bbb9e173297
Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
3643
diff
changeset
|
32 /** Private logger. */ |
3220
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
33 private static Logger log = Logger.getLogger(FixATWriter.class); |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
34 |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
35 public static final String I18N_HEADER_KEY = |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
36 "fix.export.at.header"; |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
37 |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
38 public static final String I18N_HEADER_DEFAULT = |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
39 "Exported fixings discharge curve for {0} {0}-km: {1}"; |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
40 |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
41 public static final String [] Q_MAX_COLUMN = new String [] { "max_q" }; |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
42 |
3641
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
43 private static final int MAX_ITERATIONS = 10000; |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
44 private static final double EPSILON = 1e-8; |
3643
171db4d5d3cb
FixA: AT export: prevent some numerical problems with steep functions around zero.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3642
diff
changeset
|
45 private static final double MIN_Q = 1e-4; |
3220
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
46 |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
47 protected Function function; |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
48 protected Parameters parameters; |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
49 |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
50 public FixATWriter() { |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
51 } |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
52 |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
53 public FixATWriter(Function function, Parameters parameters) { |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
54 this.function = function; |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
55 this.parameters = parameters; |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
56 } |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
57 |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
58 public void write( |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
59 Writer writer, |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
60 CallMeta meta, |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
61 String river, |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
62 double km |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
63 ) |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
64 throws IOException { |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
65 PrintWriter out = new PrintWriter(writer); |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
66 printHeader(out, meta, river, km); |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
67 |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
68 double [] coeffs = parameters.interpolate( |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
69 "km", km, function.getParameterNames()); |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
70 |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
71 double [] qMax = parameters.interpolate( |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
72 "km", km, Q_MAX_COLUMN); |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
73 |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
74 if (coeffs == null || qMax == null) { |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
75 log.debug("No data found at km " + km + "."); |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
76 return; |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
77 } |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
78 |
5831
bd047b71ab37
Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents:
3905
diff
changeset
|
79 org.dive4elements.river.artifacts.math.Function funcInst = |
3220
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
80 function.instantiate(coeffs); |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
81 |
3642
83c0735092a3
FixA: Increase Q max about 5% if storing as AT file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3641
diff
changeset
|
82 // Increase Q max about 5%. |
83c0735092a3
FixA: Increase Q max about 5% if storing as AT file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3641
diff
changeset
|
83 qMax[0] += Math.abs(qMax[0])*0.05; |
83c0735092a3
FixA: Increase Q max about 5% if storing as AT file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3641
diff
changeset
|
84 |
3220
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
85 double wMax = funcInst.value(qMax[0]); |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
86 |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
87 if (Double.isNaN(wMax) || wMax < 0d) { |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
88 log.debug("function '" + function.getName() + |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
89 "' eval failed at " + wMax); |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
90 return; |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
91 } |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
92 |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
93 Function inverse = function.getInverse(); |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
94 |
5831
bd047b71ab37
Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents:
3905
diff
changeset
|
95 org.dive4elements.river.artifacts.math.Function invInst = |
3220
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
96 inverse.instantiate(coeffs); |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
97 |
3641
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
98 double wMin = minW(invInst, wMax, qMax[0]); |
3220
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
99 |
3641
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
100 double wMinCM = wMin * 100d; |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
101 double wMaxCM = wMax * 100d; |
3220
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
102 |
3641
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
103 int wRow = ((int)wMinCM / 10) * 10; |
3220
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
104 |
3641
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
105 if ((wMinCM - (int)wMinCM) > 0d) { |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
106 wMinCM = (int)wMinCM + 1d; |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
107 } |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
108 |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
109 double w = wMinCM / 100.0; |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
110 |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
111 int wcm = ((int)wMinCM) % 10; |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
112 |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
113 if (log.isDebugEnabled()) { |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
114 log.debug("wMinCM: " + wMinCM); |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
115 log.debug("wMaxCM: " + wMaxCM); |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
116 log.debug("wcm: " + wcm); |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
117 } |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
118 |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
119 out.printf(Locale.US, "%8d", wRow); |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
120 |
6209
1642e08d14d2
Fix empty column logic in FixAT export
Andre Heinecke <aheinecke@intevation.de>
parents:
6208
diff
changeset
|
121 for (int i = 0; i < wcm; i++) { |
1642e08d14d2
Fix empty column logic in FixAT export
Andre Heinecke <aheinecke@intevation.de>
parents:
6208
diff
changeset
|
122 out.print(ATWriter.EMPTY); |
3220
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
123 } |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
124 |
3641
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
125 for (;;) { |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
126 while (wcm++ < 10) { |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
127 if (w > wMax) { |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
128 break; |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
129 } |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
130 double q = invInst.value(w); |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
131 if (Double.isNaN(w)) { |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
132 out.print(ATWriter.EMPTY); |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
133 } |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
134 else { |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
135 ATWriter.printQ(out, q); |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
136 } |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
137 w += 0.01d; |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
138 } |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
139 out.println(); |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
140 if (w > wMax) { |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
141 break; |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
142 } |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
143 out.printf(Locale.US, "%8d", wRow += 10); |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
144 wcm = 0; |
3220
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
145 } |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
146 |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
147 out.flush(); |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
148 } |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
149 |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
150 protected void printHeader( |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
151 PrintWriter out, |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
152 CallMeta meta, |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
153 String river, |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
154 double km |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
155 ) { |
6208
715e010d40de
Add * in the first line of AT Exports.
Andre Heinecke <aheinecke@intevation.de>
parents:
5994
diff
changeset
|
156 out.println("*" + Resources.format( |
3220
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
157 meta, |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
158 I18N_HEADER_KEY, |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
159 I18N_HEADER_DEFAULT, |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
160 river, km)); |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
161 } |
3641
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
162 |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
163 private static double minW( |
5831
bd047b71ab37
Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents:
3905
diff
changeset
|
164 org.dive4elements.river.artifacts.math.Function function, |
3641
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
165 double maxW, |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
166 double maxQ |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
167 ) { |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
168 double stepWidth = 10d; |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
169 |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
170 double lastW = maxW; |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
171 double lastQ = maxQ; |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
172 |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
173 for (int i = 0; i < MAX_ITERATIONS; ++i) { |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
174 double w = lastW - stepWidth; |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
175 double q = function.value(w); |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
176 |
3643
171db4d5d3cb
FixA: AT export: prevent some numerical problems with steep functions around zero.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3642
diff
changeset
|
177 if (Double.isNaN(q) || q > lastQ || q < MIN_Q) { |
3641
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
178 if (stepWidth < EPSILON) { |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
179 break; |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
180 } |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
181 stepWidth *= 0.5d; |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
182 continue; |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
183 } |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
184 |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
185 lastW = w; |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
186 lastQ = q; |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
187 } |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
188 |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
189 return lastW; |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
190 } |
3220
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
191 } |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
192 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |