CFD Online Logo CFD Online URL
www.cfd-online.com
[Sponsors]
Home > Forums > Software User Forums > OpenFOAM > OpenFOAM Running, Solving & CFD

icoDyMFoam with non-Orthogonality Check

Register Blogs Members List Search Today's Posts Mark Forums Read

Reply
 
LinkBack Thread Tools Search this Thread Display Modes
Old   April 13, 2015, 06:06
Post icoDyMFoam with non-Orthogonality Check
  #1
New Member
 
Mathi
Join Date: Dec 2014
Posts: 11
Rep Power: 11
fluidmobil is on a distinguished road
Hello,

I'm using icoDyMFoam for a moving Mesh without topological changes. In order to control the mesh-Quality during the run I want to use checkMesh while running icoDyMFoam.

So is the non-Orthogonality check already done with icoDyMFoam and if so, how can I simlply use it?

I want icoDyMFoam to stop the run if non-Orthogonality exceeds a particular threshold.

thanks for help
fluidmobil is offline   Reply With Quote

Old   April 22, 2015, 10:07
Default
  #2
New Member
 
Mathi
Join Date: Dec 2014
Posts: 11
Rep Power: 11
fluidmobil is on a distinguished road
some additional info: I am using foam extend 3.1
I tried this so far:

in the solver icoDyMFoam.C I added the lines

Code:
#       include "checkVolContinuity.H"

        if (runTime.timeIndex())
        {
            mesh.checkMesh(true);
        }

Code of icoDyMFoam.C (added lines coloured green):
Code:
/*---------------------------------------------------------------------------*\
  =========                 |
  \\      /  F ield         | foam-extend: Open Source CFD
   \\    /   O peration     |
    \\  /    A nd           | For copyright notice see file Copyright
     \\/     M anipulation  |
-------------------------------------------------------------------------------
License
    This file is part of foam-extend.

    foam-extend is free software: you can redistribute it and/or modify it
    under the terms of the GNU General Public License as published by the
    Free Software Foundation, either version 3 of the License, or (at your
    option) any later version.

    foam-extend is distributed in the hope that it will be useful, but
    WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with foam-extend.  If not, see <http://www.gnu.org/licenses/>.

Application
    icoDyMFoam

Description
    Transient solver for incompressible, laminar flow of Newtonian fluids
    with dynamic mesh.

Author
    Hrvoje Jasak, Wikki Ltd.  All rights reserved.

\*---------------------------------------------------------------------------*/

#include "fvCFD.H"
#include "dynamicFvMesh.H"

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

int main(int argc, char *argv[])
{
#   include "setRootCase.H"
#   include "createTime.H"
#   include "createDynamicFvMesh.H"
#   include "initContinuityErrs.H"
#   include "initTotalVolume.H"
#   include "createFields.H"

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

    Info<< "\nStarting time loop\n" << endl;

    while (runTime.run())
    {
#       include "readControls.H"
#       include "checkTotalVolume.H"

        // Make the fluxes absolute
        fvc::makeAbsolute(phi, U);

#       include "CourantNo.H"
#       include "setDeltaT.H"

        runTime++;

        Info<< "Time = " << runTime.timeName() << nl << endl;

        bool meshChanged = mesh.update();
        reduce(meshChanged, orOp<bool>());

#       include "volContinuity.H"

        if (correctPhi && (mesh.moving() || meshChanged))
        {
            // Fluxes will be corrected to absolute velocity
            // HJ, 6/Feb/2009
#           include "correctPhi.H"
        }

        // Make the fluxes relative to the mesh motion
        fvc::makeRelative(phi, U);

        if (mesh.moving() && checkMeshCourantNo)
        {
#           include "meshCourantNo.H"
        }

#       include "UEqn.H"

        // --- PISO loop

        for (int corr = 0; corr < nCorr; corr++)
        {
            rAU = 1.0/UEqn.A();

            U = rAU*UEqn.H();
            phi = (fvc::interpolate(U) & mesh.Sf());
              //+ fvc::ddtPhiCorr(rAU, U, phi);

            adjustPhi(phi, U, p);

            for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++)
            {
                fvScalarMatrix pEqn
                (
                    fvm::laplacian(rAU, p) == fvc::div(phi)
                );

                pEqn.setReference(pRefCell, pRefValue);

                if (corr == nCorr - 1 && nonOrth == nNonOrthCorr)
                {
                    pEqn.solve(mesh.solutionDict().solver(p.name() + "Final"));
                }
                else
                {
                    pEqn.solve(mesh.solutionDict().solver(p.name()));
                }

                if (nonOrth == nNonOrthCorr)
                {
                    phi -= pEqn.flux();
                }
            }

#           include "continuityErrs.H"

            // Make the fluxes relative to the mesh motion
            fvc::makeRelative(phi, U);

            U -= rAU*fvc::grad(p);
            U.correctBoundaryConditions();
        }

#       include "checkVolContinuity.H"

        if (runTime.timeIndex())
        {
            mesh.checkMesh(true);
        }

        runTime.write();
    }

    Info<< "End\n" << endl;

    return(0);
}


// ************************************************************************* //
this works and I get the whole Information about mesh quality.

My question is now what to do if I only need the information about the non-Orthogonality of the mesh? How can I get only the relevant variable?

Any help appreciated
Mathi
fluidmobil is offline   Reply With Quote

Old   April 29, 2015, 12:08
Default
  #3
New Member
 
Mathi
Join Date: Dec 2014
Posts: 11
Rep Power: 11
fluidmobil is on a distinguished road
Hello,
Ok, now I use the following code to get the wanted information:

Code:
mesh.checkFaceOrthogonality(true)
instead of

if (runTime.timeIndex()) { mesh.checkMesh(true); }
in the function checkFaceOrthogonality() there is a variable used, called "minDDotS"

I want to use this variable in an if condition.

Can anybody tell me how to get this variable in the main function of icoDyMFoam.C?
fluidmobil is offline   Reply With Quote

Reply

Tags
checkmesh, icodymfoam, moving mesh, non-orthogonality

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are Off
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
Orthogonality of cell check nkjsimulating ANSA 6 November 26, 2013 11:31
[ICEM] Understanding check mesh output kotimari ANSYS Meshing & Geometry 0 July 15, 2012 09:33
faceZones and topological check mturcios777 OpenFOAM Programming & Development 0 June 15, 2012 14:48
Automated check for convergence Chander CFX 3 May 2, 2012 19:07
Cell check and Boundary check errors AB Siemens 4 October 28, 2004 14:04


All times are GMT -4. The time now is 22:26.