|
20 | 20 | package it.geoframe.blogspot.buffer.buffertowriter;
|
21 | 21 |
|
22 | 22 | import java.util.ArrayList;
|
| 23 | +import java.util.Iterator; |
23 | 24 | import java.util.LinkedHashMap;
|
24 | 25 | import java.util.Map;
|
| 26 | +import java.util.Map.Entry; |
25 | 27 |
|
26 | 28 | import oms3.annotations.*;
|
27 | 29 |
|
|
35 | 37 | @License("General Public License Version 3 (GPLv3)")
|
36 | 38 |
|
37 | 39 | public class RichardsBuffer2D {
|
38 |
| - |
39 |
| - @Description("Varible to store") |
| 40 | + |
| 41 | + @Description("Variable to store") |
40 | 42 | @In
|
41 | 43 | @Unit ("-")
|
42 |
| - public ArrayList<double[]> inputVariable; |
43 |
| - |
| 44 | + public ArrayList<ArrayList<Double>> inputVariable; |
| 45 | + |
44 | 46 | @Description("Date at which the varible is computed")
|
45 | 47 | @In
|
46 | 48 | @Unit ("YYYY-MM-DD HH:mm")
|
47 | 49 | public String inputDate;
|
48 |
| - |
49 |
| - @Description("Spatial coordinate: is the position of the centroids ") |
50 |
| - @In |
51 |
| - @Unit ("m") |
52 |
| - public Map<Integer, Double[]> inputSpatialCoordinate; |
53 |
| - |
| 50 | + |
54 | 51 | @Description("Dual spatial coordinate: is the position of edges ")
|
55 | 52 | @In
|
56 | 53 | @Unit ("m")
|
57 | 54 | public Map<Integer, Double[]> inputDualSpatialCoordinate;
|
58 |
| - |
59 |
| - |
60 |
| - @Description() |
61 |
| - @Out |
62 |
| - @Unit () |
63 |
| - public LinkedHashMap<String,ArrayList<double[]>> myVariable = new LinkedHashMap<String,ArrayList<double[]>>(); // consider the opportunity to save varibale as float instead of double |
64 |
| - |
65 |
| - @Description() |
66 |
| - @Out |
67 |
| - @Unit () |
68 |
| - public double[] mySpatialCoordinateX; |
69 |
| - |
70 |
| - @Description() |
71 |
| - @Out |
72 |
| - @Unit () |
73 |
| - public double[] mySpatialCoordinateZ; |
74 |
| - |
75 |
| - @Description() |
76 |
| - @Out |
77 |
| - @Unit () |
78 |
| - public double[] myDualSpatialCoordinateX; |
79 |
| - |
| 55 | + |
| 56 | + @Description("Boolean value controlling the buffer component") |
| 57 | + @In |
| 58 | + @Unit ("-") |
| 59 | + public boolean doProcessBuffer; |
| 60 | + |
| 61 | + @In |
| 62 | + public int writeFrequency = 1; |
| 63 | + |
80 | 64 | @Description()
|
81 | 65 | @Out
|
82 | 66 | @Unit ()
|
83 |
| - public double[] myDualSpatialCoordinateZ; |
84 |
| - |
| 67 | + public LinkedHashMap<String,ArrayList<ArrayList<Double>>> variable = new LinkedHashMap<String,ArrayList<ArrayList<Double>>>(); // consider the opportunity to save varibale as float instead of double |
| 68 | + |
| 69 | + |
85 | 70 | @Description("")
|
86 | 71 | int step=0;
|
87 |
| - |
88 |
| - ArrayList<double[]> tempVariable; |
89 |
| - |
90 |
| - |
91 |
| - |
| 72 | + |
| 73 | + private ArrayList<ArrayList<Double>> tempVariable; |
| 74 | + |
| 75 | + |
| 76 | + |
92 | 77 | @Execute
|
93 | 78 | public void solve() {
|
94 |
| - //System.out.println("Buffer1D step:" + step); |
| 79 | + |
95 | 80 | if(step==0){
|
96 | 81 |
|
97 |
| - mySpatialCoordinateX = new double[inputSpatialCoordinate.size()+1]; |
98 |
| - mySpatialCoordinateZ = new double[inputSpatialCoordinate.size()+1]; |
99 |
| - |
100 |
| - myDualSpatialCoordinateX = new double[inputDualSpatialCoordinate.size()+1]; |
101 |
| - myDualSpatialCoordinateZ = new double[inputDualSpatialCoordinate.size()+1]; |
102 |
| - |
103 |
| - for(Integer i : inputSpatialCoordinate.keySet()) { |
104 |
| - mySpatialCoordinateX[i] = inputSpatialCoordinate.get(i)[0]; |
105 |
| - mySpatialCoordinateZ[i] = inputSpatialCoordinate.get(i)[1]; |
106 |
| - }; |
| 82 | + tempVariable = new ArrayList<ArrayList<Double>>(); |
| 83 | + |
| 84 | + } |
| 85 | + |
| 86 | + if( ((step-1)%writeFrequency) == 0 || step == 1) { |
| 87 | + |
| 88 | + variable.clear(); |
| 89 | + |
| 90 | + } |
| 91 | + |
| 92 | + |
| 93 | + if(doProcessBuffer== true) { |
| 94 | + |
| 95 | + // water suction values |
| 96 | + tempVariable.add(new ArrayList<Double>(inputVariable.get(0))); |
| 97 | + |
| 98 | + // water content |
| 99 | + tempVariable.add(new ArrayList<Double>(inputVariable.get(1))); |
| 100 | + |
| 101 | + // water volume |
| 102 | + tempVariable.add(new ArrayList<Double>(inputVariable.get(2))); |
| 103 | + |
| 104 | + // saturation degree |
| 105 | + tempVariable.add(new ArrayList<Double>(inputVariable.get(3))); |
| 106 | + |
| 107 | + // Darcy velocities |
| 108 | + tempVariable.add(new ArrayList<Double>(inputVariable.get(4))); |
| 109 | + |
| 110 | + // Darcy velocities x |
| 111 | + tempVariable.add(new ArrayList<Double>(inputVariable.get(5))); |
107 | 112 |
|
108 |
| - for(Integer i : inputDualSpatialCoordinate.keySet()) { |
109 |
| - myDualSpatialCoordinateX[i] = inputDualSpatialCoordinate.get(i)[0]; |
110 |
| - myDualSpatialCoordinateZ[i] = inputDualSpatialCoordinate.get(i)[1]; |
111 |
| - |
112 |
| -// System.out.println(myDualSpatialCoordinateX[i] + " " + myDualSpatialCoordinateZ[i]); |
113 |
| - }; |
| 113 | + // Darcy velocities z |
| 114 | + tempVariable.add(new ArrayList<Double>(inputVariable.get(6))); |
114 | 115 |
|
115 |
| -// myDualSpatialCoordinate = ???; |
| 116 | + // error volume |
| 117 | + tempVariable.add(new ArrayList<Double>(inputVariable.get(7))); |
116 | 118 |
|
117 |
| - tempVariable = new ArrayList<double[]>(); |
118 |
| - //System.out.println(mySpatialCoordinate.toString()); |
| 119 | +// Iterator it; |
| 120 | +// // variable.put(inputDate, new ArrayList<ArrayList<Double>>(tempVariable.clone())); |
| 121 | +// it = variable.entrySet().iterator(); |
| 122 | +// while (it.hasNext()) { |
| 123 | +// Entry<String, ArrayList<ArrayList<Double>>> entry = (Entry<String, ArrayList<ArrayList<Double>>>) it.next(); |
| 124 | +// |
| 125 | +// System.out.println(entry.getKey() + " psi[1] "+entry.getValue().get(0).get(1)+ " theta[1] "+entry.getValue().get(1).get(1)); |
| 126 | +// } |
| 127 | + |
| 128 | + |
| 129 | + variable.put(inputDate, new ArrayList<ArrayList<Double>>(tempVariable)); |
| 130 | +// |
| 131 | +// System.out.println("Buffer "+inputDate); |
| 132 | +// System.out.println("psi[1] "+variable.get(inputDate).get(0).get(1));//+" "+variable.get(inputDate).get(0).get(1000)+" "+variable.get(inputDate).get(0).get(2000)+" "+variable.get(inputDate).get(0).get(4000)+" "+variable.get(inputDate).get(0).get(5000)); |
| 133 | +// |
| 134 | +// System.out.println("theta[1] "+variable.get(inputDate).get(1).get(1));//+" "+variable.get(inputDate).get(1).get(1000)+" "+variable.get(inputDate).get(1).get(2000)+" "+variable.get(inputDate).get(1).get(4000)+" "+variable.get(inputDate).get(1).get(5000)); |
119 | 135 |
|
| 136 | + tempVariable.clear(); |
120 | 137 | }
|
121 |
| - |
122 |
| - |
123 |
| - // psiIC |
124 |
| - tempVariable.add(inputVariable.get(0).clone()); |
125 |
| - |
126 |
| - // water suction values |
127 |
| - tempVariable.add(inputVariable.get(1).clone()); |
128 |
| - |
129 |
| - // thetas |
130 |
| - tempVariable.add(inputVariable.get(2).clone()); |
131 |
| - |
132 |
| - // saturation degree |
133 |
| - tempVariable.add(inputVariable.get(3).clone()); |
134 |
| - |
135 |
| - // Darcy velocities |
136 |
| - tempVariable.add(inputVariable.get(4).clone()); |
137 |
| -// for(int i=0; i<inputVariable.get(2).length; i++) { |
138 |
| -// System.out.println(inputVariable.get(2)[i]); |
139 |
| -// } |
140 |
| -// System.out.println("\\\\\\\\\\\\ \n\n"); |
141 |
| -// // Darcy velocities x component |
142 |
| - tempVariable.add(inputVariable.get(5).clone()); |
143 |
| -// for(int i=0; i<inputVariable.get(3).length; i++) { |
144 |
| -// System.out.println(inputVariable.get(3)[i]); |
145 |
| -// } |
146 |
| -// System.out.println("\\\\\\\\\\\\ \n\n"); |
147 |
| - // Darcy velocities z component |
148 |
| - tempVariable.add(inputVariable.get(6).clone()); |
149 |
| -// for(int i=0; i<inputVariable.get(4).length; i++) { |
150 |
| -// System.out.println(inputVariable.get(4)[i]); |
151 |
| -// } |
152 |
| -// // Darcy velocities due to capillary gradient |
153 |
| -// tempVariable.add(inputVariable.get(4).clone()); |
154 |
| -// |
155 |
| -// // Darcy velocities due to gravity gradient |
156 |
| -// tempVariable.add(inputVariable.get(5).clone()); |
157 |
| -// |
158 |
| -// // pore velocities |
159 |
| -// tempVariable.add(inputVariable.get(6).clone()); |
160 |
| -// |
161 |
| -// // celerities |
162 |
| -// tempVariable.add(inputVariable.get(7).clone()); |
163 |
| -// |
164 |
| -// // kinematic ratio |
165 |
| -// tempVariable.add(inputVariable.get(8).clone()); |
166 |
| -// |
167 |
| -// // errorVolume |
168 |
| -// tempVariable.add(inputVariable.get(9).clone()); |
169 |
| -// |
170 |
| -// // top boundary condition value |
171 |
| -// tempVariable.add(inputVariable.get(10).clone()); |
172 |
| -// |
173 |
| -// // bottom boundary condition value |
174 |
| -// tempVariable.add(inputVariable.get(11).clone()); |
175 |
| -// |
176 |
| -// // surface run-off |
177 |
| -// tempVariable.add(inputVariable.get(12).clone()); |
178 |
| - |
179 |
| - myVariable.put(inputDate,(ArrayList<double[]>) tempVariable.clone()); |
180 |
| - //System.out.println(myVariable.size() +" "+ myVariable.keySet()); |
181 |
| - //System.out.println(myVariable.toString()); |
182 |
| - tempVariable.clear(); |
| 138 | + |
183 | 139 | step++;
|
184 |
| - |
| 140 | + |
185 | 141 | }
|
186 |
| - |
| 142 | + |
187 | 143 |
|
188 | 144 | }
|
0 commit comments