CFD Online Discussion Forums

CFD Online Discussion Forums (https://www.cfd-online.com/Forums/)
-   OpenFOAM Post-Processing (https://www.cfd-online.com/Forums/openfoam-post-processing/)
-   -   Wall bounded values and streamlines (https://www.cfd-online.com/Forums/openfoam-post-processing/128669-wall-bounded-values-streamlines.html)

Ruli January 18, 2014 05:56

Wall bounded values and streamlines
 
Dear Foamers,
does anyone have experience in using wallBoundedStreamLine?
What do the entries exactly mean? I commented, what I do understand or think I understand and which questions I have:

Code:

wallBoundedStreamLines
{
    functionObjectLibs ("libfieldFunctionObjects.so");
    type wallBoundedStreamLine;
    outputControl outputTime;
    setFormat vtk;
    UName UNear;  //calculation of near wall velocity field for later streamline calculation
    trackForward true;
    interpolationScheme cellPoint;
    fields (p U k UNear);  //necessary fields for streamline calculation
    lifeTime 100; //life time of generated particles? life time in time steps?
    cloudName wallBoundedParticleTracks;
    seedSampleSet patchSeed; //whats the difference between the coeffs types?
    uniformCoeffs
    {
        type uniform;
        distance 0.00051;
        nPoints 20;
    }

    cloudCoeffs
    {
        type cloud;
        distance 0.00051;
    }

    patchSeedCoeffs
    {
        type patchSeed;
        patches (rotor_OBJECT); //patch to calculate streamlines on
            axis        x;  //distance; //what does the axis mean?
            maxPoints  2000; //no. of particles or streamlines?
    }
}

Thanks for any tips.

Moreover: I run a simulation (MRFSimpleFoam, wind turbine rotor blade 120° wedge) with cyclic patches in parallel. If I activate wallBoundStreamLines (WBSL) OF gives me an error (problem with cyclic and parallel ...). So I reconstruct the latest time step, and run one more step with WBSL, which OF does. It calculates UNear, U, p and so on, but afterwards I get the following message for a lot of cells:

Code:

--> FOAM Warning :
    From function Foam::List<Foam::tetIndices> Foam::polyMeshTetDecomposition::faceTetIndices(const polyMesh&, label, label)
    in file meshes/polyMesh/polyMeshTetDecomposition/polyMeshTetDecomposition.C at line 570
    No base point for face 3348692, 5(1402997 1323072 1353391 1309945 1345687), produces a valid tet decomposition.

--> FOAM Warning : Suppressing any further warnings.

I am not sure if simpleFoam is still running (top says so). Did anyone have this error, too? With or without WBSL?

What I actually would like to get are the close wall values of U and p and the resulting streamlines.

Thanks and best regards
Julian

Ruli January 18, 2014 07:44

P.S.:
This is the error I get, when I run my simulation with wallBoundedStreamLines in parallel:

Code:

[3] --> FOAM FATAL ERROR:
[3] Particle tracking across AMI patches is only currently supported for cases where the AMI patches reside on a single processor
[3]
[3]    From function void Foam::Cloud<ParticleType>::initCloud(const bool)
[3]    in file lnInclude/Cloud.C at line 59.
[3]
FOAM parallel run aborting
[3]
[3] #0  Foam::error::printStack(Foam::Ostream&) at ??:?
[3] #1  Foam::error::abort()[1]
[1]
[1] --> FOAM FATAL ERROR:
[1] Particle tracking across AMI patches is only currently supported for cases where the AMI patches reside on a single processor
[1]
[1]    From function void Foam::Cloud<ParticleType>::initCloud(const bool)
[1]    in file lnInclude/Cloud.C at line 59.
[1]
FOAM parallel run aborting
[1]
[1] #0  Foam::error::printStack(Foam::Ostream&) at ??:?
[1] #1  Foam::error::abort()[0]
[0]
[0] --> FOAM FATAL ERROR:
[0] Particle tracking across AMI patches is only currently supported for cases where the AMI patches reside on a single processor
[0]
[0]    From function void Foam::Cloud<ParticleType>::initCloud(const bool)
[0]    in file lnInclude/Cloud.C at line 59.
[0]
FOAM parallel run aborting
[0]
[0] #0  Foam::error::printStack(Foam::Ostream&) at ??:?
[3] #2  Foam::passiveParticleCloud::passiveParticleCloud(Foam::polyMesh const&, Foam::word const&, bool) at ??:?
[0] #1  Foam::error::abort() at ??:?
[3] #3  Foam::uniformSet::trackToBoundary(Foam::passiveParticle&, Foam::Vector<double>&, int&, Foam::DynamicList<Foam::Vector<double>, 0u, 2u, 1u>&, Foam::DynamicList<int, 0u, 2u, 1u>&, Foam::DynamicList<int, 0u, 2u, 1u>&, Foam::DynamicList<double, 0u, 2u, 1u>&) const at ??:?
[1] #2  Foam::passiveParticleCloud::passiveParticleCloud(Foam::polyMesh const&, Foam::word const&, bool) at ??:?
[0] #2  Foam::passiveParticleCloud::passiveParticleCloud(Foam::polyMesh const&, Foam::word const&, bool) at ??:?
[3] #4  Foam::uniformSet::calcSamples(Foam::DynamicList<Foam::Vector<double>, 0u, 2u, 1u>&, Foam::DynamicList<int, 0u, 2u, 1u>&, Foam::DynamicList<int, 0u, 2u, 1u>&, Foam::DynamicList<int, 0u, 2u, 1u>&, Foam::DynamicList<double, 0u, 2u, 1u>&) const at ??:?
[1] #3  Foam::uniformSet::trackToBoundary(Foam::passiveParticle&, Foam::Vector<double>&, int&, Foam::DynamicList<Foam::Vector<double>, 0u, 2u, 1u>&, Foam::DynamicList<int, 0u, 2u, 1u>&, Foam::DynamicList<int, 0u, 2u, 1u>&, Foam::DynamicList<double, 0u, 2u, 1u>&) const at ??:?
[0] #3  Foam::uniformSet::trackToBoundary(Foam::passiveParticle&, Foam::Vector<double>&, int&, Foam::DynamicList<Foam::Vector<double>, 0u, 2u, 1u>&, Foam::DynamicList<int, 0u, 2u, 1u>&, Foam::DynamicList<int, 0u, 2u, 1u>&, Foam::DynamicList<double, 0u, 2u, 1u>&) const at ??:?
[1] #4  Foam::uniformSet::calcSamples(Foam::DynamicList<Foam::Vector<double>, 0u, 2u, 1u>&, Foam::DynamicList<int, 0u, 2u, 1u>&, Foam::DynamicList<int, 0u, 2u, 1u>&, Foam::DynamicList<int, 0u, 2u, 1u>&, Foam::DynamicList<double, 0u, 2u, 1u>&) const[2]
[2]
[2] --> FOAM FATAL ERROR:
[2] Particle tracking across AMI patches is only currently supported for cases where the AMI patches reside on a single processor
[2]
[2]    From function void Foam::Cloud<ParticleType>::initCloud(const bool)
[2]    in file lnInclude/Cloud.C at line 59.
[2]
FOAM parallel run aborting
[2]
[2] #0  Foam::error::printStack(Foam::Ostream&) at ??:?
[3] #5  Foam::uniformSet::genSamples() at ??:?
[0] #4  Foam::uniformSet::calcSamples(Foam::DynamicList<Foam::Vector<double>, 0u, 2u, 1u>&, Foam::DynamicList<int, 0u, 2u, 1u>&, Foam::DynamicList<int, 0u, 2u, 1u>&, Foam::DynamicList<int, 0u, 2u, 1u>&, Foam::DynamicList<double, 0u, 2u, 1u>&) const at ??:?
[2] #1  Foam::error::abort() at ??:?
[1] #5  Foam::uniformSet::genSamples() at ??:?
[3] #6  Foam::uniformSet::uniformSet(Foam::word const&, Foam::polyMesh const&, Foam::meshSearch const&, Foam::dictionary const&) at ??:?
[0] #5  Foam::uniformSet::genSamples() at ??:?
[2] #2  Foam::passiveParticleCloud::passiveParticleCloud(Foam::polyMesh const&, Foam::word const&, bool) at ??:?
[0] #6  Foam::uniformSet::uniformSet(Foam::word const&, Foam::polyMesh const&, Foam::meshSearch const&, Foam::dictionary const&) at ??:?
[3] #7  Foam::sampledSet::addwordConstructorToTable<Foam::uniformSet>::New(Foam::word const&, Foam::polyMesh const&, Foam::meshSearch const&, Foam::dictionary const&) at ??:?
[2] #3  Foam::uniformSet::trackToBoundary(Foam::passiveParticle&, Foam::Vector<double>&, int&, Foam::DynamicList<Foam::Vector<double>, 0u, 2u, 1u>&, Foam::DynamicList<int, 0u, 2u, 1u>&, Foam::DynamicList<int, 0u, 2u, 1u>&, Foam::DynamicList<double, 0u, 2u, 1u>&) const at ??:?
[1] #6  Foam::uniformSet::uniformSet(Foam::word const&, Foam::polyMesh const&, Foam::meshSearch const&, Foam::dictionary const&) at ??:?
[0] #7  Foam::sampledSet::addwordConstructorToTable<Foam::uniformSet>::New(Foam::word const&, Foam::polyMesh const&, Foam::meshSearch const&, Foam::dictionary const&) at ??:?
[3] #8  Foam::sampledSet::New(Foam::word const&, Foam::polyMesh const&, Foam::meshSearch const&, Foam::dictionary const&) at ??:?
[2] #4  Foam::uniformSet::calcSamples(Foam::DynamicList<Foam::Vector<double>, 0u, 2u, 1u>&, Foam::DynamicList<int, 0u, 2u, 1u>&, Foam::DynamicList<int, 0u, 2u, 1u>&, Foam::DynamicList<int, 0u, 2u, 1u>&, Foam::DynamicList<double, 0u, 2u, 1u>&) const at ??:?
[1] #7  Foam::sampledSet::addwordConstructorToTable<Foam::uniformSet>::New(Foam::word const&, Foam::polyMesh const&, Foam::meshSearch const&, Foam::dictionary const&) at ??:?
[0] #8  Foam::sampledSet::New(Foam::word const&, Foam::polyMesh const&, Foam::meshSearch const&, Foam::dictionary const&) at ??:?
[3] #9  Foam::wallBoundedStreamLine::read(Foam::dictionary const&) at ??:?
[2] #5  Foam::uniformSet::genSamples() at ??:?
[1] #8  Foam::sampledSet::New(Foam::word const&, Foam::polyMesh const&, Foam::meshSearch const&, Foam::dictionary const&) at ??:?
[0] #9  Foam::wallBoundedStreamLine::read(Foam::dictionary const&) at ??:?
[3] #10  Foam::wallBoundedStreamLine::wallBoundedStreamLine(Foam::word const&, Foam::objectRegistry const&, Foam::dictionary const&, bool) at ??:?
[0] #10  Foam::wallBoundedStreamLine::wallBoundedStreamLine(Foam::word const&, Foam::objectRegistry const&, Foam::dictionary const&, bool) at ??:?
[2] #6  Foam::uniformSet::uniformSet(Foam::word const&, Foam::polyMesh const&, Foam::meshSearch const&, Foam::dictionary const&) at ??:?
[1] #9  Foam::wallBoundedStreamLine::read(Foam::dictionary const&) at ??:?
[3] #11  Foam::OutputFilterFunctionObject<Foam::wallBoundedStreamLine>::allocateFilter() at ??:?
[0] #11  Foam::OutputFilterFunctionObject<Foam::wallBoundedStreamLine>::allocateFilter() at ??:?
[2] #7  Foam::sampledSet::addwordConstructorToTable<Foam::uniformSet>::New(Foam::word const&, Foam::polyMesh const&, Foam::meshSearch const&, Foam::dictionary const&) at ??:?
[1] #10  Foam::wallBoundedStreamLine::wallBoundedStreamLine(Foam::word const&, Foam::objectRegistry const&, Foam::dictionary const&, bool) at ??:?
[3] #12  Foam::OutputFilterFunctionObject<Foam::wallBoundedStreamLine>::start() at ??:?
[0] #12  Foam::OutputFilterFunctionObject<Foam::wallBoundedStreamLine>::start() at ??:?
[2] #8  Foam::sampledSet::New(Foam::word const&, Foam::polyMesh const&, Foam::meshSearch const&, Foam::dictionary const&) at ??:?
[3] #13  Foam::functionObjectList::read() at ??:?
[1] #11  Foam::OutputFilterFunctionObject<Foam::wallBoundedStreamLine>::allocateFilter() at ??:?
[0] #13  Foam::functionObjectList::read() at ??:?
[2] #9  Foam::wallBoundedStreamLine::read(Foam::dictionary const&) at ??:?
[3] #14  Foam::Time::run() const at ??:?
[1] #12  Foam::OutputFilterFunctionObject<Foam::wallBoundedStreamLine>::start() at ??:?
[0] #14  Foam::Time::run() const at ??:?
[2] #10  Foam::wallBoundedStreamLine::wallBoundedStreamLine(Foam::word const&, Foam::objectRegistry const&, Foam::dictionary const&, bool) at ??:?
[3] #15  Foam::Time::loop() at ??:?
[1] #13  Foam::functionObjectList::read() at ??:?
[0] #15  Foam::Time::loop() at ??:?
[2] #11  Foam::OutputFilterFunctionObject<Foam::wallBoundedStreamLine>::allocateFilter() at ??:?
[3] #16  Foam::simpleControl::loop() at ??:?
[1] #14  Foam::Time::run() const at ??:?
[0] #16  Foam::simpleControl::loop() at ??:?
[3] #17  at ??:?
[2] #12  Foam::OutputFilterFunctionObject<Foam::wallBoundedStreamLine>::start() at ??:?
[1] #15  Foam::Time::loop() at ??:?
[0] #17 
 at ??:?
[2] #13  Foam::functionObjectList::read() at ??:?
[1] #16  Foam::simpleControl::loop()
[3]  at ??:?
[3] #18  __libc_start_main at ??:?
[1] #17  at ??:?
[2] #14  Foam::Time::run() const[0]  at ??:?
[0] #18  __libc_start_main in "/lib/x86_64-linux-gnu/libc.so.6"
[3] #19 
 in "/lib/x86_64-linux-gnu/libc.so.6"
[0] #19  at ??:?
[2] #15  Foam::Time::loop()
[1]  at ??:?
[1] #18  __libc_start_main
 at ??:?
[2] #16  Foam::simpleControl::loop()--------------------------------------------------------------------------
MPI_ABORT was invoked on rank 3 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.

Any hints? I donīt understand the error, as the cyclicAMI patches are on the same processor (I used preservePatches). By the way, I use OF 2.2.2.

Ruli January 24, 2014 15:06

Hi,

help is still very much appreciated ;)
In serial the calculation is running, but during writing the output it seems to crash

Code:

Create time

Create mesh for time = 1000

Reading field p

Reading field U

Reading/calculating face flux field phi

AMI: Creating addressing and weights between 48621 source faces and 71280 target faces
AMI: Patch source weights min/max/average = 0.9997723, 1.000002, 0.9999998
AMI: Patch target weights min/max/average = 0.9997389, 1.000002, 0.9999998
Selecting incompressible transport model Newtonian
Selecting RAS turbulence model kOmegaSST
kOmegaSSTCoeffs
{
    alphaK1        0.85034;
    alphaK2        1;
    alphaOmega1    0.5;
    alphaOmega2    0.85616;
    gamma1          0.5532;
    gamma2          0.4403;
    beta1          0.075;
    beta2          0.0828;
    betaStar        0.09;
    a1              0.31;
    b1              1;
    c1              10;
    F3              false;
}

Creating fintite volume options from fvOptions

Selecting finite volume options model type MRFSource
    Source: rotatingVolume
    - applying source for all time
    - selecting cells using cellZone rotor_cells_zone
    - selected 10941018 cell(s) with volume 287.696


SIMPLE: convergence criteria
    field p    tolerance 1e-10
    field U    tolerance 1e-09
    field k    tolerance 1e-08


Starting time loop

forces forces:

forceCoeffs forceCoeffs:

nearWallFields nearWallFields: Creating 2 fields
    created pNear to sample p
    created UNear to sample U

wallBoundedStreamLine : fixed track length specified : 0.0064

Time = 1001

DILUPBiCG:  Solving for Ux, Initial residual = 2.821475e-05, Final residual = 2.151082e-09, No Iterations 7
DILUPBiCG:  Solving for Uy, Initial residual = 0.000104667, Final residual = 5.230414e-08, No Iterations 5
DILUPBiCG:  Solving for Uz, Initial residual = 3.168403e-05, Final residual = 9.593234e-09, No Iterations 6
GAMG:  Solving for p, Initial residual = 0.03821306, Final residual = 0.0003685356, No Iterations 26
GAMG:  Solving for p, Initial residual = 0.01049193, Final residual = 9.309729e-05, No Iterations 16
GAMG:  Solving for p, Initial residual = 0.002297191, Final residual = 2.072066e-05, No Iterations 23
GAMG:  Solving for p, Initial residual = 0.001000528, Final residual = 9.442547e-06, No Iterations 19
GAMG:  Solving for p, Initial residual = 0.0004666346, Final residual = 4.53107e-06, No Iterations 15
GAMG:  Solving for p, Initial residual = 0.0002317556, Final residual = 2.234682e-06, No Iterations 16
GAMG:  Solving for p, Initial residual = 0.0001345208, Final residual = 1.170508e-06, No Iterations 12
GAMG:  Solving for p, Initial residual = 7.3326e-05, Final residual = 6.203478e-07, No Iterations 13
GAMG:  Solving for p, Initial residual = 4.606675e-05, Final residual = 3.245047e-07, No Iterations 11
time step continuity errors : sum local = 1.427492e-09, global = 1.643401e-10, cumulative = 1.643401e-10
DILUPBiCG:  Solving for omega, Initial residual = 3.306011e-05, Final residual = 7.599807e-09, No Iterations 1
DILUPBiCG:  Solving for k, Initial residual = 1.774335e-05, Final residual = 2.623527e-09, No Iterations 1
ExecutionTime = 438.76 s  ClockTime = 439 s

forces forces output:
    forces(pressure,viscous,porous) = ((0.1925579 0.01165662 0.04023865),(0.0004173754 9.395157e-05 -0.001121611),(0 0 0))
    moment(pressure,viscous,porous) = ((0.02154812 0.00185286 -0.123217),(-0.000778934 -5.635177e-06 -0.0002338782),(0 0 0))

forceCoeffs forceCoeffs output:
    Cm    = 0.8881965
    Cd    = 8.252606
    Cl    = 0.5025144
    Cl(f) = 1.139454
    Cl(r) = -0.6369393

nearWallFields nearWallFields output:
    Writing sampled fields to 1001  HERE IT SIMPLY STOPS AND DOES NOT GO ON...

Any idea what to do? Is it just this slow, because I am calculating on 1 core?
Thanks

Ruli January 28, 2014 16:55

Dear Foamers, did anybody successfully use the wall bounded streamlines utility (besides the motor bike tutorial)?
Are there any things in particular, I have to take care of? I just don`t understand why it is not working in my case :( :confused: :mad:

Thanks Julian

wyldckat February 2, 2014 15:49

Greetings Julian,

Let's see... regarding the first post, you can find more information if you follow these steps:
  1. Go to the modules page on the Code Documentation web-page: http://foam.sourceforge.net/docs/cpp/modules.html
  2. Look for the link "Function Objects" and then below it is "Field functions objects". Click on it.
  3. On that page find "wallBoundedStreamLine". Click on the link.
  4. Scroll down to the section "Detailed Description" and there you'll find most of the information you were asking about.
As for the problem with MRFSimpleFoam, it would seem like the mesh has some critical flaw, which leads to the function object to be unable to process properly. Run checkMesh with all of the checks:
Code:

checkMesh -allGeometry -allTopology -constant
As for the problem with the AMI patches... there is an option named "preservePatches" in "decomposeParDict" which should enforce one or more patches to remain in a single processor. Have a look here: Cyclic patches and parallel postprocessing problems post #8


As for using function objects after the simulation is finished, have a look here: http://www.cfd-online.com/Forums/ope...s-utility.html


Beyond this, I have never user this function object, so I don't have experience with it.

Best regards,
Bruno

Ruli February 2, 2014 16:45

Dear Bruno,
thanks for your answer.

Quote:

Originally Posted by wyldckat (Post 473025)
Go to the modules page on the Code Documentation web-page: http://foam.sourceforge.net/docs/cpp/modules.html
  1. Look for the link "Function Objects" and then below it is "Field functions objects". Click on it.
  2. On that page find "wallBoundedStreamLine". Click on the link.
  3. Scroll down to the section "Detailed Description" and there you'll find most of the information you were asking about.

Did that, was really helpful.


Quote:

Originally Posted by wyldckat (Post 473025)
As for the problem with MRFSimpleFoam, it would seem like the mesh has some critical flaw, which leads to the function object to be unable to process properly. Run checkMesh with all of the checks:

Code:

checkMesh -allGeometry -allTopology -constant
As for the problem with the AMI patches... there is an option named


This error is already outdated and no problem anymore.



Quote:

Originally Posted by wyldckat (Post 473025)
preservePatches" in "decomposeParDict" which should enforce one or more patches to remain in a single processor

I already did that and still get the error...

Thanks anyway for your reply. Seems, as if the wallBoundedStreamlinesFunction is quite unkown to the OF community.

Best regards
Julian


All times are GMT -4. The time now is 10:46.