View Issue Details

IDProjectCategoryView StatusLast Update
0003371OpenFOAMBugpublic2019-11-12 16:42
ReporterNauticalMileAssigned Tohenry 
PrioritynormalSeverityminorReproducibilityalways
Status resolvedResolutionfixed 
PlatformUnixOSUbuntuOS Version16.04
Product Versiondev 
Fixed in Version7 
Summary0003371: blockMesh quits for some combinations of vertex position and vertex / edge / face projection
DescriptionI have been programatically generating blockMeshDict files and noticed some funny behaviour at times.

In the attached case file, I have 3 blockMeshDict files:

1) blockMeshDictA (MESHES) : filled cylinder using 8 exterior vertices spaced evenly around the cylinder axis to create 4 blocks, each with 6 vertices.
2) blockMeshDictB (FAILS) : same as blockMeshDictA, except vertices have been rotated counter-clockwise about the axis by pi/8 radians.
3) blockMeshDictC (FAILS) : same as blockMeshDictB, except the cylinder is a tube, with an inner radius of 0.25. While blockMeshDictA and B are shorter and easier to read, they use blocks with fewer than 8 vertices. The fact that this mesh also fails suggests the problem is not linked to the number of vertices in the participating blocks.

When I say FAILS, the command line output looks like this:

$ blockMesh
/*---------------------------------------------------------------------------*\
  ========= |
  \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
   \\ / O peration | Website: https://openfoam.org
    \\ / A nd | Version: dev
     \\/ M anipulation |
\*---------------------------------------------------------------------------*/
Build : dev-6f1c3362a637
Exec : blockMesh
Date : Oct 15 2019
Time : 15:32:29
Host : [...]
PID : 932
I/O : uncollated
Case : [...]/OF_case
nProcs : 1
sigFpe : Enabling floating point exception trapping (FOAM_SIGFPE).
fileModificationChecking : Monitoring run-time modified files using timeStampMaster (fileModificationSkew 10)
allowSystemOperations : Allowing user-supplied system call operations

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
Create time

Overriding DebugSwitches according to controlDict
Creating block mesh from
    "[...]/OF_case/system/blockMeshDict"
Creating block edges
Creating block faces
Creating topology blocks
$

I believe this is a bug because all that has changed between blockMeshDictA and B is the cylinder orientation, and A meshes while B does not.

blockMeshDictB can be modified to produce a mesh using one of three methods which I could find:

1) Commenting out the 3rd face projection on line 69
2) Commenting out the 6th edge projection on line 52
3) Re-ordering the nodes on line 52 (i.e. changing 7 9 --> 9 7)

For this trivial example, face projections are unnecessary, but for the more complicated meshes I wish to generate (e.g. two tubes of differing sizes intersecting at a right angle), the vertices, edges, AND faces need to be projected to ensure the geometry is modeled correctly. I would try to work around the issue by carefully controlling the node ordering, but I can't figure out a consistent fix because I don't know what the root cause is.
Steps To Reproducecd OF_case
blockMesh -dict blockMeshDictB #or A or C
TagsNo tags attached.

Activities

NauticalMile

2019-10-15 22:01

reporter  

OF_case.zip (4,089 bytes)

henry

2019-11-12 16:20

manager   ~0010889

I tested the three mesh files and they all fail, even blockMeshDictA

blockMesh -dict system/blockMeshDictA
/*---------------------------------------------------------------------------*\
  ========= |
  \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
   \\ / O peration | Website: https://openfoam.org
    \\ / A nd | Version: dev
     \\/ M anipulation |
\*---------------------------------------------------------------------------*/
Build : dev-da429d77f5bf
Exec : blockMesh -dict system/blockMeshDictA
Date : Nov 12 2019
Time : 16:19:55
Host : "dm"
PID : 19776
I/O : uncollated
Case : /home/dm2/henry/OpenFOAM/henry-dev/run/Bugs/blockMesh/OF_case
nProcs : 1
sigFpe : Enabling floating point exception trapping (FOAM_SIGFPE).
SetNaN : Initialising allocated memory to NaN (FOAM_SETNAN).
fileModificationChecking : Monitoring run-time modified files using timeStampMaster (fileModificationSkew 10)
allowSystemOperations : Allowing user-supplied system call operations

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
Create time

Overriding DebugSwitches according to controlDict
Creating block mesh from
    "/home/dm2/henry/OpenFOAM/henry-dev/run/Bugs/blockMesh/OF_case/system/blockMeshDictA"
Creating block edges
Creating block faces
Creating topology blocks
#0 Foam::error::printStack(Foam::Ostream&) at ??:?
#1 Foam::sigFpe::sigHandler(int) at ??:?
#2 ? in "/lib64/libc.so.6"
#3 Foam::blockFaces::projectFace::project(Foam::blockDescriptor const&, int, Foam::Field<Foam::Vector<double> >&) const at ??:?
#4 Foam::blockDescriptor::correctFacePoints(Foam::FixedList<Foam::Field<Foam::Vector<double> >, 6u>&) const at ??:?
#5 Foam::block::createPoints() at ??:?
#6 Foam::block::block(Foam::dictionary const&, int, Foam::Field<Foam::Vector<double> > const&, Foam::PtrList<Foam::blockEdge> const&, Foam::PtrList<Foam::blockFace> const&, Foam::Istream&) at ??:?
#7 Foam::block::New(Foam::dictionary const&, int, Foam::Field<Foam::Vector<double> > const&, Foam::PtrList<Foam::blockEdge> const&, Foam::PtrList<Foam::blockFace> const&, Foam::Istream&) at ??:?
#8 void Foam::PtrList<Foam::block>::read<Foam::block::iNew>(Foam::Istream&, Foam::block::iNew const&) at ??:?
#9 Foam::blockMesh::createTopology(Foam::IOdictionary const&, Foam::word const&) at ??:?
#10 Foam::blockMesh::blockMesh(Foam::IOdictionary const&, Foam::word const&) at ??:?
#11 ? at ??:?
#12 __libc_start_main in "/lib64/libc.so.6"
#13 ? at /home/abuild/rpmbuild/BUILD/glibc-2.29/csu/../sysdeps/x86_64/start.S:122
Floating point exception (core dumped)

henry

2019-11-12 16:34

manager   ~0010890

The issue relates to the edge projection producing the correct surface so that the face projection does nothing and produces a 0 initial residual for the iteration but this is used to normalise subsequent residuals to it fails due to a /0. I am testing a fix, will push shortly.

henry

2019-11-12 16:42

manager   ~0010891

Resolved in OpenFOAM-7 by commit 1e109ebe0c17e31207112de2cc13511e9fe87842
Resolved in OpenFOAM-dev by commit e7128a08529cb1b483b83f51c944a10ff73864b4

Issue History

Date Modified Username Field Change
2019-10-15 22:01 NauticalMile New Issue
2019-10-15 22:01 NauticalMile File Added: OF_case.zip
2019-11-12 16:20 henry Note Added: 0010889
2019-11-12 16:34 henry Note Added: 0010890
2019-11-12 16:42 henry Assigned To => henry
2019-11-12 16:42 henry Status new => resolved
2019-11-12 16:42 henry Resolution open => fixed
2019-11-12 16:42 henry Fixed in Version => 7
2019-11-12 16:42 henry Note Added: 0010891
2019-11-12 16:42 henry Severity major => minor
2019-11-12 16:42 henry Description Updated View Revisions
2019-11-12 16:42 henry Steps to Reproduce Updated View Revisions