CFD Online Discussion Forums

CFD Online Discussion Forums (https://www.cfd-online.com/Forums/)
-   OpenFOAM (https://www.cfd-online.com/Forums/openfoam/)
-   -   Engine Simulation in parallel (https://www.cfd-online.com/Forums/openfoam/105256-engine-simulation-parallel.html)

Peter_600 July 26, 2012 06:02

Engine Simulation in parallel
 
Hi ALL, after a small break I am doing engine simulations again :)

To my problem (OF Version: 1.6-ext):

I ve build from the LayerAR class and from the the accordionEngineMesh class (taken from engineTopoChangerMesh) a new mesh motion class (GDIMesh), which allows moving the valves while using for the piston motion the layering approach.
So far this works fine on a single processor. The problem arises when I try to let it run in parallel. I ve tested the two classes independently (LayerAR and accordionEngineMesh) in parallel without any problem. So I assume it should also work in my case.

My Simulation crashes with the following error:

Code:

[0]
[0]
[0] --> FOAM FATAL ERROR:
[0] Not implemented
[0]
[0]    From function globalTetPolyPatchFaceDecomp::updateMesh()
[0]    in file tetPolyMeshFaceDecomp/tetPolyPatches/constraint/global/globalTetPolyPatchFaceDecomp.C at line 152.
[0]
FOAM parallel run aborting
[0]
--------------------------------------------------------------------------
MPI_ABORT was invoked on rank 0 in communicator MPI_COMM_WORLD
with errorcode 1.

NOTE: invoking MPI_ABORT causes Open MPI to kill all MPI processes.
You may or may not see output from other processes, depending on
exactly when Open MPI kills them.

This error pops up when a layer of the displacement volume is about being removed.

I ve figured out that when a topological change is performed (in this case layering) it executes the following peace of code (Condition: topoChangeMap1->morphing() == true )


Code:

autoPtr<mapPolyMesh> topoChangeMap1 = topoChanger_.changeMesh();
   
    bool meshChanged = topoChangeMap1->morphing();                // included from  "mapPolyMesh.H"
   
    pointField newPoints = points();
   
    if (topoChangeMap1->morphing())
      {         
        mSolver.updateMesh(topoChangeMap1());
   
        if (topoChangeMap1().hasMotionPoints())
        {
     
        Info << "movePoints(topoChangeMap1().preMotionPoints());" <<endl;
            movePoints(topoChangeMap1().preMotionPoints());
            newPoints = topoChangeMap1().preMotionPoints();
        }
        setV0();
        resetMotion();
    }

When I am entering into this if statement the calculations blows up at the line mSolver.updateMesh(topoChangeMap1()); I guess this is to update the tetDecompositionMotionSolver but I do not understand why this required after a topological change, since it only moves the inner points.

I hope someone could give my some hints about the syntax of this line
Code:

autoPtr<mapPolyMesh> topoChangeMap1 = topoChanger_.changeMesh();
and point me into the right direction to get my case running in parallel.


Cheers Peter


All times are GMT -4. The time now is 09:13.