CFD Online Discussion Forums

CFD Online Discussion Forums (https://www.cfd-online.com/Forums/)
-   OpenFOAM Running, Solving & CFD (https://www.cfd-online.com/Forums/openfoam-solving/)
-   -   Questions on dynamicTopoFvMesh (https://www.cfd-online.com/Forums/openfoam-solving/111926-questions-dynamictopofvmesh.html)

olivier_au_chili October 14, 2013 14:49

Quote:

Originally Posted by deepsterblue (Post 410464)
joel,

Can you try the angularOscillating variant with zero angular velocity and see if there's a difference between both solvers?

Thanks

Dear Sandeep:

I am using OpenFoam 1.6-ext with your last version dynamicTopoFvMesh. I have no problem when it runs on 1 processor but when I use mpirun, I have this bug:

Code:

Processor priority: 2(0 1)
 Topo modifier time: 0.358459 s
 Bisections :: Total: 155, Surface: 0
 Collapses  :: Total: 0, Surface: 0
 Swaps      :: Total: 316, Surface: 0
 
[0]
[0]
[0] --> FOAM FATAL ERROR:
[0] size of field = 5713 is not the same as the size of mesh = 9382
[0]
[0]    From function DimensionedField<Type, GeoMesh>::DimensionedField(const IOobject& io,const Mesh& mesh, const dimensionSet& dims, const Field<Type>& field)
[0]    in file /home/olivier/OpenFOAM/OpenFOAM-1.6-ext/src/OpenFOAM/lnInclude/DimensionedField.C at line 72.
[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.
--------------------------------------------------------------------------
[1]
[1]
[1] --> FOAM FATAL ERROR:
[1] size of field = 5733 is not the same as the size of mesh = 9437
[1]
[1]    From function DimensionedField<Type, GeoMesh>::DimensionedField(const IOobject& io,const Mesh& mesh, const dimensionSet& dims, const Field<Type>& field)
[1]    in file /home/olivier/OpenFOAM/OpenFOAM-1.6-ext/src/OpenFOAM/lnInclude/DimensionedField.C at line 72.
[1]
FOAM parallel run aborting
[1]
--------------------------------------------------------------------------
mpirun has exited due to process rank 0 with PID 31086 on
node crunchbang exiting without calling "finalize". This may
have caused other processes in the application to be
terminated by signals sent by mpirun (as reported here).
--------------------------------------------------------------------------
[crunchbang:31085] 1 more process has sent help message help-mpi-api.txt / mpi-abort
[crunchbang:31085] Set MCA parameter "orte_base_help_aggregate" to 0 to see all help / error messages
-----------------------------------------------------

==> I found that there is a problem in dynamicTopoFvMeshCoupled.C initFieldTransfers here:
Code:

  // Subset and send surfaceFields to stream
        cInfo.send<surfaceScalarField>(names[5], types[5], stream[pI]);

The others names[6] etc... seems to not generate problem.

I do not understand what is the problem, Can you help me please to solve this problem,

Thank you in advance,

Olivier

deepsterblue October 16, 2013 09:17

Olivier,

It's hard to tell from your error message. It looks like you're running with a solver that includes a surfaceScalarField that's being mapped. If you have a minimal case that reproduces the issue, perhaps I could take a look.

Also, you could set a higher debug level under the dynamicTopoFvMesh dictionary in dynamicMeshDict (goes from 0 up to 5, typically), and see if that gives you more information that I could use.

olivier_au_chili October 21, 2013 11:04

Dear Sandeep:

I am sorry for replying so late. I checked my program but I still have the same problem. I tested the tutorial projectile of the professor Kile Mooney with debug=5 and the problem is the same:


Code:

2
(
remapGradient(U)
remapGradient(U_0)
)


1
(
phi
)


0
(
)


0
(
)


0
(
)


0
(
)

)

[3]
[3]
[3] --> FOAM FATAL ERROR:
[3] size of field = 1954 is not the same as the size of mesh = 3156
[3]
[3]    From function DimensionedField<Type, GeoMesh>::DimensionedField(const IOobject& io,const Mesh& mesh, const dimensionSet& dims, const Field<Type>& field)
[3]    in file /home/olivier/OpenFOAM/OpenFOAM-1.6-ext/src/OpenFOAM/lnInclude/DimensionedField.C at line 72.
[3]
FOAM parallel run aborting
[3]
--------------------------------------------------------------------------
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.
--------------------------------------------------------------------------
[0]
[0]
[0] --> FOAM FATAL ERROR:
[0] size of field = 7289 is not the same as the size of mesh = 11923
[0]
[0]    From function DimensionedField<Type, GeoMesh>::DimensionedField(const IOobject& io,const Mesh& mesh, const dimensionSet& dims, const Field<Type>& field)
[0]    in file /home/olivier/OpenFOAM/OpenFOAM-1.6-ext/src/OpenFOAM/lnInclude/DimensionedField.C at line 72.
[0]
FOAM parallel run aborting
[0]
[1]
[1]
[1] --> FOAM FATAL ERROR:
[1] size of field = 7274 is not the same as the size of mesh = 11892
[1]
[1]    From function DimensionedField<Type, GeoMesh>::DimensionedField(const IOobject& io,const Mesh& mesh, const dimensionSet& dims, const Field<Type>& field)
[1]    in file /home/olivier/OpenFOAM/OpenFOAM-1.6-ext/src/OpenFOAM/lnInclude/DimensionedField.C at line 72.
[1]
FOAM parallel run aborting
[1]
--------------------------------------------------------------------------
mpirun has exited due to process rank 3 with PID 26415 on
node crunchbang exiting without calling "finalize". This may
have caused other processes in the application to be
terminated by signals sent by mpirun (as reported here).
--------------------------------------------------------------------------
[crunchbang:26411] 2 more processes have sent help message help-mpi-api.txt / mpi-abort
[crunchbang:26411] Set MCA parameter "orte_base_help_aggregate" to 0 to see all help / error messages

Regards,

Olivier

wyldckat October 26, 2013 04:57

Greetings to all!

@Olivier: I've seen this kind of issue before, but not with dynamicTopoFvMesh.
Usually this is due to a custom boundary condition that does not correctly support the division of patches between processors.

If you cannot provide a simple test case as Sandeep asked for, please describe in some detail the types of patches/boundary conditions you are using and what types of dynamic mesh schemes and options you are using.

Best regards,
Bruno

olivier_au_chili October 29, 2013 15:48

Dear Wyldckat:

As I wrote, I used the tutorial named "projectile" developed by Kile Mooney. This tutorial uses SIXDOF and dynamicTopoFvMesh. I believe that this tutorial was presented at the 7th OpenFoam workshop and it can be found with Caelinux.

This tutorial works without problem with the previous versions of dynamicTopoFvMesh. Unfortunately with this latest version and with my program the remeshing does not work.

In the both cases I have the same error.

Regards,

Olivier

wyldckat November 3, 2013 05:49

Hi Olivier,

I was going to try and reproduce the same error you're getting, but I remembered that there are some unknowns I would like to check with you:
  1. The 1.6-ext build you are using, is indexed to which commit on git? You can run the following commands to see this:
    Code:

    foam
    git log -1

  2. Are you using the default Mesquite version that 1.6-ext uses or have you upgraded it?
  3. How exactly did you integrate/build the latest "dynamicTopoFvMesh" from https://github.com/smenon/dynamicTopoFvMesh into 1.6-ext?
Best regards,
Bruno

olivier_au_chili November 5, 2013 07:36

Hi Bruno

As I was using a oldest version, yesterday I did a clean reinstall of openFoam-1.6-ext, following the tutorial:
http://openfoamwiki.net/index.php/In...u#Ubuntu_12.10 since I have wheezy.

i) I use a default Mesquite version
ii) I install dynamicTopoFvMesh in my directory OpenFoam outside of the directory OpenFOAM-1.6-ext. I followed the installation instructions described by Sandeep Menon: steps 1,2,3 and git clone https://github.com/smenon/dynamicTopoFvMesh etc.
iii) The libraries of dynamicTopoFvMesh are built in $FOAM_USER_LIBBIN / $FOAM_USER_APPBIN

I obtained the same results as described above this post.

Thank you for your help,

Olivier

codder January 17, 2014 17:33

foam-extend-3.0 & dynamicTopoFvMesh-git
 
Apologies for my lack of understanding, I am a relative newcomer to c++. I am seeing an error I do not understand given the easy installation instructions for dynamicTopoFvMesh.

First off, I followed Bruno's instructions for foam-extend installation just a couple changes in order to compile in Debug.

1. All Bruno's steps up to and including the execution of ./Allmake.

2. But, before executing

Code:

    source etc/bashrc
... I took the following two steps:

(a) Created symbolic links such that:

Code:

ln -s $WM_THIRD_PARTY_DIR/packages/hwloc-1.7.2/platforms/linux64Gcc46DPOpt $WM_THIRD_PARTY_DIR/packages/hwloc-1.7.2/platforms/linux64Gcc46DPDebug
    ln -s $WM_THIRD_PARTY_DIR/packages/scotch-6.0.0/platforms/linux64Gcc46DPOpt $WM_THIRD_PARTY_DIR/packages/scotch-6.0.0/platforms/linux64Gcc46DPDebug
    ln -s $WM_THIRD_PARTY_DIR/packages/metis-5.1.0/platforms/linux64Gcc46DPOpt $WM_THIRD_PARTY_DIR/packages/metis-5.1.0/platforms/linux64Gcc46DPDebug
    ln -s $WM_THIRD_PARTY_DIR/packages/cmake-2.8.12/platforms/linux64Gcc46DPOpt $WM_THIRD_PARTY_DIR/packages/cmake-2.8.12/platforms/linux64Gcc46DPDebug
    ln -s $WM_THIRD_PARTY_DIR/packages/mesquite-2.1.2/platforms/linux64Gcc46DPOpt $WM_THIRD_PARTY_DIR/packages/mesquite-2.1.2/platforms/linux64Gcc46DPDebug
    ln -s $WM_THIRD_PARTY_DIR/packages/libccmio-2.6.1/platforms/linux64Gcc46DPOpt $WM_THIRD_PARTY_DIR/packages/libccmio-2.6.1/platforms/linux64Gcc46DPDebug
    ln -s $WM_THIRD_PARTY_DIR/packages/ParaView-4.0.1/platforms/linux64Gcc46DPOpt $WM_THIRD_PARTY_DIR/packages/ParaView-4.0.1/platforms/linux64Gcc46DPDebug
    ln -s $WM_THIRD_PARTY_DIR/packages/parmetis-4.0.3/platforms/linux64Gcc46DPOpt $WM_THIRD_PARTY_DIR/packages/parmetis-4.0.3/platforms/linux64Gcc46DPDebug
    ln -s $WM_THIRD_PARTY_DIR/packages/ParMGridGen-1.0/platforms/linux64Gcc46DPOpt $WM_THIRD_PARTY_DIR/packages/ParMGridGen-1.0/platforms/linux64Gcc46DPDebug

(b) Alter etc/bashrc such that it reads:

Code:

    : ${WM_COMPILE_OPTION:=Debug}; export WM_COMPILE_OPTION
3. Continued with Bruno's remaining steps.

Then, I downloaded and installed the git version of dynamicTopoFvMesh, as per Sandeep's Install.txt.

4. Executed:

Code:

    mkdir -p $WM_PROJECT_USER_DIR/run/dynamicTopoFvMesh $FOAM_USER_LIBBIN $FOAM_USER_APPBIN
    git clone https://github.com/smenon/dynamicTopoFvMesh $WM_PROJECT_USER_DIR/run/dynamicTopoFvMesh

5. Go to the checked-out directory and compile:

Code:

    cd $WM_PROJECT_USER_DIR/run/dynamicTopoFvMesh
    ./Allwmake

6. Prepare to test the installation:

Code:

    cp -r ~/foam/tutorials/mesh/moveDynamicMesh/circCylinder3d $WM_PROJECT_USER_DIR/run/
    cd $WM_PROJECT_USER_DIR/run/circCylinder3d

7. Make the top of constant/dynamicMeshDict look like:

Code:

    dynamicFvMeshLibs      ("libdynamicTopoFvMesh.so");

    motionSolverLibs        ("libmesquiteMotionSolver.so");

    //- Select the type of dynamicFvMesh
    dynamicFvMesh          dynamicTopoFvMesh-git;

    //- Select the type of motionSolver
    solver                  mesquiteMotionSolver-git;

8. Solve

Code:

./Allrun
cat log.moveDynamicMesh
/*---------------------------------------------------------------------------*\
| =========                |                                                |
| \\      /  F ield        | foam-extend: Open Source CFD                    |
|  \\    /  O peration    | Version:  3.0                                  |
|  \\  /    A nd          | Web:        http://www.extend-project.de      |
|    \\/    M anipulation  |                                                |
\*---------------------------------------------------------------------------*/
Build    : 3.0-8d34057e525d
Exec    : moveDynamicMesh
Date    : Jan 17 2014
Time    : 16:30:54
Host    : eric-Parallels-Virtual-Platform
PID      : 25351
CtrlDict : /home/eric/foam/foam-extend-3.0/etc/controlDict
Case    : /home/eric/foam/eric-3.0/run/circCylinder3d
nProcs  : 1
SigFpe  : Enabling floating point exception trapping (FOAM_SIGFPE).

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

Create dynamic mesh for time = 0

Selecting dynamicFvMesh dynamicTopoFvMesh-git
--> FOAM Warning :
    From function dlLibraryTable::open(const dictionary& dict, const word& libsEntry, const TablePtr tablePtr)
    in file /home/eric/foam/foam-extend-3.0/src/foam/lnInclude/dlLibraryTableTemplates.C at line 67
    library "libdynamicTopoFvMesh.so" did not introduce any new entries



--> FOAM FATAL ERROR:
Unknown dynamicFvMesh type dynamicTopoFvMesh-git

Valid dynamicFvMesh types are :

19
(
dynamicTopoFvMesh
attachDetachFvMesh
linearValveLayersFvMesh
multiMixerFvMesh
linearValveFvMesh
dynamicBoxFvMesh
dynamicMotionSolverFvMesh
multiTopoBodyFvMesh
mixerGgiFvMesh
turboFvMesh
dynamicBodyFvMesh
subsetMotionSolverFvMesh
solidBodyMotionFvMesh
dynamicRefineFvMesh
movingBodyTopoFvMesh
mixerFvMesh
dynamicInkJetFvMesh
movingBoxFvMesh
staticFvMesh
)


    From function dynamicFvMesh::New(const IOobject&)
    in file dynamicFvMesh/newDynamicFvMesh.C at line 95.

FOAM exiting

What am I doing wrong? Much appreciated, Eric

Edit:
The same fatal warming/fatal error sequence occurs when using a installation of foam-extend-3.0 compiled for Opt.

deepsterblue January 17, 2014 18:27

Hello Eric,

I apologize - I forgot to update the instructions. You will need to remove the dynamicTopoFvMesh files from the foam-extend-3.0 source and recompile the dynamicFvMesh library. You may want to do that with the mesquiteMotionSolver library as well.

The reason you're seeing the failure is due to conflicting sources - I'm still trying the figure out the most optimal way to have things side-by-side.

codder January 17, 2014 20:34

recompiled dynamicTopoFvMesh, not so much mesquiteMotionSolver - perhaps?
 
1 Attachment(s)
Hi Sandeep -

Ok I have followed the old version directions -

https://github.com/smenon/dynamicTop...b1/Install.txt

... which changes my log.moveDynamicMesh to:
Code:

moveDynamicMesh: symbol lookup error: /home/eric/foam/foam-extend-3.0/lib/linux64Gcc46DPDebug/libdynamicFvMesh.so: undefined symbol: _ZN4Foam9coupleMap8typeNameE
... perhaps associated with not having:

Quote:

You may want to do that with the mesquiteMotionSolver library as well.
Edit #1: Tried
Code:

cd $FOAM_SRC/dynamicMesh/meshMotion/mesquiteMotionSolver
wclean

... but saw same undefined symbol error.

Edit #2: Immediately after Edit #1, tried
Code:

cd ..
mv mesquiteMotionSolver mesquiteMotionSolver.old
cp -r $WM_PROJECT_USER_DIR/run/dynamicTopoFvMesh/mesquiteMotionSolver .
cd mesquiteMotionSolver
wmake

... but got error (attached).

Very much appreciate your responsiveness, Eric

deepsterblue January 20, 2014 15:15

Eric,

Use 'wmake libso', not just 'wmake'.

You should ensure that Mesquite is installed correctly - your log seems to suggest otherwise.

hansjustinian January 21, 2014 22:44

Dear Sandeep,

I am using OpenFoam 1.6-ext with your latest version of dynamicTopoFvMesh. I am currently trying to simulate two leaflets rotating in a chamber. The model is currently not made to scale. My plan is to eventually perform a FSI simulation on a bi-leaflet valves in a heart chamber, using pimpleDyMFoam. My sample case can be downloaded here (5MB):
https://dl.dropboxusercontent.com/u/...73K_sample.zip

I have not started on the 6DoF FSI simulation as I am just evaluating to see if the mesh is able to rotate fully and that the mesh quality is okay throughout the cycle. I use moveDynamicMesh and allow edgeRefinement 'yes' as mentioned in an earlier post that may cause the cell not grow properly and collapse. However, I still encountered the issue of negative cells as mentioned by Bruno earlier. I've also checked to ensure that the length scale for the two leaflets 'wing_1' and 'wing_2' patches match the dynamicMeshDict. I am not sure what went wrong. I thought that the reason might due to that the wing_1 and wing_2 being rotated faster than the mesh changes so I let both the patches to rotate slowly but it seems like it wasn't the case. How should I proceed to work on the FSI simulation of the two leaflets?

Hoping to hear your views/comments.

Best wishes,
Han

Error message
Code:

leo@leo-laptop:~/OpenFOAM/leo-1.6-ext/run/mesh/leaflets_273K$ moveDynamicMesh >log.run1


--> FOAM FATAL ERROR:

************** QualityAssessor(free only) Summary **************

  Evaluating quality for 462900 free elements of 463335 total elements.
  THERE ARE 1 INVERTED ELEMENTS.
  (Elements invalid at 1 of 462900 sample locations.)

  1 OF 462900 ENTITIES EVALUATED TO AN UNDEFINED VALUE FOR AspectRatioGamma

          metric    minimum    average        rms    maximum    std.dev.
AspectRatioGamma    1.00056    3.40248    1469.79      1e+06    1469.79
--> FOAM Warning :
    From function bool dynamicTopoFvMesh::meshQuality(bool outputOption)
    in file dynamicTopoFvMesh/dynamicTopoFvMeshCheck.C at line 197
   
Minimum cell quality is: -0.32534 at cell: 3033

 ~~~ Mesh Quality Statistics ~~~
 Min: -0.32534
 Max: 0.999954
 Mean: 0.872208
 Cells: 463335
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Encountered negative cell-quality!
Edge: 562440: (1775 1888)
EdgePoints: 4(1838 14000 54312 1745)
Minimum Quality: -0.32534

    From function scalar dynamicTopoFvMesh::computeMinQuality(const label eIndex
) const
    in file dynamicTopoFvMesh/edgeSwap.C at line 1726.

FOAM aborting

Aborted

This is my dynamicMeshDict

Code:

/*--------------------------------*- C++ -*----------------------------------*\
| =========                |                                                |
| \\      /  F ield        | OpenFOAM Extend Project: Open Source CFD        |
|  \\    /  O peration    | Version:  1.6-ext                              |
|  \\  /    A nd          | Web:      www.extend-project.de                |
|    \\/    M anipulation  |                                                |
\*---------------------------------------------------------------------------*/
FoamFile
{
    version    2.0;
    format      ascii;
    class      dictionary;
    location    "constant";
    object      dynamicMeshDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

//- Select the type of dynamicFvMesh
dynamicFvMesh          dynamicTopoFvMesh;

//- Select the type of motionSolver
solver                  mesquiteMotionSolver;

mesquiteOptions
{
    //- Optimization metric
    optMetric              AspectRatioGamma;

    //- Objective function
    objFunction            LPtoP;

    //- Optimization algorithm
    optAlgorithm            FeasibleNewton;

    //- Termination criteria sub-dictionaries
    //- (takes default values if not specified)
    //-  Specifying an empty sub-dictionary
    //-  terminates with available options
    tcInner
    {
        absGradL2            1e-4;
        cpuTime              2;
    }

    // tcOuter
    // {}

    //- For composite functions, two objectives need to be specified
    // firstFunction          LPtoP;
    // secondFunction          LInf;

    //- For scaled functions, scale and objective needs to be specified
    // scaleFunction        PMeanP;
    // scale                1.5;

    //- Power value for the LPtoP objective function
    pValue                  2;
    power                  2;

    //- Specify a tolerance for the surface-smoothing CG solver
    tolerance              1e-6;

    //- Specify number of CG sweeps for surface-smoothing
    nSweeps                4;

    //- Specify slip patches for the motionSolver
    slipPatches
    {
        //wall;
        //topWall;
    }

    //- Constrain surface mesh-motion on a specified cylinder
    cylindricalConstraints
    {
        //- Specify options per slip patch
      //  sideWall
      // {
      //    axisPoint      (0.0 0.0 0.0);
      //    axisVector    (0.0 0.0 1.0);
      //    radius          1.0;
      // }
    }

    //- Specify fixedValue patches for the motionSolver
    fixedValuePatches
    {
        wing_1
        {
            type          angularOscillatingDisplacement;
            amplitude    0.1;
            //type          oscillatingDisplacement;
            //amplitude    (0 0 -0.01);
            axis          (0 0 1);
            origin        (-0.75 2 0);
            angle0        0.001;
            omega        0.005;
            value        uniform (0 0 0);
        }

        wing_2
        {
            type          angularOscillatingDisplacement;
            amplitude    0.1;
            //type          oscillatingDisplacement;
            //amplitude    (0 0 -0.01);
            axis          (0 0 1);
            origin        (-0.75 -2 0);
            angle0        -0.001;
            omega        -0.005;
            value        uniform (0 0 0);
        }
    }

    //- Specify interval for surface smoothing
    surfInterval            1;
}

//- Options for dynamicTopoFvMesh
dynamicTopoFvMesh
{
    //- Should all options be made mandatory?
    //- Useful for first-time use.
    allOptionsMandatory no;

    //- Set run-time debug level [0-5]
    // debug              0;

    //- Specify the number of threads
    threads            2;

    //- Specify re-meshing interval
    //- Negative value implies no re-meshing
    interval            5;

    //- Specify whether the length-scale field
    //- should be dumped to disk
    dumpLengthScale    false;

    //- sliverThreshold specifies the
    //- quality criteria for sliver removal.
    sliverThreshold    0.35;

    //- Should the tool attempt to remove slivers
    //- that fall below the sliverThreshold value?
    removeSlivers      false;

    //- Skip mapping step. Useful while using
    //- this tool as a pre-processor
    // skipMapping        true;

    // Toggle edgeRefinement on/off
    edgeRefinement      yes;

    //- Options for edge-bisection/collapse.
    //-  The edgeRefinement flag must be set for
    //-  the following options to have effect
    refinementOptions
    {
        collapseRatio  0.5;
        bisectionRatio  1.5;
        growthFactor    1; //growth factor should be set at 1

        //- By default, existing boundary edge-lengths
        //- are used for length-scales.
        //- Length-scale can be fixed for certain patches.
        fixedLengthScalePatches
        {
            wing_1    0.1; //need to set a fixedLengthScalePatch
        wing_2    0.1;         
          // bottomWall  0.2;
          // sideWall    0.2;
          //  outlet      0.2;
        }

        //- Avoid refinement on certain patches, if necessary
        noModificationPatches
        {
        wing_1;
        wing_2;
    }

        //- Set floating length-scale values on certain patches
        freeLengthScalePatches
        {}

        //- Limit lengthScales to specified values, if necessary
        minLengthScale  0.1;
        maxLengthScale  0.2;

        //- Field-based refinement options
        // fieldRefinement  gamma;
        // fieldLengthScale 0.005;
        // lowerRefineLevel 0.001;
        // upperRefineLevel 0.999;
        // maxRefineLevel  4;
        // meanScale        0.015;
    }

    //- If the number of modifications are to be limited, set this option
    maxModifications  1000;

    //- Load custom libraries for metrics
    tetMetricLibs      ("libtetMetrics.so");

    //- Tetrahedral mesh quality metric
    tetMetric          Knupp;

    //- Avoid 2-2 swapping on certain patches
    noSwapPatches
    {
    wing_1;
    wing_2;
    wall;
    }
}

// ************************************************************************* //


codder February 5, 2014 21:37

BC for FSI
 
Hi Sandeep -

Initially I believed that dynamicTopoFvMesh (used with the mesquite motion solver) needed a very explicit surface to mesh against -- e.g. a function defining the solid surface, or an stil surface.

But then, I noticed your recommendation of the use of dynamicTopoFvMesh for a FSI case...

So, here's the question:

Inside my:

Code:

~/foam/foam-extend-3.0/tutorials/solidMechanics/deprecatedTutorials/icoFsiFoam/flappingConsoleSmall/fluid/0/U
... there exists a boundary condition:

Code:

    consoleFluid
    { 
        type            movingWallVelocity;
        value          uniform (0 0 0);
    }

Is this BC also usable, in this way as a fluid BC for dynamicTopoFvMesh? I'm specifically thinking with regards to the icoFsiFoam solver.

Parenthetically, I am not the only one with these questions, see this post.

Anyway - thanks for bearing with me. I'm hoping to not make 'wmake libso' beginner mistakes, for all that much longer.

Best, Eric

deepsterblue February 6, 2014 10:07

Hans,
It looks like the mesh was inverted before the motionSolver was called, so you may want to check your boundary motion to ensure that it is correct.

Eric,
Yes, you can use any boundary condition you like - no limitations.

codder March 13, 2014 15:24

posted mesquite-2.1.2.tar.gz
 
Hi all -

I was recompiling foam-extend from source. Noticed that the wget of mesquite is currently down. (This takes place during the ThirdParty compile.)

Perhaps someone will find the link to the mesquite-2.1.2.tar.gz tarball useful.

Best, Eric

Mojtaba.a July 15, 2014 20:40

Quote:

Originally Posted by joegi.geo (Post 413652)
Hi Sandeep,

Any update regarding this issue?

Dear Joegi and Sandeep,

I am sorry to bring up this issue again, but is that problem solved?

Mojtaba.a July 15, 2014 21:25

Dear Sandeep,

I have used the timeVaryingDisplacement patchField suggested by you earlier. Now the mesquiteMotionSolver predicts the motion just fine. But there is an another strange behavior when I use dynamicTopofvMesh besides with mesquiteMotionSolver.

My results:

moveMesh --> Predicts the motion just fine (but there is no re-meshing of course)

moveDynamicMesh --> Re-meshing occurs but the motion is less that what expected.

P.S: I am using openFOAM 2.3

Mojtaba.a July 15, 2014 21:41

Well, just tested on foam-3 and got it working successfully.
the "timeVaryingDisplacement" method worked just fine in foam-3.

However I wonder why it didn't work on openFOAM 2.3 ?! As I mentioned in my previous post, the mesquiteMotionSolver works just fine when it is used alone by running "moveMesh", but when I use moveDynamicMesh, the actual displacement is somewhat less than the desired displacement (maybe 20% less). This is strange because the same case worked just fine in foam-3.

After all these, I started to solve for flow and I have encountered a new problem. As long as dynamic mesh is fine in foam-3 I tried to use this version to solve for fluid flow, but here is my output:

Code:

/*---------------------------------------------------------------------------*\
| =========                |                                                |
| \\      /  F ield        | foam-extend: Open Source CFD                    |
|  \\    /  O peration    | Version:  3.0                                  |
|  \\  /    A nd          | Web:        http://www.extend-project.de      |
|    \\/    M anipulation  |                                                |
\*---------------------------------------------------------------------------*/
Build    : 3.0-349d2a5f6cf0
Exec    : pimpleDyMFoam
Date    : Jul 17 2014
Time    : 19:30:48
Host    : mojtaba-Aspire-E1-572G
PID      : 4436
CtrlDict : /opt/foam/foam-extend-3.0/etc/controlDict
Case    : /home/mojtaba/foam/mojtaba-3.0/run/moveDynamicMeshNoCheck/angularDisplacement
nProcs  : 1
SigFpe  : Enabling floating point exception trapping (FOAM_SIGFPE).

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

Create dynamic mesh for time = 0.01

Selecting dynamicFvMesh dynamicTopoFvMesh
// using new solver syntax:
pFinal
{
    solver          PCG;
    preconditioner  DIC;
    minIter        0;
    maxIter        1000;
    tolerance      1e-06;
    relTol          0;
}

// using new solver syntax:
U
{
    solver          PBiCG;
    preconditioner  DILU;
    minIter        0;
    maxIter        1000;
    tolerance      1e-05;
    relTol          0;
}

// using new solver syntax:
lengthDensity
{
    solver          PCG;
    preconditioner  DIC;
    tolerance      1e-06;
    relTol          0;
}

// using new solver syntax:
cellDisplacement
{
    solver          PCG;
    preconditioner  DIC;
    tolerance      1e-06;
    relTol          0;
}

// using new solver syntax:
cellMotionU
{
    solver          PCG;
    preconditioner  DIC;
    tolerance      1e-06;
    relTol          0;
}

Selecting motion solver: mesquiteMotionSolver
Reading field p

Reading field U

Reading/calculating face flux field phi

Selecting incompressible transport model Newtonian
Selecting turbulence model type RASModel
Selecting RAS turbulence model laminar
Reading field rAU if present


Starting time loop

Courant Number mean: 0.29339383 max: 4.901141788 velocity magnitude: 3.720355415
Time = 0.02

Solving for point motion:  Initial residual: 1 Final residual: 0.009239987861 No Iterations: 61

 ~~~ Mesh Quality Statistics ~~~
 Min: 0.2613689959
 Max: 0.9999978442
 Mean: 0.9794392838
 Cells: 5270
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Sliver list:
 Cell: 63 Quality: 0.2613689959
  Refinement Progress: 100% :  Bisections: 2594, Collapses: 2, Total: 2596                   

Edge Bisection/Collapse complete.

Edge Swapping complete.
 Topo modifier time: 2.59192 s
 Bisections :: Total: 2594, Surface: 0
 Collapses  :: Total: 2, Surface: 0
 Swaps      :: Total: 1941, Surface: 0
 Mapping time: 5.186335 s

=================
 Mesh reOrdering
=================
 Mesh Info [n]:
 Points: 5450
 Edges: 18717
 Faces: 18536
 Cells: 5270
 Internal Edges: 2543
 Internal Faces: 7814
 nPatches: 6
=================
 Mesh Info [n+1]:
 Points: 10634
 Edges: 36861
 Faces: 36680
 Cells: 10454
 Internal Edges: 5135
 Internal Faces: 15590
 nPatches: 6
=================
Checking index ranges...Done.
Checking face-cell connectivity...Done.
Checking for unused points...Done.
Checking edge-face connectivity...Done.
Checking cell-point connectivity...Done.
ReOrdering points...Done.
ReOrdering cells...Done.
ReOrdering faces...Done.
ReOrdering edges...Done.
 Reordering time: 0.096887 s
void dynamicTopoFvMesh::mapFields(const mapPolyMesh&) const: Mapping fv fields.
 ~~~ No flux correction ~~~

 ~~~ Mesh Quality Statistics ~~~
 Min: 0.1732305256
 Max: 0.9999978442
 Mean: 0.854987889
 Cells: 10454
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

volume continuity errors : volume = 0.4326277588, max error = 1.449932188e-12, sum local = 2.169292736e-15, global = -1.182984278e-18
Courant Number mean: 0.004338463178 max: 8.239652246 velocity magnitude: 1.526502941
DILUPBiCG:  Solving for Ux, Initial residual = 0.1742054711, Final residual = 5.684830235e-06, No Iterations 15
DILUPBiCG:  Solving for Uy, Initial residual = 0.1159651364, Final residual = 2.65041264e-06, No Iterations 15
DICPCG:  Solving for p, Initial residual = 0.7513547308, Final residual = 9.913477838e-07, No Iterations 427
time step continuity errors : sum local = 2.533032436e-09, global = 3.592774172e-15, cumulative = 3.592774172e-15
Moving mesh time step continuity errors : sum local = 2.533032436e-09, global = 3.59277391e-15, cumulative = 7.185548082e-15
DILUPBiCG:  Solving for Ux, Initial residual = 0.3950790016, Final residual = 1.108850263e-06, No Iterations 6
DILUPBiCG:  Solving for Uy, Initial residual = 0.3577430631, Final residual = 1.691534887e-06, No Iterations 6
DICPCG:  Solving for p, Initial residual = 0.8415321322, Final residual = 9.830076684e-07, No Iterations 255
time step continuity errors : sum local = 5.578217448e-09, global = 3.592702332e-15, cumulative = 1.077825041e-14
Moving mesh time step continuity errors : sum local = 5.578217448e-09, global = 3.59270057e-15, cumulative = 1.437095098e-14
ExecutionTime = 8.27 s  ClockTime = 8 s

Courant Number mean: 0.04452266446 max: 103.3907008 velocity magnitude: 26.5772148
Time = 0.03

Solving for point motion:  Initial residual: 1 Final residual: 0.00960674696 No Iterations: 51

 ~~~ Mesh Quality Statistics ~~~
 Min: 0.2007684601
 Max: 0.9999968078
 Mean: 0.9369977474
 Cells: 10454
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Sliver list:
 Cell: 114 Quality: 0.2007684601
 Cell: 6024 Quality: 0.2318143363
 Cell: 7502 Quality: 0.2820604582
 Cell: 5472 Quality: 0.2988653804

Edge Bisection/Collapse complete.

Edge Swapping complete.
 Topo modifier time: 0.660162 s
 Bisections :: Total: 1095, Surface: 0
 Collapses  :: Total: 817, Surface: 1
 Swaps      :: Total: 722, Surface: 0
 Slivers    :: 3
 Mapping errors:  max cell error: 18.35941672 max face error: 1
 failedCells:
  Cell: 371  Error: 0.01267692758
  Cell: 8823  Error: 18.35941672
  Cell: 12593  Error: 0.1381838994
 failedFaces:
  Face: 36860  Patch: frontAndBackPlanes  Error: 1
  Face: 43822  Patch: frontAndBackPlanes  Error: 0.01267692758
  Face: 43825  Patch: frontAndBackPlanes  Error: 0.03432319599
  Face: 44007  Patch: frontAndBackPlanes  Error: 0.01267692758
 Mapping time: 3.545908 s

=================
 Mesh reOrdering
=================
 Mesh Info [n]:
 Points: 10634
 Edges: 36861
 Faces: 36680
 Cells: 10454
 Internal Edges: 5135
 Internal Faces: 15590
 nPatches: 6
=================
 Mesh Info [n+1]:
 Points: 11190
 Edges: 38809
 Faces: 38629
 Cells: 11011
 Internal Edges: 5414
 Internal Faces: 16426
 nPatches: 6
=================
Checking index ranges...Done.
Checking face-cell connectivity...Done.
Checking for unused points...Done.
Checking edge-face connectivity...Done.
Checking cell-point connectivity...Done.
ReOrdering points...Done.
ReOrdering cells...Done.
ReOrdering faces...Done.
ReOrdering edges...Done.
 Reordering time: 0.095546 s
void dynamicTopoFvMesh::mapFields(const mapPolyMesh&) const: Mapping fv fields.
Segmentation fault (core dumped)

On the other hand, when I use openFOAM 2.3 (of course with wrong motion as mentioned before) flow is solved just fine.

Not to mix up as a conclusion,

foam-extend-3.0 --> (True mesh dynamics) And (Core dumed while solving for fluid flow)
OpenFOAM-2.3 --> (Right motion of the mesh when using moveMesh) And (wrong motion of the mesh when using moveDynamicMesh) And (Solving for fluid flow with no problems)

Mojtaba.a July 17, 2014 15:39

Never mind, I just pulled to the latest update in foam-extend-3 and everything worked just fine.

Sandeep, I want to thank you for this incredible tool, its great :).

Giancarlo_IngChimico February 8, 2015 18:34

2 Attachment(s)
Dear FOAMers,
I have a problem with the dynamicTopoFvMesh developed by Sandeep Menon.
The aim of my work is to develop a solver within the OpenFOAM framework for the simulation of the combustion of spherical/cylindrical particle of biomass. To reach this object I have to introduce a moving mesh in order to allow the shrinking of the particle. I use OpenFOAM 3.1-ext. I have developed a new class (named shrinkingParticle) that allows the movement of the all points on the surface. I have used these libraries for the mesh motion and I have introduced my class as BC for the surface points in the fixedValuePatches of the dynamicMeshDict.
To test this new tool, I have used the moveDynamicMesh and it works very good.
I have problems when I add some calculations together with the mesh motion.
For instance, I have added the simple temperature laplacian after the mesh update:
Code:

mesh.update();
#include "checkVolContinuity.H"
if (runTime.timeIndex() % checkFrequency == 0)
{
    mesh.checkMesh(true);
}
#include "readSIMPLEControls.H"
for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++)
{
    solve
    (
          fvm::ddt(T) - fvm::laplacian(DT, T)
    );
}
runTime.write();

I have imposed an internal temperature of 300 K and a boundary value of 700 K.
The temperature must be bounded in this range [300-700], but with the mesh motion my solution exceeds these values.
I've attached the dynamicMeshDict and the spherical tet mesh that I use. I have noted that the solution is very sensitive at the kind of function that I insert in the mesquiteOptions. Maybe, I adopt incorrect options within the dictionary, but I have no idea how fix my problem.
Can anyone help me, or give me any tips?

Thank you so much for the attention

Best regards
Giancarlo Gentile
Code:


dynamicFvMeshLibs      ("libdynamicTopoFvMesh.so");

motionSolverLibs        ("libmesquiteMotionSolver.so");

//- Select the type of dynamicFvMesh
dynamicFvMesh          dynamicTopoFvMesh;

//- Select the type of motionSolver
solver                  mesquiteMotionSolver;

mesquiteOptions
{
    //- Optimization metric
    optMetric              AspectRatioGamma;

    //- Objective function
    objFunction            LPtoP;

    //- Optimization algorithm
    optAlgorithm            FeasibleNewton;

    //- Termination criteria sub-dictionaries
    //- (takes default values if not specified)
    //-  Specifying an empty sub-dictionary
    //-  terminates with available options
    tcInner
    {
        absGradL2            1e-4;
        cpuTime              0.5;
    }

    // tcOuter
    // {}

    //- For composite functions, two objectives need to be specified
    // firstFunction          LPtoP;
    // secondFunction          LInf;

    //- For scaled functions, scale and objective needs to be specified
    // scaleFunction        PMeanP;
    // scale                1.5;

    //- Power value for the LPtoP objective function
    pValue                  2;
    power                  2;

    //- Specify a tolerance for the surface-smoothing CG solver
    tolerance              1e-2;

    //- Specify number of CG sweeps for surface-smoothing
    nSweeps                2;

    //- Specify slip patches for the motionSolver
    slipPatches
    {
       
    }

    //- Constrain surface mesh-motion on a specified cylinder
    cylindricalConstraints
    {
       
    }

    //- Specify fixedValue patches for the motionSolver
    fixedValuePatches
    {
        outlet
        {
            type          shrinkingParticle;
            amplitude    0.00125;
            lenght      0.;
            value        uniform (0 0 0);
 
        }
    }

    //- Specify interval for surface smoothing
    surfInterval            1;
}

//- Options for dynamicTopoFvMesh
dynamicTopoFvMesh
{
    //- Should all options be made mandatory?
    //- Useful for first-time use.
    allOptionsMandatory no;

    //- Set run-time debug level [0-5]
    // debug              0;

    //- Specify the number of threads
    threads            1;

    //- Specify re-meshing interval
    //- Negative value implies no re-meshing
    interval            1;

    //- Specify whether the length-scale field
    //- should be dumped to disk
    dumpLengthScale    false;

    //- sliverThreshold specifies the
    //- quality criteria for sliver removal.
    sliverThreshold    0.35;

    //- Should the tool attempt to remove slivers
    //- that fall below the sliverThreshold value?
    removeSlivers      false;

    //- Skip mapping step. Useful while using
    //- this tool as a pre-processor
    // skipMapping        true;

    // Toggle edgeRefinement on/off
    edgeRefinement      no;

    //- Options for edge-bisection/collapse.
    //-  The edgeRefinement flag must be set for
    //-  the following options to have effect
    refinementOptions
    {
        collapseRatio  0.5;
        bisectionRatio  1.5;
        growthFactor    1.03;

        //- By default, existing boundary edge-lengths
        //- are used for length-scales.
        //- Length-scale can be fixed for certain patches.
        fixedLengthScalePatches
        {
         
        }

        //- Avoid refinement on certain patches, if necessary
        noModificationPatches
        {}

        //- Set floating length-scale values on certain patches
        freeLengthScalePatches
        {}

        //- Limit lengthScales to specified values, if necessary
        // minLengthScale  0.1;
        // maxLengthScale  0.3;

        //- Field-based refinement options
        // fieldRefinement  gamma;
        // fieldLengthScale 0.005;
        // lowerRefineLevel 0.001;
        // upperRefineLevel 0.999;
        // maxRefineLevel  4;
        // meanScale        0.015;
    }

    //- If the number of modifications are to be limited, set this option
    // maxModifications  1000;

    //- Load custom libraries for metrics
    // tetMetricLibs      ("libtetMetrics.so");

    //- Tetrahedral mesh quality metric
    tetMetric          Knupp;

    //- Avoid 2-2 swapping on certain patches
    noSwapPatches
    {}
}



All times are GMT -4. The time now is 02:23.