View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0001809 | OpenFOAM | Bug | public | 2015-08-02 08:15 | 2015-08-28 20:24 |
Reporter | Assigned To | henry | |||
Priority | normal | Severity | minor | Reproducibility | always |
Status | resolved | Resolution | fixed | ||
Platform | GNU/Linux | OS | Ubuntu | OS Version | 14.10 |
Summary | 0001809: BlockMesh multi-grading erroneous behaviour | ||||
Description | BlockMesh fails sometimes if the multi-grading is specified on an edge which has opposite directions between two blocks. I attached two examples: first one runs without problems but the second one gives an error "Inconsistent point locations between block pair 0 and 1." Only the amount of cells in k-direction is changed (i.e. values 20,23,24 are OK and 21,22 are not). This one runs without problems: vertices ( (-0.5 0.5 0.0) (0.5 -0.5 0.0) (0.5 0.5 0.0) (1.0 1.0 0.0) (1.0 -1.0 0.0) (-1.0 1.0 0.0) (-0.5 0.5 2.0) (0.5 0.5 2.0) (0.5 -0.5 2.0) (-1.0 1.0 2.0) (1.0 -1.0 2.0) (1.0 1.0 2.0) (-0.5 -0.5 0.0) (-0.5 -0.5 2.0) ); blocks ( hex (5 3 11 9 0 2 7 6) (40 40 20) simpleGrading ( 1 1 ( (0.3 0.4 4) (0.5 0.3 1) (0.2 0.3 0.25) ) ) hex (1 2 7 8 4 3 11 10) (20 40 20) simpleGrading ( 1 1 ( (0.2 0.3 4) (0.50 0.3 1) (0.30 0.4 0.25) ) ) ); This one gives an error: vertices ( (-0.5 0.5 0.0) (0.5 -0.5 0.0) (0.5 0.5 0.0) (1.0 1.0 0.0) (1.0 -1.0 0.0) (-1.0 1.0 0.0) (-0.5 0.5 2.0) (0.5 0.5 2.0) (0.5 -0.5 2.0) (-1.0 1.0 2.0) (1.0 -1.0 2.0) (1.0 1.0 2.0) (-0.5 -0.5 0.0) (-0.5 -0.5 2.0) ); blocks ( hex (5 3 11 9 0 2 7 6) (40 40 21) simpleGrading ( 1 1 ( (0.3 0.4 4) (0.5 0.3 1) (0.2 0.3 0.25) ) ) hex (1 2 7 8 4 3 11 10) (20 40 21) simpleGrading ( 1 1 ( (0.2 0.3 4) (0.50 0.3 1) (0.30 0.4 0.25) ) ) ); | ||||
Tags | No tags attached. | ||||
|
This may just be an issue with the tolerance used in the proximity test. Try using the "fastMerge" option in OpenFOAM-dev which uses a topological rather than geometric merge algorithm. |
|
Thank you for the suggestion. I tried the fastMerge option but unfortunately it did not help. The new error message is "Point merge failure between face 1 of block 0 and face 1 of block 1 This may be due to inconsistent grading. From function blockMesh::calcMergeInfoFast() in file blockMesh/blockMeshMergeFast.C at line 452." I also tried to increase the sqrMergeTol in blockMeshMerge.C. I had to increase it 1000 times higher to run the blockMesh without errors. I attached two pictures. First one shows the mesh after increasing the tolerance with 21 cells in k-direction and the second one is without increasing the tolerance with 20 cells in k-direction. Maybe they will help to find the bug. |
2015-08-02 19:31
|
|
2015-08-02 19:32
|
|
|
In order to be able to reproduce the problem it would be useful to have the complete blockMeshDict file. |
2015-08-02 20:07
|
blockMeshDict (1,426 bytes)
/*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: 2.4.0 | | \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile { version 2.0; format ascii; class dictionary; object blockMeshDict; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // fastMerge yes; convertToMeters 1.0; vertices ( (-0.5 0.5 0.0) (0.5 -0.5 0.0) (0.5 0.5 0.0) (1.0 1.0 0.0) (1.0 -1.0 0.0) (-1.0 1.0 0.0) (-0.5 0.5 2.0) (0.5 0.5 2.0) (0.5 -0.5 2.0) (-1.0 1.0 2.0) (1.0 -1.0 2.0) (1.0 1.0 2.0) (-0.5 -0.5 0.0) (-0.5 -0.5 2.0) ); blocks ( hex (5 3 11 9 0 2 7 6) (40 40 21) simpleGrading ( 1 1 ( (0.3 0.4 4) (0.5 0.3 1) (0.2 0.3 0.25) ) ) hex (1 2 7 8 4 3 11 10) (20 40 21) simpleGrading ( 1 1 ( (0.2 0.3 4) (0.50 0.3 1) (0.30 0.4 0.25) ) ) ); patches ( ); edges ( ); mergePatchPairs ( ); // ************************************************************************* // |
|
I attached a complete dictionary. |
|
Resolved by commit 18ac24b2caf7aff3c43b1dae8b52f74da2705ed3 in OpenFOAM-dev Could you test this update and if it resolves the issues you are having I will push the same change into OpenFOAM-2.4.x. |
|
I made a few tests and it seems to work perfectly, thanks! |
|
There is still a potential issue if there is more than 1 section with the same largest division fraction, then the divions could still be ambiguous. A work-around is to always specify the sections such that there is only 1 with the largest division fraction. Alternatively I could change the code so that the total number of divisions could be automatically reduced by 1 to avoid the ambiguity. Currently I prefer the first option. |
|
Seems like there is a similar bug when a polyline is defined to the multi-grading edge. I attached an example dictionary which gives the similar error: Inconsistent point locations between block pair 0 and 1 probably due to inconsistent grading. If the polyLine is commented out, the blockMesh runs without errors. |
2015-08-04 10:08
|
blockMeshDict_polyline (1,488 bytes)
/*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: 2.4.0 | | \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile { version 2.0; format ascii; class dictionary; object blockMeshDict; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // convertToMeters 1.0; vertices ( (-1.0 -1.0 0.0) (1.0 -1.0 0.0) (-1.0 1.0 0.0) (1.0 1.0 0.0) (-0.5 0.5 0.0) (-0.5 -0.5 0.0) (0.5 -0.5 0.0) (0.5 0.5 0.0) (-0.5 -0.5 1) (-0.5 0.5 1) (-1.0 1.0 1) (-1.0 -1.0 1) (0.5 -0.5 1) (1.0 -1.0 1) (0.5 0.5 1) (1.0 1.0 1) ); blocks ( hex (1 3 7 6 13 15 14 12) (10 7 20) simpleGrading ( 1 1 ( (0.4 0.5 3.33333) (0.3 0.2 1) (0.3 0.3 0.3) ) ) hex (10 15 14 9 2 3 7 4) (10 7 20) simpleGrading ( 1 1 ( (0.3 0.3 3.33333) (0.3 0.2 1) (0.4 0.5 0.3) ) ) ); patches ( ); edges ( polyLine 3 15 ((1.0 1.0 0.0)(1.0 1.0 1)) ); mergePatchPairs ( ); // ************************************************************************* // |
|
With polyLine and multi-grading do you see an issue irrespective of the section divisions or only with certain numbers? |
|
That's right it's irrespective of the section divisions. Error occurs still only if the edge is defined in the opposite directions between the blocks. |
|
Could you also provide the blockMeshDict with the blocks defined with edges defined such that it works with polyLine and multi-grading? Thanks |
|
I attached a blockMeshDict in which the polyLines does not crash the blockMesh. However, I just noticed that the polyLines somehow reverse the grading. I'm not sure if this is expected behaviour. I added two figures with and without the polylines. |
2015-08-04 12:17
|
blockMeshDict_polyline2 (1,992 bytes)
/*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: 2.3.1 | | \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile { version 2.0; format ascii; class dictionary; location "constant/polyMesh"; object meshMetaDict; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // convertToMeters 1.0; vertices ( (-1.0 -1.0 0.0) (1.0 -1.0 0.0) (-1.0 1.0 0.0) (1.0 1.0 0.0) (-0.5 0.5 0.0) (0.5 -0.5 0.0) (0.5 0.5 0.0) (-0.5 -0.5 0.0) (-0.5 -0.5 1.0) (0.5 -0.5 1.0) (0.5 0.5 1.0) (-0.5 0.5 1.0) (-1.0 1.0 1.0) (-1.0 -1.0 1.0) (1.0 -1.0 1.0) (1.0 1.0 1.0) ); blocks ( hex (13 12 11 8 0 2 4 7) (10 7 20) simpleGrading ( 1 1 ( (0.7 0.7 3) (0 0 1) (0.3 0.3 0.33333) ) ) hex (0 1 5 7 13 14 9 8) (10 7 20) simpleGrading ( 1 1 ( (0.3 0.3 3) (0 0 1) (0.7 0.7 0.33333) ) ) hex (1 3 6 5 14 15 10 9) (10 7 20) simpleGrading ( 1 1 ( (0.3 0.3 3) (0 0 1) (0.7 0.7 0.33333) ) ) hex (12 15 10 11 2 3 6 4) (10 7 20) simpleGrading ( 1 1 ( (0.7 0.7 3) (0 0 1) (0.3 0.3 0.33333) ) ) hex (11 10 9 8 4 6 5 7) (10 10 20) simpleGrading ( 1 1 ( (0.7 0.7 3) (0 0 1) (0.3 0.3 0.33333) ) ) ); patches ( ); edges ( /*polyLine 0 13 ((-1.0 -1.0 0.0)(-1.0 -1.0 1.0))*/ /*polyLine 3 15 ((1.0 1.0 0.0)(1.0 1.0 1.0))*/ polyLine 1 14 ((1.0 -1.0 0.0)(1.0 -1.0 1.0)) polyLine 2 12 ((-1.0 1.0 0.0)(-1.0 1.0 1.0)) ); mergePatchPairs ( ); // ************************************************************************* // |
2015-08-04 12:17
|
|
2015-08-04 12:18
|
|
|
If you use edges ( polyLine 1 14 ((1.0 -1.0 0.0)(1.0 -1.0 1.0)) polyLine 12 12 ((-1.0 1.0 1.0)(-1.0 1.0 0.0)) ); in system/blockMeshDict_polyline2 then the grading is as expected |
|
Ok, thanks. So this is probably the reason why the multi-grading doesn't work on the edge which is defined in the opposite directions between the blocks, right? The direction is ambiguous and therefore one grading is as expected and the another is inverse. |
|
I have just pushed another update into OpenFOAM-dev: commit 091a78d3167303bfb208f0effc81d85c2e11f083 Author: Henry Weller <http://cfd.direct> Date: Tue Aug 4 19:34:24 2015 +0100 blockMesh: Correct multi-grading support for polyLine let me know if this resolves the remaining issue with polyLine and multi-grading. |
|
I have now tested the multi-grading with polyLines and I have not encountered any errors with the latest update. Thank you! |
|
Thanks for the bug-report and useful test-cases. This is now resolved in OpenFOAM-dev and OpenFOAM-2.4.x: commit dfcf5d948ebd8398a2097a0d75a2558c21677991 |
|
Unfortunately, the problem with multi-grading and "Inconsistent point locations between block pair" seems to exists still in some cases. I attached a sample blockMeshDict. With 32 cells in k direction the error occurs and with 64 it does not. The error is similar with blockMesh 2.4.x and dev with and without fastMerge option. |
2015-08-27 23:28
|
blockMeshDict_inconsistent (772 bytes)
FoamFile { version 2.0; format ascii; class dictionary; object blockMeshDict; } convertToMeters 1.0; vertices ( (0.7414211 -0.35857844 2.) (0.89948881 -0.79948878 2.) (0.30051112 -0.20051119 2.) (0.89948881 -0.20051119 2.) (0.45857865 -0.35857856 3.) (0.7414211 -0.35857844 3.) (0.30051112 -0.20051119 3.) (0.89948881 -0.20051119 3.) (0.89948881 -0.79948878 3.) (0.7414214 -0.64142132 3.) (0.74142146 -0.64142138 2.) (0.45857856 -0.35857856 2.) ); blocks ( hex (5 7 8 9 0 3 1 10) (4 3 32) simpleGrading ( 1 1 ( (0.27 0.36 5) (0.46 0.28 1) (0.27 0.36 0.2) ) ) hex (0 3 2 11 5 7 6 4) (4 3 32) simpleGrading ( 1 1 ( (0.27 0.36 5) (0.46 0.28 1) (0.27 0.36 0.2) ) ) ); patches ( ); edges ( ); mergePatchPairs ( ); |
|
You have hit the problem I mentioned earier: There is still a potential issue if there is more than 1 section with the same largest division fraction, then the divions could still be ambiguous. A work-around is to always specify the sections such that there is only 1 with the largest division fraction. Alternatively I could change the code so that the total number of divisions could be automatically reduced by 1 to avoid the ambiguity. Currently I prefer the first option. So this works: hex (5 7 8 9 0 3 1 10) (1 1 10) simpleGrading ( 1 1 ( (0.27 0.36 5) (0.46 0.28 1) (0.27 0.37 0.2) ) ) hex (0 3 2 11 5 7 6 4) (1 1 10) simpleGrading ( 1 1 ( (0.27 0.37 5) (0.46 0.28 1) (0.27 0.36 0.2) ) |
Date Modified | Username | Field | Change |
---|---|---|---|
2015-08-02 08:15 |
|
New Issue | |
2015-08-02 09:33 | henry | Note Added: 0005162 | |
2015-08-02 19:31 |
|
Note Added: 0005163 | |
2015-08-02 19:31 |
|
File Added: multi-grading1.png | |
2015-08-02 19:32 |
|
File Added: multi-grading2.png | |
2015-08-02 19:36 |
|
Note Edited: 0005163 | |
2015-08-02 19:37 |
|
Note Edited: 0005163 | |
2015-08-02 19:53 | henry | Note Added: 0005164 | |
2015-08-02 20:07 |
|
File Added: blockMeshDict | |
2015-08-02 20:07 |
|
Note Added: 0005165 | |
2015-08-02 22:16 | henry | Note Added: 0005167 | |
2015-08-03 19:38 |
|
Note Added: 0005178 | |
2015-08-03 19:49 | henry | Note Added: 0005179 | |
2015-08-04 10:08 |
|
Note Added: 0005186 | |
2015-08-04 10:08 |
|
File Added: blockMeshDict_polyline | |
2015-08-04 10:18 | henry | Note Added: 0005187 | |
2015-08-04 10:36 |
|
Note Added: 0005188 | |
2015-08-04 10:41 | henry | Note Added: 0005189 | |
2015-08-04 12:17 |
|
Note Added: 0005190 | |
2015-08-04 12:17 |
|
File Added: blockMeshDict_polyline2 | |
2015-08-04 12:17 |
|
File Added: withPolyline.png | |
2015-08-04 12:18 |
|
File Added: withoutPolyline.png | |
2015-08-04 15:49 | henry | Note Added: 0005193 | |
2015-08-04 18:10 |
|
Note Added: 0005194 | |
2015-08-04 19:36 | henry | Note Added: 0005195 | |
2015-08-06 07:37 |
|
Note Added: 0005200 | |
2015-08-06 09:49 | henry | Note Added: 0005201 | |
2015-08-06 09:49 | henry | Status | new => resolved |
2015-08-06 09:49 | henry | Resolution | open => fixed |
2015-08-06 09:49 | henry | Assigned To | => henry |
2015-08-27 23:27 |
|
Note Added: 0005307 | |
2015-08-27 23:27 |
|
Status | resolved => feedback |
2015-08-27 23:27 |
|
Resolution | fixed => reopened |
2015-08-27 23:28 |
|
File Added: blockMeshDict_inconsistent | |
2015-08-28 20:23 | henry | Note Added: 0005311 | |
2015-08-28 20:24 | henry | Status | feedback => resolved |
2015-08-28 20:24 | henry | Resolution | reopened => fixed |