Mercurial > dive4elements > river
annotate artifacts/src/main/java/org/dive4elements/river/exports/fixings/FixATWriter.java @ 5863:4897a58c8746
River artifacts: Added new copyright headers.
author | Sascha L. Teichmann <teichmann@intevation.de> |
---|---|
date | Sun, 28 Apr 2013 14:40:59 +0200 |
parents | 5aa05a7a34b7 |
children | af13ceeba52a |
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 * |
4897a58c8746
River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5838
diff
changeset
|
4 * This file is Free Software under the GNU AGPL (>=v3) |
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 |
4897a58c8746
River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5838
diff
changeset
|
6 * documentation coming with Dive4Elements River for details. |
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 |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
121 if (wcm > 0) { |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
122 int rest = 10 - wcm; |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
123 while (rest-- > 0) { |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
124 out.print(ATWriter.EMPTY); |
3220
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
125 } |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
126 } |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
127 |
3641
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
128 for (;;) { |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
129 while (wcm++ < 10) { |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
130 if (w > wMax) { |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
131 break; |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
132 } |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
133 double q = invInst.value(w); |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
134 if (Double.isNaN(w)) { |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
135 out.print(ATWriter.EMPTY); |
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 else { |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
138 ATWriter.printQ(out, q); |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
139 } |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
140 w += 0.01d; |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
141 } |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
142 out.println(); |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
143 if (w > wMax) { |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
144 break; |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
145 } |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
146 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
|
147 wcm = 0; |
3220
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 out.flush(); |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
151 } |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
152 |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
153 protected void printHeader( |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
154 PrintWriter out, |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
155 CallMeta meta, |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
156 String river, |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
157 double km |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
158 ) { |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
159 out.println(Resources.format( |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
160 meta, |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
161 I18N_HEADER_KEY, |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
162 I18N_HEADER_DEFAULT, |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
163 river, km)); |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
164 } |
3641
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
165 |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
166 private static double minW( |
5831
bd047b71ab37
Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents:
3905
diff
changeset
|
167 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
|
168 double maxW, |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
169 double maxQ |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
170 ) { |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
171 double stepWidth = 10d; |
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 double lastW = maxW; |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
174 double lastQ = maxQ; |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
175 |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
176 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
|
177 double w = lastW - stepWidth; |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
178 double q = function.value(w); |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
179 |
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
|
180 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
|
181 if (stepWidth < EPSILON) { |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
182 break; |
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 stepWidth *= 0.5d; |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
185 continue; |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
186 } |
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 lastW = w; |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
189 lastQ = q; |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
190 } |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
191 |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
192 return lastW; |
1dc904370a64
Fixed issue687: Rewrote AT export in FixA
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3220
diff
changeset
|
193 } |
3220
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
194 } |
0c8a6145098b
FixA: Added AT writer for fitted functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
195 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |