STFS-TUDa / blastAMR

Load-balanced adaptive mesh refinement libraries from blastFoam ported to ESI OpenFOAM
Other
37 stars 12 forks source link

SurfaceSampling and blastAMR #10

Open JanGaertner opened 2 months ago

JanGaertner commented 2 months ago

There seems to be an error when you use surface sampling together with blastAMR.

When surface sampling is deactivated or if sampling occurs AFTER the first rebalance it works.

When surface sampling is enabled following error occurs:

PIMPLE: iteration 1
---->! custom error estimator !<----
---->! end    error estimator !<----
Protecting 2706 cells next to requested boundary patches.
Selected 1625 cells for refinement out of 236952.
Refined from 236952 to 241827 cells.
canBalance(): Maximum imbalance = 122.492939 %
Selecting decompositionMethod scotch [64]
Selecting decompositionConstraint polyRefinement
polyRefinement : setting constraints to preserve refinement history
polyRefinement : reading fvMeshPolyRefiner from time "3.87719e-06"
2D case detected. Adding prismatic2DRefinement topology modifier
polyRefinement : reading fvMeshPolyRefiner from time "3.87719e-06"
2D case detected. Adding prismatic2DRefinement topology modifier
1
Maximum imbalance = 122.492939 %
polyRefinement : reading fvMeshPolyRefiner from time "3.87719e-06"
2D case detected. Adding prismatic2DRefinement topology modifier
polyRefinement : reading fvMeshPolyRefiner from time "3.87719e-06"
2D case detected. Adding prismatic2DRefinement topology modifier
Mapping the fields ...
Distributing the mesh ...
Successfully distributed mesh
New max imbalance: 0.967220368%
[47] [61] 
[61] 
[61] --> FOAM FATAL ERROR: (openfoam-2012)
[61] Cannot dereference nullptr at index 10 in range [0,10)
[61] 
[61] 
[61]     From const T& Foam::UPtrList<T>::operator[](Foam::label) const [with T = Foam::polyPatch; Foam::label = long int]
[61]     in file /home/itvjg/OpenFOAM/OpenFOAM-v2012-int64/src/OpenFOAM/lnInclude/UPtrListI.H at line 218.
[61] 
FOAM parallel run aborting
[61] 
[61] #0  Foam::error::printStack(Foam::Ostream&)[33] #0  [35] #0  [36] #0  [37] #0  [46] #0  Foam::error::printStack(Foam::Ostream&)[59] #0  Foam::error::printStack(Foam::Ostream&)[60] #0  Foam::error::printStack(Foam::Ostream&)[62] #0  Foam::error::printStack(Foam::Ostream&)[63] #0  Foam::error::printStack(Foam::Ostream&)[32] #0  Foam::error::printStack(Foam::Ostream&)[12] #0  Foam::error::printStack(Foam::Ostream&)[14] #0  Foam::error::printStack(Foam::Ostream&)[17] #0  Foam::error::printStack(Foam::Ostream&)[18] #0  Foam::error::printStack(Foam::Ostream&)[19] #0  Foam::error::printStack(Foam::Ostream&)[20] #0  Foam::error::printStack(Foam::Ostream&)[21] #0  Foam::error::printStack(Foam::Ostream&)[24] #0  Foam::error::printStack(Foam::Ostream&)[25] #0  Foam::error::printStack(Foam::Ostream&)[26] #0  Foam::error::printStack(Foam::Ostream&)[31] #0  Foam::error::printStack(Foam::Ostream&)Foam::error::printStack(Foam::Ostream&)Foam::error::printStack(Foam::Ostream&)Foam::error::printStack(Foam::Ostream&)Foam::error::printStack(Foam::Ostream&)[53] #0  Foam::error::printStack(Foam::Ostream&)[0] #0  Foam::error::printStack(Foam::Ostream&)[4] #0  Foam::error::printStack(Foam::Ostream&)[5] #0  Foam::error::printStack(Foam::Ostream&)[8] #0  Foam::error::printStack(Foam::Ostream&)[9] #0  Foam::error::printStack(Foam::Ostream&)
[47] 
[47] --> FOAM FATAL ERROR: (openfoam-2012)
[47] Cannot dereference nullptr at index 10 in range [0,10)
[47] 
[47] 
[47]     From const T& Foam::UPtrList<T>::operator[](Foam::label) const [with T = Foam::polyPatch; Foam::label = long int]
[47]     in file /home/itvjg/OpenFOAM/OpenFOAM-v2012-int64/src/OpenFOAM/lnInclude/UPtrListI.H at line 218.
[47] 
FOAM parallel run aborting
[47] 
[47] #0  Foam::error::printStack(Foam::Ostream&) at ??:?
[46] #1  Foam::sigSegv::sigHandler(int) at ??:?
 at ??:?
[60] #1  Foam::sigSegv::sigHandler(int) at ??:?
[62] #1  Foam::sigSegv::sigHandler(int) at ??:?
[63] #1  Foam::sigSegv::sigHandler(int) at ??:?
[61] #1  Foam::error::exitOrAbort(int, bool) at ??:?
[36] #1  Foam::sigSegv::sigHandler(int) at ??:?
[37] #1  Foam::sigSegv::sigHandler(int) at ??:?
 at ??:?
 at ??:?
[59] #1  Foam::sigSegv::sigHandler(int) at ??:?
[53] #1  Foam::sigSegv::sigHandler(int)[35] #1  Foam::sigSegv::sigHandler(int)[32] #1  Foam::sigSegv::sigHandler(int)[33] #1  Foam::sigSegv::sigHandler(int) at ??:?
[9] #1  Foam::sigSegv::sigHandler(int) at ??:?
[8] #1  Foam::sigSegv::sigHandler(int) at ??:?
[24] #1  Foam::sigSegv::sigHandler(int) at ??:?
[25] #1  Foam::sigSegv::sigHandler(int) at ??:?
[26] #1  Foam::sigSegv::sigHandler(int) at ??:?
[4] #1  Foam::sigSegv::sigHandler(int) at ??:?
[12] #1  Foam::sigSegv::sigHandler(int) at ??:?
[14] #1  Foam::sigSegv::sigHandler(int) at ??:?
 at ??:?
 at ??:?
 at ??:?
[20] #1  Foam::sigSegv::sigHandler(int) at ??:?
[21] #1  Foam::sigSegv::sigHandler(int) at ??:?
 at ??:?
[5] #1   at ??:?
[17] #1  Foam::sigSegv::sigHandler(int)[18] #1  Foam::sigSegv::sigHandler(int)[19] #1  Foam::sigSegv::sigHandler(int)Foam::sigSegv::sigHandler(int) at ??:?
[0] #1  Foam::sigSegv::sigHandler(int)[31] #1  Foam::sigSegv::sigHandler(int)[47] #1  Foam::error::exitOrAbort(int, bool) at ??:?
[36] #2  ? at ??:?
[60] #2  ? at ??:?
[37] #2  ? at ??:?
[63] #2  ? at ??:?
[61] #2  void Foam::fvMeshBalance::correctBoundaries<Foam::GeometricField<double, Foam::pointPatchField, Foam::pointMesh> >() at ??:?
 at ??:?
[35] #2  ? at ??:?
[32] #2  ? at ??:?
[33] #2  ?[62] #2  ? at ??:?
[46] #2  ? at ??:?
[53] #2  ? at ??:?
[59] #2  ? at ??:?
[26] #2  ? at ??:?
[8] #2  ? at ??:?
[24] #2  ? at ??:?
[25] #2  ? at ??:?
[12] #2  ? at ??:?
[14] #2  ? at ??:?
[20] #2  ? at ??:?
[21] #2  ? at ??:?
[4] #2  ? in /lib/x86_64-linux-gnu/libc.so.6
[37] #3  __dynamic_cast at ??:?
 in /lib/x86_64-linux-gnu/libc.so.6
 at ??:?
[18] #2  ? at ??:?
[17] #2  ? at ??:?
[19] #2  ?[5] #2  ? at ??:?
[63] #3  __dynamic_cast in /lib/x86_64-linux-gnu/libc.so.6
[60] #3  __dynamic_cast[47] #2  void Foam::fvMeshBalance::correctBoundaries<Foam::GeometricField<double, Foam::pointPatchField, Foam::pointMesh> >() in /lib/x86_64-linux-gnu/libc.so.6
[62] #3  __dynamic_cast in /lib/x86_64-linux-gnu/libc.so.6
[32] #3  __dynamic_cast at ??:?
[61] #3  Foam::fvMeshBalance::distribute() in /lib/x86_64-linux-gnu/libc.so.6
[33] #3  __dynamic_cast in /lib/x86_64-linux-gnu/libc.so.6
[35] #3  __dynamic_cast in /lib/x86_64-linux-gnu/libc.so.6
[46] #3  __dynamic_cast in /lib/x86_64-linux-gnu/libc.so.6
[36] #3  __dynamic_cast at ??:?
[9] #2  ? at ??:?
[0] #2  ? at ??:?
[31] #2  ? in /lib/x86_64-linux-gnu/libc.so.6
[53] #3  __dynamic_cast in /lib/x86_64-linux-gnu/libc.so.6
[59] #3  __dynamic_cast in /lib/x86_64-linux-gnu/libc.so.6
[25] #3  __dynamic_cast in /lib/x86_64-linux-gnu/libc.so.6
[26] #3  __dynamic_cast in /lib/x86_64-linux-gnu/libc.so.6
[21] #3  __dynamic_cast in /lib/x86_64-linux-gnu/libc.so.6
[12] #3  __dynamic_cast in /lib/x86_64-linux-gnu/libc.so.6
[14] #3  __dynamic_cast in /lib/x86_64-linux-gnu/libc.so.6
[20] #3  __dynamic_cast in /lib/x86_64-linux-gnu/libc.so.6
 in /lib/x86_64-linux-gnu/libc.so.6
[8] #3  __dynamic_cast in /lib/x86_64-linux-gnu/libc.so.6
[4] #3  __dynamic_cast in /lib/x86_64-linux-gnu/libc.so.6
[17] #[18] #3  __dynamic_cast3  __dynamic_cast in /lib/x86_64-linux-gnu/libstdc++.so.6
[37] #4  void Foam::fvMeshBalance::correctBoundaries<Foam::GeometricField<double, Foam::pointPatchField, Foam::pointMesh> >() in /lib/x86_64-linux-gnu/libstdc++.so.6
 in /lib/x86_64-linux-gnu/libstdc++.so.6
[63] #4  void Foam::fvMeshBalance::correctBoundaries<Foam::GeometricField<double, Foam::pointPatchField, Foam::pointMesh> >()[60] #4  void Foam::fvMeshBalance::correctBoundaries<Foam::GeometricField<double, Foam::pointPatchField, Foam::pointMesh> >() in /lib/x86_64-linux-gnu/libc.so.6
[24] #3  __dynamic_cast in /lib/x86_64-linux-gnu/libc.so.6
 in /lib/x86_64-linux-gnu/libc.so.6
[19] #3  __dynamic_cast[5] #3  __dynamic_cast in /lib/x86_64-linux-gnu/libstdc++.so.6
[62] #4  void Foam::fvMeshBalance::correctBoundaries<Foam::GeometricField<double, Foam::pointPatchField, Foam::pointMesh> >() in /lib/x86_64-linux-gnu/libstdc++.so.6
[36] #4  void Foam::fvMeshBalance::correctBoundaries<Foam::GeometricField<double, Foam::pointPatchField, Foam::pointMesh> >() in /lib/x86_64-linux-gnu/libstdc++.so.6
[32] #4  void Foam::fvMeshBalance::correctBoundaries<Foam::GeometricField<double, Foam::pointPatchField, Foam::pointMesh> >() in /lib/x86_64-linux-gnu/libstdc++.so.6
[33] #4  void Foam::fvMeshBalance::correctBoundaries<Foam::GeometricField<double, Foam::pointPatchField, Foam::pointMesh> >() at ??:?
[47] #3  Foam::fvMeshBalance::distribute() in /lib/x86_64-linux-gnu/libstdc++.so.6
[35] #4  void Foam::fvMeshBalance::correctBoundaries<Foam::GeometricField<double, Foam::pointPatchField, Foam::pointMesh> >() in /lib/x86_64-linux-gnu/libstdc++.so.6
[46] #4  void Foam::fvMeshBalance::correctBoundaries<Foam::GeometricField<double, Foam::pointPatchField, Foam::pointMesh> >() at ??:?
FoamScience commented 2 months ago

Hi @JanGaertner Glad to see the library in continuous use :) And, thanks for reporting the issues. PR #11 tracks work on this because it is important to be able to post process with LB turned on.

Could you take a look at my sampling setup and replicate yours for the tutorial damBreak2D case (maybe PR yours into the hotfix/sampling branch)? just so we're on the same page. Also try out different decomposition methods: simple/hierarchical might work for you.

FYI: I will be on holidays for the next 2 weeks so It might take some time to debug this properly