├── .gitignore
├── LICENSE
├── README.md
├── src
├── Make
│ ├── files
│ ├── linux64GccDPInt32Debug
│ │ ├── options
│ │ ├── sourceFiles
│ │ └── variables
│ ├── linux64GccDPInt32Opt
│ │ ├── options
│ │ ├── sourceFiles
│ │ └── variables
│ └── options
├── dynamicRefine2DFvMesh
│ ├── dynamicRefine2DFvMesh.C
│ └── dynamicRefine2DFvMesh.H
└── hexRef2D
│ ├── hexRef2D.C
│ └── hexRef2D.H
└── tutorial
└── interFoam
└── damBreak
├── 0
├── U
├── alpha.water
├── alpha.water.orig
└── p_rgh
├── .gitignore
├── Allrun
├── Screenshot from 2019-04-18 14-46-42.png
├── alpha-with-refinement.gif
├── constant
├── dynamicMeshDict
├── g
├── polyMesh
│ ├── boundary
│ ├── faces
│ ├── neighbour
│ ├── owner
│ └── points
├── transportProperties
└── turbulenceProperties
├── meshRefinement-2d.gif
├── meshRefinement-3d.gif
└── system
├── blockMeshDict
├── controlDict
├── decomposeParDict
├── fvSchemes
├── fvSolution
├── sampling
└── setFieldsDict
/.gitignore:
--------------------------------------------------------------------------------
1 | *.o
2 | *.dep
3 | */linux64*
4 | *lnInclude*
5 |
6 | */0.[0-9]*
7 | */[1-9].[0-9]*
8 | */[1-9]*
9 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2019 Ajit Kumar
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ## Adaptive mesh refinement in OpenFoam-v1812 for 2-dimensional problems
2 |
3 | Standard OpenFOAM-v1812 has a module called dynamicRefineFvMesh. This adaptive mesh refinement tool does not seem to be
4 | applicable for two dimensional problems. [Shonibare](https://www.academia.edu/16217705/Two-dimensional_adaptive_meshing_in_OpenFOAM) and [Ahmad Baniabedalruhman](https://digitalcommons.mtu.edu/cgi/viewcontent.cgi?referer=&httpsredir=1&article=2008&context=etds)
5 | recently described how to adapt this adaptive mesh tools for two dimensional problems. However,
6 | CFD community struggled to implement their ideas. See this [cfd-online forum](https://www.cfd-online.com/Forums/openfoam-community-contributions/118870-2d-adaptive-mesh-refinement.html).
7 |
8 | Eventually, [Luca Cornolti](https://www.cfd-online.com/Forums/openfoam-community-contributions/118870-2d-adaptive-mesh-refinement.html) shared a working for code
9 | for adaptive mesh refinement for 2d problems. His initial code were for foam-extend. This repository is simple adaptation Luca's work
10 | for OpenFOAM-v1812. The animated screenshot clearly shows that it works.
11 |
12 | [Disclaimer: It is to be noted that in the same forum discussion, Luca Cornolti also shared his adaptive mesh refinement
13 | for OpenFOAM-v1816. This repository is not a copy of that. Instead, this codes is built on top of Luca's foam-extend codes]
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 | ### Compilation
31 |
32 | Switch to src directory and run
33 |
34 | wmake libso
35 |
36 |
37 | ### Example
38 | To run the a dam-break example, switch to tutorial/interFoam/dambreak and then run
39 |
40 | ./Allrun
41 |
42 |
--------------------------------------------------------------------------------
/src/Make/files:
--------------------------------------------------------------------------------
1 | hexRef2D/hexRef2D.C
2 | dynamicRefine2DFvMesh/dynamicRefine2DFvMesh.C
3 |
4 |
5 | LIB = $(FOAM_USER_LIBBIN)/libdynamicRefine2D
6 |
--------------------------------------------------------------------------------
/src/Make/linux64GccDPInt32Debug/options:
--------------------------------------------------------------------------------
1 | # 1 "Make/options"
2 | # 1 ""
3 | # 1 ""
4 | # 10 ""
5 | # 1 "/usr/include/stdc-predef.h" 1 3 4
6 |
7 | # 17 "/usr/include/stdc-predef.h" 3 4
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 | # 10 "" 2
55 | # 1 "Make/options"
56 | EXE_INC = -I$(LIB_SRC)/finiteVolume/lnInclude -I$(LIB_SRC)/surfMesh/lnInclude -I$(LIB_SRC)/meshTools/lnInclude -I$(LIB_SRC)/mesh/extrudeModel/lnInclude -I$(LIB_SRC)/dynamicMesh/lnInclude -I$(LIB_SRC)/dynamicFvMesh/lnInclude
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 | LIB_LIBS = -lfiniteVolume -lsurfMesh -lextrudeModel -ldynamicMesh -ldynamicFvMesh
65 |
--------------------------------------------------------------------------------
/src/Make/linux64GccDPInt32Debug/sourceFiles:
--------------------------------------------------------------------------------
1 | SOURCE = \
2 | hexRef2D.C \
3 | dynamicRefineFvMesh2D.C \
4 |
5 | # sources
6 |
--------------------------------------------------------------------------------
/src/Make/linux64GccDPInt32Debug/variables:
--------------------------------------------------------------------------------
1 | LIB = $(FOAM_USER_LIBBIN)/libTest2dDynamicRefine
2 |
--------------------------------------------------------------------------------
/src/Make/linux64GccDPInt32Opt/options:
--------------------------------------------------------------------------------
1 | # 1 "Make/options"
2 | # 1 ""
3 | # 1 ""
4 | # 10 ""
5 | # 1 "/usr/include/stdc-predef.h" 1 3 4
6 |
7 | # 17 "/usr/include/stdc-predef.h" 3 4
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 | # 10 "" 2
55 | # 1 "Make/options"
56 | EXE_INC = -I$(LIB_SRC)/finiteVolume/lnInclude -I$(LIB_SRC)/surfMesh/lnInclude -I$(LIB_SRC)/meshTools/lnInclude -I$(LIB_SRC)/mesh/extrudeModel/lnInclude -I$(LIB_SRC)/dynamicMesh/lnInclude -I$(LIB_SRC)/dynamicFvMesh/lnInclude
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 | LIB_LIBS = -lfiniteVolume -lsurfMesh -lextrudeModel -ldynamicMesh -ldynamicFvMesh
65 |
--------------------------------------------------------------------------------
/src/Make/linux64GccDPInt32Opt/sourceFiles:
--------------------------------------------------------------------------------
1 | SOURCE = \
2 | hexRef2D/hexRef2D.C \
3 | dynamicRefine2DFvMesh/dynamicRefine2DFvMesh.C \
4 |
5 | # sources
6 |
--------------------------------------------------------------------------------
/src/Make/linux64GccDPInt32Opt/variables:
--------------------------------------------------------------------------------
1 | LIB = $(FOAM_USER_LIBBIN)/libdynamicRefine2D
2 |
--------------------------------------------------------------------------------
/src/Make/options:
--------------------------------------------------------------------------------
1 | EXE_INC = \
2 | -I$(LIB_SRC)/finiteVolume/lnInclude \
3 | -I$(LIB_SRC)/surfMesh/lnInclude \
4 | -I$(LIB_SRC)/meshTools/lnInclude \
5 | -I$(LIB_SRC)/mesh/extrudeModel/lnInclude \
6 | -I$(LIB_SRC)/dynamicMesh/lnInclude \
7 | -I$(LIB_SRC)/dynamicFvMesh/lnInclude
8 |
9 | LIB_LIBS = \
10 | -lfiniteVolume \
11 | -lsurfMesh \
12 | -lextrudeModel \
13 | -ldynamicMesh \
14 | -ldynamicFvMesh
15 |
--------------------------------------------------------------------------------
/src/dynamicRefine2DFvMesh/dynamicRefine2DFvMesh.C:
--------------------------------------------------------------------------------
1 | /*---------------------------------------------------------------------------*\
2 | ========= |
3 | \\ / F ield | foam-extend: Open Source CFD
4 | \\ / O peration | Version: 3.2
5 | \\ / A nd | Web: http://www.foam-extend.org
6 | \\/ M anipulation | For copyright notice see file Copyright
7 | -------------------------------------------------------------------------------
8 | License
9 | This file is part of OpenFOAM-v1806.
10 |
11 | Author
12 | Luca Cornolti - written for foam-extend
13 |
14 | Modified for OpenFOAM-v1806 by
15 | Ajit Kumar, Shiv Nadar University, India
16 |
17 |
18 | \*---------------------------------------------------------------------------*/
19 |
20 | #include "dynamicRefine2DFvMesh.H"
21 | #include "addToRunTimeSelectionTable.H"
22 | #include "volFields.H"
23 | #include "surfaceFields.H"
24 | #include "fvCFD.H"
25 | #include "syncTools.H"
26 | #include "pointFields.H"
27 | #include "polyTopoChange.H"
28 |
29 | // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
30 |
31 | namespace Foam
32 | {
33 |
34 | // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
35 |
36 | defineTypeNameAndDebug(dynamicRefine2DFvMesh, 0);
37 |
38 | addToRunTimeSelectionTable(dynamicFvMesh, dynamicRefine2DFvMesh, IOobject);
39 |
40 |
41 | // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
42 |
43 | label dynamicRefine2DFvMesh::count
44 | (
45 | const PackedBoolList& l,
46 | const unsigned int val
47 | )
48 | {
49 | label n = 0;
50 | forAll(l, i)
51 | {
52 | if (l.get(i) == val)
53 | {
54 | n++;
55 | }
56 | }
57 | return n;
58 | }
59 |
60 |
61 | void dynamicRefine2DFvMesh::calculateProtectedCells
62 | (
63 | PackedBoolList& unrefineableCell
64 | ) const
65 | {
66 | if (protectedCell_.empty())
67 | {
68 | unrefineableCell.clear();
69 | return;
70 | }
71 |
72 | const labelList& cellLevel = meshCutter_.cellLevel();
73 |
74 | unrefineableCell = protectedCell_;
75 |
76 | // Get neighbouring cell level
77 | labelList neiLevel(nFaces()-nInternalFaces());
78 |
79 | for (label faceI = nInternalFaces(); faceI < nFaces(); faceI++)
80 | {
81 | neiLevel[faceI-nInternalFaces()] = cellLevel[faceOwner()[faceI]];
82 | }
83 | syncTools::swapBoundaryFaceList(*this, neiLevel); // Ajit: , false);
84 |
85 |
86 | while (true)
87 | {
88 | // Pick up faces on border of protected cells
89 | boolList seedFace(nFaces(), false);
90 |
91 | forAll(faceNeighbour(), faceI)
92 | {
93 | label own = faceOwner()[faceI];
94 | bool ownProtected = (unrefineableCell.get(own) == 1);
95 | label nei = faceNeighbour()[faceI];
96 | bool neiProtected = (unrefineableCell.get(nei) == 1);
97 |
98 | if (ownProtected && (cellLevel[nei] > cellLevel[own]))
99 | {
100 | seedFace[faceI] = true;
101 | }
102 | else if (neiProtected && (cellLevel[own] > cellLevel[nei]))
103 | {
104 | seedFace[faceI] = true;
105 | }
106 | }
107 | for (label faceI = nInternalFaces(); faceI < nFaces(); faceI++)
108 | {
109 | label own = faceOwner()[faceI];
110 | bool ownProtected = (unrefineableCell.get(own) == 1);
111 | if
112 | (
113 | ownProtected
114 | && (neiLevel[faceI-nInternalFaces()] > cellLevel[own])
115 | )
116 | {
117 | seedFace[faceI] = true;
118 | }
119 | }
120 |
121 | syncTools::syncFaceList(*this, seedFace, orEqOp()); //, false); Ajit: Change here
122 |
123 |
124 | // Extend unrefineableCell
125 | bool hasExtended = false;
126 |
127 | for (label faceI = 0; faceI < nInternalFaces(); faceI++)
128 | {
129 | if (seedFace[faceI])
130 | {
131 | label own = faceOwner()[faceI];
132 | if (unrefineableCell.get(own) == 0)
133 | {
134 | unrefineableCell.set(own, 1);
135 | hasExtended = true;
136 | }
137 |
138 | label nei = faceNeighbour()[faceI];
139 | if (unrefineableCell.get(nei) == 0)
140 | {
141 | unrefineableCell.set(nei, 1);
142 | hasExtended = true;
143 | }
144 | }
145 | }
146 | for (label faceI = nInternalFaces(); faceI < nFaces(); faceI++)
147 | {
148 | if (seedFace[faceI])
149 | {
150 | label own = faceOwner()[faceI];
151 | if (unrefineableCell.get(own) == 0)
152 | {
153 | unrefineableCell.set(own, 1);
154 | hasExtended = true;
155 | }
156 | }
157 | }
158 |
159 | if (!returnReduce(hasExtended, orOp()))
160 | {
161 | break;
162 | }
163 | }
164 | }
165 |
166 |
167 | void dynamicRefine2DFvMesh::readDict()
168 | {
169 | dictionary refineDict
170 | (
171 | IOdictionary
172 | (
173 | IOobject
174 | (
175 | "dynamicMeshDict",
176 | time().constant(),
177 | *this,
178 | IOobject::MUST_READ,
179 | IOobject::NO_WRITE,
180 | false
181 | )
182 | ).subDict(typeName + "Coeffs")
183 | );
184 |
185 | correctFluxes_ = List >(refineDict.lookup("correctFluxes"));
186 |
187 | dumpLevel_ = Switch(refineDict.lookup("dumpLevel"));
188 | }
189 |
190 |
191 | // Refines cells, maps fields and recalculates (an approximate) flux
192 | autoPtr dynamicRefine2DFvMesh::refine
193 | (
194 | const labelList& cellsToRefine
195 | )
196 | {
197 | // Mesh changing engine.
198 | polyTopoChange meshMod(*this);
199 |
200 | // Play refinement commands into mesh changer.
201 | meshCutter_.setRefinement(cellsToRefine, meshMod);
202 |
203 | // Create mesh (with inflation), return map from old to new mesh.
204 | //autoPtr map = meshMod.changeMesh(*this, true);
205 | autoPtr map = meshMod.changeMesh(*this, false);
206 |
207 | Info<< "Refined from "
208 | << returnReduce(map().nOldCells(), sumOp())
209 | << " to " << globalData().nTotalCells() << " cells." << endl;
210 |
211 | if (debug)
212 | {
213 | // Check map.
214 | for (label faceI = 0; faceI < nInternalFaces(); faceI++)
215 | {
216 | label oldFaceI = map().faceMap()[faceI];
217 |
218 | if (oldFaceI >= nInternalFaces())
219 | {
220 | FatalErrorIn("dynamicRefine2DFvMesh::refine(const labelList&)")
221 | << "New internal face:" << faceI
222 | << " fc:" << faceCentres()[faceI]
223 | << " originates from boundary oldFace:" << oldFaceI
224 | << abort(FatalError);
225 | }
226 | }
227 | }
228 |
229 |
230 | // Update fields
231 | updateMesh(map);
232 |
233 | // Move mesh
234 | /*
235 | pointField newPoints;
236 | if (map().hasMotionPoints())
237 | {
238 | newPoints = map().preMotionPoints();
239 | }
240 | else
241 | {
242 | newPoints = points();
243 | }
244 | movePoints(newPoints);
245 | */
246 |
247 | // Correct the flux for modified/added faces. All the faces which only
248 | // have been renumbered will already have been handled by the mapping.
249 | {
250 | const labelList& faceMap = map().faceMap();
251 | const labelList& reverseFaceMap = map().reverseFaceMap();
252 |
253 | // Storage for any master faces. These will be the original faces
254 | // on the coarse cell that get split into four (or rather the
255 | // master face gets modified and three faces get added from the master)
256 | labelHashSet masterFaces(4*cellsToRefine.size());
257 |
258 | forAll(faceMap, faceI)
259 | {
260 | label oldFaceI = faceMap[faceI];
261 |
262 | if (oldFaceI >= 0)
263 | {
264 | label masterFaceI = reverseFaceMap[oldFaceI];
265 |
266 | if (masterFaceI < 0)
267 | {
268 | FatalErrorIn
269 | (
270 | "dynamicRefine2DFvMesh::refine(const labelList&)"
271 | ) << "Problem: should not have removed faces"
272 | << " when refining."
273 | << nl << "face:" << faceI << abort(FatalError);
274 | }
275 | else if (masterFaceI != faceI)
276 | {
277 | masterFaces.insert(masterFaceI);
278 | }
279 | }
280 | }
281 | if (debug)
282 | {
283 | Info<< "Found " << returnReduce(masterFaces.size(), sumOp())
284 | << " split faces " << endl;
285 | }
286 |
287 | forAll(correctFluxes_, i)
288 | {
289 | if (debug)
290 | {
291 | Info<< "Mapping flux " << correctFluxes_[i][0]
292 | << " using interpolated flux " << correctFluxes_[i][1]
293 | << endl;
294 | }
295 | surfaceScalarField& phi = const_cast
296 | (
297 | lookupObject(correctFluxes_[i][0])
298 | );
299 | surfaceScalarField phiU =
300 | fvc::interpolate
301 | (
302 | lookupObject(correctFluxes_[i][1])
303 | )
304 | & Sf();
305 |
306 | // Recalculate new internal faces.
307 | for (label faceI = 0; faceI < nInternalFaces(); faceI++)
308 | {
309 | label oldFaceI = faceMap[faceI];
310 |
311 | if (oldFaceI == -1)
312 | {
313 | // Inflated/appended
314 | phi[faceI] = phiU[faceI];
315 | }
316 | else if (reverseFaceMap[oldFaceI] != faceI)
317 | {
318 | // face-from-masterface
319 | phi[faceI] = phiU[faceI];
320 | }
321 | }
322 |
323 | // Recalculate new boundary faces.
324 | forAll(phi.boundaryFieldRef(), patchI)
325 | {
326 | fvsPatchScalarField& patchPhi = phi.boundaryFieldRef()[patchI];
327 | const fvsPatchScalarField& patchPhiU =
328 | phiU.boundaryFieldRef()[patchI];
329 |
330 | label faceI = patchPhi.patch().patch().start();
331 |
332 | forAll(patchPhi, i)
333 | {
334 | label oldFaceI = faceMap[faceI];
335 |
336 | if (oldFaceI == -1)
337 | {
338 | // Inflated/appended
339 | patchPhi[i] = patchPhiU[i];
340 | }
341 | else if (reverseFaceMap[oldFaceI] != faceI)
342 | {
343 | // face-from-masterface
344 | patchPhi[i] = patchPhiU[i];
345 | }
346 |
347 | faceI++;
348 | }
349 | }
350 |
351 | // Update master faces
352 | forAllConstIter(labelHashSet, masterFaces, iter)
353 | {
354 | label faceI = iter.key();
355 |
356 | if (isInternalFace(faceI))
357 | {
358 | phi[faceI] = phiU[faceI];
359 | }
360 | else
361 | {
362 | label patchI = boundaryMesh().whichPatch(faceI);
363 | label i = faceI - boundaryMesh()[patchI].start();
364 |
365 | const fvsPatchScalarField& patchPhiU =
366 | phiU.boundaryFieldRef()[patchI];
367 |
368 | fvsPatchScalarField& patchPhi =
369 | phi.boundaryFieldRef()[patchI];
370 |
371 | patchPhi[i] = patchPhiU[i];
372 | }
373 | }
374 | }
375 | }
376 |
377 |
378 |
379 | // Update numbering of cells/vertices.
380 | meshCutter_.updateMesh(map);
381 |
382 | // Update numbering of protectedCell_
383 | if (protectedCell_.size())
384 | {
385 | PackedBoolList newProtectedCell(nCells());
386 |
387 | forAll(newProtectedCell, cellI)
388 | {
389 | label oldCellI = map().cellMap()[cellI];
390 | newProtectedCell.set(cellI, protectedCell_.get(oldCellI));
391 | }
392 | protectedCell_.transfer(newProtectedCell);
393 | }
394 |
395 | // Debug: Check refinement levels (across faces only)
396 | meshCutter_.checkRefinementLevels(-1, labelList(0));
397 |
398 | return map;
399 | }
400 |
401 |
402 | // Combines previously split cells, maps fields and recalculates
403 | // (an approximate) flux
404 | autoPtr dynamicRefine2DFvMesh::unrefine
405 | (
406 | const labelList& splitEdges
407 | )
408 | {
409 | polyTopoChange meshMod(*this);
410 |
411 | // Play refinement commands into mesh changer.
412 | meshCutter_.setUnrefinement(splitEdges, meshMod);
413 |
414 |
415 | // Save information on faces that will be combined
416 | // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
417 |
418 | // Find the faceMidPoints on cells to be combined.
419 | // for each face resulting of split of face into four store the
420 | // midpoint
421 | Map faceToSplitPoint(2*splitEdges.size()); //????
422 |
423 | {
424 | forAll(splitEdges, i)
425 | {
426 | label edgeI = splitEdges[i];
427 |
428 | const edge& e = edges()[edgeI];
429 |
430 | forAll(e, j)
431 | {
432 | label pointI = e[j];
433 |
434 | const labelList& pFaces = pointFaces()[pointI];
435 |
436 | forAll(pFaces, pFaceI)
437 | {
438 | faceToSplitPoint.insert(pFaces[pFaceI], pointI);
439 | }
440 | }
441 | }
442 | }
443 |
444 |
445 |
446 | // Change mesh and generate map.
447 | //autoPtr map = meshMod.changeMesh(*this, true);
448 | autoPtr map = meshMod.changeMesh(*this, false);
449 |
450 | Info<< "Unrefined from "
451 | << returnReduce(map().nOldCells(), sumOp())
452 | << " to " << globalData().nTotalCells() << " cells."
453 | << endl;
454 |
455 | // Update fields
456 | updateMesh(map);
457 |
458 |
459 | // Move mesh
460 | /*
461 | pointField newPoints;
462 | if (map().hasMotionPoints())
463 | {
464 | newPoints = map().preMotionPoints();
465 | }
466 | else
467 | {
468 | newPoints = points();
469 | }
470 | movePoints(newPoints);
471 | */
472 |
473 | // Correct the flux for modified faces.
474 | {
475 | const labelList& reversePointMap = map().reversePointMap();
476 | const labelList& reverseFaceMap = map().reverseFaceMap();
477 |
478 | forAll(correctFluxes_, i)
479 | {
480 | if (debug)
481 | {
482 | Info<< "Mapping flux " << correctFluxes_[i][0]
483 | << " using interpolated flux " << correctFluxes_[i][1]
484 | << endl;
485 | }
486 | surfaceScalarField& phi = const_cast
487 | (
488 | lookupObject(correctFluxes_[i][0])
489 | );
490 | surfaceScalarField phiU =
491 | fvc::interpolate
492 | (
493 | lookupObject(correctFluxes_[i][1])
494 | )
495 | & Sf();
496 |
497 | forAllConstIter(Map, faceToSplitPoint, iter)
498 | {
499 | label oldFaceI = iter.key();
500 | label oldPointI = iter();
501 |
502 | if (reversePointMap[oldPointI] < 0)
503 | {
504 | // midpoint was removed. See if face still exists.
505 | label faceI = reverseFaceMap[oldFaceI];
506 |
507 | if (faceI >= 0)
508 | {
509 | if (isInternalFace(faceI))
510 | {
511 | phi[faceI] = phiU[faceI];
512 | }
513 | else
514 | {
515 | label patchI = boundaryMesh().whichPatch(faceI);
516 | label i = faceI - boundaryMesh()[patchI].start();
517 |
518 | const fvsPatchScalarField& patchPhiU =
519 | phiU.boundaryFieldRef()[patchI];
520 |
521 | fvsPatchScalarField& patchPhi =
522 | phi.boundaryFieldRef()[patchI];
523 |
524 | patchPhi[i] = patchPhiU[i];
525 | }
526 | }
527 | }
528 | }
529 | }
530 | }
531 |
532 |
533 | // Update numbering of cells/vertices.
534 | meshCutter_.updateMesh(map);
535 |
536 | // Update numbering of protectedCell_
537 | if (protectedCell_.size())
538 | {
539 | PackedBoolList newProtectedCell(nCells());
540 |
541 | forAll(newProtectedCell, cellI)
542 | {
543 | label oldCellI = map().cellMap()[cellI];
544 | if (oldCellI >= 0)
545 | {
546 | newProtectedCell.set(cellI, protectedCell_.get(oldCellI));
547 | }
548 | }
549 | protectedCell_.transfer(newProtectedCell);
550 | }
551 |
552 | // Debug: Check refinement levels (across faces only)
553 | meshCutter_.checkRefinementLevels(-1, labelList(0));
554 |
555 | return map;
556 | }
557 |
558 |
559 | // Get max of connected point
560 | scalarField dynamicRefine2DFvMesh::maxPointField(const scalarField& pFld) const
561 | {
562 | scalarField vFld(nCells(), -GREAT);
563 |
564 | forAll(pointCells(), pointI)
565 | {
566 | const labelList& pCells = pointCells()[pointI];
567 |
568 | forAll(pCells, i)
569 | {
570 | vFld[pCells[i]] = max(vFld[pCells[i]], pFld[pointI]);
571 | }
572 | }
573 | return vFld;
574 | }
575 |
576 |
577 | // Get min of connected cell
578 | scalarField dynamicRefine2DFvMesh::minCellField(const volScalarField& vFld) const
579 | {
580 | scalarField pFld(nPoints(), GREAT);
581 |
582 | forAll(pointCells(), pointI)
583 | {
584 | const labelList& pCells = pointCells()[pointI];
585 |
586 | forAll(pCells, i)
587 | {
588 | pFld[pointI] = min(pFld[pointI], vFld[pCells[i]]);
589 | }
590 | }
591 | return pFld;
592 | }
593 |
594 |
595 | // Simple (non-parallel) interpolation by averaging.
596 | scalarField dynamicRefine2DFvMesh::cellToPoint(const scalarField& vFld) const
597 | {
598 | scalarField pFld(nPoints());
599 |
600 | forAll(pointCells(), pointI)
601 | {
602 | const labelList& pCells = pointCells()[pointI];
603 |
604 | scalar sum = 0.0;
605 | forAll(pCells, i)
606 | {
607 | sum += vFld[pCells[i]];
608 | }
609 | pFld[pointI] = sum/pCells.size();
610 | }
611 | return pFld;
612 | }
613 |
614 |
615 | // Calculate error. Is < 0 or distance from inbetween levels
616 | scalarField dynamicRefine2DFvMesh::error
617 | (
618 | const scalarField& fld,
619 | const scalar minLevel,
620 | const scalar maxLevel
621 | ) const
622 | {
623 | const scalar halfLevel = 0.5*(minLevel + maxLevel);
624 |
625 | scalarField c(fld.size(), -1);
626 |
627 | forAll(fld, i)
628 | {
629 | if (fld[i] >= minLevel && fld[i] < maxLevel)
630 | {
631 | c[i] = mag(fld[i] - halfLevel);
632 | }
633 | }
634 | return c;
635 | }
636 |
637 |
638 | void dynamicRefine2DFvMesh::selectRefineCandidates
639 | (
640 | const scalar lowerRefineLevel,
641 | const scalar upperRefineLevel,
642 | const scalarField& vFld,
643 | PackedBoolList& candidateCell
644 | ) const
645 | {
646 | // Get error per cell. Is -1 (not to be refined) to >0 (to be refined,
647 | // higher more desirable to be refined).
648 | scalarField cellError
649 | (
650 | maxPointField
651 | (
652 | error
653 | (
654 | cellToPoint(vFld),
655 | lowerRefineLevel,
656 | upperRefineLevel
657 | )
658 | )
659 | );
660 |
661 | // Mark cells that are candidates for refinement.
662 | forAll(cellError, cellI)
663 | {
664 | if (cellError[cellI] > 0)
665 | {
666 | candidateCell.set(cellI, 1);
667 | }
668 | }
669 | }
670 |
671 |
672 | labelList dynamicRefine2DFvMesh::selectRefineCells
673 | (
674 | const label maxCells,
675 | const label maxRefinement,
676 | const PackedBoolList& candidateCell
677 | ) const
678 | {
679 | // Every refined cell causes 3 extra cells in 2D
680 | label nTotToRefine = (maxCells - globalData().nTotalCells()) / 3;
681 |
682 | const labelList& cellLevel = meshCutter_.cellLevel();
683 |
684 | // Mark cells that cannot be refined since they would trigger refinement
685 | // of protected cells (since 2:1 cascade)
686 | PackedBoolList unrefineableCell;
687 | calculateProtectedCells(unrefineableCell);
688 |
689 | // Count current selection
690 | label nCandidates = returnReduce(count(candidateCell, 1), sumOp());
691 |
692 | // Collect all cells
693 | DynamicList candidates(nCells());
694 |
695 | if (nCandidates < nTotToRefine)
696 | {
697 | forAll(candidateCell, cellI)
698 | {
699 | if
700 | (
701 | cellLevel[cellI] < maxRefinement
702 | && candidateCell.get(cellI) == 1
703 | && (
704 | unrefineableCell.empty()
705 | || unrefineableCell.get(cellI) == 0
706 | )
707 | )
708 | {
709 | candidates.append(cellI);
710 | }
711 | }
712 | }
713 | else
714 | {
715 | // Sort by error? For now just truncate.
716 | for (label level = 0; level < maxRefinement; level++)
717 | {
718 | forAll(candidateCell, cellI)
719 | {
720 | if
721 | (
722 | cellLevel[cellI] == level
723 | && candidateCell.get(cellI) == 1
724 | && (
725 | unrefineableCell.empty()
726 | || unrefineableCell.get(cellI) == 0
727 | )
728 | )
729 | {
730 | candidates.append(cellI);
731 | }
732 | }
733 |
734 | if (returnReduce(candidates.size(), sumOp()) > nTotToRefine)
735 | {
736 | break;
737 | }
738 | }
739 | }
740 |
741 | // Guarantee 2:1 refinement after refinement
742 | labelList consistentSet
743 | (
744 | meshCutter_.consistentRefinement
745 | (
746 | candidates.shrink(),
747 | true // Add to set to guarantee 2:1
748 | )
749 | );
750 |
751 | Info<< "Selected " << returnReduce(consistentSet.size(), sumOp())
752 | << " cells for refinement out of " << globalData().nTotalCells()
753 | << "." << endl;
754 |
755 | return consistentSet;
756 | }
757 |
758 |
759 | labelList dynamicRefine2DFvMesh::selectUnrefineEdges
760 | (
761 | const scalar unrefineLevel,
762 | const PackedBoolList& markedCell,
763 | const scalarField& pFld
764 | ) const
765 | {
766 | // All points that can be unrefined
767 | const labelList splitEdges(meshCutter_.getSplitEdges());
768 |
769 | DynamicList newSplitEdges(splitEdges.size());
770 |
771 | forAll(splitEdges, j)
772 | {
773 | label edgeJ = splitEdges[j];
774 |
775 | const edge& e = edges()[edgeJ];
776 |
777 | forAll(e, i)
778 | {
779 | label pointI = e[i];
780 |
781 | bool hasMarked = true;
782 |
783 | // Whas is the meaning of unrefineLevel?
784 | // Does it makes sense to compare it with
785 | // the field value instead of the cell level as the name suggests?
786 | if (pFld[pointI] < unrefineLevel)
787 | {
788 | hasMarked = false;
789 |
790 | // Check that all cells are not marked
791 | const labelList& pCells = pointCells()[pointI];
792 |
793 | forAll(pCells, pCellI)
794 | {
795 | if (markedCell.get(pCells[pCellI]) == 1)
796 | {
797 | hasMarked = true;
798 | break;
799 | }
800 | }
801 | }
802 |
803 | if (!hasMarked)
804 | {
805 | newSplitEdges.append(edgeJ);
806 | break;
807 | }
808 | }
809 | }
810 |
811 |
812 | newSplitEdges.shrink();
813 |
814 | // Guarantee 2:1 refinement after unrefinement
815 | labelList consistentSet
816 | (
817 | meshCutter_.consistentUnrefinement
818 | (
819 | newSplitEdges,
820 | false
821 | )
822 | );
823 | Info<< "Selected " << returnReduce(consistentSet.size(), sumOp())
824 | << " split edges out of a possible "
825 | << returnReduce(splitEdges.size(), sumOp())
826 | << "." << endl;
827 |
828 | return consistentSet;
829 | }
830 |
831 |
832 | void dynamicRefine2DFvMesh::extendMarkedCells(PackedBoolList& markedCell) const
833 | {
834 | // Mark faces using any marked cell
835 | boolList markedFace(nFaces(), false);
836 |
837 | forAll(markedCell, cellI)
838 | {
839 | if (markedCell.get(cellI) == 1)
840 | {
841 | const cell& cFaces = cells()[cellI];
842 |
843 | forAll(cFaces, i)
844 | {
845 | markedFace[cFaces[i]] = true;
846 | }
847 | }
848 | }
849 |
850 | syncTools::syncFaceList(*this, markedFace, orEqOp()); // Ajit, false);
851 |
852 | // Update cells using any markedFace
853 | for (label faceI = 0; faceI < nInternalFaces(); faceI++)
854 | {
855 | if (markedFace[faceI])
856 | {
857 | markedCell.set(faceOwner()[faceI], 1);
858 | markedCell.set(faceNeighbour()[faceI], 1);
859 | }
860 | }
861 | for (label faceI = nInternalFaces(); faceI < nFaces(); faceI++)
862 | {
863 | if (markedFace[faceI])
864 | {
865 | markedCell.set(faceOwner()[faceI], 1);
866 | }
867 | }
868 | }
869 |
870 |
871 | // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
872 |
873 | dynamicRefine2DFvMesh::dynamicRefine2DFvMesh(const IOobject& io)
874 | :
875 | dynamicFvMesh(io),
876 | meshCutter_(*this),
877 | dumpLevel_(false),
878 | nRefinementIterations_(0),
879 | protectedCell_(nCells(), 0)
880 |
881 | {
882 | const labelList& cellLevel = meshCutter_.cellLevel();
883 | const labelList& pointLevel = meshCutter_.pointLevel();
884 |
885 | dictionary refineDict
886 | (
887 | IOdictionary
888 | (
889 | IOobject
890 | (
891 | "dynamicMeshDict",
892 | time().constant(),
893 | *this,
894 | IOobject::MUST_READ,
895 | IOobject::NO_WRITE,
896 | false
897 | )
898 | ).subDict(typeName + "Coeffs")
899 | );
900 |
901 | // Set cells that should not be refined.
902 | // This is currently any cell which does not have 8 anchor points or
903 | // uses any face which does not have 4 anchor points.
904 | // Note: do not use cellPoint addressing
905 |
906 | // Count number of points <= cellLevel
907 | // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
908 |
909 | labelList nAnchors(nCells(), 0);
910 |
911 | label nProtected = 0;
912 |
913 | forAll(pointCells(), pointI)
914 | {
915 | const labelList& pCells = pointCells()[pointI];
916 |
917 | forAll(pCells, i)
918 | {
919 | label cellI = pCells[i];
920 |
921 | if (protectedCell_.get(cellI) == 0)
922 | {
923 | if (pointLevel[pointI] <= cellLevel[cellI])
924 | {
925 | nAnchors[cellI]++;
926 |
927 | if (nAnchors[cellI] > 8)
928 | {
929 | protectedCell_.set(cellI, 1);
930 | nProtected++;
931 | }
932 | }
933 | }
934 | }
935 | }
936 |
937 |
938 | // Count number of points <= faceLevel
939 | // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
940 | // Bit tricky since proc face might be one more refined than the owner since
941 | // the coupled one is refined.
942 |
943 | {
944 | labelList neiLevel(nFaces());
945 |
946 | for (label faceI = 0; faceI < nInternalFaces(); faceI++)
947 | {
948 | neiLevel[faceI] = cellLevel[faceNeighbour()[faceI]];
949 | }
950 | for (label faceI = nInternalFaces(); faceI < nFaces(); faceI++)
951 | {
952 | neiLevel[faceI] = cellLevel[faceOwner()[faceI]];
953 | }
954 | syncTools::swapFaceList(*this, neiLevel); // Ajit, false);
955 |
956 |
957 | boolList protectedFace(nFaces(), false);
958 |
959 | forAll(faceOwner(), faceI)
960 | {
961 | label faceLevel = max
962 | (
963 | cellLevel[faceOwner()[faceI]],
964 | neiLevel[faceI]
965 | );
966 |
967 | const face& f = faces()[faceI];
968 |
969 | label nAnchors = 0;
970 |
971 | forAll(f, fp)
972 | {
973 | if (pointLevel[f[fp]] <= faceLevel)
974 | {
975 | nAnchors++;
976 |
977 | if (nAnchors > 4)
978 | {
979 | protectedFace[faceI] = true;
980 | break;
981 | }
982 | }
983 | }
984 | }
985 |
986 | syncTools::syncFaceList
987 | (
988 | *this,
989 | protectedFace,
990 | orEqOp()
991 | //,false // ajit commented
992 | );
993 |
994 | for (label faceI = 0; faceI < nInternalFaces(); faceI++)
995 | {
996 | if (protectedFace[faceI])
997 | {
998 | protectedCell_.set(faceOwner()[faceI], 1);
999 | nProtected++;
1000 | protectedCell_.set(faceNeighbour()[faceI], 1);
1001 | nProtected++;
1002 | }
1003 | }
1004 | for (label faceI = nInternalFaces(); faceI < nFaces(); faceI++)
1005 | {
1006 | if (protectedFace[faceI])
1007 | {
1008 | protectedCell_.set(faceOwner()[faceI], 1);
1009 | nProtected++;
1010 | }
1011 | }
1012 | }
1013 |
1014 | if (returnReduce(nProtected, sumOp()) == 0)
1015 | {
1016 | protectedCell_.clear();
1017 | }
1018 | }
1019 |
1020 |
1021 | // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
1022 |
1023 | dynamicRefine2DFvMesh::~dynamicRefine2DFvMesh()
1024 | {}
1025 |
1026 |
1027 | // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
1028 |
1029 | bool dynamicRefine2DFvMesh::update()
1030 | {
1031 | // Re-read dictionary. Choosen since usually -small so trivial amount
1032 | // of time compared to actual refinement. Also very useful to be able
1033 | // to modify on-the-fly.
1034 | dictionary refineDict
1035 | (
1036 | IOdictionary
1037 | (
1038 | IOobject
1039 | (
1040 | "dynamicMeshDict",
1041 | time().constant(),
1042 | *this,
1043 | IOobject::MUST_READ,
1044 | IOobject::NO_WRITE,
1045 | false
1046 | )
1047 | ).subDict(typeName + "Coeffs")
1048 | );
1049 |
1050 |
1051 | label refineInterval = readLabel(refineDict.lookup("refineInterval"));
1052 |
1053 | bool hasChanged = false;
1054 |
1055 | if (refineInterval == 0)
1056 | {
1057 | topoChanging(hasChanged);
1058 |
1059 | return false;
1060 | }
1061 | else if (refineInterval < 0)
1062 | {
1063 | FatalErrorIn("dynamicRefine2DFvMesh::update()")
1064 | << "Illegal refineInterval " << refineInterval << nl
1065 | << "The refineInterval setting in the dynamicMeshDict should"
1066 | << " be >= 1." << nl
1067 | << exit(FatalError);
1068 | }
1069 |
1070 |
1071 |
1072 |
1073 | // Note: cannot refine at time 0 since no V0 present since mesh not
1074 | // moved yet.
1075 |
1076 | if (time().timeIndex() > 0 && time().timeIndex() % refineInterval == 0)
1077 | {
1078 | label maxCells = readLabel(refineDict.lookup("maxCells"));
1079 |
1080 | if (maxCells <= 0)
1081 | {
1082 | FatalErrorIn("dynamicRefine2DFvMesh::update()")
1083 | << "Illegal maximum number of cells " << maxCells << nl
1084 | << "The maxCells setting in the dynamicMeshDict should"
1085 | << " be > 0." << nl
1086 | << exit(FatalError);
1087 | }
1088 |
1089 | label maxRefinement = readLabel(refineDict.lookup("maxRefinement"));
1090 |
1091 | if (maxRefinement <= 0)
1092 | {
1093 | FatalErrorIn("dynamicRefine2DFvMesh::update()")
1094 | << "Illegal maximum refinement level " << maxRefinement << nl
1095 | << "The maxCells setting in the dynamicMeshDict should"
1096 | << " be > 0." << nl
1097 | << exit(FatalError);
1098 | }
1099 |
1100 | word field(refineDict.lookup("field"));
1101 |
1102 | const volScalarField& vFld = lookupObject(field);
1103 |
1104 | const scalar lowerRefineLevel =
1105 | readScalar(refineDict.lookup("lowerRefineLevel"));
1106 | const scalar upperRefineLevel =
1107 | readScalar(refineDict.lookup("upperRefineLevel"));
1108 | const scalar unrefineLevel =
1109 | readScalar(refineDict.lookup("unrefineLevel"));
1110 | const label nBufferLayers =
1111 | readLabel(refineDict.lookup("nBufferLayers"));
1112 | const label nBufferLayersR =
1113 | readLabel(refineDict.lookup("nBufferLayersR"));
1114 |
1115 | // Cells marked for refinement or otherwise protected from unrefinement.
1116 | PackedBoolList refineCell(nCells());
1117 |
1118 | if (globalData().nTotalCells() < maxCells)
1119 | {
1120 | // Determine candidates for refinement (looking at field only)
1121 | selectRefineCandidates
1122 | (
1123 | lowerRefineLevel,
1124 | upperRefineLevel,
1125 | vFld,
1126 | refineCell
1127 | );
1128 |
1129 | for (label i = 0; i < nBufferLayersR; i++)
1130 | {
1131 | extendMarkedCells(refineCell);
1132 | }
1133 |
1134 | // Select subset of candidates. Take into account max allowable
1135 | // cells, refinement level, protected cells.
1136 | labelList cellsToRefine
1137 | (
1138 | selectRefineCells
1139 | (
1140 | maxCells,
1141 | maxRefinement,
1142 | refineCell
1143 | )
1144 | );
1145 |
1146 | label nCellsToRefine = returnReduce
1147 | (
1148 | cellsToRefine.size(), sumOp()
1149 | );
1150 |
1151 | if (nCellsToRefine > 0)
1152 | {
1153 | // Refine/update mesh and map fields
1154 | autoPtr map = refine(cellsToRefine);
1155 |
1156 | // Update refineCell. Note that some of the marked ones have
1157 | // not been refined due to constraints.
1158 | {
1159 | const labelList& cellMap = map().cellMap();
1160 | const labelList& reverseCellMap = map().reverseCellMap();
1161 |
1162 | PackedBoolList newRefineCell(cellMap.size());
1163 |
1164 | forAll(cellMap, cellI)
1165 | {
1166 | label oldCellI = cellMap[cellI];
1167 |
1168 | if (oldCellI < 0)
1169 | {
1170 | newRefineCell.set(cellI, 1);
1171 | }
1172 | else if (reverseCellMap[oldCellI] != cellI)
1173 | {
1174 | newRefineCell.set(cellI, 1);
1175 | }
1176 | else
1177 | {
1178 | newRefineCell.set(cellI, refineCell.get(oldCellI));
1179 | }
1180 | }
1181 | refineCell.transfer(newRefineCell);
1182 | }
1183 |
1184 | // Extend with a buffer layer to prevent neighbouring points
1185 | // being unrefined.
1186 | for (label i = 0; i < nBufferLayers; i++)
1187 | {
1188 | extendMarkedCells(refineCell);
1189 | }
1190 |
1191 | hasChanged = true;
1192 | }
1193 | }
1194 |
1195 |
1196 | {
1197 | // Select unrefineable points that are not marked in refineCell
1198 | labelList edgesToUnrefine
1199 | (
1200 | selectUnrefineEdges
1201 | (
1202 | unrefineLevel,
1203 | refineCell,
1204 | minCellField(vFld)
1205 | )
1206 | );
1207 |
1208 | label nSplitEdges = returnReduce
1209 | (
1210 | edgesToUnrefine.size(),
1211 | sumOp()
1212 | );
1213 |
1214 | if (nSplitEdges > 0)
1215 | {
1216 | // Refine/update mesh
1217 | unrefine(edgesToUnrefine);
1218 |
1219 | hasChanged = true;
1220 | }
1221 | }
1222 |
1223 |
1224 | if ((nRefinementIterations_ % 10) == 0)
1225 | {
1226 | // Compact refinement history occassionally (how often?).
1227 | // Unrefinement causes holes in the refinementHistory.
1228 | const_cast(meshCutter().history()).compact();
1229 | }
1230 | nRefinementIterations_++;
1231 | }
1232 |
1233 | topoChanging(hasChanged);
1234 |
1235 | return hasChanged;
1236 | }
1237 |
1238 |
1239 | bool dynamicRefine2DFvMesh::writeObject
1240 | (
1241 | IOstream::streamFormat fmt,
1242 | IOstream::versionNumber ver,
1243 | IOstream::compressionType cmp,
1244 | const bool valid
1245 | ) const
1246 | {
1247 | // Force refinement data to go to the current time directory.
1248 | const_cast(meshCutter_).setInstance(time().timeName());
1249 |
1250 | bool writeOk =
1251 | dynamicFvMesh::writeObject(fmt, ver, cmp, valid)
1252 | && meshCutter_.write();
1253 |
1254 | if (dumpLevel_)
1255 | {
1256 | volScalarField scalarCellLevel
1257 | (
1258 | IOobject
1259 | (
1260 | "cellLevel",
1261 | time().timeName(),
1262 | *this,
1263 | IOobject::NO_READ,
1264 | IOobject::AUTO_WRITE,
1265 | false
1266 | ),
1267 | *this,
1268 | dimensionedScalar("level", dimless, 0)
1269 | );
1270 |
1271 | const labelList& cellLevel = meshCutter_.cellLevel();
1272 |
1273 | forAll(cellLevel, cellI)
1274 | {
1275 | scalarCellLevel[cellI] = cellLevel[cellI];
1276 | }
1277 |
1278 | writeOk = writeOk && scalarCellLevel.write();
1279 | }
1280 |
1281 | return writeOk;
1282 | }
1283 |
1284 |
1285 | // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
1286 |
1287 | } // End namespace Foam
1288 |
1289 | // ************************************************************************* //
1290 |
--------------------------------------------------------------------------------
/src/dynamicRefine2DFvMesh/dynamicRefine2DFvMesh.H:
--------------------------------------------------------------------------------
1 | /*---------------------------------------------------------------------------*\
2 | ========= |
3 | \\ / F ield | foam-extend: Open Source CFD
4 | \\ / O peration | Version: 3.2
5 | \\ / A nd | Web: http://www.foam-extend.org
6 | \\/ M anipulation | For copyright notice see file Copyright
7 | -------------------------------------------------------------------------------
8 | License
9 | This file is part of OpenFOAM-v1806.
10 |
11 | Class
12 | Foam::dynamicRefine2DFvMesh
13 |
14 | SourceFiles
15 | dynamicRefine2DFvMesh.C
16 |
17 | Author
18 | Luca Cornolti - written for foam-extend
19 |
20 | Modified for OpenFOAM-v1806 by
21 | Ajit Kumar, Shiv Nadar University, India
22 |
23 |
24 |
25 | Description
26 | A fvMesh with built-in refinement for 2D configuration based on dynamicRefineFvMesh.
27 | Determines which cells to refine/unrefine and does all in update().
28 |
29 |
30 | \*---------------------------------------------------------------------------*/
31 |
32 | #ifndef dynamicRefine2DFvMesh_H
33 | #define dynamicRefine2DFvMesh_H
34 |
35 | #include "dynamicFvMesh.H"
36 | #include "hexRef2D.H"
37 | #include "PackedBoolList.H"
38 | #include "Switch.H"
39 |
40 | // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
41 |
42 | namespace Foam
43 | {
44 |
45 | /*---------------------------------------------------------------------------*\
46 | Class dynamicRefine2DFvMesh Declaration
47 | \*---------------------------------------------------------------------------*/
48 |
49 | class dynamicRefine2DFvMesh
50 | : public dynamicFvMesh
51 | {
52 | protected:
53 | //- Mesh cutting engine
54 | hexRef2D meshCutter_;
55 |
56 | //- Dump cellLevel for postprocessing
57 | Switch dumpLevel_;
58 |
59 | //- Fluxes to map
60 | List> correctFluxes_;
61 |
62 | //- Number of refinement/unrefinement steps done so far.
63 | label nRefinementIterations_;
64 |
65 | //- Protected cells (usually since not hexes)
66 | PackedBoolList protectedCell_;
67 |
68 | // Private Member Functions
69 |
70 | //- Count set/unset elements in packedlist.
71 | static label count(const PackedBoolList &, const unsigned int);
72 |
73 | //- Calculate cells that cannot be refined since would trigger
74 | // refinement of protectedCell_ (since 2:1 refinement cascade)
75 | void calculateProtectedCells(PackedBoolList &unrefineableCell) const;
76 |
77 | //- Read the projection parameters from dictionary
78 | void readDict();
79 |
80 | //- Refine cells. Update mesh and fields.
81 | autoPtr refine(const labelList &);
82 |
83 | //- Unrefine cells. Gets passed in centre points of cells to combine.
84 | autoPtr unrefine(const labelList &);
85 |
86 | // Selection of cells to un/refine
87 |
88 | //- Calculates approximate value for refinement level so
89 | // we don't go above maxCell
90 | scalar getRefineLevel(
91 | const label maxCells,
92 | const label maxRefinement,
93 | const scalar refineLevel,
94 | const scalarField &) const;
95 |
96 | //- Get per cell max of connected point
97 | scalarField maxPointField(const scalarField &) const;
98 |
99 | //- Get point min of connected cell
100 | scalarField minCellField(const volScalarField &) const;
101 |
102 | scalarField cellToPoint(const scalarField &vFld) const;
103 |
104 | scalarField error(
105 | const scalarField &fld,
106 | const scalar minLevel,
107 | const scalar maxLevel) const;
108 |
109 | //- Select candidate cells for refinement
110 | virtual void selectRefineCandidates(
111 | const scalar lowerRefineLevel,
112 | const scalar upperRefineLevel,
113 | const scalarField &vFld,
114 | PackedBoolList &candidateCell) const;
115 |
116 | //- Subset candidate cells for refinement
117 | virtual labelList selectRefineCells(
118 | const label maxCells,
119 | const label maxRefinement,
120 | const PackedBoolList &candidateCell) const;
121 |
122 | //- Select edges that can be unrefined (2D case).
123 | virtual labelList selectUnrefineEdges(
124 | const scalar unrefineLevel,
125 | const PackedBoolList &markedCell,
126 | const scalarField &pFld) const;
127 |
128 | //- Extend markedCell with cell-face-cell.
129 | void extendMarkedCells(PackedBoolList &markedCell) const;
130 |
131 | private:
132 | //- Disallow default bitwise copy construct
133 | dynamicRefine2DFvMesh(const dynamicRefine2DFvMesh &);
134 |
135 | //- Disallow default bitwise assignment
136 | void operator=(const dynamicRefine2DFvMesh &);
137 |
138 | public:
139 | //- Runtime type information
140 | TypeName("dynamicRefine2DFvMesh");
141 |
142 | // Constructors
143 |
144 | //- Construct from IOobject
145 | explicit dynamicRefine2DFvMesh(const IOobject &io);
146 |
147 | // Destructor
148 |
149 | virtual ~dynamicRefine2DFvMesh();
150 |
151 | // Member Functions
152 |
153 | //- Direct access to the refinement engine
154 | const hexRef2D &meshCutter() const
155 | {
156 | return meshCutter_;
157 | }
158 |
159 | //- Cells which should not be refined/unrefined
160 | const PackedBoolList &protectedCell() const
161 | {
162 | return protectedCell_;
163 | }
164 |
165 | //- Cells which should not be refined/unrefined
166 | PackedBoolList &protectedCell()
167 | {
168 | return protectedCell_;
169 | }
170 |
171 | //- Update the mesh for both mesh motion and topology change
172 | virtual bool update();
173 |
174 | // Writing
175 |
176 | //- Write using given format, version and compression
177 | virtual bool writeObject(
178 | IOstream::streamFormat fmt,
179 | IOstream::versionNumber ver,
180 | IOstream::compressionType cmp,
181 | const bool valid) const;
182 | };
183 |
184 | // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
185 |
186 | } // End namespace Foam
187 |
188 | // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
189 |
190 | #endif
191 |
192 | // ************************************************************************* //
193 |
--------------------------------------------------------------------------------
/src/hexRef2D/hexRef2D.H:
--------------------------------------------------------------------------------
1 | /*---------------------------------------------------------------------------*\
2 | ========= |
3 | \\ / F ield | foam-extend: Open Source CFD
4 | \\ / O peration | Version: 3.2
5 | \\ / A nd | Web: http://www.foam-extend.org
6 | \\/ M anipulation | For copyright notice see file Copyright
7 | -------------------------------------------------------------------------------
8 | License
9 | This file is part of OpenFOAM-v1806.
10 |
11 | foam-extend is free software: you can redistribute it and/or modify it
12 | under the terms of the GNU General Public License as published by the
13 | Free Software Foundation, either version 3 of the License, or (at your
14 | option) any later version.
15 |
16 | foam-extend is distributed in the hope that it will be useful, but
17 | WITHOUT ANY WARRANTY; without even the implied warranty of
18 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 | General Public License for more details.
20 |
21 | You should have received a copy of the GNU General Public License
22 | along with foam-extend. If not, see .
23 |
24 | Class
25 | Foam::hexRef2D
26 |
27 | SourceFiles
28 | hexRef2D.C
29 |
30 | Author
31 | Luca Cornolti - written for foam-extend
32 |
33 | Modified for OpenFOAM-v1806 by
34 | Ajit Kumar, Shiv Nadar University, India
35 |
36 | Description (by Luca)
37 | Refinement of (split) hexes into 4 using polyTopoChange based
38 | on Foam::hexRef8 class
39 |
40 | Comment (by Luca)
41 | Functions called for un-refining follow the same logic of the related 3D case,
42 | but they employ the list of central edges instead of cell mid points, which do
43 | not exist in 2D. For this reason, this part of the code is well implemented
44 | and could be included in a generalized Foam::hexRef8 class with little effort.
45 | Functions called for refining were implemented following Ahmad Baniabedalruhman
46 | PhD Thesis with some significant modification.
47 | They do their work fine, but in a quite dirty way and should be improved from
48 | a programming point of view.
49 | Like in the Foam::hexRef8 class, there are probably some redundant loops check
50 | which should be used just for debugging purpose and not for standard applications.
51 |
52 |
53 | \*---------------------------------------------------------------------------*/
54 |
55 | #ifndef hexRef2D_H
56 | #define hexRef2D_H
57 |
58 | #include "labelIOList.H"
59 | #include "face.H"
60 | #include "HashSet.H"
61 | #include "DynamicList.H"
62 | #include "primitivePatch.H"
63 | #include "removeFaces.H"
64 | #include "refinementHistory.H"
65 | #include "PackedList.H"
66 |
67 | // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
68 |
69 | namespace Foam
70 | {
71 |
72 | // Forward declaration of classes
73 | class polyMesh;
74 | class polyPatch;
75 | class polyTopoChange;
76 | class mapPolyMesh;
77 | class mapDistributePolyMesh;
78 |
79 | /*---------------------------------------------------------------------------*\
80 | Class hexRef2D Declaration
81 | \*---------------------------------------------------------------------------*/
82 |
83 | class hexRef2D
84 | {
85 | // Private data
86 |
87 | //- Reference to underlying mesh.
88 | const polyMesh& mesh_;
89 |
90 | //- Per cell the refinement level
91 | labelIOList cellLevel_;
92 |
93 | //- Per point the refinement level
94 | labelIOList pointLevel_;
95 |
96 | //- Typical edge length between unrefined points
97 | const scalar level0Edge_;
98 |
99 | //- Refinement history
100 | refinementHistory history_;
101 |
102 | //- Face remover engine
103 | removeFaces faceRemover_;
104 |
105 | //- Level of saved points
106 | Map savedPointLevel_;
107 |
108 | //- Level of saved cells
109 | Map savedCellLevel_;
110 |
111 | // Private Member Functions
112 |
113 | //- Reorder according to map.
114 | static void reorder
115 | (
116 | const labelList& map,
117 | const label len,
118 | const label null,
119 | labelList& elems
120 | );
121 |
122 | //- Get patch and zone info
123 | void getFaceInfo
124 | (
125 | const label faceI,
126 | label& patchID,
127 | label& zoneID,
128 | label& zoneFlip
129 | ) const;
130 |
131 | //- Adds a face on top of existing faceI. Reverses if nessecary.
132 | label addFace
133 | (
134 | polyTopoChange& meshMod,
135 | const label faceI,
136 | const face& newFace,
137 | const label own,
138 | const label nei
139 | ) const;
140 |
141 | //- Adds internal face from point. No checks on reversal.
142 | label addInternalFace
143 | (
144 | polyTopoChange& meshMod,
145 | const label meshFaceI,
146 | const label meshPointI,
147 | const face& newFace,
148 | const label own,
149 | const label nei
150 | ) const;
151 |
152 | //- Modifies existing faceI for either new owner/neighbour or new face
153 | // points. Reverses if nessecary.
154 | void modFace
155 | (
156 | polyTopoChange& meshMod,
157 | const label faceI,
158 | const face& newFace,
159 | const label own,
160 | const label nei
161 | ) const;
162 |
163 | scalar getLevel0EdgeLength() const;
164 |
165 | //- Get cell added to point of cellI (if any)
166 | label getAnchorCell
167 | (
168 | const labelListList& cellAnchorPoints,
169 | const labelListList& cellAddedCells,
170 | const label cellI,
171 | const label faceI,
172 | const label pointI
173 | ) const;
174 |
175 | //- Get new owner and neighbour (in unspecified order) of pointI
176 | // on faceI.
177 | void getFaceNeighbours
178 | (
179 | const labelListList& cellAnchorPoints,
180 | const labelListList& cellAddedCells,
181 | const label faceI,
182 | const label pointI,
183 |
184 | label& own,
185 | label& nei
186 | ) const;
187 |
188 |
189 | //- Get index of minimum pointlevel.
190 | label findMinLevel(const labelList& f) const;
191 |
192 | //- Get maximum pointlevel.
193 | label findMaxLevel(const labelList& f) const;
194 |
195 | //- Count number of vertices <= anchorLevel
196 | label countAnchors(const labelList&, const label) const;
197 |
198 | //- Find index of point with wantedLevel, starting from fp.
199 | label findLevel
200 | (
201 | const face& f,
202 | const label startFp,
203 | const bool searchForward,
204 | const label wantedLevel
205 | ) const;
206 |
207 | ////- Print levels of list of points.
208 | //void printLevels(Ostream&, const labelList&) const;
209 |
210 | //- debug:check orientation of added internal face
211 | static void checkInternalOrientation
212 | (
213 | polyTopoChange& meshMod,
214 | const label cellI,
215 | const label faceI,
216 | const point& ownPt,
217 | const point& neiPt,
218 | const face& newFace
219 | );
220 |
221 | //- debug:check orientation of new boundary face
222 | static void checkBoundaryOrientation
223 | (
224 | polyTopoChange& meshMod,
225 | const label cellI,
226 | const label faceI,
227 | const point& ownPt,
228 | const point& boundaryPt,
229 | const face& newFace
230 | );
231 |
232 | //- If p0 and p1 are existing vertices check if edge is split and insert
233 | // splitPoint.
234 | void insertEdgeSplit
235 | (
236 | const labelList& edgeMidPoint,
237 | const label p0,
238 | const label p1,
239 | DynamicList& verts
240 | ) const;
241 |
242 | //- Store in maps correspondence from midpoint to anchors and faces.
243 | label storeMidPointInfo
244 | (
245 | const labelListList& cellAnchorPoints,
246 | const labelListList& cellAddedCells,
247 | const labelList& cellMidPoint,
248 | const labelList& faceMidPoint,
249 | const labelList& edgeMidPoint,
250 | const label cellI,
251 | const label faceI,
252 | const bool faceOrder,
253 | const label midPointI,
254 | const label anchorPointI,
255 | const label faceMidPointI,
256 |
257 | Map& midPointToAnchors,
258 | polyTopoChange& meshMod
259 | ) const;
260 |
261 | //- Create all internal faces from an unsplit face.
262 | void createInternalFromSplitFace
263 | (
264 | const labelListList& cellAnchorPoints,
265 | const labelListList& cellAddedCells,
266 | const labelList& cellMidPoint,
267 | const labelList& faceMidPoint,
268 | const labelList& edgeMidPoint,
269 | const label cellI,
270 | const label faceI,
271 |
272 | Map& midPointToAnchors,
273 | polyTopoChange& meshMod,
274 | label& nFacesAdded
275 | ) const;
276 |
277 | //- Create all internal faces to split cellI into 8.
278 | void createInternalFaces
279 | (
280 | const labelListList& cellAnchorPoints,
281 | const labelListList& cellAddedCells,
282 | const labelList& cellMidPoint,
283 | const labelList& faceMidPoint,
284 | const labelList& faceAnchorLevel,
285 | const labelList& edgeMidPoint,
286 | const label cellI,
287 | polyTopoChange& meshMod
288 | ) const;
289 |
290 | //- Store vertices from startFp upto face split point.
291 | // Used when splitting face into 4.
292 | void walkFaceToMid
293 | (
294 | const labelList& edgeMidPoint,
295 | const label cLevel,
296 | const label faceI,
297 | const label startFp,
298 | DynamicList& faceVerts
299 | ) const;
300 |
301 | //- Same as walkFaceToMid but now walk back.
302 | void walkFaceFromMid
303 | (
304 | const labelList& edgeMidPoint,
305 | const label cLevel,
306 | const label faceI,
307 | const label startFp,
308 | DynamicList& faceVerts
309 | ) const;
310 |
311 | //- Updates refineCell so consistent 2:1 refinement. Returns local
312 | // number of cells changed.
313 | label faceConsistentRefinement
314 | (
315 | const bool maxSet,
316 | PackedList<1>& refineCell
317 | ) const;
318 |
319 | //- Check wanted refinement for 2:1 consistency
320 | void checkWantedRefinementLevels(const labelList&) const;
321 |
322 |
323 |
324 | //- Disallow default bitwise copy construct
325 | hexRef2D(const hexRef2D&);
326 |
327 | //- Disallow default bitwise assignment
328 | void operator=(const hexRef2D&);
329 |
330 |
331 | public:
332 |
333 | //- Runtime type information
334 | ClassName("hexRef2D");
335 |
336 |
337 | // Constructors
338 |
339 | //- Construct from mesh, read_if_present refinement data
340 | // (from write below)
341 | hexRef2D(const polyMesh& mesh);
342 |
343 | //- Construct from mesh and un/refinement data.
344 | hexRef2D
345 | (
346 | const polyMesh& mesh,
347 | const labelList& cellLevel,
348 | const labelList& pointLevel,
349 | const refinementHistory& history
350 | );
351 |
352 | //- Construct from mesh and refinement data.
353 | hexRef2D
354 | (
355 | const polyMesh& mesh,
356 | const labelList& cellLevel,
357 | const labelList& pointLevel
358 | );
359 |
360 |
361 | // Member Functions
362 |
363 | // Access
364 |
365 | const labelIOList& cellLevel() const
366 | {
367 | return cellLevel_;
368 | }
369 |
370 | const labelIOList& pointLevel() const
371 | {
372 | return pointLevel_;
373 | }
374 |
375 | const refinementHistory& history() const
376 | {
377 | return history_;
378 | }
379 |
380 | //- Typical edge length between unrefined points
381 | scalar level0EdgeLength() const
382 | {
383 | return level0Edge_;
384 | }
385 |
386 |
387 | // Refinement
388 | //- Gets level such that the face has four points <= level.
389 | label getAnchorLevel(const label faceI) const;
390 |
391 | //- Given valid mesh and current cell level and proposed
392 | // cells to refine calculate any clashes (due to 2:1) and return
393 | // ok list of cells to refine.
394 | // Either adds cells to refine to set (maxSet = true) or
395 | // removes cells to refine (maxSet = false)
396 |
397 | //- Helper:get points of a cell without using cellPoints addressing
398 | labelList cellPoints(const label cellI) const;
399 |
400 | //- Given valid mesh and current cell level and proposed
401 | // cells to refine calculate any clashes (due to 2:1) and return
402 | // ok list of cells to refine.
403 | // Either adds cells to refine to set (maxSet = true) or
404 | // removes cells to refine (maxSet = false)
405 | labelList consistentRefinement
406 | (
407 | const labelList& cellsToRefine,
408 | const bool maxSet
409 | ) const;
410 |
411 | //- Like consistentRefinement but slower:
412 | // - specify number of cells between consecutive refinement levels
413 | // (consistentRefinement equivalent to 1)
414 | // - specify max level difference between point-connected cells.
415 | // (-1 to disable) Note that with normal 2:1 limitation
416 | // (maxFaceDiff=1) there can be 8:1 size difference across point
417 | // connected cells so maxPointDiff allows you to make that less.
418 | // cellsToRefine : cells we're thinking about refining. It will
419 | // extend this set. All refinement levels will be
420 | // at least maxFaceDiff layers thick.
421 | // facesToCheck : additional faces where to implement the
422 | // maxFaceDiff thickness (usually only boundary
423 | // faces)
424 | labelList consistentSlowRefinement
425 | (
426 | const label maxFaceDiff,
427 | const labelList& cellsToRefine,
428 | const labelList& facesToCheck,
429 | const label maxPointDiff,
430 | const labelList& pointsToCheck
431 | );
432 |
433 | //- Like consistentSlowRefinement but uses different meshWave
434 | // (proper distance instead of toplogical count). No point checks
435 | // yet.
436 | labelList consistentSlowRefinement2
437 | (
438 | const label maxFaceDiff,
439 | const labelList& cellsToRefine,
440 | const labelList& facesToCheck
441 | ) const;
442 |
443 | //- Insert refinement. All selected cells will be split into 8.
444 | // Returns per element in cells the 8 cells they were split into.
445 | // Guarantees that the 0th element is the original cell label.
446 | // Mapping:
447 | // -split cells: 7 new ones get added from original
448 | // -split faces: original gets modified; 3 new ones get added
449 | // from original
450 | // -added internal faces: added from original cell face(if
451 | // that was internal) or created out-of-nothing (so will not
452 | // get mapped!). Note: could make this inflate from point but
453 | // that will allocate interpolation.
454 | // -points added to split edge: added from edge start()
455 | // -midpoints added: added from cellPoints[0].
456 | labelListList setRefinement
457 | (
458 | const labelList& cells,
459 | polyTopoChange&
460 | );
461 |
462 | //- Update local numbering for changed mesh.
463 | void updateMesh(const mapPolyMesh&);
464 |
465 |
466 | // Restoring : is where other processes delete and reinsert data.
467 | // These callbacks allow this to restore the cellLevel
468 | // and pointLevel for reintroduced points.
469 | // Is not related to undoing my refinement
470 |
471 | //- Signal points/face/cells for which to store data
472 | void storeData
473 | (
474 | const labelList& pointsToStore,
475 | const labelList& facesToStore,
476 | const labelList& cellsToStore
477 | );
478 |
479 | //- Update local numbering + undo
480 | // Data to restore given as new pointlabel + stored pointlabel
481 | // (i.e. what was in pointsToStore)
482 | void updateMesh
483 | (
484 | const mapPolyMesh&,
485 | const Map& pointsToRestore,
486 | const Map& facesToRestore,
487 | const Map& cellsToRestore
488 | );
489 |
490 |
491 | //- Update local numbering for subsetted mesh.
492 | // Gets new-to-old maps. Not compatible with unrefinement.
493 | void subset
494 | (
495 | const labelList& pointMap,
496 | const labelList& faceMap,
497 | const labelList& cellMap
498 | );
499 |
500 | //- Update local numbering for mesh redistribution
501 | void distribute(const mapDistributePolyMesh&);
502 |
503 | //- Debug: Check coupled mesh for correctness
504 | void checkMesh() const;
505 |
506 | //- Debug: Check 2:1 consistency across faces.
507 | // maxPointDiff==-1 : only check 2:1 across faces
508 | // maxPointDiff!=-1 : check point-connected cells.
509 | void checkRefinementLevels
510 | (
511 | const label maxPointDiff,
512 | const labelList& pointsToCheck
513 | ) const;
514 |
515 | // Unrefinement (undoing refinement, not arbitrary coarsening)
516 |
517 | //- Return the edges at the centre of top-level split cells
518 | // that can be unsplit.
519 | labelList getSplitEdges() const;
520 |
521 |
522 | //- Given proposed
523 | // splitEdges to unrefine according to calculate any clashes
524 | // (due to 2:1) and return ok list of edges to unrefine.
525 | labelList consistentUnrefinement
526 | (
527 | const labelList& edgesToUnrefine,
528 | const bool maxSet
529 | ) const;
530 |
531 | //- Remove some refinement. Needs to be supplied output of
532 | // consistentUnrefinement. Only call if undoable set.
533 | // All 4 edgeCells of a split edge will be combined into
534 | // the lowest numbered cell of those 4.
535 | void setUnrefinement
536 | (
537 | const labelList& splitEdgeLabels,
538 | polyTopoChange&
539 | );
540 |
541 | // Write
542 |
543 | // Set instance for mesh files
544 | void setInstance(const fileName& inst);
545 |
546 | //- Force writing refinement+history to polyMesh directory.
547 | bool write() const;
548 |
549 | };
550 |
551 |
552 | // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
553 |
554 | } // End namespace Foam
555 |
556 | // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
557 |
558 | #endif
559 |
560 | // ************************************************************************* //
561 |
--------------------------------------------------------------------------------
/tutorial/interFoam/damBreak/.gitignore:
--------------------------------------------------------------------------------
1 | [1-9]/
2 | [0-9][0-9]*/
3 | [0-9]*.[0-9]*/
4 |
--------------------------------------------------------------------------------
/tutorial/interFoam/damBreak/0/U:
--------------------------------------------------------------------------------
1 | /*--------------------------------*- C++ -*----------------------------------*\
2 | | ========= | |
3 | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
4 | | \\ / O peration | Version: v1806 |
5 | | \\ / A nd | Web: www.OpenFOAM.com |
6 | | \\/ M anipulation | |
7 | \*---------------------------------------------------------------------------*/
8 | FoamFile
9 | {
10 | version 2.0;
11 | format ascii;
12 | class volVectorField;
13 | location "0";
14 | object U;
15 | }
16 | // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
17 |
18 | dimensions [0 1 -1 0 0 0 0];
19 |
20 | internalField uniform (0 0 0);
21 |
22 | boundaryField
23 | {
24 | leftWall
25 | {
26 | type noSlip;
27 | }
28 | rightWall
29 | {
30 | type noSlip;
31 | }
32 | lowerWall
33 | {
34 | type noSlip;
35 | }
36 | atmosphere
37 | {
38 | type pressureInletOutletVelocity;
39 | value uniform (0 0 0);
40 | }
41 | defaultFaces
42 | {
43 | type empty;
44 | }
45 | }
46 |
47 |
48 | // ************************************************************************* //
49 |
--------------------------------------------------------------------------------
/tutorial/interFoam/damBreak/0/alpha.water:
--------------------------------------------------------------------------------
1 | /*--------------------------------*- C++ -*----------------------------------*\
2 | | ========= | |
3 | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
4 | | \\ / O peration | Version: v1806 |
5 | | \\ / A nd | Web: www.OpenFOAM.com |
6 | | \\/ M anipulation | |
7 | \*---------------------------------------------------------------------------*/
8 | FoamFile
9 | {
10 | version 2.0;
11 | format ascii;
12 | class volScalarField;
13 | location "0";
14 | object alpha.water;
15 | }
16 | // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
17 |
18 | dimensions [0 0 0 0 0 0 0];
19 |
20 |
21 | internalField nonuniform List
22 | 2268
23 | (
24 | 1
25 | 1
26 | 1
27 | 1
28 | 1
29 | 1
30 | 1
31 | 1
32 | 1
33 | 1
34 | 1
35 | 1
36 | 0
37 | 0
38 | 0
39 | 0
40 | 0
41 | 0
42 | 0
43 | 0
44 | 0
45 | 0
46 | 0
47 | 1
48 | 1
49 | 1
50 | 1
51 | 1
52 | 1
53 | 1
54 | 1
55 | 1
56 | 1
57 | 1
58 | 1
59 | 0
60 | 0
61 | 0
62 | 0
63 | 0
64 | 0
65 | 0
66 | 0
67 | 0
68 | 0
69 | 0
70 | 1
71 | 1
72 | 1
73 | 1
74 | 1
75 | 1
76 | 1
77 | 1
78 | 1
79 | 1
80 | 1
81 | 1
82 | 0
83 | 0
84 | 0
85 | 0
86 | 0
87 | 0
88 | 0
89 | 0
90 | 0
91 | 0
92 | 0
93 | 1
94 | 1
95 | 1
96 | 1
97 | 1
98 | 1
99 | 1
100 | 1
101 | 1
102 | 1
103 | 1
104 | 1
105 | 0
106 | 0
107 | 0
108 | 0
109 | 0
110 | 0
111 | 0
112 | 0
113 | 0
114 | 0
115 | 0
116 | 1
117 | 1
118 | 1
119 | 1
120 | 1
121 | 1
122 | 1
123 | 1
124 | 1
125 | 1
126 | 1
127 | 1
128 | 0
129 | 0
130 | 0
131 | 0
132 | 0
133 | 0
134 | 0
135 | 0
136 | 0
137 | 0
138 | 0
139 | 1
140 | 1
141 | 1
142 | 1
143 | 1
144 | 1
145 | 1
146 | 1
147 | 1
148 | 1
149 | 1
150 | 1
151 | 0
152 | 0
153 | 0
154 | 0
155 | 0
156 | 0
157 | 0
158 | 0
159 | 0
160 | 0
161 | 0
162 | 1
163 | 1
164 | 1
165 | 1
166 | 1
167 | 1
168 | 1
169 | 1
170 | 1
171 | 1
172 | 1
173 | 1
174 | 0
175 | 0
176 | 0
177 | 0
178 | 0
179 | 0
180 | 0
181 | 0
182 | 0
183 | 0
184 | 0
185 | 1
186 | 1
187 | 1
188 | 1
189 | 1
190 | 1
191 | 1
192 | 1
193 | 1
194 | 1
195 | 1
196 | 1
197 | 0
198 | 0
199 | 0
200 | 0
201 | 0
202 | 0
203 | 0
204 | 0
205 | 0
206 | 0
207 | 0
208 | 0
209 | 0
210 | 0
211 | 0
212 | 0
213 | 0
214 | 0
215 | 0
216 | 0
217 | 0
218 | 0
219 | 0
220 | 0
221 | 0
222 | 0
223 | 0
224 | 0
225 | 0
226 | 0
227 | 0
228 | 0
229 | 0
230 | 0
231 | 0
232 | 0
233 | 0
234 | 0
235 | 0
236 | 0
237 | 0
238 | 0
239 | 0
240 | 0
241 | 0
242 | 0
243 | 0
244 | 0
245 | 0
246 | 0
247 | 0
248 | 0
249 | 0
250 | 0
251 | 0
252 | 0
253 | 0
254 | 0
255 | 0
256 | 0
257 | 0
258 | 0
259 | 0
260 | 0
261 | 0
262 | 0
263 | 0
264 | 0
265 | 0
266 | 0
267 | 0
268 | 0
269 | 0
270 | 0
271 | 0
272 | 0
273 | 0
274 | 0
275 | 0
276 | 0
277 | 0
278 | 0
279 | 0
280 | 0
281 | 0
282 | 0
283 | 0
284 | 0
285 | 0
286 | 0
287 | 0
288 | 0
289 | 0
290 | 0
291 | 0
292 | 0
293 | 0
294 | 0
295 | 0
296 | 0
297 | 0
298 | 0
299 | 0
300 | 0
301 | 0
302 | 0
303 | 0
304 | 0
305 | 0
306 | 0
307 | 0
308 | 0
309 | 0
310 | 0
311 | 0
312 | 0
313 | 0
314 | 0
315 | 0
316 | 0
317 | 0
318 | 0
319 | 0
320 | 0
321 | 0
322 | 0
323 | 0
324 | 0
325 | 0
326 | 0
327 | 0
328 | 0
329 | 0
330 | 0
331 | 0
332 | 0
333 | 0
334 | 0
335 | 0
336 | 0
337 | 0
338 | 0
339 | 0
340 | 0
341 | 0
342 | 0
343 | 0
344 | 0
345 | 0
346 | 0
347 | 0
348 | 0
349 | 0
350 | 0
351 | 0
352 | 0
353 | 0
354 | 0
355 | 0
356 | 0
357 | 0
358 | 0
359 | 0
360 | 1
361 | 1
362 | 1
363 | 1
364 | 1
365 | 1
366 | 1
367 | 1
368 | 1
369 | 1
370 | 1
371 | 1
372 | 0
373 | 0
374 | 0
375 | 0
376 | 0
377 | 0
378 | 0
379 | 0
380 | 0
381 | 0
382 | 0
383 | 1
384 | 1
385 | 1
386 | 1
387 | 1
388 | 1
389 | 1
390 | 1
391 | 1
392 | 1
393 | 1
394 | 1
395 | 0
396 | 0
397 | 0
398 | 0
399 | 0
400 | 0
401 | 0
402 | 0
403 | 0
404 | 0
405 | 0
406 | 1
407 | 1
408 | 1
409 | 1
410 | 1
411 | 1
412 | 1
413 | 1
414 | 1
415 | 1
416 | 1
417 | 1
418 | 0
419 | 0
420 | 0
421 | 0
422 | 0
423 | 0
424 | 0
425 | 0
426 | 0
427 | 0
428 | 0
429 | 1
430 | 1
431 | 1
432 | 1
433 | 1
434 | 1
435 | 1
436 | 1
437 | 1
438 | 1
439 | 1
440 | 1
441 | 0
442 | 0
443 | 0
444 | 0
445 | 0
446 | 0
447 | 0
448 | 0
449 | 0
450 | 0
451 | 0
452 | 1
453 | 1
454 | 1
455 | 1
456 | 1
457 | 1
458 | 1
459 | 1
460 | 1
461 | 1
462 | 1
463 | 1
464 | 0
465 | 0
466 | 0
467 | 0
468 | 0
469 | 0
470 | 0
471 | 0
472 | 0
473 | 0
474 | 0
475 | 1
476 | 1
477 | 1
478 | 1
479 | 1
480 | 1
481 | 1
482 | 1
483 | 1
484 | 1
485 | 1
486 | 1
487 | 0
488 | 0
489 | 0
490 | 0
491 | 0
492 | 0
493 | 0
494 | 0
495 | 0
496 | 0
497 | 0
498 | 1
499 | 1
500 | 1
501 | 1
502 | 1
503 | 1
504 | 1
505 | 1
506 | 1
507 | 1
508 | 1
509 | 1
510 | 0
511 | 0
512 | 0
513 | 0
514 | 0
515 | 0
516 | 0
517 | 0
518 | 0
519 | 0
520 | 0
521 | 1
522 | 1
523 | 1
524 | 1
525 | 1
526 | 1
527 | 1
528 | 1
529 | 1
530 | 1
531 | 1
532 | 1
533 | 0
534 | 0
535 | 0
536 | 0
537 | 0
538 | 0
539 | 0
540 | 0
541 | 0
542 | 0
543 | 0
544 | 1
545 | 1
546 | 1
547 | 1
548 | 1
549 | 1
550 | 1
551 | 1
552 | 1
553 | 1
554 | 1
555 | 1
556 | 0
557 | 0
558 | 0
559 | 0
560 | 0
561 | 0
562 | 0
563 | 0
564 | 0
565 | 0
566 | 0
567 | 1
568 | 1
569 | 1
570 | 1
571 | 1
572 | 1
573 | 1
574 | 1
575 | 1
576 | 1
577 | 1
578 | 1
579 | 0
580 | 0
581 | 0
582 | 0
583 | 0
584 | 0
585 | 0
586 | 0
587 | 0
588 | 0
589 | 0
590 | 1
591 | 1
592 | 1
593 | 1
594 | 1
595 | 1
596 | 1
597 | 1
598 | 1
599 | 1
600 | 1
601 | 1
602 | 0
603 | 0
604 | 0
605 | 0
606 | 0
607 | 0
608 | 0
609 | 0
610 | 0
611 | 0
612 | 0
613 | 1
614 | 1
615 | 1
616 | 1
617 | 1
618 | 1
619 | 1
620 | 1
621 | 1
622 | 1
623 | 1
624 | 1
625 | 0
626 | 0
627 | 0
628 | 0
629 | 0
630 | 0
631 | 0
632 | 0
633 | 0
634 | 0
635 | 0
636 | 1
637 | 1
638 | 1
639 | 1
640 | 1
641 | 1
642 | 1
643 | 1
644 | 1
645 | 1
646 | 1
647 | 1
648 | 0
649 | 0
650 | 0
651 | 0
652 | 0
653 | 0
654 | 0
655 | 0
656 | 0
657 | 0
658 | 0
659 | 1
660 | 1
661 | 1
662 | 1
663 | 1
664 | 1
665 | 1
666 | 1
667 | 1
668 | 1
669 | 1
670 | 1
671 | 0
672 | 0
673 | 0
674 | 0
675 | 0
676 | 0
677 | 0
678 | 0
679 | 0
680 | 0
681 | 0
682 | 1
683 | 1
684 | 1
685 | 1
686 | 1
687 | 1
688 | 1
689 | 1
690 | 1
691 | 1
692 | 1
693 | 1
694 | 0
695 | 0
696 | 0
697 | 0
698 | 0
699 | 0
700 | 0
701 | 0
702 | 0
703 | 0
704 | 0
705 | 1
706 | 1
707 | 1
708 | 1
709 | 1
710 | 1
711 | 1
712 | 1
713 | 1
714 | 1
715 | 1
716 | 1
717 | 0
718 | 0
719 | 0
720 | 0
721 | 0
722 | 0
723 | 0
724 | 0
725 | 0
726 | 0
727 | 0
728 | 1
729 | 1
730 | 1
731 | 1
732 | 1
733 | 1
734 | 1
735 | 1
736 | 1
737 | 1
738 | 1
739 | 1
740 | 0
741 | 0
742 | 0
743 | 0
744 | 0
745 | 0
746 | 0
747 | 0
748 | 0
749 | 0
750 | 0
751 | 1
752 | 1
753 | 1
754 | 1
755 | 1
756 | 1
757 | 1
758 | 1
759 | 1
760 | 1
761 | 1
762 | 1
763 | 0
764 | 0
765 | 0
766 | 0
767 | 0
768 | 0
769 | 0
770 | 0
771 | 0
772 | 0
773 | 0
774 | 1
775 | 1
776 | 1
777 | 1
778 | 1
779 | 1
780 | 1
781 | 1
782 | 1
783 | 1
784 | 1
785 | 1
786 | 0
787 | 0
788 | 0
789 | 0
790 | 0
791 | 0
792 | 0
793 | 0
794 | 0
795 | 0
796 | 0
797 | 0
798 | 0
799 | 0
800 | 0
801 | 0
802 | 0
803 | 0
804 | 0
805 | 0
806 | 0
807 | 0
808 | 0
809 | 0
810 | 0
811 | 0
812 | 0
813 | 0
814 | 0
815 | 0
816 | 0
817 | 0
818 | 0
819 | 0
820 | 0
821 | 0
822 | 0
823 | 0
824 | 0
825 | 0
826 | 0
827 | 0
828 | 0
829 | 0
830 | 0
831 | 0
832 | 0
833 | 0
834 | 0
835 | 0
836 | 0
837 | 0
838 | 0
839 | 0
840 | 0
841 | 0
842 | 0
843 | 0
844 | 0
845 | 0
846 | 0
847 | 0
848 | 0
849 | 0
850 | 0
851 | 0
852 | 0
853 | 0
854 | 0
855 | 0
856 | 0
857 | 0
858 | 0
859 | 0
860 | 0
861 | 0
862 | 0
863 | 0
864 | 0
865 | 0
866 | 0
867 | 0
868 | 0
869 | 0
870 | 0
871 | 0
872 | 0
873 | 0
874 | 0
875 | 0
876 | 0
877 | 0
878 | 0
879 | 0
880 | 0
881 | 0
882 | 0
883 | 0
884 | 0
885 | 0
886 | 0
887 | 0
888 | 0
889 | 0
890 | 0
891 | 0
892 | 0
893 | 0
894 | 0
895 | 0
896 | 0
897 | 0
898 | 0
899 | 0
900 | 0
901 | 0
902 | 0
903 | 0
904 | 0
905 | 0
906 | 0
907 | 0
908 | 0
909 | 0
910 | 0
911 | 0
912 | 0
913 | 0
914 | 0
915 | 0
916 | 0
917 | 0
918 | 0
919 | 0
920 | 0
921 | 0
922 | 0
923 | 0
924 | 0
925 | 0
926 | 0
927 | 0
928 | 0
929 | 0
930 | 0
931 | 0
932 | 0
933 | 0
934 | 0
935 | 0
936 | 0
937 | 0
938 | 0
939 | 0
940 | 0
941 | 0
942 | 0
943 | 0
944 | 0
945 | 0
946 | 0
947 | 0
948 | 0
949 | 0
950 | 0
951 | 0
952 | 0
953 | 0
954 | 0
955 | 0
956 | 0
957 | 0
958 | 0
959 | 0
960 | 0
961 | 0
962 | 0
963 | 0
964 | 0
965 | 0
966 | 0
967 | 0
968 | 0
969 | 0
970 | 0
971 | 0
972 | 0
973 | 0
974 | 0
975 | 0
976 | 0
977 | 0
978 | 0
979 | 0
980 | 0
981 | 0
982 | 0
983 | 0
984 | 0
985 | 0
986 | 0
987 | 0
988 | 0
989 | 0
990 | 0
991 | 0
992 | 0
993 | 0
994 | 0
995 | 0
996 | 0
997 | 0
998 | 0
999 | 0
1000 | 0
1001 | 0
1002 | 0
1003 | 0
1004 | 0
1005 | 0
1006 | 0
1007 | 0
1008 | 0
1009 | 0
1010 | 0
1011 | 0
1012 | 0
1013 | 0
1014 | 0
1015 | 0
1016 | 0
1017 | 0
1018 | 0
1019 | 0
1020 | 0
1021 | 0
1022 | 0
1023 | 0
1024 | 0
1025 | 0
1026 | 0
1027 | 0
1028 | 0
1029 | 0
1030 | 0
1031 | 0
1032 | 0
1033 | 0
1034 | 0
1035 | 0
1036 | 0
1037 | 0
1038 | 0
1039 | 0
1040 | 0
1041 | 0
1042 | 0
1043 | 0
1044 | 0
1045 | 0
1046 | 0
1047 | 0
1048 | 0
1049 | 0
1050 | 0
1051 | 0
1052 | 0
1053 | 0
1054 | 0
1055 | 0
1056 | 0
1057 | 0
1058 | 0
1059 | 0
1060 | 0
1061 | 0
1062 | 0
1063 | 0
1064 | 0
1065 | 0
1066 | 0
1067 | 0
1068 | 0
1069 | 0
1070 | 0
1071 | 0
1072 | 0
1073 | 0
1074 | 0
1075 | 0
1076 | 0
1077 | 0
1078 | 0
1079 | 0
1080 | 0
1081 | 0
1082 | 0
1083 | 0
1084 | 0
1085 | 0
1086 | 0
1087 | 0
1088 | 0
1089 | 0
1090 | 0
1091 | 0
1092 | 0
1093 | 0
1094 | 0
1095 | 0
1096 | 0
1097 | 0
1098 | 0
1099 | 0
1100 | 0
1101 | 0
1102 | 0
1103 | 0
1104 | 0
1105 | 0
1106 | 0
1107 | 0
1108 | 0
1109 | 0
1110 | 0
1111 | 0
1112 | 0
1113 | 0
1114 | 0
1115 | 0
1116 | 0
1117 | 0
1118 | 0
1119 | 0
1120 | 0
1121 | 0
1122 | 0
1123 | 0
1124 | 0
1125 | 0
1126 | 0
1127 | 0
1128 | 0
1129 | 0
1130 | 0
1131 | 0
1132 | 0
1133 | 0
1134 | 0
1135 | 0
1136 | 0
1137 | 0
1138 | 0
1139 | 0
1140 | 0
1141 | 0
1142 | 0
1143 | 0
1144 | 0
1145 | 0
1146 | 0
1147 | 0
1148 | 0
1149 | 0
1150 | 0
1151 | 0
1152 | 0
1153 | 0
1154 | 0
1155 | 0
1156 | 0
1157 | 0
1158 | 0
1159 | 0
1160 | 0
1161 | 0
1162 | 0
1163 | 0
1164 | 0
1165 | 0
1166 | 0
1167 | 0
1168 | 0
1169 | 0
1170 | 0
1171 | 0
1172 | 0
1173 | 0
1174 | 0
1175 | 0
1176 | 0
1177 | 0
1178 | 0
1179 | 0
1180 | 0
1181 | 0
1182 | 0
1183 | 0
1184 | 0
1185 | 0
1186 | 0
1187 | 0
1188 | 0
1189 | 0
1190 | 0
1191 | 0
1192 | 0
1193 | 0
1194 | 0
1195 | 0
1196 | 0
1197 | 0
1198 | 0
1199 | 0
1200 | 0
1201 | 0
1202 | 0
1203 | 0
1204 | 0
1205 | 0
1206 | 0
1207 | 0
1208 | 0
1209 | 0
1210 | 0
1211 | 0
1212 | 0
1213 | 0
1214 | 0
1215 | 0
1216 | 0
1217 | 0
1218 | 0
1219 | 0
1220 | 0
1221 | 0
1222 | 0
1223 | 0
1224 | 0
1225 | 0
1226 | 0
1227 | 0
1228 | 0
1229 | 0
1230 | 0
1231 | 0
1232 | 0
1233 | 0
1234 | 0
1235 | 0
1236 | 0
1237 | 0
1238 | 0
1239 | 0
1240 | 0
1241 | 0
1242 | 0
1243 | 0
1244 | 0
1245 | 0
1246 | 0
1247 | 0
1248 | 0
1249 | 0
1250 | 0
1251 | 0
1252 | 0
1253 | 0
1254 | 0
1255 | 0
1256 | 0
1257 | 0
1258 | 0
1259 | 0
1260 | 0
1261 | 0
1262 | 0
1263 | 0
1264 | 0
1265 | 0
1266 | 0
1267 | 0
1268 | 0
1269 | 0
1270 | 0
1271 | 0
1272 | 0
1273 | 0
1274 | 0
1275 | 0
1276 | 0
1277 | 0
1278 | 0
1279 | 0
1280 | 0
1281 | 0
1282 | 0
1283 | 0
1284 | 0
1285 | 0
1286 | 0
1287 | 0
1288 | 0
1289 | 0
1290 | 0
1291 | 0
1292 | 0
1293 | 0
1294 | 0
1295 | 0
1296 | 0
1297 | 0
1298 | 0
1299 | 0
1300 | 0
1301 | 0
1302 | 0
1303 | 0
1304 | 0
1305 | 0
1306 | 0
1307 | 0
1308 | 0
1309 | 0
1310 | 0
1311 | 0
1312 | 0
1313 | 0
1314 | 0
1315 | 0
1316 | 0
1317 | 0
1318 | 0
1319 | 0
1320 | 0
1321 | 0
1322 | 0
1323 | 0
1324 | 0
1325 | 0
1326 | 0
1327 | 0
1328 | 0
1329 | 0
1330 | 0
1331 | 0
1332 | 0
1333 | 0
1334 | 0
1335 | 0
1336 | 0
1337 | 0
1338 | 0
1339 | 0
1340 | 0
1341 | 0
1342 | 0
1343 | 0
1344 | 0
1345 | 0
1346 | 0
1347 | 0
1348 | 0
1349 | 0
1350 | 0
1351 | 0
1352 | 0
1353 | 0
1354 | 0
1355 | 0
1356 | 0
1357 | 0
1358 | 0
1359 | 0
1360 | 0
1361 | 0
1362 | 0
1363 | 0
1364 | 0
1365 | 0
1366 | 0
1367 | 0
1368 | 0
1369 | 0
1370 | 0
1371 | 0
1372 | 0
1373 | 0
1374 | 0
1375 | 0
1376 | 0
1377 | 0
1378 | 0
1379 | 0
1380 | 0
1381 | 0
1382 | 0
1383 | 0
1384 | 0
1385 | 0
1386 | 0
1387 | 0
1388 | 0
1389 | 0
1390 | 0
1391 | 0
1392 | 0
1393 | 0
1394 | 0
1395 | 0
1396 | 0
1397 | 0
1398 | 0
1399 | 0
1400 | 0
1401 | 0
1402 | 0
1403 | 0
1404 | 0
1405 | 0
1406 | 0
1407 | 0
1408 | 0
1409 | 0
1410 | 0
1411 | 0
1412 | 0
1413 | 0
1414 | 0
1415 | 0
1416 | 0
1417 | 0
1418 | 0
1419 | 0
1420 | 0
1421 | 0
1422 | 0
1423 | 0
1424 | 0
1425 | 0
1426 | 0
1427 | 0
1428 | 0
1429 | 0
1430 | 0
1431 | 0
1432 | 0
1433 | 0
1434 | 0
1435 | 0
1436 | 0
1437 | 0
1438 | 0
1439 | 0
1440 | 0
1441 | 0
1442 | 0
1443 | 0
1444 | 0
1445 | 0
1446 | 0
1447 | 0
1448 | 0
1449 | 0
1450 | 0
1451 | 0
1452 | 0
1453 | 0
1454 | 0
1455 | 0
1456 | 0
1457 | 0
1458 | 0
1459 | 0
1460 | 0
1461 | 0
1462 | 0
1463 | 0
1464 | 0
1465 | 0
1466 | 0
1467 | 0
1468 | 0
1469 | 0
1470 | 0
1471 | 0
1472 | 0
1473 | 0
1474 | 0
1475 | 0
1476 | 0
1477 | 0
1478 | 0
1479 | 0
1480 | 0
1481 | 0
1482 | 0
1483 | 0
1484 | 0
1485 | 0
1486 | 0
1487 | 0
1488 | 0
1489 | 0
1490 | 0
1491 | 0
1492 | 0
1493 | 0
1494 | 0
1495 | 0
1496 | 0
1497 | 0
1498 | 0
1499 | 0
1500 | 0
1501 | 0
1502 | 0
1503 | 0
1504 | 0
1505 | 0
1506 | 0
1507 | 0
1508 | 0
1509 | 0
1510 | 0
1511 | 0
1512 | 0
1513 | 0
1514 | 0
1515 | 0
1516 | 0
1517 | 0
1518 | 0
1519 | 0
1520 | 0
1521 | 0
1522 | 0
1523 | 0
1524 | 0
1525 | 0
1526 | 0
1527 | 0
1528 | 0
1529 | 0
1530 | 0
1531 | 0
1532 | 0
1533 | 0
1534 | 0
1535 | 0
1536 | 0
1537 | 0
1538 | 0
1539 | 0
1540 | 0
1541 | 0
1542 | 0
1543 | 0
1544 | 0
1545 | 0
1546 | 0
1547 | 0
1548 | 0
1549 | 0
1550 | 0
1551 | 0
1552 | 0
1553 | 0
1554 | 0
1555 | 0
1556 | 0
1557 | 0
1558 | 0
1559 | 0
1560 | 0
1561 | 0
1562 | 0
1563 | 0
1564 | 0
1565 | 0
1566 | 0
1567 | 0
1568 | 0
1569 | 0
1570 | 0
1571 | 0
1572 | 0
1573 | 0
1574 | 0
1575 | 0
1576 | 0
1577 | 0
1578 | 0
1579 | 0
1580 | 0
1581 | 0
1582 | 0
1583 | 0
1584 | 0
1585 | 0
1586 | 0
1587 | 0
1588 | 0
1589 | 0
1590 | 0
1591 | 0
1592 | 0
1593 | 0
1594 | 0
1595 | 0
1596 | 0
1597 | 0
1598 | 0
1599 | 0
1600 | 0
1601 | 0
1602 | 0
1603 | 0
1604 | 0
1605 | 0
1606 | 0
1607 | 0
1608 | 0
1609 | 0
1610 | 0
1611 | 0
1612 | 0
1613 | 0
1614 | 0
1615 | 0
1616 | 0
1617 | 0
1618 | 0
1619 | 0
1620 | 0
1621 | 0
1622 | 0
1623 | 0
1624 | 0
1625 | 0
1626 | 0
1627 | 0
1628 | 0
1629 | 0
1630 | 0
1631 | 0
1632 | 0
1633 | 0
1634 | 0
1635 | 0
1636 | 0
1637 | 0
1638 | 0
1639 | 0
1640 | 0
1641 | 0
1642 | 0
1643 | 0
1644 | 0
1645 | 0
1646 | 0
1647 | 0
1648 | 0
1649 | 0
1650 | 0
1651 | 0
1652 | 0
1653 | 0
1654 | 0
1655 | 0
1656 | 0
1657 | 0
1658 | 0
1659 | 0
1660 | 0
1661 | 0
1662 | 0
1663 | 0
1664 | 0
1665 | 0
1666 | 0
1667 | 0
1668 | 0
1669 | 0
1670 | 0
1671 | 0
1672 | 0
1673 | 0
1674 | 0
1675 | 0
1676 | 0
1677 | 0
1678 | 0
1679 | 0
1680 | 0
1681 | 0
1682 | 0
1683 | 0
1684 | 0
1685 | 0
1686 | 0
1687 | 0
1688 | 0
1689 | 0
1690 | 0
1691 | 0
1692 | 0
1693 | 0
1694 | 0
1695 | 0
1696 | 0
1697 | 0
1698 | 0
1699 | 0
1700 | 0
1701 | 0
1702 | 0
1703 | 0
1704 | 0
1705 | 0
1706 | 0
1707 | 0
1708 | 0
1709 | 0
1710 | 0
1711 | 0
1712 | 0
1713 | 0
1714 | 0
1715 | 0
1716 | 0
1717 | 0
1718 | 0
1719 | 0
1720 | 0
1721 | 0
1722 | 0
1723 | 0
1724 | 0
1725 | 0
1726 | 0
1727 | 0
1728 | 0
1729 | 0
1730 | 0
1731 | 0
1732 | 0
1733 | 0
1734 | 0
1735 | 0
1736 | 0
1737 | 0
1738 | 0
1739 | 0
1740 | 0
1741 | 0
1742 | 0
1743 | 0
1744 | 0
1745 | 0
1746 | 0
1747 | 0
1748 | 0
1749 | 0
1750 | 0
1751 | 0
1752 | 0
1753 | 0
1754 | 0
1755 | 0
1756 | 0
1757 | 0
1758 | 0
1759 | 0
1760 | 0
1761 | 0
1762 | 0
1763 | 0
1764 | 0
1765 | 0
1766 | 0
1767 | 0
1768 | 0
1769 | 0
1770 | 0
1771 | 0
1772 | 0
1773 | 0
1774 | 0
1775 | 0
1776 | 0
1777 | 0
1778 | 0
1779 | 0
1780 | 0
1781 | 0
1782 | 0
1783 | 0
1784 | 0
1785 | 0
1786 | 0
1787 | 0
1788 | 0
1789 | 0
1790 | 0
1791 | 0
1792 | 0
1793 | 0
1794 | 0
1795 | 0
1796 | 0
1797 | 0
1798 | 0
1799 | 0
1800 | 0
1801 | 0
1802 | 0
1803 | 0
1804 | 0
1805 | 0
1806 | 0
1807 | 0
1808 | 0
1809 | 0
1810 | 0
1811 | 0
1812 | 0
1813 | 0
1814 | 0
1815 | 0
1816 | 0
1817 | 0
1818 | 0
1819 | 0
1820 | 0
1821 | 0
1822 | 0
1823 | 0
1824 | 0
1825 | 0
1826 | 0
1827 | 0
1828 | 0
1829 | 0
1830 | 0
1831 | 0
1832 | 0
1833 | 0
1834 | 0
1835 | 0
1836 | 0
1837 | 0
1838 | 0
1839 | 0
1840 | 0
1841 | 0
1842 | 0
1843 | 0
1844 | 0
1845 | 0
1846 | 0
1847 | 0
1848 | 0
1849 | 0
1850 | 0
1851 | 0
1852 | 0
1853 | 0
1854 | 0
1855 | 0
1856 | 0
1857 | 0
1858 | 0
1859 | 0
1860 | 0
1861 | 0
1862 | 0
1863 | 0
1864 | 0
1865 | 0
1866 | 0
1867 | 0
1868 | 0
1869 | 0
1870 | 0
1871 | 0
1872 | 0
1873 | 0
1874 | 0
1875 | 0
1876 | 0
1877 | 0
1878 | 0
1879 | 0
1880 | 0
1881 | 0
1882 | 0
1883 | 0
1884 | 0
1885 | 0
1886 | 0
1887 | 0
1888 | 0
1889 | 0
1890 | 0
1891 | 0
1892 | 0
1893 | 0
1894 | 0
1895 | 0
1896 | 0
1897 | 0
1898 | 0
1899 | 0
1900 | 0
1901 | 0
1902 | 0
1903 | 0
1904 | 0
1905 | 0
1906 | 0
1907 | 0
1908 | 0
1909 | 0
1910 | 0
1911 | 0
1912 | 0
1913 | 0
1914 | 0
1915 | 0
1916 | 0
1917 | 0
1918 | 0
1919 | 0
1920 | 0
1921 | 0
1922 | 0
1923 | 0
1924 | 0
1925 | 0
1926 | 0
1927 | 0
1928 | 0
1929 | 0
1930 | 0
1931 | 0
1932 | 0
1933 | 0
1934 | 0
1935 | 0
1936 | 0
1937 | 0
1938 | 0
1939 | 0
1940 | 0
1941 | 0
1942 | 0
1943 | 0
1944 | 0
1945 | 0
1946 | 0
1947 | 0
1948 | 0
1949 | 0
1950 | 0
1951 | 0
1952 | 0
1953 | 0
1954 | 0
1955 | 0
1956 | 0
1957 | 0
1958 | 0
1959 | 0
1960 | 0
1961 | 0
1962 | 0
1963 | 0
1964 | 0
1965 | 0
1966 | 0
1967 | 0
1968 | 0
1969 | 0
1970 | 0
1971 | 0
1972 | 0
1973 | 0
1974 | 0
1975 | 0
1976 | 0
1977 | 0
1978 | 0
1979 | 0
1980 | 0
1981 | 0
1982 | 0
1983 | 0
1984 | 0
1985 | 0
1986 | 0
1987 | 0
1988 | 0
1989 | 0
1990 | 0
1991 | 0
1992 | 0
1993 | 0
1994 | 0
1995 | 0
1996 | 0
1997 | 0
1998 | 0
1999 | 0
2000 | 0
2001 | 0
2002 | 0
2003 | 0
2004 | 0
2005 | 0
2006 | 0
2007 | 0
2008 | 0
2009 | 0
2010 | 0
2011 | 0
2012 | 0
2013 | 0
2014 | 0
2015 | 0
2016 | 0
2017 | 0
2018 | 0
2019 | 0
2020 | 0
2021 | 0
2022 | 0
2023 | 0
2024 | 0
2025 | 0
2026 | 0
2027 | 0
2028 | 0
2029 | 0
2030 | 0
2031 | 0
2032 | 0
2033 | 0
2034 | 0
2035 | 0
2036 | 0
2037 | 0
2038 | 0
2039 | 0
2040 | 0
2041 | 0
2042 | 0
2043 | 0
2044 | 0
2045 | 0
2046 | 0
2047 | 0
2048 | 0
2049 | 0
2050 | 0
2051 | 0
2052 | 0
2053 | 0
2054 | 0
2055 | 0
2056 | 0
2057 | 0
2058 | 0
2059 | 0
2060 | 0
2061 | 0
2062 | 0
2063 | 0
2064 | 0
2065 | 0
2066 | 0
2067 | 0
2068 | 0
2069 | 0
2070 | 0
2071 | 0
2072 | 0
2073 | 0
2074 | 0
2075 | 0
2076 | 0
2077 | 0
2078 | 0
2079 | 0
2080 | 0
2081 | 0
2082 | 0
2083 | 0
2084 | 0
2085 | 0
2086 | 0
2087 | 0
2088 | 0
2089 | 0
2090 | 0
2091 | 0
2092 | 0
2093 | 0
2094 | 0
2095 | 0
2096 | 0
2097 | 0
2098 | 0
2099 | 0
2100 | 0
2101 | 0
2102 | 0
2103 | 0
2104 | 0
2105 | 0
2106 | 0
2107 | 0
2108 | 0
2109 | 0
2110 | 0
2111 | 0
2112 | 0
2113 | 0
2114 | 0
2115 | 0
2116 | 0
2117 | 0
2118 | 0
2119 | 0
2120 | 0
2121 | 0
2122 | 0
2123 | 0
2124 | 0
2125 | 0
2126 | 0
2127 | 0
2128 | 0
2129 | 0
2130 | 0
2131 | 0
2132 | 0
2133 | 0
2134 | 0
2135 | 0
2136 | 0
2137 | 0
2138 | 0
2139 | 0
2140 | 0
2141 | 0
2142 | 0
2143 | 0
2144 | 0
2145 | 0
2146 | 0
2147 | 0
2148 | 0
2149 | 0
2150 | 0
2151 | 0
2152 | 0
2153 | 0
2154 | 0
2155 | 0
2156 | 0
2157 | 0
2158 | 0
2159 | 0
2160 | 0
2161 | 0
2162 | 0
2163 | 0
2164 | 0
2165 | 0
2166 | 0
2167 | 0
2168 | 0
2169 | 0
2170 | 0
2171 | 0
2172 | 0
2173 | 0
2174 | 0
2175 | 0
2176 | 0
2177 | 0
2178 | 0
2179 | 0
2180 | 0
2181 | 0
2182 | 0
2183 | 0
2184 | 0
2185 | 0
2186 | 0
2187 | 0
2188 | 0
2189 | 0
2190 | 0
2191 | 0
2192 | 0
2193 | 0
2194 | 0
2195 | 0
2196 | 0
2197 | 0
2198 | 0
2199 | 0
2200 | 0
2201 | 0
2202 | 0
2203 | 0
2204 | 0
2205 | 0
2206 | 0
2207 | 0
2208 | 0
2209 | 0
2210 | 0
2211 | 0
2212 | 0
2213 | 0
2214 | 0
2215 | 0
2216 | 0
2217 | 0
2218 | 0
2219 | 0
2220 | 0
2221 | 0
2222 | 0
2223 | 0
2224 | 0
2225 | 0
2226 | 0
2227 | 0
2228 | 0
2229 | 0
2230 | 0
2231 | 0
2232 | 0
2233 | 0
2234 | 0
2235 | 0
2236 | 0
2237 | 0
2238 | 0
2239 | 0
2240 | 0
2241 | 0
2242 | 0
2243 | 0
2244 | 0
2245 | 0
2246 | 0
2247 | 0
2248 | 0
2249 | 0
2250 | 0
2251 | 0
2252 | 0
2253 | 0
2254 | 0
2255 | 0
2256 | 0
2257 | 0
2258 | 0
2259 | 0
2260 | 0
2261 | 0
2262 | 0
2263 | 0
2264 | 0
2265 | 0
2266 | 0
2267 | 0
2268 | 0
2269 | 0
2270 | 0
2271 | 0
2272 | 0
2273 | 0
2274 | 0
2275 | 0
2276 | 0
2277 | 0
2278 | 0
2279 | 0
2280 | 0
2281 | 0
2282 | 0
2283 | 0
2284 | 0
2285 | 0
2286 | 0
2287 | 0
2288 | 0
2289 | 0
2290 | 0
2291 | 0
2292 | )
2293 | ;
2294 |
2295 | boundaryField
2296 | {
2297 | leftWall
2298 | {
2299 | type zeroGradient;
2300 | }
2301 | rightWall
2302 | {
2303 | type zeroGradient;
2304 | }
2305 | lowerWall
2306 | {
2307 | type zeroGradient;
2308 | }
2309 | atmosphere
2310 | {
2311 | type inletOutlet;
2312 | inletValue uniform 0;
2313 | value uniform 0;
2314 | }
2315 | defaultFaces
2316 | {
2317 | type empty;
2318 | }
2319 | }
2320 |
2321 |
2322 | // ************************************************************************* //
2323 |
--------------------------------------------------------------------------------
/tutorial/interFoam/damBreak/0/alpha.water.orig:
--------------------------------------------------------------------------------
1 | /*--------------------------------*- C++ -*----------------------------------*\
2 | | ========= | |
3 | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
4 | | \\ / O peration | Version: v1806 |
5 | | \\ / A nd | Web: www.OpenFOAM.com |
6 | | \\/ M anipulation | |
7 | \*---------------------------------------------------------------------------*/
8 | FoamFile
9 | {
10 | version 2.0;
11 | format ascii;
12 | class volScalarField;
13 | object alpha.water;
14 | }
15 | // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
16 |
17 | dimensions [0 0 0 0 0 0 0];
18 |
19 | internalField uniform 0;
20 |
21 | boundaryField
22 | {
23 | leftWall
24 | {
25 | type zeroGradient;
26 | }
27 |
28 | rightWall
29 | {
30 | type zeroGradient;
31 | }
32 |
33 | lowerWall
34 | {
35 | type zeroGradient;
36 | }
37 |
38 | atmosphere
39 | {
40 | type inletOutlet;
41 | inletValue uniform 0;
42 | value uniform 0;
43 | }
44 |
45 | defaultFaces
46 | {
47 | type empty;
48 | }
49 | }
50 |
51 | // ************************************************************************* //
52 |
--------------------------------------------------------------------------------
/tutorial/interFoam/damBreak/0/p_rgh:
--------------------------------------------------------------------------------
1 | /*--------------------------------*- C++ -*----------------------------------*\
2 | | ========= | |
3 | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
4 | | \\ / O peration | Version: v1806 |
5 | | \\ / A nd | Web: www.OpenFOAM.com |
6 | | \\/ M anipulation | |
7 | \*---------------------------------------------------------------------------*/
8 | FoamFile
9 | {
10 | version 2.0;
11 | format ascii;
12 | class volScalarField;
13 | object p_rgh;
14 | }
15 | // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
16 |
17 | dimensions [1 -1 -2 0 0 0 0];
18 |
19 | internalField uniform 0;
20 |
21 | boundaryField
22 | {
23 | leftWall
24 | {
25 | type fixedFluxPressure;
26 | value uniform 0;
27 | }
28 |
29 | rightWall
30 | {
31 | type fixedFluxPressure;
32 | value uniform 0;
33 | }
34 |
35 | lowerWall
36 | {
37 | type fixedFluxPressure;
38 | value uniform 0;
39 | }
40 |
41 | atmosphere
42 | {
43 | type totalPressure;
44 | p0 uniform 0;
45 | }
46 |
47 | defaultFaces
48 | {
49 | type empty;
50 | }
51 | }
52 |
53 | // ************************************************************************* //
54 |
--------------------------------------------------------------------------------
/tutorial/interFoam/damBreak/Allrun:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | cd ${0%/*} || exit 1 # Run from this directory
3 | . $WM_PROJECT_DIR/bin/tools/RunFunctions # Tutorial run functions
4 |
5 | runApplication blockMesh
6 | runApplication setFields
7 | runApplication $(getApplication)
8 |
9 | #------------------------------------------------------------------------------
10 |
--------------------------------------------------------------------------------
/tutorial/interFoam/damBreak/Screenshot from 2019-04-18 14-46-42.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/krajit/dynamicRefine2DFvMesh/75d051aea9cd4f6f144a08e767fc0298ec607af6/tutorial/interFoam/damBreak/Screenshot from 2019-04-18 14-46-42.png
--------------------------------------------------------------------------------
/tutorial/interFoam/damBreak/alpha-with-refinement.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/krajit/dynamicRefine2DFvMesh/75d051aea9cd4f6f144a08e767fc0298ec607af6/tutorial/interFoam/damBreak/alpha-with-refinement.gif
--------------------------------------------------------------------------------
/tutorial/interFoam/damBreak/constant/dynamicMeshDict:
--------------------------------------------------------------------------------
1 | /*--------------------------------*- C++ -*----------------------------------*\
2 | | ========= | |
3 | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
4 | | \\ / O peration | Version: v1806 |
5 | | \\ / A nd | Web: www.OpenFOAM.com |
6 | | \\/ M anipulation | |
7 | \*---------------------------------------------------------------------------*/
8 | FoamFile
9 | {
10 | version 2.0;
11 | format ascii;
12 | class dictionary;
13 | location "constant";
14 | object dynamicMeshDict;
15 | }
16 | // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
17 |
18 | //dynamicFvMesh dynamicRefineFvMesh;
19 | dynamicFvMesh dynamicRefine2DFvMesh;
20 |
21 |
22 | dynamicRefine2DFvMeshCoeffs{
23 |
24 | nBufferLayersR 2;
25 |
26 | // How often to refine
27 | refineInterval 1;
28 |
29 | // Field to be refinement on
30 | field alpha.water;
31 |
32 | // Refine field inbetween lower..upper
33 | lowerRefineLevel 0.001;
34 | upperRefineLevel 0.999;
35 |
36 | // If value < unrefineLevel unrefine
37 | unrefineLevel 10;
38 |
39 | // Have slower than 2:1 refinement
40 | nBufferLayers 1;
41 |
42 | // Refine cells only up to maxRefinement levels
43 | maxRefinement 2;
44 |
45 | // Stop refinement if maxCells reached
46 | maxCells 200000;
47 |
48 | // Flux field and corresponding velocity field. Fluxes on changed
49 | // faces get recalculated by interpolating the velocity. Use 'none'
50 | // on surfaceScalarFields that do not need to be reinterpolated.
51 | correctFluxes
52 | (
53 | (phi none)
54 | (nHatf none)
55 | (rhoPhi none)
56 | (alphaPhi0.water none)
57 | (ghf none)
58 | );
59 |
60 | // Write the refinement level as a volScalarField
61 | dumpLevel true;
62 | };
63 |
64 | // ************************************************************************* //
65 |
--------------------------------------------------------------------------------
/tutorial/interFoam/damBreak/constant/g:
--------------------------------------------------------------------------------
1 | /*--------------------------------*- C++ -*----------------------------------*\
2 | | ========= | |
3 | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
4 | | \\ / O peration | Version: v1806 |
5 | | \\ / A nd | Web: www.OpenFOAM.com |
6 | | \\/ M anipulation | |
7 | \*---------------------------------------------------------------------------*/
8 | FoamFile
9 | {
10 | version 2.0;
11 | format ascii;
12 | class uniformDimensionedVectorField;
13 | location "constant";
14 | object g;
15 | }
16 | // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
17 |
18 | dimensions [0 1 -2 0 0 0 0];
19 | value (0 -9.81 0);
20 |
21 |
22 | // ************************************************************************* //
23 |
--------------------------------------------------------------------------------
/tutorial/interFoam/damBreak/constant/polyMesh/boundary:
--------------------------------------------------------------------------------
1 | /*--------------------------------*- C++ -*----------------------------------*\
2 | | ========= | |
3 | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
4 | | \\ / O peration | Version: v1806 |
5 | | \\ / A nd | Web: www.OpenFOAM.com |
6 | | \\/ M anipulation | |
7 | \*---------------------------------------------------------------------------*/
8 | FoamFile
9 | {
10 | version 2.0;
11 | format ascii;
12 | class polyBoundaryMesh;
13 | location "constant/polyMesh";
14 | object boundary;
15 | }
16 | // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
17 |
18 | 5
19 | (
20 | leftWall
21 | {
22 | type wall;
23 | inGroups 1(wall);
24 | nFaces 50;
25 | startFace 4432;
26 | }
27 | rightWall
28 | {
29 | type wall;
30 | inGroups 1(wall);
31 | nFaces 50;
32 | startFace 4482;
33 | }
34 | lowerWall
35 | {
36 | type wall;
37 | inGroups 1(wall);
38 | nFaces 62;
39 | startFace 4532;
40 | }
41 | atmosphere
42 | {
43 | type patch;
44 | nFaces 46;
45 | startFace 4594;
46 | }
47 | defaultFaces
48 | {
49 | type empty;
50 | inGroups 1(empty);
51 | nFaces 4536;
52 | startFace 4640;
53 | }
54 | )
55 |
56 | // ************************************************************************* //
57 |
--------------------------------------------------------------------------------
/tutorial/interFoam/damBreak/constant/polyMesh/neighbour:
--------------------------------------------------------------------------------
1 | /*--------------------------------*- C++ -*----------------------------------*\
2 | | ========= | |
3 | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
4 | | \\ / O peration | Version: v1806 |
5 | | \\ / A nd | Web: www.OpenFOAM.com |
6 | | \\/ M anipulation | |
7 | \*---------------------------------------------------------------------------*/
8 | FoamFile
9 | {
10 | version 2.0;
11 | format ascii;
12 | class labelList;
13 | note "nPoints: 4746 nCells: 2268 nFaces: 9176 nInternalFaces: 4432";
14 | location "constant/polyMesh";
15 | object neighbour;
16 | }
17 | // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
18 |
19 |
20 | 4432
21 | (
22 | 1
23 | 23
24 | 2
25 | 24
26 | 3
27 | 25
28 | 4
29 | 26
30 | 5
31 | 27
32 | 6
33 | 28
34 | 7
35 | 29
36 | 8
37 | 30
38 | 9
39 | 31
40 | 10
41 | 32
42 | 11
43 | 33
44 | 12
45 | 34
46 | 13
47 | 35
48 | 14
49 | 36
50 | 15
51 | 37
52 | 16
53 | 38
54 | 17
55 | 39
56 | 18
57 | 40
58 | 19
59 | 41
60 | 20
61 | 42
62 | 21
63 | 43
64 | 22
65 | 44
66 | 45
67 | 24
68 | 46
69 | 25
70 | 47
71 | 26
72 | 48
73 | 27
74 | 49
75 | 28
76 | 50
77 | 29
78 | 51
79 | 30
80 | 52
81 | 31
82 | 53
83 | 32
84 | 54
85 | 33
86 | 55
87 | 34
88 | 56
89 | 35
90 | 57
91 | 36
92 | 58
93 | 37
94 | 59
95 | 38
96 | 60
97 | 39
98 | 61
99 | 40
100 | 62
101 | 41
102 | 63
103 | 42
104 | 64
105 | 43
106 | 65
107 | 44
108 | 66
109 | 45
110 | 67
111 | 68
112 | 47
113 | 69
114 | 48
115 | 70
116 | 49
117 | 71
118 | 50
119 | 72
120 | 51
121 | 73
122 | 52
123 | 74
124 | 53
125 | 75
126 | 54
127 | 76
128 | 55
129 | 77
130 | 56
131 | 78
132 | 57
133 | 79
134 | 58
135 | 80
136 | 59
137 | 81
138 | 60
139 | 82
140 | 61
141 | 83
142 | 62
143 | 84
144 | 63
145 | 85
146 | 64
147 | 86
148 | 65
149 | 87
150 | 66
151 | 88
152 | 67
153 | 89
154 | 68
155 | 90
156 | 91
157 | 70
158 | 92
159 | 71
160 | 93
161 | 72
162 | 94
163 | 73
164 | 95
165 | 74
166 | 96
167 | 75
168 | 97
169 | 76
170 | 98
171 | 77
172 | 99
173 | 78
174 | 100
175 | 79
176 | 101
177 | 80
178 | 102
179 | 81
180 | 103
181 | 82
182 | 104
183 | 83
184 | 105
185 | 84
186 | 106
187 | 85
188 | 107
189 | 86
190 | 108
191 | 87
192 | 109
193 | 88
194 | 110
195 | 89
196 | 111
197 | 90
198 | 112
199 | 91
200 | 113
201 | 114
202 | 93
203 | 115
204 | 94
205 | 116
206 | 95
207 | 117
208 | 96
209 | 118
210 | 97
211 | 119
212 | 98
213 | 120
214 | 99
215 | 121
216 | 100
217 | 122
218 | 101
219 | 123
220 | 102
221 | 124
222 | 103
223 | 125
224 | 104
225 | 126
226 | 105
227 | 127
228 | 106
229 | 128
230 | 107
231 | 129
232 | 108
233 | 130
234 | 109
235 | 131
236 | 110
237 | 132
238 | 111
239 | 133
240 | 112
241 | 134
242 | 113
243 | 135
244 | 114
245 | 136
246 | 137
247 | 116
248 | 138
249 | 117
250 | 139
251 | 118
252 | 140
253 | 119
254 | 141
255 | 120
256 | 142
257 | 121
258 | 143
259 | 122
260 | 144
261 | 123
262 | 145
263 | 124
264 | 146
265 | 125
266 | 147
267 | 126
268 | 148
269 | 127
270 | 149
271 | 128
272 | 150
273 | 129
274 | 151
275 | 130
276 | 152
277 | 131
278 | 153
279 | 132
280 | 154
281 | 133
282 | 155
283 | 134
284 | 156
285 | 135
286 | 157
287 | 136
288 | 158
289 | 137
290 | 159
291 | 160
292 | 139
293 | 161
294 | 140
295 | 162
296 | 141
297 | 163
298 | 142
299 | 164
300 | 143
301 | 165
302 | 144
303 | 166
304 | 145
305 | 167
306 | 146
307 | 168
308 | 147
309 | 169
310 | 148
311 | 170
312 | 149
313 | 171
314 | 150
315 | 172
316 | 151
317 | 173
318 | 152
319 | 174
320 | 153
321 | 175
322 | 154
323 | 176
324 | 155
325 | 177
326 | 156
327 | 178
328 | 157
329 | 179
330 | 158
331 | 180
332 | 159
333 | 181
334 | 160
335 | 182
336 | 183
337 | 162
338 | 336
339 | 163
340 | 337
341 | 164
342 | 338
343 | 165
344 | 339
345 | 166
346 | 340
347 | 167
348 | 341
349 | 168
350 | 342
351 | 169
352 | 343
353 | 170
354 | 344
355 | 171
356 | 345
357 | 172
358 | 346
359 | 173
360 | 347
361 | 174
362 | 348
363 | 175
364 | 349
365 | 176
366 | 350
367 | 177
368 | 351
369 | 178
370 | 352
371 | 179
372 | 353
373 | 180
374 | 354
375 | 181
376 | 355
377 | 182
378 | 356
379 | 183
380 | 357
381 | 358
382 | 185
383 | 203
384 | 186
385 | 204
386 | 187
387 | 205
388 | 188
389 | 206
390 | 189
391 | 207
392 | 190
393 | 208
394 | 191
395 | 209
396 | 192
397 | 210
398 | 193
399 | 211
400 | 194
401 | 212
402 | 195
403 | 213
404 | 196
405 | 214
406 | 197
407 | 215
408 | 198
409 | 216
410 | 199
411 | 217
412 | 200
413 | 218
414 | 201
415 | 219
416 | 202
417 | 220
418 | 221
419 | 204
420 | 222
421 | 205
422 | 223
423 | 206
424 | 224
425 | 207
426 | 225
427 | 208
428 | 226
429 | 209
430 | 227
431 | 210
432 | 228
433 | 211
434 | 229
435 | 212
436 | 230
437 | 213
438 | 231
439 | 214
440 | 232
441 | 215
442 | 233
443 | 216
444 | 234
445 | 217
446 | 235
447 | 218
448 | 236
449 | 219
450 | 237
451 | 220
452 | 238
453 | 221
454 | 239
455 | 240
456 | 223
457 | 241
458 | 224
459 | 242
460 | 225
461 | 243
462 | 226
463 | 244
464 | 227
465 | 245
466 | 228
467 | 246
468 | 229
469 | 247
470 | 230
471 | 248
472 | 231
473 | 249
474 | 232
475 | 250
476 | 233
477 | 251
478 | 234
479 | 252
480 | 235
481 | 253
482 | 236
483 | 254
484 | 237
485 | 255
486 | 238
487 | 256
488 | 239
489 | 257
490 | 240
491 | 258
492 | 259
493 | 242
494 | 260
495 | 243
496 | 261
497 | 244
498 | 262
499 | 245
500 | 263
501 | 246
502 | 264
503 | 247
504 | 265
505 | 248
506 | 266
507 | 249
508 | 267
509 | 250
510 | 268
511 | 251
512 | 269
513 | 252
514 | 270
515 | 253
516 | 271
517 | 254
518 | 272
519 | 255
520 | 273
521 | 256
522 | 274
523 | 257
524 | 275
525 | 258
526 | 276
527 | 259
528 | 277
529 | 278
530 | 261
531 | 279
532 | 262
533 | 280
534 | 263
535 | 281
536 | 264
537 | 282
538 | 265
539 | 283
540 | 266
541 | 284
542 | 267
543 | 285
544 | 268
545 | 286
546 | 269
547 | 287
548 | 270
549 | 288
550 | 271
551 | 289
552 | 272
553 | 290
554 | 273
555 | 291
556 | 274
557 | 292
558 | 275
559 | 293
560 | 276
561 | 294
562 | 277
563 | 295
564 | 278
565 | 296
566 | 297
567 | 280
568 | 298
569 | 281
570 | 299
571 | 282
572 | 300
573 | 283
574 | 301
575 | 284
576 | 302
577 | 285
578 | 303
579 | 286
580 | 304
581 | 287
582 | 305
583 | 288
584 | 306
585 | 289
586 | 307
587 | 290
588 | 308
589 | 291
590 | 309
591 | 292
592 | 310
593 | 293
594 | 311
595 | 294
596 | 312
597 | 295
598 | 313
599 | 296
600 | 314
601 | 297
602 | 315
603 | 316
604 | 299
605 | 317
606 | 300
607 | 318
608 | 301
609 | 319
610 | 302
611 | 320
612 | 303
613 | 321
614 | 304
615 | 322
616 | 305
617 | 323
618 | 306
619 | 324
620 | 307
621 | 325
622 | 308
623 | 326
624 | 309
625 | 327
626 | 310
627 | 328
628 | 311
629 | 329
630 | 312
631 | 330
632 | 313
633 | 331
634 | 314
635 | 332
636 | 315
637 | 333
638 | 316
639 | 334
640 | 335
641 | 318
642 | 1470
643 | 319
644 | 1471
645 | 320
646 | 1472
647 | 321
648 | 1473
649 | 322
650 | 1474
651 | 323
652 | 1475
653 | 324
654 | 1476
655 | 325
656 | 1477
657 | 326
658 | 1478
659 | 327
660 | 1479
661 | 328
662 | 1480
663 | 329
664 | 1481
665 | 330
666 | 1482
667 | 331
668 | 1483
669 | 332
670 | 1484
671 | 333
672 | 1485
673 | 334
674 | 1486
675 | 335
676 | 1487
677 | 1488
678 | 337
679 | 359
680 | 338
681 | 360
682 | 339
683 | 361
684 | 340
685 | 362
686 | 341
687 | 363
688 | 342
689 | 364
690 | 343
691 | 365
692 | 344
693 | 366
694 | 345
695 | 367
696 | 346
697 | 368
698 | 347
699 | 369
700 | 348
701 | 370
702 | 349
703 | 371
704 | 350
705 | 372
706 | 351
707 | 373
708 | 352
709 | 374
710 | 353
711 | 375
712 | 354
713 | 376
714 | 355
715 | 377
716 | 356
717 | 378
718 | 357
719 | 379
720 | 358
721 | 380
722 | 381
723 | 1302
724 | 360
725 | 382
726 | 361
727 | 383
728 | 362
729 | 384
730 | 363
731 | 385
732 | 364
733 | 386
734 | 365
735 | 387
736 | 366
737 | 388
738 | 367
739 | 389
740 | 368
741 | 390
742 | 369
743 | 391
744 | 370
745 | 392
746 | 371
747 | 393
748 | 372
749 | 394
750 | 373
751 | 395
752 | 374
753 | 396
754 | 375
755 | 397
756 | 376
757 | 398
758 | 377
759 | 399
760 | 378
761 | 400
762 | 379
763 | 401
764 | 380
765 | 402
766 | 381
767 | 403
768 | 404
769 | 1306
770 | 383
771 | 405
772 | 384
773 | 406
774 | 385
775 | 407
776 | 386
777 | 408
778 | 387
779 | 409
780 | 388
781 | 410
782 | 389
783 | 411
784 | 390
785 | 412
786 | 391
787 | 413
788 | 392
789 | 414
790 | 393
791 | 415
792 | 394
793 | 416
794 | 395
795 | 417
796 | 396
797 | 418
798 | 397
799 | 419
800 | 398
801 | 420
802 | 399
803 | 421
804 | 400
805 | 422
806 | 401
807 | 423
808 | 402
809 | 424
810 | 403
811 | 425
812 | 404
813 | 426
814 | 427
815 | 1310
816 | 406
817 | 428
818 | 407
819 | 429
820 | 408
821 | 430
822 | 409
823 | 431
824 | 410
825 | 432
826 | 411
827 | 433
828 | 412
829 | 434
830 | 413
831 | 435
832 | 414
833 | 436
834 | 415
835 | 437
836 | 416
837 | 438
838 | 417
839 | 439
840 | 418
841 | 440
842 | 419
843 | 441
844 | 420
845 | 442
846 | 421
847 | 443
848 | 422
849 | 444
850 | 423
851 | 445
852 | 424
853 | 446
854 | 425
855 | 447
856 | 426
857 | 448
858 | 427
859 | 449
860 | 450
861 | 1314
862 | 429
863 | 451
864 | 430
865 | 452
866 | 431
867 | 453
868 | 432
869 | 454
870 | 433
871 | 455
872 | 434
873 | 456
874 | 435
875 | 457
876 | 436
877 | 458
878 | 437
879 | 459
880 | 438
881 | 460
882 | 439
883 | 461
884 | 440
885 | 462
886 | 441
887 | 463
888 | 442
889 | 464
890 | 443
891 | 465
892 | 444
893 | 466
894 | 445
895 | 467
896 | 446
897 | 468
898 | 447
899 | 469
900 | 448
901 | 470
902 | 449
903 | 471
904 | 450
905 | 472
906 | 473
907 | 1318
908 | 452
909 | 474
910 | 453
911 | 475
912 | 454
913 | 476
914 | 455
915 | 477
916 | 456
917 | 478
918 | 457
919 | 479
920 | 458
921 | 480
922 | 459
923 | 481
924 | 460
925 | 482
926 | 461
927 | 483
928 | 462
929 | 484
930 | 463
931 | 485
932 | 464
933 | 486
934 | 465
935 | 487
936 | 466
937 | 488
938 | 467
939 | 489
940 | 468
941 | 490
942 | 469
943 | 491
944 | 470
945 | 492
946 | 471
947 | 493
948 | 472
949 | 494
950 | 473
951 | 495
952 | 496
953 | 1322
954 | 475
955 | 497
956 | 476
957 | 498
958 | 477
959 | 499
960 | 478
961 | 500
962 | 479
963 | 501
964 | 480
965 | 502
966 | 481
967 | 503
968 | 482
969 | 504
970 | 483
971 | 505
972 | 484
973 | 506
974 | 485
975 | 507
976 | 486
977 | 508
978 | 487
979 | 509
980 | 488
981 | 510
982 | 489
983 | 511
984 | 490
985 | 512
986 | 491
987 | 513
988 | 492
989 | 514
990 | 493
991 | 515
992 | 494
993 | 516
994 | 495
995 | 517
996 | 496
997 | 518
998 | 519
999 | 1326
1000 | 498
1001 | 520
1002 | 499
1003 | 521
1004 | 500
1005 | 522
1006 | 501
1007 | 523
1008 | 502
1009 | 524
1010 | 503
1011 | 525
1012 | 504
1013 | 526
1014 | 505
1015 | 527
1016 | 506
1017 | 528
1018 | 507
1019 | 529
1020 | 508
1021 | 530
1022 | 509
1023 | 531
1024 | 510
1025 | 532
1026 | 511
1027 | 533
1028 | 512
1029 | 534
1030 | 513
1031 | 535
1032 | 514
1033 | 536
1034 | 515
1035 | 537
1036 | 516
1037 | 538
1038 | 517
1039 | 539
1040 | 518
1041 | 540
1042 | 519
1043 | 541
1044 | 542
1045 | 1330
1046 | 521
1047 | 543
1048 | 522
1049 | 544
1050 | 523
1051 | 545
1052 | 524
1053 | 546
1054 | 525
1055 | 547
1056 | 526
1057 | 548
1058 | 527
1059 | 549
1060 | 528
1061 | 550
1062 | 529
1063 | 551
1064 | 530
1065 | 552
1066 | 531
1067 | 553
1068 | 532
1069 | 554
1070 | 533
1071 | 555
1072 | 534
1073 | 556
1074 | 535
1075 | 557
1076 | 536
1077 | 558
1078 | 537
1079 | 559
1080 | 538
1081 | 560
1082 | 539
1083 | 561
1084 | 540
1085 | 562
1086 | 541
1087 | 563
1088 | 542
1089 | 564
1090 | 565
1091 | 1334
1092 | 544
1093 | 566
1094 | 545
1095 | 567
1096 | 546
1097 | 568
1098 | 547
1099 | 569
1100 | 548
1101 | 570
1102 | 549
1103 | 571
1104 | 550
1105 | 572
1106 | 551
1107 | 573
1108 | 552
1109 | 574
1110 | 553
1111 | 575
1112 | 554
1113 | 576
1114 | 555
1115 | 577
1116 | 556
1117 | 578
1118 | 557
1119 | 579
1120 | 558
1121 | 580
1122 | 559
1123 | 581
1124 | 560
1125 | 582
1126 | 561
1127 | 583
1128 | 562
1129 | 584
1130 | 563
1131 | 585
1132 | 564
1133 | 586
1134 | 565
1135 | 587
1136 | 588
1137 | 1338
1138 | 567
1139 | 589
1140 | 568
1141 | 590
1142 | 569
1143 | 591
1144 | 570
1145 | 592
1146 | 571
1147 | 593
1148 | 572
1149 | 594
1150 | 573
1151 | 595
1152 | 574
1153 | 596
1154 | 575
1155 | 597
1156 | 576
1157 | 598
1158 | 577
1159 | 599
1160 | 578
1161 | 600
1162 | 579
1163 | 601
1164 | 580
1165 | 602
1166 | 581
1167 | 603
1168 | 582
1169 | 604
1170 | 583
1171 | 605
1172 | 584
1173 | 606
1174 | 585
1175 | 607
1176 | 586
1177 | 608
1178 | 587
1179 | 609
1180 | 588
1181 | 610
1182 | 611
1183 | 1342
1184 | 590
1185 | 612
1186 | 591
1187 | 613
1188 | 592
1189 | 614
1190 | 593
1191 | 615
1192 | 594
1193 | 616
1194 | 595
1195 | 617
1196 | 596
1197 | 618
1198 | 597
1199 | 619
1200 | 598
1201 | 620
1202 | 599
1203 | 621
1204 | 600
1205 | 622
1206 | 601
1207 | 623
1208 | 602
1209 | 624
1210 | 603
1211 | 625
1212 | 604
1213 | 626
1214 | 605
1215 | 627
1216 | 606
1217 | 628
1218 | 607
1219 | 629
1220 | 608
1221 | 630
1222 | 609
1223 | 631
1224 | 610
1225 | 632
1226 | 611
1227 | 633
1228 | 634
1229 | 1346
1230 | 613
1231 | 635
1232 | 614
1233 | 636
1234 | 615
1235 | 637
1236 | 616
1237 | 638
1238 | 617
1239 | 639
1240 | 618
1241 | 640
1242 | 619
1243 | 641
1244 | 620
1245 | 642
1246 | 621
1247 | 643
1248 | 622
1249 | 644
1250 | 623
1251 | 645
1252 | 624
1253 | 646
1254 | 625
1255 | 647
1256 | 626
1257 | 648
1258 | 627
1259 | 649
1260 | 628
1261 | 650
1262 | 629
1263 | 651
1264 | 630
1265 | 652
1266 | 631
1267 | 653
1268 | 632
1269 | 654
1270 | 633
1271 | 655
1272 | 634
1273 | 656
1274 | 657
1275 | 1350
1276 | 636
1277 | 658
1278 | 637
1279 | 659
1280 | 638
1281 | 660
1282 | 639
1283 | 661
1284 | 640
1285 | 662
1286 | 641
1287 | 663
1288 | 642
1289 | 664
1290 | 643
1291 | 665
1292 | 644
1293 | 666
1294 | 645
1295 | 667
1296 | 646
1297 | 668
1298 | 647
1299 | 669
1300 | 648
1301 | 670
1302 | 649
1303 | 671
1304 | 650
1305 | 672
1306 | 651
1307 | 673
1308 | 652
1309 | 674
1310 | 653
1311 | 675
1312 | 654
1313 | 676
1314 | 655
1315 | 677
1316 | 656
1317 | 678
1318 | 657
1319 | 679
1320 | 680
1321 | 1354
1322 | 659
1323 | 681
1324 | 660
1325 | 682
1326 | 661
1327 | 683
1328 | 662
1329 | 684
1330 | 663
1331 | 685
1332 | 664
1333 | 686
1334 | 665
1335 | 687
1336 | 666
1337 | 688
1338 | 667
1339 | 689
1340 | 668
1341 | 690
1342 | 669
1343 | 691
1344 | 670
1345 | 692
1346 | 671
1347 | 693
1348 | 672
1349 | 694
1350 | 673
1351 | 695
1352 | 674
1353 | 696
1354 | 675
1355 | 697
1356 | 676
1357 | 698
1358 | 677
1359 | 699
1360 | 678
1361 | 700
1362 | 679
1363 | 701
1364 | 680
1365 | 702
1366 | 703
1367 | 1358
1368 | 682
1369 | 704
1370 | 683
1371 | 705
1372 | 684
1373 | 706
1374 | 685
1375 | 707
1376 | 686
1377 | 708
1378 | 687
1379 | 709
1380 | 688
1381 | 710
1382 | 689
1383 | 711
1384 | 690
1385 | 712
1386 | 691
1387 | 713
1388 | 692
1389 | 714
1390 | 693
1391 | 715
1392 | 694
1393 | 716
1394 | 695
1395 | 717
1396 | 696
1397 | 718
1398 | 697
1399 | 719
1400 | 698
1401 | 720
1402 | 699
1403 | 721
1404 | 700
1405 | 722
1406 | 701
1407 | 723
1408 | 702
1409 | 724
1410 | 703
1411 | 725
1412 | 726
1413 | 1362
1414 | 705
1415 | 727
1416 | 706
1417 | 728
1418 | 707
1419 | 729
1420 | 708
1421 | 730
1422 | 709
1423 | 731
1424 | 710
1425 | 732
1426 | 711
1427 | 733
1428 | 712
1429 | 734
1430 | 713
1431 | 735
1432 | 714
1433 | 736
1434 | 715
1435 | 737
1436 | 716
1437 | 738
1438 | 717
1439 | 739
1440 | 718
1441 | 740
1442 | 719
1443 | 741
1444 | 720
1445 | 742
1446 | 721
1447 | 743
1448 | 722
1449 | 744
1450 | 723
1451 | 745
1452 | 724
1453 | 746
1454 | 725
1455 | 747
1456 | 726
1457 | 748
1458 | 749
1459 | 1366
1460 | 728
1461 | 750
1462 | 729
1463 | 751
1464 | 730
1465 | 752
1466 | 731
1467 | 753
1468 | 732
1469 | 754
1470 | 733
1471 | 755
1472 | 734
1473 | 756
1474 | 735
1475 | 757
1476 | 736
1477 | 758
1478 | 737
1479 | 759
1480 | 738
1481 | 760
1482 | 739
1483 | 761
1484 | 740
1485 | 762
1486 | 741
1487 | 763
1488 | 742
1489 | 764
1490 | 743
1491 | 765
1492 | 744
1493 | 766
1494 | 745
1495 | 767
1496 | 746
1497 | 768
1498 | 747
1499 | 769
1500 | 748
1501 | 770
1502 | 749
1503 | 771
1504 | 772
1505 | 1370
1506 | 751
1507 | 773
1508 | 752
1509 | 774
1510 | 753
1511 | 775
1512 | 754
1513 | 776
1514 | 755
1515 | 777
1516 | 756
1517 | 778
1518 | 757
1519 | 779
1520 | 758
1521 | 780
1522 | 759
1523 | 781
1524 | 760
1525 | 782
1526 | 761
1527 | 783
1528 | 762
1529 | 784
1530 | 763
1531 | 785
1532 | 764
1533 | 786
1534 | 765
1535 | 787
1536 | 766
1537 | 788
1538 | 767
1539 | 789
1540 | 768
1541 | 790
1542 | 769
1543 | 791
1544 | 770
1545 | 792
1546 | 771
1547 | 793
1548 | 772
1549 | 794
1550 | 795
1551 | 1374
1552 | 774
1553 | 796
1554 | 775
1555 | 797
1556 | 776
1557 | 798
1558 | 777
1559 | 799
1560 | 778
1561 | 800
1562 | 779
1563 | 801
1564 | 780
1565 | 802
1566 | 781
1567 | 803
1568 | 782
1569 | 804
1570 | 783
1571 | 805
1572 | 784
1573 | 806
1574 | 785
1575 | 807
1576 | 786
1577 | 808
1578 | 787
1579 | 809
1580 | 788
1581 | 810
1582 | 789
1583 | 811
1584 | 790
1585 | 812
1586 | 791
1587 | 813
1588 | 792
1589 | 814
1590 | 793
1591 | 815
1592 | 794
1593 | 816
1594 | 795
1595 | 817
1596 | 818
1597 | 1378
1598 | 797
1599 | 819
1600 | 798
1601 | 820
1602 | 799
1603 | 821
1604 | 800
1605 | 822
1606 | 801
1607 | 823
1608 | 802
1609 | 824
1610 | 803
1611 | 825
1612 | 804
1613 | 826
1614 | 805
1615 | 827
1616 | 806
1617 | 828
1618 | 807
1619 | 829
1620 | 808
1621 | 830
1622 | 809
1623 | 831
1624 | 810
1625 | 832
1626 | 811
1627 | 833
1628 | 812
1629 | 834
1630 | 813
1631 | 835
1632 | 814
1633 | 836
1634 | 815
1635 | 837
1636 | 816
1637 | 838
1638 | 817
1639 | 839
1640 | 818
1641 | 840
1642 | 841
1643 | 1382
1644 | 820
1645 | 842
1646 | 821
1647 | 843
1648 | 822
1649 | 844
1650 | 823
1651 | 845
1652 | 824
1653 | 846
1654 | 825
1655 | 847
1656 | 826
1657 | 848
1658 | 827
1659 | 849
1660 | 828
1661 | 850
1662 | 829
1663 | 851
1664 | 830
1665 | 852
1666 | 831
1667 | 853
1668 | 832
1669 | 854
1670 | 833
1671 | 855
1672 | 834
1673 | 856
1674 | 835
1675 | 857
1676 | 836
1677 | 858
1678 | 837
1679 | 859
1680 | 838
1681 | 860
1682 | 839
1683 | 861
1684 | 840
1685 | 862
1686 | 841
1687 | 863
1688 | 864
1689 | 1386
1690 | 843
1691 | 865
1692 | 844
1693 | 866
1694 | 845
1695 | 867
1696 | 846
1697 | 868
1698 | 847
1699 | 869
1700 | 848
1701 | 870
1702 | 849
1703 | 871
1704 | 850
1705 | 872
1706 | 851
1707 | 873
1708 | 852
1709 | 874
1710 | 853
1711 | 875
1712 | 854
1713 | 876
1714 | 855
1715 | 877
1716 | 856
1717 | 878
1718 | 857
1719 | 879
1720 | 858
1721 | 880
1722 | 859
1723 | 881
1724 | 860
1725 | 882
1726 | 861
1727 | 883
1728 | 862
1729 | 884
1730 | 863
1731 | 885
1732 | 864
1733 | 886
1734 | 887
1735 | 1390
1736 | 866
1737 | 888
1738 | 867
1739 | 889
1740 | 868
1741 | 890
1742 | 869
1743 | 891
1744 | 870
1745 | 892
1746 | 871
1747 | 893
1748 | 872
1749 | 894
1750 | 873
1751 | 895
1752 | 874
1753 | 896
1754 | 875
1755 | 897
1756 | 876
1757 | 898
1758 | 877
1759 | 899
1760 | 878
1761 | 900
1762 | 879
1763 | 901
1764 | 880
1765 | 902
1766 | 881
1767 | 903
1768 | 882
1769 | 904
1770 | 883
1771 | 905
1772 | 884
1773 | 906
1774 | 885
1775 | 907
1776 | 886
1777 | 908
1778 | 887
1779 | 909
1780 | 910
1781 | 1394
1782 | 889
1783 | 911
1784 | 890
1785 | 912
1786 | 891
1787 | 913
1788 | 892
1789 | 914
1790 | 893
1791 | 915
1792 | 894
1793 | 916
1794 | 895
1795 | 917
1796 | 896
1797 | 918
1798 | 897
1799 | 919
1800 | 898
1801 | 920
1802 | 899
1803 | 921
1804 | 900
1805 | 922
1806 | 901
1807 | 923
1808 | 902
1809 | 924
1810 | 903
1811 | 925
1812 | 904
1813 | 926
1814 | 905
1815 | 927
1816 | 906
1817 | 928
1818 | 907
1819 | 929
1820 | 908
1821 | 930
1822 | 909
1823 | 931
1824 | 910
1825 | 932
1826 | 933
1827 | 1398
1828 | 912
1829 | 934
1830 | 913
1831 | 935
1832 | 914
1833 | 936
1834 | 915
1835 | 937
1836 | 916
1837 | 938
1838 | 917
1839 | 939
1840 | 918
1841 | 940
1842 | 919
1843 | 941
1844 | 920
1845 | 942
1846 | 921
1847 | 943
1848 | 922
1849 | 944
1850 | 923
1851 | 945
1852 | 924
1853 | 946
1854 | 925
1855 | 947
1856 | 926
1857 | 948
1858 | 927
1859 | 949
1860 | 928
1861 | 950
1862 | 929
1863 | 951
1864 | 930
1865 | 952
1866 | 931
1867 | 953
1868 | 932
1869 | 954
1870 | 933
1871 | 955
1872 | 956
1873 | 1402
1874 | 935
1875 | 957
1876 | 936
1877 | 958
1878 | 937
1879 | 959
1880 | 938
1881 | 960
1882 | 939
1883 | 961
1884 | 940
1885 | 962
1886 | 941
1887 | 963
1888 | 942
1889 | 964
1890 | 943
1891 | 965
1892 | 944
1893 | 966
1894 | 945
1895 | 967
1896 | 946
1897 | 968
1898 | 947
1899 | 969
1900 | 948
1901 | 970
1902 | 949
1903 | 971
1904 | 950
1905 | 972
1906 | 951
1907 | 973
1908 | 952
1909 | 974
1910 | 953
1911 | 975
1912 | 954
1913 | 976
1914 | 955
1915 | 977
1916 | 956
1917 | 978
1918 | 979
1919 | 1406
1920 | 958
1921 | 980
1922 | 959
1923 | 981
1924 | 960
1925 | 982
1926 | 961
1927 | 983
1928 | 962
1929 | 984
1930 | 963
1931 | 985
1932 | 964
1933 | 986
1934 | 965
1935 | 987
1936 | 966
1937 | 988
1938 | 967
1939 | 989
1940 | 968
1941 | 990
1942 | 969
1943 | 991
1944 | 970
1945 | 992
1946 | 971
1947 | 993
1948 | 972
1949 | 994
1950 | 973
1951 | 995
1952 | 974
1953 | 996
1954 | 975
1955 | 997
1956 | 976
1957 | 998
1958 | 977
1959 | 999
1960 | 978
1961 | 1000
1962 | 979
1963 | 1001
1964 | 1002
1965 | 1410
1966 | 981
1967 | 1003
1968 | 982
1969 | 1004
1970 | 983
1971 | 1005
1972 | 984
1973 | 1006
1974 | 985
1975 | 1007
1976 | 986
1977 | 1008
1978 | 987
1979 | 1009
1980 | 988
1981 | 1010
1982 | 989
1983 | 1011
1984 | 990
1985 | 1012
1986 | 991
1987 | 1013
1988 | 992
1989 | 1014
1990 | 993
1991 | 1015
1992 | 994
1993 | 1016
1994 | 995
1995 | 1017
1996 | 996
1997 | 1018
1998 | 997
1999 | 1019
2000 | 998
2001 | 1020
2002 | 999
2003 | 1021
2004 | 1000
2005 | 1022
2006 | 1001
2007 | 1023
2008 | 1002
2009 | 1024
2010 | 1025
2011 | 1414
2012 | 1004
2013 | 1026
2014 | 1005
2015 | 1027
2016 | 1006
2017 | 1028
2018 | 1007
2019 | 1029
2020 | 1008
2021 | 1030
2022 | 1009
2023 | 1031
2024 | 1010
2025 | 1032
2026 | 1011
2027 | 1033
2028 | 1012
2029 | 1034
2030 | 1013
2031 | 1035
2032 | 1014
2033 | 1036
2034 | 1015
2035 | 1037
2036 | 1016
2037 | 1038
2038 | 1017
2039 | 1039
2040 | 1018
2041 | 1040
2042 | 1019
2043 | 1041
2044 | 1020
2045 | 1042
2046 | 1021
2047 | 1043
2048 | 1022
2049 | 1044
2050 | 1023
2051 | 1045
2052 | 1024
2053 | 1046
2054 | 1025
2055 | 1047
2056 | 1048
2057 | 1418
2058 | 1027
2059 | 1049
2060 | 1028
2061 | 1050
2062 | 1029
2063 | 1051
2064 | 1030
2065 | 1052
2066 | 1031
2067 | 1053
2068 | 1032
2069 | 1054
2070 | 1033
2071 | 1055
2072 | 1034
2073 | 1056
2074 | 1035
2075 | 1057
2076 | 1036
2077 | 1058
2078 | 1037
2079 | 1059
2080 | 1038
2081 | 1060
2082 | 1039
2083 | 1061
2084 | 1040
2085 | 1062
2086 | 1041
2087 | 1063
2088 | 1042
2089 | 1064
2090 | 1043
2091 | 1065
2092 | 1044
2093 | 1066
2094 | 1045
2095 | 1067
2096 | 1046
2097 | 1068
2098 | 1047
2099 | 1069
2100 | 1048
2101 | 1070
2102 | 1071
2103 | 1422
2104 | 1050
2105 | 1072
2106 | 1051
2107 | 1073
2108 | 1052
2109 | 1074
2110 | 1053
2111 | 1075
2112 | 1054
2113 | 1076
2114 | 1055
2115 | 1077
2116 | 1056
2117 | 1078
2118 | 1057
2119 | 1079
2120 | 1058
2121 | 1080
2122 | 1059
2123 | 1081
2124 | 1060
2125 | 1082
2126 | 1061
2127 | 1083
2128 | 1062
2129 | 1084
2130 | 1063
2131 | 1085
2132 | 1064
2133 | 1086
2134 | 1065
2135 | 1087
2136 | 1066
2137 | 1088
2138 | 1067
2139 | 1089
2140 | 1068
2141 | 1090
2142 | 1069
2143 | 1091
2144 | 1070
2145 | 1092
2146 | 1071
2147 | 1093
2148 | 1094
2149 | 1426
2150 | 1073
2151 | 1095
2152 | 1074
2153 | 1096
2154 | 1075
2155 | 1097
2156 | 1076
2157 | 1098
2158 | 1077
2159 | 1099
2160 | 1078
2161 | 1100
2162 | 1079
2163 | 1101
2164 | 1080
2165 | 1102
2166 | 1081
2167 | 1103
2168 | 1082
2169 | 1104
2170 | 1083
2171 | 1105
2172 | 1084
2173 | 1106
2174 | 1085
2175 | 1107
2176 | 1086
2177 | 1108
2178 | 1087
2179 | 1109
2180 | 1088
2181 | 1110
2182 | 1089
2183 | 1111
2184 | 1090
2185 | 1112
2186 | 1091
2187 | 1113
2188 | 1092
2189 | 1114
2190 | 1093
2191 | 1115
2192 | 1094
2193 | 1116
2194 | 1117
2195 | 1430
2196 | 1096
2197 | 1118
2198 | 1097
2199 | 1119
2200 | 1098
2201 | 1120
2202 | 1099
2203 | 1121
2204 | 1100
2205 | 1122
2206 | 1101
2207 | 1123
2208 | 1102
2209 | 1124
2210 | 1103
2211 | 1125
2212 | 1104
2213 | 1126
2214 | 1105
2215 | 1127
2216 | 1106
2217 | 1128
2218 | 1107
2219 | 1129
2220 | 1108
2221 | 1130
2222 | 1109
2223 | 1131
2224 | 1110
2225 | 1132
2226 | 1111
2227 | 1133
2228 | 1112
2229 | 1134
2230 | 1113
2231 | 1135
2232 | 1114
2233 | 1136
2234 | 1115
2235 | 1137
2236 | 1116
2237 | 1138
2238 | 1117
2239 | 1139
2240 | 1140
2241 | 1434
2242 | 1119
2243 | 1141
2244 | 1120
2245 | 1142
2246 | 1121
2247 | 1143
2248 | 1122
2249 | 1144
2250 | 1123
2251 | 1145
2252 | 1124
2253 | 1146
2254 | 1125
2255 | 1147
2256 | 1126
2257 | 1148
2258 | 1127
2259 | 1149
2260 | 1128
2261 | 1150
2262 | 1129
2263 | 1151
2264 | 1130
2265 | 1152
2266 | 1131
2267 | 1153
2268 | 1132
2269 | 1154
2270 | 1133
2271 | 1155
2272 | 1134
2273 | 1156
2274 | 1135
2275 | 1157
2276 | 1136
2277 | 1158
2278 | 1137
2279 | 1159
2280 | 1138
2281 | 1160
2282 | 1139
2283 | 1161
2284 | 1140
2285 | 1162
2286 | 1163
2287 | 1438
2288 | 1142
2289 | 1164
2290 | 1143
2291 | 1165
2292 | 1144
2293 | 1166
2294 | 1145
2295 | 1167
2296 | 1146
2297 | 1168
2298 | 1147
2299 | 1169
2300 | 1148
2301 | 1170
2302 | 1149
2303 | 1171
2304 | 1150
2305 | 1172
2306 | 1151
2307 | 1173
2308 | 1152
2309 | 1174
2310 | 1153
2311 | 1175
2312 | 1154
2313 | 1176
2314 | 1155
2315 | 1177
2316 | 1156
2317 | 1178
2318 | 1157
2319 | 1179
2320 | 1158
2321 | 1180
2322 | 1159
2323 | 1181
2324 | 1160
2325 | 1182
2326 | 1161
2327 | 1183
2328 | 1162
2329 | 1184
2330 | 1163
2331 | 1185
2332 | 1186
2333 | 1442
2334 | 1165
2335 | 1187
2336 | 1166
2337 | 1188
2338 | 1167
2339 | 1189
2340 | 1168
2341 | 1190
2342 | 1169
2343 | 1191
2344 | 1170
2345 | 1192
2346 | 1171
2347 | 1193
2348 | 1172
2349 | 1194
2350 | 1173
2351 | 1195
2352 | 1174
2353 | 1196
2354 | 1175
2355 | 1197
2356 | 1176
2357 | 1198
2358 | 1177
2359 | 1199
2360 | 1178
2361 | 1200
2362 | 1179
2363 | 1201
2364 | 1180
2365 | 1202
2366 | 1181
2367 | 1203
2368 | 1182
2369 | 1204
2370 | 1183
2371 | 1205
2372 | 1184
2373 | 1206
2374 | 1185
2375 | 1207
2376 | 1186
2377 | 1208
2378 | 1209
2379 | 1446
2380 | 1188
2381 | 1210
2382 | 1189
2383 | 1211
2384 | 1190
2385 | 1212
2386 | 1191
2387 | 1213
2388 | 1192
2389 | 1214
2390 | 1193
2391 | 1215
2392 | 1194
2393 | 1216
2394 | 1195
2395 | 1217
2396 | 1196
2397 | 1218
2398 | 1197
2399 | 1219
2400 | 1198
2401 | 1220
2402 | 1199
2403 | 1221
2404 | 1200
2405 | 1222
2406 | 1201
2407 | 1223
2408 | 1202
2409 | 1224
2410 | 1203
2411 | 1225
2412 | 1204
2413 | 1226
2414 | 1205
2415 | 1227
2416 | 1206
2417 | 1228
2418 | 1207
2419 | 1229
2420 | 1208
2421 | 1230
2422 | 1209
2423 | 1231
2424 | 1232
2425 | 1450
2426 | 1211
2427 | 1233
2428 | 1212
2429 | 1234
2430 | 1213
2431 | 1235
2432 | 1214
2433 | 1236
2434 | 1215
2435 | 1237
2436 | 1216
2437 | 1238
2438 | 1217
2439 | 1239
2440 | 1218
2441 | 1240
2442 | 1219
2443 | 1241
2444 | 1220
2445 | 1242
2446 | 1221
2447 | 1243
2448 | 1222
2449 | 1244
2450 | 1223
2451 | 1245
2452 | 1224
2453 | 1246
2454 | 1225
2455 | 1247
2456 | 1226
2457 | 1248
2458 | 1227
2459 | 1249
2460 | 1228
2461 | 1250
2462 | 1229
2463 | 1251
2464 | 1230
2465 | 1252
2466 | 1231
2467 | 1253
2468 | 1232
2469 | 1254
2470 | 1255
2471 | 1454
2472 | 1234
2473 | 1256
2474 | 1235
2475 | 1257
2476 | 1236
2477 | 1258
2478 | 1237
2479 | 1259
2480 | 1238
2481 | 1260
2482 | 1239
2483 | 1261
2484 | 1240
2485 | 1262
2486 | 1241
2487 | 1263
2488 | 1242
2489 | 1264
2490 | 1243
2491 | 1265
2492 | 1244
2493 | 1266
2494 | 1245
2495 | 1267
2496 | 1246
2497 | 1268
2498 | 1247
2499 | 1269
2500 | 1248
2501 | 1270
2502 | 1249
2503 | 1271
2504 | 1250
2505 | 1272
2506 | 1251
2507 | 1273
2508 | 1252
2509 | 1274
2510 | 1253
2511 | 1275
2512 | 1254
2513 | 1276
2514 | 1255
2515 | 1277
2516 | 1278
2517 | 1458
2518 | 1257
2519 | 1279
2520 | 1258
2521 | 1280
2522 | 1259
2523 | 1281
2524 | 1260
2525 | 1282
2526 | 1261
2527 | 1283
2528 | 1262
2529 | 1284
2530 | 1263
2531 | 1285
2532 | 1264
2533 | 1286
2534 | 1265
2535 | 1287
2536 | 1266
2537 | 1288
2538 | 1267
2539 | 1289
2540 | 1268
2541 | 1290
2542 | 1269
2543 | 1291
2544 | 1270
2545 | 1292
2546 | 1271
2547 | 1293
2548 | 1272
2549 | 1294
2550 | 1273
2551 | 1295
2552 | 1274
2553 | 1296
2554 | 1275
2555 | 1297
2556 | 1276
2557 | 1298
2558 | 1277
2559 | 1299
2560 | 1278
2561 | 1300
2562 | 1301
2563 | 1462
2564 | 1280
2565 | 1281
2566 | 1282
2567 | 1283
2568 | 1284
2569 | 1285
2570 | 1286
2571 | 1287
2572 | 1288
2573 | 1289
2574 | 1290
2575 | 1291
2576 | 1292
2577 | 1293
2578 | 1294
2579 | 1295
2580 | 1296
2581 | 1297
2582 | 1298
2583 | 1299
2584 | 1300
2585 | 1301
2586 | 1466
2587 | 1303
2588 | 1306
2589 | 1304
2590 | 1307
2591 | 1305
2592 | 1308
2593 | 1309
2594 | 1470
2595 | 1307
2596 | 1310
2597 | 1308
2598 | 1311
2599 | 1309
2600 | 1312
2601 | 1313
2602 | 1489
2603 | 1311
2604 | 1314
2605 | 1312
2606 | 1315
2607 | 1313
2608 | 1316
2609 | 1317
2610 | 1508
2611 | 1315
2612 | 1318
2613 | 1316
2614 | 1319
2615 | 1317
2616 | 1320
2617 | 1321
2618 | 1527
2619 | 1319
2620 | 1322
2621 | 1320
2622 | 1323
2623 | 1321
2624 | 1324
2625 | 1325
2626 | 1546
2627 | 1323
2628 | 1326
2629 | 1324
2630 | 1327
2631 | 1325
2632 | 1328
2633 | 1329
2634 | 1565
2635 | 1327
2636 | 1330
2637 | 1328
2638 | 1331
2639 | 1329
2640 | 1332
2641 | 1333
2642 | 1584
2643 | 1331
2644 | 1334
2645 | 1332
2646 | 1335
2647 | 1333
2648 | 1336
2649 | 1337
2650 | 1603
2651 | 1335
2652 | 1338
2653 | 1336
2654 | 1339
2655 | 1337
2656 | 1340
2657 | 1341
2658 | 1622
2659 | 1339
2660 | 1342
2661 | 1340
2662 | 1343
2663 | 1341
2664 | 1344
2665 | 1345
2666 | 1641
2667 | 1343
2668 | 1346
2669 | 1344
2670 | 1347
2671 | 1345
2672 | 1348
2673 | 1349
2674 | 1660
2675 | 1347
2676 | 1350
2677 | 1348
2678 | 1351
2679 | 1349
2680 | 1352
2681 | 1353
2682 | 1679
2683 | 1351
2684 | 1354
2685 | 1352
2686 | 1355
2687 | 1353
2688 | 1356
2689 | 1357
2690 | 1698
2691 | 1355
2692 | 1358
2693 | 1356
2694 | 1359
2695 | 1357
2696 | 1360
2697 | 1361
2698 | 1717
2699 | 1359
2700 | 1362
2701 | 1360
2702 | 1363
2703 | 1361
2704 | 1364
2705 | 1365
2706 | 1736
2707 | 1363
2708 | 1366
2709 | 1364
2710 | 1367
2711 | 1365
2712 | 1368
2713 | 1369
2714 | 1755
2715 | 1367
2716 | 1370
2717 | 1368
2718 | 1371
2719 | 1369
2720 | 1372
2721 | 1373
2722 | 1774
2723 | 1371
2724 | 1374
2725 | 1372
2726 | 1375
2727 | 1373
2728 | 1376
2729 | 1377
2730 | 1793
2731 | 1375
2732 | 1378
2733 | 1376
2734 | 1379
2735 | 1377
2736 | 1380
2737 | 1381
2738 | 1812
2739 | 1379
2740 | 1382
2741 | 1380
2742 | 1383
2743 | 1381
2744 | 1384
2745 | 1385
2746 | 1831
2747 | 1383
2748 | 1386
2749 | 1384
2750 | 1387
2751 | 1385
2752 | 1388
2753 | 1389
2754 | 1850
2755 | 1387
2756 | 1390
2757 | 1388
2758 | 1391
2759 | 1389
2760 | 1392
2761 | 1393
2762 | 1869
2763 | 1391
2764 | 1394
2765 | 1392
2766 | 1395
2767 | 1393
2768 | 1396
2769 | 1397
2770 | 1888
2771 | 1395
2772 | 1398
2773 | 1396
2774 | 1399
2775 | 1397
2776 | 1400
2777 | 1401
2778 | 1907
2779 | 1399
2780 | 1402
2781 | 1400
2782 | 1403
2783 | 1401
2784 | 1404
2785 | 1405
2786 | 1926
2787 | 1403
2788 | 1406
2789 | 1404
2790 | 1407
2791 | 1405
2792 | 1408
2793 | 1409
2794 | 1945
2795 | 1407
2796 | 1410
2797 | 1408
2798 | 1411
2799 | 1409
2800 | 1412
2801 | 1413
2802 | 1964
2803 | 1411
2804 | 1414
2805 | 1412
2806 | 1415
2807 | 1413
2808 | 1416
2809 | 1417
2810 | 1983
2811 | 1415
2812 | 1418
2813 | 1416
2814 | 1419
2815 | 1417
2816 | 1420
2817 | 1421
2818 | 2002
2819 | 1419
2820 | 1422
2821 | 1420
2822 | 1423
2823 | 1421
2824 | 1424
2825 | 1425
2826 | 2021
2827 | 1423
2828 | 1426
2829 | 1424
2830 | 1427
2831 | 1425
2832 | 1428
2833 | 1429
2834 | 2040
2835 | 1427
2836 | 1430
2837 | 1428
2838 | 1431
2839 | 1429
2840 | 1432
2841 | 1433
2842 | 2059
2843 | 1431
2844 | 1434
2845 | 1432
2846 | 1435
2847 | 1433
2848 | 1436
2849 | 1437
2850 | 2078
2851 | 1435
2852 | 1438
2853 | 1436
2854 | 1439
2855 | 1437
2856 | 1440
2857 | 1441
2858 | 2097
2859 | 1439
2860 | 1442
2861 | 1440
2862 | 1443
2863 | 1441
2864 | 1444
2865 | 1445
2866 | 2116
2867 | 1443
2868 | 1446
2869 | 1444
2870 | 1447
2871 | 1445
2872 | 1448
2873 | 1449
2874 | 2135
2875 | 1447
2876 | 1450
2877 | 1448
2878 | 1451
2879 | 1449
2880 | 1452
2881 | 1453
2882 | 2154
2883 | 1451
2884 | 1454
2885 | 1452
2886 | 1455
2887 | 1453
2888 | 1456
2889 | 1457
2890 | 2173
2891 | 1455
2892 | 1458
2893 | 1456
2894 | 1459
2895 | 1457
2896 | 1460
2897 | 1461
2898 | 2192
2899 | 1459
2900 | 1462
2901 | 1460
2902 | 1463
2903 | 1461
2904 | 1464
2905 | 1465
2906 | 2211
2907 | 1463
2908 | 1466
2909 | 1464
2910 | 1467
2911 | 1465
2912 | 1468
2913 | 1469
2914 | 2230
2915 | 1467
2916 | 1468
2917 | 1469
2918 | 2249
2919 | 1471
2920 | 1489
2921 | 1472
2922 | 1490
2923 | 1473
2924 | 1491
2925 | 1474
2926 | 1492
2927 | 1475
2928 | 1493
2929 | 1476
2930 | 1494
2931 | 1477
2932 | 1495
2933 | 1478
2934 | 1496
2935 | 1479
2936 | 1497
2937 | 1480
2938 | 1498
2939 | 1481
2940 | 1499
2941 | 1482
2942 | 1500
2943 | 1483
2944 | 1501
2945 | 1484
2946 | 1502
2947 | 1485
2948 | 1503
2949 | 1486
2950 | 1504
2951 | 1487
2952 | 1505
2953 | 1488
2954 | 1506
2955 | 1507
2956 | 1490
2957 | 1508
2958 | 1491
2959 | 1509
2960 | 1492
2961 | 1510
2962 | 1493
2963 | 1511
2964 | 1494
2965 | 1512
2966 | 1495
2967 | 1513
2968 | 1496
2969 | 1514
2970 | 1497
2971 | 1515
2972 | 1498
2973 | 1516
2974 | 1499
2975 | 1517
2976 | 1500
2977 | 1518
2978 | 1501
2979 | 1519
2980 | 1502
2981 | 1520
2982 | 1503
2983 | 1521
2984 | 1504
2985 | 1522
2986 | 1505
2987 | 1523
2988 | 1506
2989 | 1524
2990 | 1507
2991 | 1525
2992 | 1526
2993 | 1509
2994 | 1527
2995 | 1510
2996 | 1528
2997 | 1511
2998 | 1529
2999 | 1512
3000 | 1530
3001 | 1513
3002 | 1531
3003 | 1514
3004 | 1532
3005 | 1515
3006 | 1533
3007 | 1516
3008 | 1534
3009 | 1517
3010 | 1535
3011 | 1518
3012 | 1536
3013 | 1519
3014 | 1537
3015 | 1520
3016 | 1538
3017 | 1521
3018 | 1539
3019 | 1522
3020 | 1540
3021 | 1523
3022 | 1541
3023 | 1524
3024 | 1542
3025 | 1525
3026 | 1543
3027 | 1526
3028 | 1544
3029 | 1545
3030 | 1528
3031 | 1546
3032 | 1529
3033 | 1547
3034 | 1530
3035 | 1548
3036 | 1531
3037 | 1549
3038 | 1532
3039 | 1550
3040 | 1533
3041 | 1551
3042 | 1534
3043 | 1552
3044 | 1535
3045 | 1553
3046 | 1536
3047 | 1554
3048 | 1537
3049 | 1555
3050 | 1538
3051 | 1556
3052 | 1539
3053 | 1557
3054 | 1540
3055 | 1558
3056 | 1541
3057 | 1559
3058 | 1542
3059 | 1560
3060 | 1543
3061 | 1561
3062 | 1544
3063 | 1562
3064 | 1545
3065 | 1563
3066 | 1564
3067 | 1547
3068 | 1565
3069 | 1548
3070 | 1566
3071 | 1549
3072 | 1567
3073 | 1550
3074 | 1568
3075 | 1551
3076 | 1569
3077 | 1552
3078 | 1570
3079 | 1553
3080 | 1571
3081 | 1554
3082 | 1572
3083 | 1555
3084 | 1573
3085 | 1556
3086 | 1574
3087 | 1557
3088 | 1575
3089 | 1558
3090 | 1576
3091 | 1559
3092 | 1577
3093 | 1560
3094 | 1578
3095 | 1561
3096 | 1579
3097 | 1562
3098 | 1580
3099 | 1563
3100 | 1581
3101 | 1564
3102 | 1582
3103 | 1583
3104 | 1566
3105 | 1584
3106 | 1567
3107 | 1585
3108 | 1568
3109 | 1586
3110 | 1569
3111 | 1587
3112 | 1570
3113 | 1588
3114 | 1571
3115 | 1589
3116 | 1572
3117 | 1590
3118 | 1573
3119 | 1591
3120 | 1574
3121 | 1592
3122 | 1575
3123 | 1593
3124 | 1576
3125 | 1594
3126 | 1577
3127 | 1595
3128 | 1578
3129 | 1596
3130 | 1579
3131 | 1597
3132 | 1580
3133 | 1598
3134 | 1581
3135 | 1599
3136 | 1582
3137 | 1600
3138 | 1583
3139 | 1601
3140 | 1602
3141 | 1585
3142 | 1603
3143 | 1586
3144 | 1604
3145 | 1587
3146 | 1605
3147 | 1588
3148 | 1606
3149 | 1589
3150 | 1607
3151 | 1590
3152 | 1608
3153 | 1591
3154 | 1609
3155 | 1592
3156 | 1610
3157 | 1593
3158 | 1611
3159 | 1594
3160 | 1612
3161 | 1595
3162 | 1613
3163 | 1596
3164 | 1614
3165 | 1597
3166 | 1615
3167 | 1598
3168 | 1616
3169 | 1599
3170 | 1617
3171 | 1600
3172 | 1618
3173 | 1601
3174 | 1619
3175 | 1602
3176 | 1620
3177 | 1621
3178 | 1604
3179 | 1622
3180 | 1605
3181 | 1623
3182 | 1606
3183 | 1624
3184 | 1607
3185 | 1625
3186 | 1608
3187 | 1626
3188 | 1609
3189 | 1627
3190 | 1610
3191 | 1628
3192 | 1611
3193 | 1629
3194 | 1612
3195 | 1630
3196 | 1613
3197 | 1631
3198 | 1614
3199 | 1632
3200 | 1615
3201 | 1633
3202 | 1616
3203 | 1634
3204 | 1617
3205 | 1635
3206 | 1618
3207 | 1636
3208 | 1619
3209 | 1637
3210 | 1620
3211 | 1638
3212 | 1621
3213 | 1639
3214 | 1640
3215 | 1623
3216 | 1641
3217 | 1624
3218 | 1642
3219 | 1625
3220 | 1643
3221 | 1626
3222 | 1644
3223 | 1627
3224 | 1645
3225 | 1628
3226 | 1646
3227 | 1629
3228 | 1647
3229 | 1630
3230 | 1648
3231 | 1631
3232 | 1649
3233 | 1632
3234 | 1650
3235 | 1633
3236 | 1651
3237 | 1634
3238 | 1652
3239 | 1635
3240 | 1653
3241 | 1636
3242 | 1654
3243 | 1637
3244 | 1655
3245 | 1638
3246 | 1656
3247 | 1639
3248 | 1657
3249 | 1640
3250 | 1658
3251 | 1659
3252 | 1642
3253 | 1660
3254 | 1643
3255 | 1661
3256 | 1644
3257 | 1662
3258 | 1645
3259 | 1663
3260 | 1646
3261 | 1664
3262 | 1647
3263 | 1665
3264 | 1648
3265 | 1666
3266 | 1649
3267 | 1667
3268 | 1650
3269 | 1668
3270 | 1651
3271 | 1669
3272 | 1652
3273 | 1670
3274 | 1653
3275 | 1671
3276 | 1654
3277 | 1672
3278 | 1655
3279 | 1673
3280 | 1656
3281 | 1674
3282 | 1657
3283 | 1675
3284 | 1658
3285 | 1676
3286 | 1659
3287 | 1677
3288 | 1678
3289 | 1661
3290 | 1679
3291 | 1662
3292 | 1680
3293 | 1663
3294 | 1681
3295 | 1664
3296 | 1682
3297 | 1665
3298 | 1683
3299 | 1666
3300 | 1684
3301 | 1667
3302 | 1685
3303 | 1668
3304 | 1686
3305 | 1669
3306 | 1687
3307 | 1670
3308 | 1688
3309 | 1671
3310 | 1689
3311 | 1672
3312 | 1690
3313 | 1673
3314 | 1691
3315 | 1674
3316 | 1692
3317 | 1675
3318 | 1693
3319 | 1676
3320 | 1694
3321 | 1677
3322 | 1695
3323 | 1678
3324 | 1696
3325 | 1697
3326 | 1680
3327 | 1698
3328 | 1681
3329 | 1699
3330 | 1682
3331 | 1700
3332 | 1683
3333 | 1701
3334 | 1684
3335 | 1702
3336 | 1685
3337 | 1703
3338 | 1686
3339 | 1704
3340 | 1687
3341 | 1705
3342 | 1688
3343 | 1706
3344 | 1689
3345 | 1707
3346 | 1690
3347 | 1708
3348 | 1691
3349 | 1709
3350 | 1692
3351 | 1710
3352 | 1693
3353 | 1711
3354 | 1694
3355 | 1712
3356 | 1695
3357 | 1713
3358 | 1696
3359 | 1714
3360 | 1697
3361 | 1715
3362 | 1716
3363 | 1699
3364 | 1717
3365 | 1700
3366 | 1718
3367 | 1701
3368 | 1719
3369 | 1702
3370 | 1720
3371 | 1703
3372 | 1721
3373 | 1704
3374 | 1722
3375 | 1705
3376 | 1723
3377 | 1706
3378 | 1724
3379 | 1707
3380 | 1725
3381 | 1708
3382 | 1726
3383 | 1709
3384 | 1727
3385 | 1710
3386 | 1728
3387 | 1711
3388 | 1729
3389 | 1712
3390 | 1730
3391 | 1713
3392 | 1731
3393 | 1714
3394 | 1732
3395 | 1715
3396 | 1733
3397 | 1716
3398 | 1734
3399 | 1735
3400 | 1718
3401 | 1736
3402 | 1719
3403 | 1737
3404 | 1720
3405 | 1738
3406 | 1721
3407 | 1739
3408 | 1722
3409 | 1740
3410 | 1723
3411 | 1741
3412 | 1724
3413 | 1742
3414 | 1725
3415 | 1743
3416 | 1726
3417 | 1744
3418 | 1727
3419 | 1745
3420 | 1728
3421 | 1746
3422 | 1729
3423 | 1747
3424 | 1730
3425 | 1748
3426 | 1731
3427 | 1749
3428 | 1732
3429 | 1750
3430 | 1733
3431 | 1751
3432 | 1734
3433 | 1752
3434 | 1735
3435 | 1753
3436 | 1754
3437 | 1737
3438 | 1755
3439 | 1738
3440 | 1756
3441 | 1739
3442 | 1757
3443 | 1740
3444 | 1758
3445 | 1741
3446 | 1759
3447 | 1742
3448 | 1760
3449 | 1743
3450 | 1761
3451 | 1744
3452 | 1762
3453 | 1745
3454 | 1763
3455 | 1746
3456 | 1764
3457 | 1747
3458 | 1765
3459 | 1748
3460 | 1766
3461 | 1749
3462 | 1767
3463 | 1750
3464 | 1768
3465 | 1751
3466 | 1769
3467 | 1752
3468 | 1770
3469 | 1753
3470 | 1771
3471 | 1754
3472 | 1772
3473 | 1773
3474 | 1756
3475 | 1774
3476 | 1757
3477 | 1775
3478 | 1758
3479 | 1776
3480 | 1759
3481 | 1777
3482 | 1760
3483 | 1778
3484 | 1761
3485 | 1779
3486 | 1762
3487 | 1780
3488 | 1763
3489 | 1781
3490 | 1764
3491 | 1782
3492 | 1765
3493 | 1783
3494 | 1766
3495 | 1784
3496 | 1767
3497 | 1785
3498 | 1768
3499 | 1786
3500 | 1769
3501 | 1787
3502 | 1770
3503 | 1788
3504 | 1771
3505 | 1789
3506 | 1772
3507 | 1790
3508 | 1773
3509 | 1791
3510 | 1792
3511 | 1775
3512 | 1793
3513 | 1776
3514 | 1794
3515 | 1777
3516 | 1795
3517 | 1778
3518 | 1796
3519 | 1779
3520 | 1797
3521 | 1780
3522 | 1798
3523 | 1781
3524 | 1799
3525 | 1782
3526 | 1800
3527 | 1783
3528 | 1801
3529 | 1784
3530 | 1802
3531 | 1785
3532 | 1803
3533 | 1786
3534 | 1804
3535 | 1787
3536 | 1805
3537 | 1788
3538 | 1806
3539 | 1789
3540 | 1807
3541 | 1790
3542 | 1808
3543 | 1791
3544 | 1809
3545 | 1792
3546 | 1810
3547 | 1811
3548 | 1794
3549 | 1812
3550 | 1795
3551 | 1813
3552 | 1796
3553 | 1814
3554 | 1797
3555 | 1815
3556 | 1798
3557 | 1816
3558 | 1799
3559 | 1817
3560 | 1800
3561 | 1818
3562 | 1801
3563 | 1819
3564 | 1802
3565 | 1820
3566 | 1803
3567 | 1821
3568 | 1804
3569 | 1822
3570 | 1805
3571 | 1823
3572 | 1806
3573 | 1824
3574 | 1807
3575 | 1825
3576 | 1808
3577 | 1826
3578 | 1809
3579 | 1827
3580 | 1810
3581 | 1828
3582 | 1811
3583 | 1829
3584 | 1830
3585 | 1813
3586 | 1831
3587 | 1814
3588 | 1832
3589 | 1815
3590 | 1833
3591 | 1816
3592 | 1834
3593 | 1817
3594 | 1835
3595 | 1818
3596 | 1836
3597 | 1819
3598 | 1837
3599 | 1820
3600 | 1838
3601 | 1821
3602 | 1839
3603 | 1822
3604 | 1840
3605 | 1823
3606 | 1841
3607 | 1824
3608 | 1842
3609 | 1825
3610 | 1843
3611 | 1826
3612 | 1844
3613 | 1827
3614 | 1845
3615 | 1828
3616 | 1846
3617 | 1829
3618 | 1847
3619 | 1830
3620 | 1848
3621 | 1849
3622 | 1832
3623 | 1850
3624 | 1833
3625 | 1851
3626 | 1834
3627 | 1852
3628 | 1835
3629 | 1853
3630 | 1836
3631 | 1854
3632 | 1837
3633 | 1855
3634 | 1838
3635 | 1856
3636 | 1839
3637 | 1857
3638 | 1840
3639 | 1858
3640 | 1841
3641 | 1859
3642 | 1842
3643 | 1860
3644 | 1843
3645 | 1861
3646 | 1844
3647 | 1862
3648 | 1845
3649 | 1863
3650 | 1846
3651 | 1864
3652 | 1847
3653 | 1865
3654 | 1848
3655 | 1866
3656 | 1849
3657 | 1867
3658 | 1868
3659 | 1851
3660 | 1869
3661 | 1852
3662 | 1870
3663 | 1853
3664 | 1871
3665 | 1854
3666 | 1872
3667 | 1855
3668 | 1873
3669 | 1856
3670 | 1874
3671 | 1857
3672 | 1875
3673 | 1858
3674 | 1876
3675 | 1859
3676 | 1877
3677 | 1860
3678 | 1878
3679 | 1861
3680 | 1879
3681 | 1862
3682 | 1880
3683 | 1863
3684 | 1881
3685 | 1864
3686 | 1882
3687 | 1865
3688 | 1883
3689 | 1866
3690 | 1884
3691 | 1867
3692 | 1885
3693 | 1868
3694 | 1886
3695 | 1887
3696 | 1870
3697 | 1888
3698 | 1871
3699 | 1889
3700 | 1872
3701 | 1890
3702 | 1873
3703 | 1891
3704 | 1874
3705 | 1892
3706 | 1875
3707 | 1893
3708 | 1876
3709 | 1894
3710 | 1877
3711 | 1895
3712 | 1878
3713 | 1896
3714 | 1879
3715 | 1897
3716 | 1880
3717 | 1898
3718 | 1881
3719 | 1899
3720 | 1882
3721 | 1900
3722 | 1883
3723 | 1901
3724 | 1884
3725 | 1902
3726 | 1885
3727 | 1903
3728 | 1886
3729 | 1904
3730 | 1887
3731 | 1905
3732 | 1906
3733 | 1889
3734 | 1907
3735 | 1890
3736 | 1908
3737 | 1891
3738 | 1909
3739 | 1892
3740 | 1910
3741 | 1893
3742 | 1911
3743 | 1894
3744 | 1912
3745 | 1895
3746 | 1913
3747 | 1896
3748 | 1914
3749 | 1897
3750 | 1915
3751 | 1898
3752 | 1916
3753 | 1899
3754 | 1917
3755 | 1900
3756 | 1918
3757 | 1901
3758 | 1919
3759 | 1902
3760 | 1920
3761 | 1903
3762 | 1921
3763 | 1904
3764 | 1922
3765 | 1905
3766 | 1923
3767 | 1906
3768 | 1924
3769 | 1925
3770 | 1908
3771 | 1926
3772 | 1909
3773 | 1927
3774 | 1910
3775 | 1928
3776 | 1911
3777 | 1929
3778 | 1912
3779 | 1930
3780 | 1913
3781 | 1931
3782 | 1914
3783 | 1932
3784 | 1915
3785 | 1933
3786 | 1916
3787 | 1934
3788 | 1917
3789 | 1935
3790 | 1918
3791 | 1936
3792 | 1919
3793 | 1937
3794 | 1920
3795 | 1938
3796 | 1921
3797 | 1939
3798 | 1922
3799 | 1940
3800 | 1923
3801 | 1941
3802 | 1924
3803 | 1942
3804 | 1925
3805 | 1943
3806 | 1944
3807 | 1927
3808 | 1945
3809 | 1928
3810 | 1946
3811 | 1929
3812 | 1947
3813 | 1930
3814 | 1948
3815 | 1931
3816 | 1949
3817 | 1932
3818 | 1950
3819 | 1933
3820 | 1951
3821 | 1934
3822 | 1952
3823 | 1935
3824 | 1953
3825 | 1936
3826 | 1954
3827 | 1937
3828 | 1955
3829 | 1938
3830 | 1956
3831 | 1939
3832 | 1957
3833 | 1940
3834 | 1958
3835 | 1941
3836 | 1959
3837 | 1942
3838 | 1960
3839 | 1943
3840 | 1961
3841 | 1944
3842 | 1962
3843 | 1963
3844 | 1946
3845 | 1964
3846 | 1947
3847 | 1965
3848 | 1948
3849 | 1966
3850 | 1949
3851 | 1967
3852 | 1950
3853 | 1968
3854 | 1951
3855 | 1969
3856 | 1952
3857 | 1970
3858 | 1953
3859 | 1971
3860 | 1954
3861 | 1972
3862 | 1955
3863 | 1973
3864 | 1956
3865 | 1974
3866 | 1957
3867 | 1975
3868 | 1958
3869 | 1976
3870 | 1959
3871 | 1977
3872 | 1960
3873 | 1978
3874 | 1961
3875 | 1979
3876 | 1962
3877 | 1980
3878 | 1963
3879 | 1981
3880 | 1982
3881 | 1965
3882 | 1983
3883 | 1966
3884 | 1984
3885 | 1967
3886 | 1985
3887 | 1968
3888 | 1986
3889 | 1969
3890 | 1987
3891 | 1970
3892 | 1988
3893 | 1971
3894 | 1989
3895 | 1972
3896 | 1990
3897 | 1973
3898 | 1991
3899 | 1974
3900 | 1992
3901 | 1975
3902 | 1993
3903 | 1976
3904 | 1994
3905 | 1977
3906 | 1995
3907 | 1978
3908 | 1996
3909 | 1979
3910 | 1997
3911 | 1980
3912 | 1998
3913 | 1981
3914 | 1999
3915 | 1982
3916 | 2000
3917 | 2001
3918 | 1984
3919 | 2002
3920 | 1985
3921 | 2003
3922 | 1986
3923 | 2004
3924 | 1987
3925 | 2005
3926 | 1988
3927 | 2006
3928 | 1989
3929 | 2007
3930 | 1990
3931 | 2008
3932 | 1991
3933 | 2009
3934 | 1992
3935 | 2010
3936 | 1993
3937 | 2011
3938 | 1994
3939 | 2012
3940 | 1995
3941 | 2013
3942 | 1996
3943 | 2014
3944 | 1997
3945 | 2015
3946 | 1998
3947 | 2016
3948 | 1999
3949 | 2017
3950 | 2000
3951 | 2018
3952 | 2001
3953 | 2019
3954 | 2020
3955 | 2003
3956 | 2021
3957 | 2004
3958 | 2022
3959 | 2005
3960 | 2023
3961 | 2006
3962 | 2024
3963 | 2007
3964 | 2025
3965 | 2008
3966 | 2026
3967 | 2009
3968 | 2027
3969 | 2010
3970 | 2028
3971 | 2011
3972 | 2029
3973 | 2012
3974 | 2030
3975 | 2013
3976 | 2031
3977 | 2014
3978 | 2032
3979 | 2015
3980 | 2033
3981 | 2016
3982 | 2034
3983 | 2017
3984 | 2035
3985 | 2018
3986 | 2036
3987 | 2019
3988 | 2037
3989 | 2020
3990 | 2038
3991 | 2039
3992 | 2022
3993 | 2040
3994 | 2023
3995 | 2041
3996 | 2024
3997 | 2042
3998 | 2025
3999 | 2043
4000 | 2026
4001 | 2044
4002 | 2027
4003 | 2045
4004 | 2028
4005 | 2046
4006 | 2029
4007 | 2047
4008 | 2030
4009 | 2048
4010 | 2031
4011 | 2049
4012 | 2032
4013 | 2050
4014 | 2033
4015 | 2051
4016 | 2034
4017 | 2052
4018 | 2035
4019 | 2053
4020 | 2036
4021 | 2054
4022 | 2037
4023 | 2055
4024 | 2038
4025 | 2056
4026 | 2039
4027 | 2057
4028 | 2058
4029 | 2041
4030 | 2059
4031 | 2042
4032 | 2060
4033 | 2043
4034 | 2061
4035 | 2044
4036 | 2062
4037 | 2045
4038 | 2063
4039 | 2046
4040 | 2064
4041 | 2047
4042 | 2065
4043 | 2048
4044 | 2066
4045 | 2049
4046 | 2067
4047 | 2050
4048 | 2068
4049 | 2051
4050 | 2069
4051 | 2052
4052 | 2070
4053 | 2053
4054 | 2071
4055 | 2054
4056 | 2072
4057 | 2055
4058 | 2073
4059 | 2056
4060 | 2074
4061 | 2057
4062 | 2075
4063 | 2058
4064 | 2076
4065 | 2077
4066 | 2060
4067 | 2078
4068 | 2061
4069 | 2079
4070 | 2062
4071 | 2080
4072 | 2063
4073 | 2081
4074 | 2064
4075 | 2082
4076 | 2065
4077 | 2083
4078 | 2066
4079 | 2084
4080 | 2067
4081 | 2085
4082 | 2068
4083 | 2086
4084 | 2069
4085 | 2087
4086 | 2070
4087 | 2088
4088 | 2071
4089 | 2089
4090 | 2072
4091 | 2090
4092 | 2073
4093 | 2091
4094 | 2074
4095 | 2092
4096 | 2075
4097 | 2093
4098 | 2076
4099 | 2094
4100 | 2077
4101 | 2095
4102 | 2096
4103 | 2079
4104 | 2097
4105 | 2080
4106 | 2098
4107 | 2081
4108 | 2099
4109 | 2082
4110 | 2100
4111 | 2083
4112 | 2101
4113 | 2084
4114 | 2102
4115 | 2085
4116 | 2103
4117 | 2086
4118 | 2104
4119 | 2087
4120 | 2105
4121 | 2088
4122 | 2106
4123 | 2089
4124 | 2107
4125 | 2090
4126 | 2108
4127 | 2091
4128 | 2109
4129 | 2092
4130 | 2110
4131 | 2093
4132 | 2111
4133 | 2094
4134 | 2112
4135 | 2095
4136 | 2113
4137 | 2096
4138 | 2114
4139 | 2115
4140 | 2098
4141 | 2116
4142 | 2099
4143 | 2117
4144 | 2100
4145 | 2118
4146 | 2101
4147 | 2119
4148 | 2102
4149 | 2120
4150 | 2103
4151 | 2121
4152 | 2104
4153 | 2122
4154 | 2105
4155 | 2123
4156 | 2106
4157 | 2124
4158 | 2107
4159 | 2125
4160 | 2108
4161 | 2126
4162 | 2109
4163 | 2127
4164 | 2110
4165 | 2128
4166 | 2111
4167 | 2129
4168 | 2112
4169 | 2130
4170 | 2113
4171 | 2131
4172 | 2114
4173 | 2132
4174 | 2115
4175 | 2133
4176 | 2134
4177 | 2117
4178 | 2135
4179 | 2118
4180 | 2136
4181 | 2119
4182 | 2137
4183 | 2120
4184 | 2138
4185 | 2121
4186 | 2139
4187 | 2122
4188 | 2140
4189 | 2123
4190 | 2141
4191 | 2124
4192 | 2142
4193 | 2125
4194 | 2143
4195 | 2126
4196 | 2144
4197 | 2127
4198 | 2145
4199 | 2128
4200 | 2146
4201 | 2129
4202 | 2147
4203 | 2130
4204 | 2148
4205 | 2131
4206 | 2149
4207 | 2132
4208 | 2150
4209 | 2133
4210 | 2151
4211 | 2134
4212 | 2152
4213 | 2153
4214 | 2136
4215 | 2154
4216 | 2137
4217 | 2155
4218 | 2138
4219 | 2156
4220 | 2139
4221 | 2157
4222 | 2140
4223 | 2158
4224 | 2141
4225 | 2159
4226 | 2142
4227 | 2160
4228 | 2143
4229 | 2161
4230 | 2144
4231 | 2162
4232 | 2145
4233 | 2163
4234 | 2146
4235 | 2164
4236 | 2147
4237 | 2165
4238 | 2148
4239 | 2166
4240 | 2149
4241 | 2167
4242 | 2150
4243 | 2168
4244 | 2151
4245 | 2169
4246 | 2152
4247 | 2170
4248 | 2153
4249 | 2171
4250 | 2172
4251 | 2155
4252 | 2173
4253 | 2156
4254 | 2174
4255 | 2157
4256 | 2175
4257 | 2158
4258 | 2176
4259 | 2159
4260 | 2177
4261 | 2160
4262 | 2178
4263 | 2161
4264 | 2179
4265 | 2162
4266 | 2180
4267 | 2163
4268 | 2181
4269 | 2164
4270 | 2182
4271 | 2165
4272 | 2183
4273 | 2166
4274 | 2184
4275 | 2167
4276 | 2185
4277 | 2168
4278 | 2186
4279 | 2169
4280 | 2187
4281 | 2170
4282 | 2188
4283 | 2171
4284 | 2189
4285 | 2172
4286 | 2190
4287 | 2191
4288 | 2174
4289 | 2192
4290 | 2175
4291 | 2193
4292 | 2176
4293 | 2194
4294 | 2177
4295 | 2195
4296 | 2178
4297 | 2196
4298 | 2179
4299 | 2197
4300 | 2180
4301 | 2198
4302 | 2181
4303 | 2199
4304 | 2182
4305 | 2200
4306 | 2183
4307 | 2201
4308 | 2184
4309 | 2202
4310 | 2185
4311 | 2203
4312 | 2186
4313 | 2204
4314 | 2187
4315 | 2205
4316 | 2188
4317 | 2206
4318 | 2189
4319 | 2207
4320 | 2190
4321 | 2208
4322 | 2191
4323 | 2209
4324 | 2210
4325 | 2193
4326 | 2211
4327 | 2194
4328 | 2212
4329 | 2195
4330 | 2213
4331 | 2196
4332 | 2214
4333 | 2197
4334 | 2215
4335 | 2198
4336 | 2216
4337 | 2199
4338 | 2217
4339 | 2200
4340 | 2218
4341 | 2201
4342 | 2219
4343 | 2202
4344 | 2220
4345 | 2203
4346 | 2221
4347 | 2204
4348 | 2222
4349 | 2205
4350 | 2223
4351 | 2206
4352 | 2224
4353 | 2207
4354 | 2225
4355 | 2208
4356 | 2226
4357 | 2209
4358 | 2227
4359 | 2210
4360 | 2228
4361 | 2229
4362 | 2212
4363 | 2230
4364 | 2213
4365 | 2231
4366 | 2214
4367 | 2232
4368 | 2215
4369 | 2233
4370 | 2216
4371 | 2234
4372 | 2217
4373 | 2235
4374 | 2218
4375 | 2236
4376 | 2219
4377 | 2237
4378 | 2220
4379 | 2238
4380 | 2221
4381 | 2239
4382 | 2222
4383 | 2240
4384 | 2223
4385 | 2241
4386 | 2224
4387 | 2242
4388 | 2225
4389 | 2243
4390 | 2226
4391 | 2244
4392 | 2227
4393 | 2245
4394 | 2228
4395 | 2246
4396 | 2229
4397 | 2247
4398 | 2248
4399 | 2231
4400 | 2249
4401 | 2232
4402 | 2250
4403 | 2233
4404 | 2251
4405 | 2234
4406 | 2252
4407 | 2235
4408 | 2253
4409 | 2236
4410 | 2254
4411 | 2237
4412 | 2255
4413 | 2238
4414 | 2256
4415 | 2239
4416 | 2257
4417 | 2240
4418 | 2258
4419 | 2241
4420 | 2259
4421 | 2242
4422 | 2260
4423 | 2243
4424 | 2261
4425 | 2244
4426 | 2262
4427 | 2245
4428 | 2263
4429 | 2246
4430 | 2264
4431 | 2247
4432 | 2265
4433 | 2248
4434 | 2266
4435 | 2267
4436 | 2250
4437 | 2251
4438 | 2252
4439 | 2253
4440 | 2254
4441 | 2255
4442 | 2256
4443 | 2257
4444 | 2258
4445 | 2259
4446 | 2260
4447 | 2261
4448 | 2262
4449 | 2263
4450 | 2264
4451 | 2265
4452 | 2266
4453 | 2267
4454 | )
4455 |
4456 |
4457 | // ************************************************************************* //
4458 |
--------------------------------------------------------------------------------
/tutorial/interFoam/damBreak/constant/transportProperties:
--------------------------------------------------------------------------------
1 | /*--------------------------------*- C++ -*----------------------------------*\
2 | | ========= | |
3 | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
4 | | \\ / O peration | Version: v1806 |
5 | | \\ / A nd | Web: www.OpenFOAM.com |
6 | | \\/ M anipulation | |
7 | \*---------------------------------------------------------------------------*/
8 | FoamFile
9 | {
10 | version 2.0;
11 | format ascii;
12 | class dictionary;
13 | location "constant";
14 | object transportProperties;
15 | }
16 | // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
17 |
18 | phases (water air);
19 |
20 | water
21 | {
22 | transportModel Newtonian;
23 | nu 1e-06;
24 | rho 1000;
25 | }
26 |
27 | air
28 | {
29 | transportModel Newtonian;
30 | nu 1.48e-05;
31 | rho 1;
32 | }
33 |
34 | sigma 0.07;
35 |
36 | // ************************************************************************* //
37 |
--------------------------------------------------------------------------------
/tutorial/interFoam/damBreak/constant/turbulenceProperties:
--------------------------------------------------------------------------------
1 | /*--------------------------------*- C++ -*----------------------------------*\
2 | | ========= | |
3 | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
4 | | \\ / O peration | Version: v1806 |
5 | | \\ / A nd | Web: www.OpenFOAM.com |
6 | | \\/ M anipulation | |
7 | \*---------------------------------------------------------------------------*/
8 | FoamFile
9 | {
10 | version 2.0;
11 | format ascii;
12 | class dictionary;
13 | location "constant";
14 | object turbulenceProperties;
15 | }
16 | // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
17 |
18 | simulationType laminar;
19 |
20 |
21 | // ************************************************************************* //
22 |
--------------------------------------------------------------------------------
/tutorial/interFoam/damBreak/meshRefinement-2d.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/krajit/dynamicRefine2DFvMesh/75d051aea9cd4f6f144a08e767fc0298ec607af6/tutorial/interFoam/damBreak/meshRefinement-2d.gif
--------------------------------------------------------------------------------
/tutorial/interFoam/damBreak/meshRefinement-3d.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/krajit/dynamicRefine2DFvMesh/75d051aea9cd4f6f144a08e767fc0298ec607af6/tutorial/interFoam/damBreak/meshRefinement-3d.gif
--------------------------------------------------------------------------------
/tutorial/interFoam/damBreak/system/blockMeshDict:
--------------------------------------------------------------------------------
1 | /*--------------------------------*- C++ -*----------------------------------*\
2 | | ========= | |
3 | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
4 | | \\ / O peration | Version: v1806 |
5 | | \\ / A nd | Web: www.OpenFOAM.com |
6 | | \\/ M anipulation | |
7 | \*---------------------------------------------------------------------------*/
8 | FoamFile
9 | {
10 | version 2.0;
11 | format ascii;
12 | class dictionary;
13 | object blockMeshDict;
14 | }
15 | // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
16 |
17 | scale 0.146;
18 |
19 | vertices
20 | (
21 | (0 0 0)
22 | (2 0 0)
23 | (2.16438 0 0)
24 | (4 0 0)
25 | (0 0.32876 0)
26 | (2 0.32876 0)
27 | (2.16438 0.32876 0)
28 | (4 0.32876 0)
29 | (0 4 0)
30 | (2 4 0)
31 | (2.16438 4 0)
32 | (4 4 0)
33 | (0 0 0.1)
34 | (2 0 0.1)
35 | (2.16438 0 0.1)
36 | (4 0 0.1)
37 | (0 0.32876 0.1)
38 | (2 0.32876 0.1)
39 | (2.16438 0.32876 0.1)
40 | (4 0.32876 0.1)
41 | (0 4 0.1)
42 | (2 4 0.1)
43 | (2.16438 4 0.1)
44 | (4 4 0.1)
45 | );
46 |
47 | blocks
48 | (
49 | hex (0 1 5 4 12 13 17 16) (23 8 1) simpleGrading (1 1 1)
50 | hex (2 3 7 6 14 15 19 18) (19 8 1) simpleGrading (1 1 1)
51 | hex (4 5 9 8 16 17 21 20) (23 42 1) simpleGrading (1 1 1)
52 | hex (5 6 10 9 17 18 22 21) (4 42 1) simpleGrading (1 1 1)
53 | hex (6 7 11 10 18 19 23 22) (19 42 1) simpleGrading (1 1 1)
54 | );
55 |
56 | edges
57 | (
58 | );
59 |
60 | boundary
61 | (
62 | leftWall
63 | {
64 | type wall;
65 | faces
66 | (
67 | (0 12 16 4)
68 | (4 16 20 8)
69 | );
70 | }
71 | rightWall
72 | {
73 | type wall;
74 | faces
75 | (
76 | (7 19 15 3)
77 | (11 23 19 7)
78 | );
79 | }
80 | lowerWall
81 | {
82 | type wall;
83 | faces
84 | (
85 | (0 1 13 12)
86 | (1 5 17 13)
87 | (5 6 18 17)
88 | (2 14 18 6)
89 | (2 3 15 14)
90 | );
91 | }
92 | atmosphere
93 | {
94 | type patch;
95 | faces
96 | (
97 | (8 20 21 9)
98 | (9 21 22 10)
99 | (10 22 23 11)
100 | );
101 | }
102 | );
103 |
104 | mergePatchPairs
105 | (
106 | );
107 |
108 | // ************************************************************************* //
109 |
--------------------------------------------------------------------------------
/tutorial/interFoam/damBreak/system/controlDict:
--------------------------------------------------------------------------------
1 | /*--------------------------------*- C++ -*----------------------------------*\
2 | | ========= | |
3 | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
4 | | \\ / O peration | Version: v1806 |
5 | | \\ / A nd | Web: www.OpenFOAM.com |
6 | | \\/ M anipulation | |
7 | \*---------------------------------------------------------------------------*/
8 | FoamFile
9 | {
10 | version 2.0;
11 | format ascii;
12 | class dictionary;
13 | location "system";
14 | object controlDict;
15 | }
16 | // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
17 |
18 | libs ("libdynamicRefine2D.so");
19 |
20 | application interFoam;
21 |
22 | startFrom startTime;
23 |
24 | startTime 0;
25 |
26 | stopAt endTime;
27 |
28 | endTime 0.5;
29 |
30 | deltaT 0.001;
31 |
32 | writeControl runTime; //adjustableRunTime;
33 |
34 | writeInterval 0.01;
35 |
36 | purgeWrite 0;
37 |
38 | writeFormat ascii;
39 |
40 | writePrecision 6;
41 |
42 | writeCompression off;
43 |
44 | timeFormat general;
45 |
46 | timePrecision 6;
47 |
48 | runTimeModifiable yes;
49 |
50 | adjustTimeStep no; //yes;
51 |
52 | maxCo 1;
53 | maxAlphaCo 1;
54 |
55 | maxDeltaT 1;
56 |
57 | // ************************************************************************* //
58 |
--------------------------------------------------------------------------------
/tutorial/interFoam/damBreak/system/decomposeParDict:
--------------------------------------------------------------------------------
1 | /*--------------------------------*- C++ -*----------------------------------*\
2 | | ========= | |
3 | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
4 | | \\ / O peration | Version: v1806 |
5 | | \\ / A nd | Web: www.OpenFOAM.com |
6 | | \\/ M anipulation | |
7 | \*---------------------------------------------------------------------------*/
8 | FoamFile
9 | {
10 | version 2.0;
11 | format ascii;
12 | class dictionary;
13 | object decomposeParDict;
14 | }
15 | // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
16 |
17 | numberOfSubdomains 4;
18 |
19 | method simple;
20 |
21 | coeffs
22 | {
23 | n (2 2 1);
24 | //delta 0.001; // default=0.001
25 | }
26 |
27 | distributed no;
28 |
29 | roots ( );
30 |
31 |
32 | // ************************************************************************* //
33 |
--------------------------------------------------------------------------------
/tutorial/interFoam/damBreak/system/fvSchemes:
--------------------------------------------------------------------------------
1 | /*--------------------------------*- C++ -*----------------------------------*\
2 | | ========= | |
3 | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
4 | | \\ / O peration | Version: v1806 |
5 | | \\ / A nd | Web: www.OpenFOAM.com |
6 | | \\/ M anipulation | |
7 | \*---------------------------------------------------------------------------*/
8 | FoamFile
9 | {
10 | version 2.0;
11 | format ascii;
12 | class dictionary;
13 | location "system";
14 | object fvSchemes;
15 | }
16 | // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
17 |
18 | ddtSchemes
19 | {
20 | default Euler;
21 | }
22 |
23 | gradSchemes
24 | {
25 | default Gauss linear;
26 | }
27 |
28 | divSchemes
29 | {
30 | div(rhoPhi,U) Gauss linearUpwind grad(U);
31 | div(phi,alpha) Gauss vanLeer;
32 | div(phirb,alpha) Gauss linear;
33 | div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear;
34 | }
35 |
36 | laplacianSchemes
37 | {
38 | default Gauss linear corrected;
39 | }
40 |
41 | interpolationSchemes
42 | {
43 | default linear;
44 | }
45 |
46 | snGradSchemes
47 | {
48 | default corrected;
49 | }
50 |
51 |
52 | // ************************************************************************* //
53 |
--------------------------------------------------------------------------------
/tutorial/interFoam/damBreak/system/fvSolution:
--------------------------------------------------------------------------------
1 | /*--------------------------------*- C++ -*----------------------------------*\
2 | | ========= | |
3 | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
4 | | \\ / O peration | Version: v1806 |
5 | | \\ / A nd | Web: www.OpenFOAM.com |
6 | | \\/ M anipulation | |
7 | \*---------------------------------------------------------------------------*/
8 | FoamFile
9 | {
10 | version 2.0;
11 | format ascii;
12 | class dictionary;
13 | location "system";
14 | object fvSolution;
15 | }
16 | // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
17 |
18 | solvers
19 | {
20 | "alpha.water.*"
21 | {
22 | nAlphaCorr 2;
23 | nAlphaSubCycles 1;
24 | cAlpha 1;
25 |
26 | MULESCorr yes;
27 | nLimiterIter 5;
28 |
29 | solver smoothSolver;
30 | smoother symGaussSeidel;
31 | tolerance 1e-8;
32 | relTol 0;
33 | }
34 |
35 | "pcorr.*"
36 | {
37 | solver PCG;
38 | preconditioner DIC;
39 | tolerance 1e-5;
40 | relTol 0;
41 | }
42 |
43 | p_rgh
44 | {
45 | solver PCG;
46 | preconditioner DIC;
47 | tolerance 1e-07;
48 | relTol 0.05;
49 | }
50 |
51 | p_rghFinal
52 | {
53 | $p_rgh;
54 | relTol 0;
55 | }
56 |
57 | U
58 | {
59 | solver smoothSolver;
60 | smoother symGaussSeidel;
61 | tolerance 1e-06;
62 | relTol 0;
63 | }
64 | }
65 |
66 | PIMPLE
67 | {
68 | momentumPredictor no;
69 | nOuterCorrectors 1;
70 | nCorrectors 3;
71 | nNonOrthogonalCorrectors 0;
72 | }
73 |
74 | relaxationFactors
75 | {
76 | equations
77 | {
78 | ".*" 1;
79 | }
80 | }
81 |
82 |
83 | // ************************************************************************* //
84 |
--------------------------------------------------------------------------------
/tutorial/interFoam/damBreak/system/sampling:
--------------------------------------------------------------------------------
1 | /*--------------------------------*- C++ -*----------------------------------*\
2 | | ========= | |
3 | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
4 | | \\ / O peration | Version: v1806 |
5 | | \\ / A nd | Web: www.OpenFOAM.com |
6 | | \\/ M anipulation | |
7 | \*---------------------------------------------------------------------------*/
8 | FoamFile
9 | {
10 | version 2.0;
11 | format ascii;
12 | class dictionary;
13 | object sampling;
14 | }
15 | // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
16 |
17 | functions
18 | {
19 | sampleSets
20 | {
21 | type sets;
22 | libs ("libsampling.so");
23 |
24 | writeControl timeStep;
25 | writeInterval 1;
26 |
27 | setFormat vtk;
28 | interpolationScheme cellPointFace;
29 | fields ( alpha.water );
30 |
31 | sets
32 | (
33 | gauge_1
34 | {
35 | type face;
36 | axis y;
37 | start (0.02 0.20 0.005);
38 | end (0.02 0.25 0.005);
39 | nPoints 100;
40 | }
41 |
42 | gauge_2
43 | {
44 | type face;
45 | axis y;
46 | start (0.2 0.03 0.005);
47 | end (0.2 0.55 0.005);
48 | nPoints 100;
49 | }
50 | );
51 | }
52 | }
53 |
54 | // ************************************************************************* //
55 |
--------------------------------------------------------------------------------
/tutorial/interFoam/damBreak/system/setFieldsDict:
--------------------------------------------------------------------------------
1 | /*--------------------------------*- C++ -*----------------------------------*\
2 | | ========= | |
3 | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
4 | | \\ / O peration | Version: v1806 |
5 | | \\ / A nd | Web: www.OpenFOAM.com |
6 | | \\/ M anipulation | |
7 | \*---------------------------------------------------------------------------*/
8 | FoamFile
9 | {
10 | version 2.0;
11 | format ascii;
12 | class dictionary;
13 | location "system";
14 | object setFieldsDict;
15 | }
16 | // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
17 |
18 | defaultFieldValues
19 | (
20 | volScalarFieldValue alpha.water 0
21 | );
22 |
23 | regions
24 | (
25 | boxToCell
26 | {
27 | box (0 0 -1) (0.1461 0.292 1);
28 | fieldValues
29 | (
30 | volScalarFieldValue alpha.water 1
31 | );
32 | }
33 | );
34 |
35 |
36 | // ************************************************************************* //
37 |
--------------------------------------------------------------------------------