diff --git a/applications/solvers/immersedBoundary/icoDyMIbFoam/Make/files b/applications/solvers/immersedBoundary/icoDyMIbFoam/Make/files new file mode 100644 index 000000000..4244bed5d --- /dev/null +++ b/applications/solvers/immersedBoundary/icoDyMIbFoam/Make/files @@ -0,0 +1,3 @@ +icoDyMIbFoam.C + +EXE = $(FOAM_APPBIN)/icoDyMIbFoam diff --git a/applications/solvers/immersedBoundary/icoDyMIbFoam/Make/options b/applications/solvers/immersedBoundary/icoDyMIbFoam/Make/options new file mode 100644 index 000000000..cf1d1c500 --- /dev/null +++ b/applications/solvers/immersedBoundary/icoDyMIbFoam/Make/options @@ -0,0 +1,15 @@ +EXE_INC = \ + -I$(LIB_SRC)/finiteVolume/lnInclude \ + -I$(LIB_SRC)/meshTools/lnInclude \ + -I$(LIB_SRC)/immersedBoundary/immersedBoundary/lnInclude \ + -I$(LIB_SRC)/dynamicMesh/dynamicFvMesh/lnInclude \ + -I$(LIB_SRC)/dynamicMesh/dynamicMesh/lnInclude \ + -I./lnInclude + +EXE_LIBS = \ + -lfiniteVolume \ + -lmeshTools \ + -limmersedBoundary \ + -ldynamicFvMesh \ + -ldynamicMesh \ + -llduSolvers diff --git a/applications/solvers/immersedBoundary/icoDyMIbFoam/createFields.H b/applications/solvers/immersedBoundary/icoDyMIbFoam/createFields.H new file mode 100644 index 000000000..94776ab99 --- /dev/null +++ b/applications/solvers/immersedBoundary/icoDyMIbFoam/createFields.H @@ -0,0 +1,52 @@ + Info<< "Reading transportProperties\n" << endl; + + IOdictionary transportProperties + ( + IOobject + ( + "transportProperties", + runTime.constant(), + mesh, + IOobject::MUST_READ, + IOobject::NO_WRITE + ) + ); + + dimensionedScalar nu + ( + transportProperties.lookup("nu") + ); + + Info<< "Reading field p\n" << endl; + volScalarField p + ( + IOobject + ( + "p", + runTime.timeName(), + mesh, + IOobject::MUST_READ, + IOobject::AUTO_WRITE + ), + mesh + ); + + Info<< "Reading field U\n" << endl; + volVectorField U + ( + IOobject + ( + "U", + runTime.timeName(), + mesh, + IOobject::MUST_READ, + IOobject::AUTO_WRITE + ), + mesh + ); + +# include "createPhi.H" + + label pRefCell = 0; + scalar pRefValue = 0.0; + setRefCell(p, mesh.solutionDict().subDict("PIMPLE"), pRefCell, pRefValue); diff --git a/applications/solvers/immersedBoundary/icoDyMIbFoam/icoDyMIbFoam.C b/applications/solvers/immersedBoundary/icoDyMIbFoam/icoDyMIbFoam.C new file mode 100644 index 000000000..ec8742d4b --- /dev/null +++ b/applications/solvers/immersedBoundary/icoDyMIbFoam/icoDyMIbFoam.C @@ -0,0 +1,141 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright held by original author + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM 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 2 of the License, or (at your + option) any later version. + + OpenFOAM 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 OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Application + icoDyMOversetFoam + +Description + Transient solver for incompressible, laminar flow of Newtonian fluids + with dynamic mesh and immersed boundary mesh support. + +Author + Hrvoje Jasak, Wikki Ltd. All rights reserved + +\*---------------------------------------------------------------------------*/ + +#include "fvCFD.H" +#include "dynamicFvMesh.H" +#include "immersedBoundaryFvPatch.H" +#include "immersedBoundaryAdjustPhi.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +int main(int argc, char *argv[]) +{ +# include "setRootCase.H" +# include "createTime.H" +# include "createDynamicFvMesh.H" +# include "createFields.H" +# include "initContinuityErrs.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + + Info<< "\nStarting time loop\n" << endl; + + while (runTime.loop()) + { + Info<< "Time = " << runTime.timeName() << nl << endl; + + // Make the fluxes absolute + fvc::makeAbsolute(phi, U); + + bool meshChanged = mesh.update(); + reduce(meshChanged, orOp()); + Info<< "Mesh update" << meshChanged << endl; +# include "createIbMasks.H" + + // Make the fluxes relative to the mesh motion + fvc::makeRelative(phi, U); + +# include "readPIMPLEControls.H" +# include "CourantNo.H" + + // Pressure-velocity corrector + int oCorr = 0; + do + { + fvVectorMatrix UEqn + ( + fvm::ddt(U) + + fvm::div(phi, U) + - fvm::laplacian(nu, U) + ); + + solve(UEqn == -fvc::grad(p)); + + // --- PISO loop + for (int corr = 0; corr < nCorr; corr++) + { + volScalarField rUA = 1.0/UEqn.A(); + + U = rUA*UEqn.H(); + // Immersed boundary update + U.correctBoundaryConditions(); + + phi = faceIbMask*(fvc::interpolate(U) & mesh.Sf()); + + // Adjust immersed boundary fluxes + immersedBoundaryAdjustPhi(phi, U); + adjustPhi(phi, U, p); + + for (int nonOrth = 0; nonOrth <= nNonOrthCorr; nonOrth++) + { + fvScalarMatrix pEqn + ( + fvm::laplacian(rUA, p) == fvc::div(phi) + ); + + pEqn.setReference(pRefCell, pRefValue); + pEqn.solve(); + + if (nonOrth == nNonOrthCorr) + { + phi -= pEqn.flux(); + } + } + +# include "immersedBoundaryContinuityErrs.H" + + // Make the fluxes relative to the mesh motion + fvc::makeRelative(phi, U); + + U -= rUA*fvc::grad(p); + U.correctBoundaryConditions(); + } + } while (++oCorr < nOuterCorr); + + runTime.write(); + + Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s" + << " ClockTime = " << runTime.elapsedClockTime() << " s" + << nl << endl; + } + + Info<< "End\n" << endl; + + return(0); +} + + +// ************************************************************************* // diff --git a/src/Allwmake b/src/Allwmake index b3a191dd7..3b600c806 100755 --- a/src/Allwmake +++ b/src/Allwmake @@ -77,6 +77,7 @@ wmake libso dbns wmake libso immersedBoundary/immersedBoundary wmake libso immersedBoundary/immersedBoundaryTurbulence wmake libso immersedBoundary/immersedBoundaryForce +wmake libso immersedBoundary/immersedBoundaryDynamicMesh ( cd cudaSolvers ; ./Allwmake ) diff --git a/src/immersedBoundary/immersedBoundaryDynamicMesh/Make/files b/src/immersedBoundary/immersedBoundaryDynamicMesh/Make/files new file mode 100644 index 000000000..b0b7154fa --- /dev/null +++ b/src/immersedBoundary/immersedBoundaryDynamicMesh/Make/files @@ -0,0 +1,4 @@ +movingImmersedBoundary/movingImmersedBoundary.C +immersedBoundarySolidBodyMotionFvMesh/immersedBoundarySolidBodyMotionFvMesh.C + +LIB = $(FOAM_LIBBIN)/libimmersedBoundaryDynamicFvMesh diff --git a/src/immersedBoundary/immersedBoundaryDynamicMesh/Make/options b/src/immersedBoundary/immersedBoundaryDynamicMesh/Make/options new file mode 100644 index 000000000..cd204ebdf --- /dev/null +++ b/src/immersedBoundary/immersedBoundaryDynamicMesh/Make/options @@ -0,0 +1,18 @@ +EXE_INC = \ + -I$(LIB_SRC)/immersedBoundary/immersedBoundary/lnInclude \ + -I$(LIB_SRC)/finiteVolume/lnInclude \ + -I$(LIB_SRC)/meshTools/lnInclude \ + -I$(LIB_SRC)/surfMesh/lnInclude \ + -I$(LIB_SRC)/sampling/lnInclude \ + -I$(LIB_SRC)/dynamicMesh/dynamicFvMesh/lnInclude \ + -I$(LIB_SRC)/dynamicMesh/meshMotion/solidBodyMotion/lnInclude \ + +EXE_LIBS = \ + -limmersedBoundary \ + -lfiniteVolume \ + -lmeshTools \ + -lsurfMesh \ + -lsampling \ + -ldynamicMesh \ + -ldynamicFvMesh \ + -lsolidBodyMotion diff --git a/src/immersedBoundary/immersedBoundaryDynamicMesh/immersedBoundarySolidBodyMotionFvMesh/immersedBoundarySolidBodyMotionFvMesh.C b/src/immersedBoundary/immersedBoundaryDynamicMesh/immersedBoundarySolidBodyMotionFvMesh/immersedBoundarySolidBodyMotionFvMesh.C new file mode 100644 index 000000000..c779c4b39 --- /dev/null +++ b/src/immersedBoundary/immersedBoundaryDynamicMesh/immersedBoundarySolidBodyMotionFvMesh/immersedBoundarySolidBodyMotionFvMesh.C @@ -0,0 +1,119 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright held by original author + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM 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 2 of the License, or (at your + option) any later version. + + OpenFOAM 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 OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "immersedBoundarySolidBodyMotionFvMesh.H" +#include "addToRunTimeSelectionTable.H" +#include "volFields.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ + defineTypeNameAndDebug(immersedBoundarySolidBodyMotionFvMesh, 0); + addToRunTimeSelectionTable + ( + dynamicFvMesh, + immersedBoundarySolidBodyMotionFvMesh, + IOobject + ); +} + + +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::immersedBoundarySolidBodyMotionFvMesh:: +immersedBoundarySolidBodyMotionFvMesh +( + const IOobject& io +) +: + dynamicFvMesh(io), + dynamicMeshCoeffs_ + ( + IOdictionary + ( + IOobject + ( + "dynamicMeshDict", + time().constant(), + *this, + IOobject::MUST_READ, + IOobject::NO_WRITE + ) + ).subDict(typeName + "Coeffs") + ), + ibMotions_() +{ + // Read motion function for all regions + PtrList motionDicts(dynamicMeshCoeffs_.lookup("motionFunctions")); + + ibMotions_.setSize(motionDicts.size()); + + forAll (motionDicts, mI) + { + ibMotions_.set + ( + mI, + new movingImmersedBoundary + ( + motionDicts[mI].keyword(), + *this, + motionDicts[mI].dict() + ) + ); + } +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +Foam::immersedBoundarySolidBodyMotionFvMesh:: +~immersedBoundarySolidBodyMotionFvMesh() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +bool Foam::immersedBoundarySolidBodyMotionFvMesh::update() +{ + forAll (ibMotions_, ibI) + { + ibMotions_[ibI].movePoints(); + } + + // Force flux and addressing recalculation as in topo change + pointField newAllPoints = allPoints(); + + movePoints(newAllPoints); + + return true; +} + + +// ************************************************************************* // diff --git a/src/immersedBoundary/immersedBoundaryDynamicMesh/immersedBoundarySolidBodyMotionFvMesh/immersedBoundarySolidBodyMotionFvMesh.H b/src/immersedBoundary/immersedBoundaryDynamicMesh/immersedBoundarySolidBodyMotionFvMesh/immersedBoundarySolidBodyMotionFvMesh.H new file mode 100644 index 000000000..9c4ea6389 --- /dev/null +++ b/src/immersedBoundary/immersedBoundaryDynamicMesh/immersedBoundarySolidBodyMotionFvMesh/immersedBoundarySolidBodyMotionFvMesh.H @@ -0,0 +1,112 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright held by original author + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM 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 2 of the License, or (at your + option) any later version. + + OpenFOAM 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 OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::immersedBoundarySolidBodyMotionFvMesh + +Description + Solid-body motion of the immersed boundary mesh specified by a + run-time selectable motion function for each immersed boundary surface + +SourceFiles + immersedBoundarySolidBodyMotionFvMesh.C + +\*---------------------------------------------------------------------------*/ + +#ifndef immersedBoundarySolidBodyMotionFvMesh_H +#define immersedBoundarySolidBodyMotionFvMesh_H + +#include "dynamicFvMesh.H" +#include "dictionary.H" +#include "movingImmersedBoundary.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class immersedBoundarySolidBodyMotionFvMesh Declaration +\*---------------------------------------------------------------------------*/ + +class immersedBoundarySolidBodyMotionFvMesh +: + public dynamicFvMesh +{ + // Private data + + //- Dictionary of motion control parameters + dictionary dynamicMeshCoeffs_; + + //- Immersed boundary motion control function + PtrList ibMotions_; + + + // Private Member Functions + + //- Disallow default bitwise copy construct + immersedBoundarySolidBodyMotionFvMesh + ( + const immersedBoundarySolidBodyMotionFvMesh& + ); + + //- Disallow default bitwise assignment + void operator= + ( + const immersedBoundarySolidBodyMotionFvMesh& + ); + + +public: + + //- Runtime type information + TypeName("immersedBoundarySolidBodyMotionFvMesh"); + + + // Constructors + + //- Construct from IOobject + explicit immersedBoundarySolidBodyMotionFvMesh(const IOobject& io); + + + // Destructor + virtual ~immersedBoundarySolidBodyMotionFvMesh(); + + + // Member Functions + + //- Update the mesh for both mesh motion and topology change + virtual bool update(); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/immersedBoundary/immersedBoundaryDynamicMesh/movingImmersedBoundary/movingImmersedBoundary.C b/src/immersedBoundary/immersedBoundaryDynamicMesh/movingImmersedBoundary/movingImmersedBoundary.C new file mode 100644 index 000000000..f9e1dacf8 --- /dev/null +++ b/src/immersedBoundary/immersedBoundaryDynamicMesh/movingImmersedBoundary/movingImmersedBoundary.C @@ -0,0 +1,98 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / 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 . + +\*---------------------------------------------------------------------------*/ + +#include "movingImmersedBoundary.H" +#include "immersedBoundaryPolyPatch.H" +#include "transformField.H" + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::movingImmersedBoundary::movingImmersedBoundary +( + const word& name, + const fvMesh& mesh, + const dictionary& dict +) +: + name_(name), + mesh_(mesh), + sbmfPtr_(solidBodyMotionFunction::New(dict, mesh.time())), + refIbSurface_ + ( + IOobject + ( + name + ".ftr", + mesh.time().constant(), // instance + "triSurface", // local + mesh, // registry + IOobject::MUST_READ, + IOobject::NO_WRITE + ) + ) +{} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +Foam::movingImmersedBoundary::~movingImmersedBoundary() +{} + + +// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // + +void Foam::movingImmersedBoundary::movePoints() const +{ + // Get ibMesh from patch + const label patchID = mesh().boundaryMesh().findPatchID(name()); + + if (patchID < 0) + { + FatalErrorIn + ( + "void movingImmersedBoundary::movePoints() const" + ) << "Patch " << name() << " not found. Available patch names: " + << mesh().boundaryMesh().names() + << abort(FatalError); + } + + const immersedBoundaryPolyPatch& cibPatch = + refCast + ( + mesh().boundaryMesh()[patchID] + ); + + // Get non-const reference to patch + immersedBoundaryPolyPatch& ibPatch = + const_cast(cibPatch); + + // Move points + ibPatch.moveTriSurfacePoints + ( + transform(sbmfPtr_->transformation(), refIbSurface_.points()) + ); +} + + +// ************************************************************************* // diff --git a/src/immersedBoundary/immersedBoundaryDynamicMesh/movingImmersedBoundary/movingImmersedBoundary.H b/src/immersedBoundary/immersedBoundaryDynamicMesh/movingImmersedBoundary/movingImmersedBoundary.H new file mode 100644 index 000000000..6ab636eaa --- /dev/null +++ b/src/immersedBoundary/immersedBoundaryDynamicMesh/movingImmersedBoundary/movingImmersedBoundary.H @@ -0,0 +1,121 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / 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 . + +Class + Foam::movingImmersedBoundary + +Description + Moving immesed boundary. Motion is prescribed using a solid body motion + function. + +SourceFiles + movingImmersedBoundary.C + +\*---------------------------------------------------------------------------*/ + +#ifndef movingImmersedBoundary_H +#define movingImmersedBoundary_H + +#include "fvMesh.H" +#include "solidBodyMotionFunction.H" +#include "triSurfaceMesh.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class movingImmersedBoundary Declaration +\*---------------------------------------------------------------------------*/ + +class movingImmersedBoundary +{ + // Private data + + //- Patch name + const word name_; + + //- Mesh reference + const fvMesh& mesh_; + + //- Overset region motion control function + autoPtr sbmfPtr_; + + //- Reference tri surface mesh position + triSurfaceMesh refIbSurface_; + + + // Private Member Functions + + //- Disallow default bitwise copy construct + movingImmersedBoundary(const movingImmersedBoundary&); + + //- Disallow default bitwise assignment + void operator=(const movingImmersedBoundary&); + + +public: + + // Constructors + + //- Construct from dictionary + movingImmersedBoundary + ( + const word& name, + const fvMesh& mesh, + const dictionary& dict + ); + + + //- Destructor + ~movingImmersedBoundary(); + + // Member Functions + + //- Return name + const word& name() const + { + return name_; + } + + //- Return mesh + const fvMesh& mesh() const + { + return mesh_; + } + + //- Move immersed boundary patch points + void movePoints() const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/tutorials/immersedBoundary/movingCylinderInChannelIco/.gitignore b/tutorials/immersedBoundary/movingCylinderInChannelIco/.gitignore new file mode 100644 index 000000000..f42669c4e --- /dev/null +++ b/tutorials/immersedBoundary/movingCylinderInChannelIco/.gitignore @@ -0,0 +1,52 @@ +# git-ls-files --others --exclude-from=.git/info/exclude +# Lines that start with '#' are comments. + +# editor and misc backup files - anywhere +*~ +.*~ +*.bak +*.bak[0-9][0-9] +*.orig +*.orig[0-9][0-9] +\#*\# + +# file-browser settings - anywhere +.directory + +# CVS recovered versions - anywhere +.#* + +# SVN directories - anywhere + +.svn/ + +# OpenFOAM results + +[1-9]*/ +!/0/ +processor* +*/polyMesh/* +!*/polyMesh/blockMeshDict +cellToRegion* +log* + +# packages - anywhere + +*.tar.bz2 +*.tar.gz +*.tar +*.tgz +*.gtgz + +# Pictures and movies + +*.png +*.jpg +*.jpeg +*.bmp +*.png +*.avi +*.mp4 +*.mpg + +#end-of-file diff --git a/tutorials/immersedBoundary/movingCylinderInChannelIco/0_org/U b/tutorials/immersedBoundary/movingCylinderInChannelIco/0_org/U new file mode 100644 index 000000000..88a4980f5 --- /dev/null +++ b/tutorials/immersedBoundary/movingCylinderInChannelIco/0_org/U @@ -0,0 +1,65 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | foam-extend: Open Source CFD | +| \\ / O peration | Version: 3.2 | +| \\ / A nd | Web: http://www.foam-extend.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volVectorField; + object U; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 1 -1 0 0 0 0]; + +internalField uniform (1 0 0); + +boundaryField +{ + ibCylinder + { + type immersedBoundary; + refValue uniform (0 0 0); + refGradient uniform (0 0 0); + fixesValue yes; + + setDeadCellValue yes; + deadCellValue (0 0 0); + } + + in + { + type fixedValue; + value uniform (1 0 0); + } + + out + { + type inletOutlet; + inletValue uniform (0 0 0); + value uniform (1 0 0); + } + + top + { + type fixedValue; + value uniform (0 0 0); + } + + bottom + { + type fixedValue; + value uniform (0 0 0); + } + + frontAndBack + { + type empty; + } +} + +// ************************************************************************* // diff --git a/tutorials/immersedBoundary/movingCylinderInChannelIco/0_org/p b/tutorials/immersedBoundary/movingCylinderInChannelIco/0_org/p new file mode 100644 index 000000000..1a2c3d8c7 --- /dev/null +++ b/tutorials/immersedBoundary/movingCylinderInChannelIco/0_org/p @@ -0,0 +1,65 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | foam-extend: Open Source CFD | +| \\ / O peration | Version: 3.2 | +| \\ / A nd | Web: http://www.foam-extend.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object p; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 2 -2 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + ibCylinder + { + type immersedBoundary; + refValue uniform 0; + refGradient uniform 0; + fixesValue no; + + setDeadCellValue yes; + deadCellValue 0; + + value uniform 0; + } + + in + { + type zeroGradient; + } + + out + { +// type zeroGradient; + + type fixedValue; + value uniform 0; + } + + top + { + type zeroGradient; + } + + bottom + { + type zeroGradient; + } + + frontAndBack + { + type empty; + } +} + +// ************************************************************************* // diff --git a/tutorials/immersedBoundary/movingCylinderInChannelIco/Allclean b/tutorials/immersedBoundary/movingCylinderInChannelIco/Allclean new file mode 100755 index 000000000..cdfb5bacf --- /dev/null +++ b/tutorials/immersedBoundary/movingCylinderInChannelIco/Allclean @@ -0,0 +1,9 @@ +#!/bin/sh + +# Source tutorial clean functions +. $WM_PROJECT_DIR/bin/tools/CleanFunctions + +cleanCase + +\rm -rf 0 +\rm -f constant/polyMesh/boundary diff --git a/tutorials/immersedBoundary/movingCylinderInChannelIco/Allrun b/tutorials/immersedBoundary/movingCylinderInChannelIco/Allrun new file mode 100755 index 000000000..d2530784e --- /dev/null +++ b/tutorials/immersedBoundary/movingCylinderInChannelIco/Allrun @@ -0,0 +1,15 @@ +#!/bin/sh +# Source tutorial run functions +. $WM_PROJECT_DIR/bin/tools/RunFunctions + +# Get application name +application="icoDyMIbFoam" + +runApplication blockMesh +\cp save/boundary constant/polyMesh/ + +mkdir 0 +\cp -f 0_org/* 0/ + +runApplication potentialIbFoam +runApplication $application diff --git a/tutorials/immersedBoundary/movingCylinderInChannelIco/constant/dynamicMeshDict b/tutorials/immersedBoundary/movingCylinderInChannelIco/constant/dynamicMeshDict new file mode 100644 index 000000000..b1c2f5245 --- /dev/null +++ b/tutorials/immersedBoundary/movingCylinderInChannelIco/constant/dynamicMeshDict @@ -0,0 +1,43 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | foam-extend: Open Source CFD | +| \\ / O peration | Version: 3.2 | +| \\ / A nd | Web: http://www.foam-extend.org | +| \\/ M anipulation | For copyright notice see file Copyright | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object dynamicMeshDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +// dynamicFvMesh staticFvMesh; +dynamicFvMesh immersedBoundarySolidBodyMotionFvMesh; + +immersedBoundarySolidBodyMotionFvMeshCoeffs +{ + motionFunctions + ( + ibCylinder + { +// solidBodyMotionFunction translation; +// translationCoeffs +// { +// velocity (0.1 0 0); +// } + + solidBodyMotionFunction linearOscillation; + linearOscillationCoeffs + { + amplitude (0.5 0 0); + period 2.5; + } + } + ); +} + + +// ************************************************************************* // diff --git a/tutorials/immersedBoundary/movingCylinderInChannelIco/constant/polyMesh/blockMeshDict b/tutorials/immersedBoundary/movingCylinderInChannelIco/constant/polyMesh/blockMeshDict new file mode 100644 index 000000000..070ca5469 --- /dev/null +++ b/tutorials/immersedBoundary/movingCylinderInChannelIco/constant/polyMesh/blockMeshDict @@ -0,0 +1,69 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | foam-extend: Open Source CFD | +| \\ / O peration | Version: 3.2 | +| \\ / A nd | Web: http://www.foam-extend.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object blockMeshDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +convertToMeters 1; + +vertices +( + (-1 -0.5 0) + (2 -0.5 0) + (2 0.5 0) + (-1 0.5 0) + (-1 -0.5 0.1) + (2 -0.5 0.1) + (2 0.5 0.1) + (-1 0.5 0.1) +); + +blocks +( + hex (0 1 2 3 4 5 6 7) (75 25 1) simpleGrading (1 1 1) +); + +edges +( +); + +patches +( + patch in + ( + (0 4 7 3) + ) + patch out + ( + (2 6 5 1) + ) + patch top + ( + (3 7 6 2) + ) + patch bottom + ( + (1 5 4 0) + ) + empty frontAndBack + ( + (0 3 2 1) + (4 5 6 7) + ) +); + +mergePatchPairs +( +); + +// ************************************************************************* // diff --git a/tutorials/immersedBoundary/movingCylinderInChannelIco/constant/transportProperties b/tutorials/immersedBoundary/movingCylinderInChannelIco/constant/transportProperties new file mode 100644 index 000000000..2bd6cf228 --- /dev/null +++ b/tutorials/immersedBoundary/movingCylinderInChannelIco/constant/transportProperties @@ -0,0 +1,19 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | foam-extend: Open Source CFD | +| \\ / O peration | Version: 3.2 | +| \\ / A nd | Web: http://www.foam-extend.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object transportProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +nu nu [0 2 -1 0 0 0 0] 0.01; + +// ************************************************************************* // diff --git a/tutorials/immersedBoundary/movingCylinderInChannelIco/constant/triSurface/ibCylinder.ftr b/tutorials/immersedBoundary/movingCylinderInChannelIco/constant/triSurface/ibCylinder.ftr new file mode 100644 index 000000000..70df0a4b4 --- /dev/null +++ b/tutorials/immersedBoundary/movingCylinderInChannelIco/constant/triSurface/ibCylinder.ftr @@ -0,0 +1,210 @@ + +1 +( + +cylinder +empty +) + + +96 +( +(0.176776 -0.176776 0) +(0.176776 0.176776 0) +(-0.176776 0.176776 0) +(-0.176776 -0.176776 0) +(0.241481 -0.064705 0) +(0.241481 0.064705 0) +(0.064705 0.241481 0) +(-0.064705 0.241481 0) +(-0.241481 0.064705 0) +(-0.241481 -0.064705 0) +(0.064705 -0.241481 0) +(-0.064705 -0.241481 0) +(0.216506 -0.125 0) +(0.216506 0.125 0) +(0.125 0.216506 0) +(-0.125 0.216506 0) +(-0.216506 0.125 0) +(-0.216506 -0.125 0) +(0.125 -0.216506 0) +(-0.125 -0.216506 0) +(0.247861 -0.0326315 0) +(0.247861 0.0326315 0) +(0.0326315 0.247861 0) +(-0.0326315 0.247861 0) +(-0.247861 0.0326315 0) +(-0.247861 -0.0326315 0) +(0.0326315 -0.247861 0) +(-0.0326315 -0.247861 0) +(0.25 8.32665e-17 0) +(-8.32665e-17 0.25 0) +(-0.25 -8.32665e-17 0) +(8.32665e-17 -0.25 0) +(0.198338 -0.152191 0) +(0.198338 0.152191 0) +(0.152191 0.198338 0) +(-0.152191 0.198338 0) +(-0.198338 0.152191 0) +(-0.198338 -0.152191 0) +(0.152191 -0.198338 0) +(-0.152191 -0.198338 0) +(0.23097 -0.095671 0) +(0.23097 0.095671 0) +(0.095671 0.23097 0) +(-0.095671 0.23097 0) +(-0.23097 0.095671 0) +(-0.23097 -0.095671 0) +(0.095671 -0.23097 0) +(-0.095671 -0.23097 0) +(0.176776 -0.176776 0.1) +(0.176776 0.176776 0.1) +(-0.176776 0.176776 0.1) +(-0.176776 -0.176776 0.1) +(0.241481 -0.064705 0.1) +(0.241481 0.064705 0.1) +(0.064705 0.241481 0.1) +(-0.064705 0.241481 0.1) +(-0.241481 0.064705 0.1) +(-0.241481 -0.064705 0.1) +(0.064705 -0.241481 0.1) +(-0.064705 -0.241481 0.1) +(0.216506 -0.125 0.1) +(0.216506 0.125 0.1) +(0.125 0.216506 0.1) +(-0.125 0.216506 0.1) +(-0.216506 0.125 0.1) +(-0.216506 -0.125 0.1) +(0.125 -0.216506 0.1) +(-0.125 -0.216506 0.1) +(0.247861 -0.0326315 0.1) +(0.247861 0.0326315 0.1) +(0.0326315 0.247861 0.1) +(-0.0326315 0.247861 0.1) +(-0.247861 0.0326315 0.1) +(-0.247861 -0.0326315 0.1) +(0.0326315 -0.247861 0.1) +(-0.0326315 -0.247861 0.1) +(0.25 -8.32665e-17 0.1) +(8.32665e-17 0.25 0.1) +(-0.25 8.32665e-17 0.1) +(-8.32665e-17 -0.25 0.1) +(0.198338 -0.152191 0.1) +(0.198338 0.152191 0.1) +(0.152191 0.198338 0.1) +(-0.152191 0.198338 0.1) +(-0.198338 0.152191 0.1) +(-0.198338 -0.152191 0.1) +(0.152191 -0.198338 0.1) +(-0.152191 -0.198338 0.1) +(0.23097 -0.095671 0.1) +(0.23097 0.095671 0.1) +(0.095671 0.23097 0.1) +(-0.095671 0.23097 0.1) +(-0.23097 0.095671 0.1) +(-0.23097 -0.095671 0.1) +(0.095671 -0.23097 0.1) +(-0.095671 -0.23097 0.1) +) + + +96 +( +((0 32 80) 0) +((80 48 0) 0) +((32 12 60) 0) +((60 80 32) 0) +((12 40 88) 0) +((88 60 12) 0) +((40 4 52) 0) +((52 88 40) 0) +((4 20 68) 0) +((68 52 4) 0) +((76 68 20) 0) +((20 28 76) 0) +((28 21 69) 0) +((69 76 28) 0) +((21 5 53) 0) +((53 69 21) 0) +((5 41 89) 0) +((89 53 5) 0) +((41 13 61) 0) +((61 89 41) 0) +((13 33 81) 0) +((81 61 13) 0) +((33 1 49) 0) +((49 81 33) 0) +((1 34 82) 0) +((82 49 1) 0) +((34 14 62) 0) +((62 82 34) 0) +((14 42 90) 0) +((90 62 14) 0) +((42 6 54) 0) +((54 90 42) 0) +((6 22 70) 0) +((70 54 6) 0) +((77 70 22) 0) +((22 29 77) 0) +((29 23 71) 0) +((71 77 29) 0) +((23 7 55) 0) +((55 71 23) 0) +((7 43 91) 0) +((91 55 7) 0) +((43 15 63) 0) +((63 91 43) 0) +((15 35 83) 0) +((83 63 15) 0) +((35 2 50) 0) +((50 83 35) 0) +((2 36 84) 0) +((84 50 2) 0) +((36 16 64) 0) +((64 84 36) 0) +((16 44 92) 0) +((92 64 16) 0) +((44 8 56) 0) +((56 92 44) 0) +((8 24 72) 0) +((72 56 8) 0) +((78 72 24) 0) +((24 30 78) 0) +((30 25 73) 0) +((73 78 30) 0) +((25 9 57) 0) +((57 73 25) 0) +((9 45 93) 0) +((93 57 9) 0) +((45 17 65) 0) +((65 93 45) 0) +((17 37 85) 0) +((85 65 17) 0) +((37 3 51) 0) +((51 85 37) 0) +((0 48 86) 0) +((86 38 0) 0) +((38 86 66) 0) +((66 18 38) 0) +((18 66 94) 0) +((94 46 18) 0) +((46 94 58) 0) +((58 10 46) 0) +((10 58 74) 0) +((74 26 10) 0) +((31 26 74) 0) +((74 79 31) 0) +((79 75 27) 0) +((27 31 79) 0) +((27 75 59) 0) +((59 11 27) 0) +((11 59 95) 0) +((95 47 11) 0) +((47 95 67) 0) +((67 19 47) 0) +((19 67 87) 0) +((87 39 19) 0) +((39 87 51) 0) +((51 3 39) 0) +) + diff --git a/tutorials/immersedBoundary/movingCylinderInChannelIco/constant/triSurface/ibCylinder.stl b/tutorials/immersedBoundary/movingCylinderInChannelIco/constant/triSurface/ibCylinder.stl new file mode 100644 index 000000000..5c7847333 --- /dev/null +++ b/tutorials/immersedBoundary/movingCylinderInChannelIco/constant/triSurface/ibCylinder.stl @@ -0,0 +1,674 @@ +solid cylinder + facet normal 0.75183 -0.659357 0 + outer loop + vertex 0.176776 -0.176776 0 + vertex 0.198338 -0.152191 0 + vertex 0.198338 -0.152191 0.1 + endloop + endfacet + facet normal 0.75183 -0.659357 0 + outer loop + vertex 0.198338 -0.152191 0.1 + vertex 0.176776 -0.176776 0.1 + vertex 0.176776 -0.176776 0 + endloop + endfacet + facet normal 0.831471 -0.555568 0 + outer loop + vertex 0.198338 -0.152191 0 + vertex 0.216506 -0.125 0 + vertex 0.216506 -0.125 0.1 + endloop + endfacet + facet normal 0.831471 -0.555568 0 + outer loop + vertex 0.216506 -0.125 0.1 + vertex 0.198338 -0.152191 0.1 + vertex 0.198338 -0.152191 0 + endloop + endfacet + facet normal 0.896872 -0.44229 0 + outer loop + vertex 0.216506 -0.125 0 + vertex 0.23097 -0.095671 0 + vertex 0.23097 -0.095671 0.1 + endloop + endfacet + facet normal 0.896872 -0.44229 0 + outer loop + vertex 0.23097 -0.095671 0.1 + vertex 0.216506 -0.125 0.1 + vertex 0.216506 -0.125 0 + endloop + endfacet + facet normal 0.94693 -0.321438 0 + outer loop + vertex 0.23097 -0.095671 0 + vertex 0.241481 -0.064705 0 + vertex 0.241481 -0.064705 0.1 + endloop + endfacet + facet normal 0.94693 -0.321438 0 + outer loop + vertex 0.241481 -0.064705 0.1 + vertex 0.23097 -0.095671 0.1 + vertex 0.23097 -0.095671 0 + endloop + endfacet + facet normal 0.980787 -0.195081 0 + outer loop + vertex 0.241481 -0.064705 0 + vertex 0.247861 -0.0326315 0 + vertex 0.247861 -0.0326315 0.1 + endloop + endfacet + facet normal 0.980787 -0.195081 0 + outer loop + vertex 0.247861 -0.0326315 0.1 + vertex 0.241481 -0.064705 0.1 + vertex 0.241481 -0.064705 0 + endloop + endfacet + facet normal 0.997858 -0.0654097 0 + outer loop + vertex 0.25 -8.32665e-17 0.1 + vertex 0.247861 -0.0326315 0.1 + vertex 0.247861 -0.0326315 0 + endloop + endfacet + facet normal 0.997858 -0.0654097 -1.07752e-16 + outer loop + vertex 0.247861 -0.0326315 0 + vertex 0.25 8.32665e-17 0 + vertex 0.25 -8.32665e-17 0.1 + endloop + endfacet + facet normal 0.997858 0.0654097 0 + outer loop + vertex 0.25 8.32665e-17 0 + vertex 0.247861 0.0326315 0 + vertex 0.247861 0.0326315 0.1 + endloop + endfacet + facet normal 0.997858 0.0654097 1.07752e-16 + outer loop + vertex 0.247861 0.0326315 0.1 + vertex 0.25 -8.32665e-17 0.1 + vertex 0.25 8.32665e-17 0 + endloop + endfacet + facet normal 0.980787 0.195081 0 + outer loop + vertex 0.247861 0.0326315 0 + vertex 0.241481 0.064705 0 + vertex 0.241481 0.064705 0.1 + endloop + endfacet + facet normal 0.980787 0.195081 0 + outer loop + vertex 0.241481 0.064705 0.1 + vertex 0.247861 0.0326315 0.1 + vertex 0.247861 0.0326315 0 + endloop + endfacet + facet normal 0.94693 0.321438 0 + outer loop + vertex 0.241481 0.064705 0 + vertex 0.23097 0.095671 0 + vertex 0.23097 0.095671 0.1 + endloop + endfacet + facet normal 0.94693 0.321438 0 + outer loop + vertex 0.23097 0.095671 0.1 + vertex 0.241481 0.064705 0.1 + vertex 0.241481 0.064705 0 + endloop + endfacet + facet normal 0.896872 0.44229 0 + outer loop + vertex 0.23097 0.095671 0 + vertex 0.216506 0.125 0 + vertex 0.216506 0.125 0.1 + endloop + endfacet + facet normal 0.896872 0.44229 0 + outer loop + vertex 0.216506 0.125 0.1 + vertex 0.23097 0.095671 0.1 + vertex 0.23097 0.095671 0 + endloop + endfacet + facet normal 0.831471 0.555568 0 + outer loop + vertex 0.216506 0.125 0 + vertex 0.198338 0.152191 0 + vertex 0.198338 0.152191 0.1 + endloop + endfacet + facet normal 0.831471 0.555568 0 + outer loop + vertex 0.198338 0.152191 0.1 + vertex 0.216506 0.125 0.1 + vertex 0.216506 0.125 0 + endloop + endfacet + facet normal 0.75183 0.659357 0 + outer loop + vertex 0.198338 0.152191 0 + vertex 0.176776 0.176776 0 + vertex 0.176776 0.176776 0.1 + endloop + endfacet + facet normal 0.75183 0.659357 0 + outer loop + vertex 0.176776 0.176776 0.1 + vertex 0.198338 0.152191 0.1 + vertex 0.198338 0.152191 0 + endloop + endfacet + facet normal 0.659357 0.75183 0 + outer loop + vertex 0.176776 0.176776 0 + vertex 0.152191 0.198338 0 + vertex 0.152191 0.198338 0.1 + endloop + endfacet + facet normal 0.659357 0.75183 0 + outer loop + vertex 0.152191 0.198338 0.1 + vertex 0.176776 0.176776 0.1 + vertex 0.176776 0.176776 0 + endloop + endfacet + facet normal 0.555568 0.831471 0 + outer loop + vertex 0.152191 0.198338 0 + vertex 0.125 0.216506 0 + vertex 0.125 0.216506 0.1 + endloop + endfacet + facet normal 0.555568 0.831471 0 + outer loop + vertex 0.125 0.216506 0.1 + vertex 0.152191 0.198338 0.1 + vertex 0.152191 0.198338 0 + endloop + endfacet + facet normal 0.44229 0.896872 0 + outer loop + vertex 0.125 0.216506 0 + vertex 0.095671 0.23097 0 + vertex 0.095671 0.23097 0.1 + endloop + endfacet + facet normal 0.44229 0.896872 0 + outer loop + vertex 0.095671 0.23097 0.1 + vertex 0.125 0.216506 0.1 + vertex 0.125 0.216506 0 + endloop + endfacet + facet normal 0.321438 0.94693 0 + outer loop + vertex 0.095671 0.23097 0 + vertex 0.064705 0.241481 0 + vertex 0.064705 0.241481 0.1 + endloop + endfacet + facet normal 0.321438 0.94693 0 + outer loop + vertex 0.064705 0.241481 0.1 + vertex 0.095671 0.23097 0.1 + vertex 0.095671 0.23097 0 + endloop + endfacet + facet normal 0.195081 0.980787 0 + outer loop + vertex 0.064705 0.241481 0 + vertex 0.0326315 0.247861 0 + vertex 0.0326315 0.247861 0.1 + endloop + endfacet + facet normal 0.195081 0.980787 0 + outer loop + vertex 0.0326315 0.247861 0.1 + vertex 0.064705 0.241481 0.1 + vertex 0.064705 0.241481 0 + endloop + endfacet + facet normal 0.0654097 0.997858 0 + outer loop + vertex 8.32665e-17 0.25 0.1 + vertex 0.0326315 0.247861 0.1 + vertex 0.0326315 0.247861 0 + endloop + endfacet + facet normal 0.0654097 0.997858 -1.07752e-16 + outer loop + vertex 0.0326315 0.247861 0 + vertex -8.32665e-17 0.25 0 + vertex 8.32665e-17 0.25 0.1 + endloop + endfacet + facet normal -0.0654097 0.997858 0 + outer loop + vertex -8.32665e-17 0.25 0 + vertex -0.0326315 0.247861 0 + vertex -0.0326315 0.247861 0.1 + endloop + endfacet + facet normal -0.0654097 0.997858 1.07752e-16 + outer loop + vertex -0.0326315 0.247861 0.1 + vertex 8.32665e-17 0.25 0.1 + vertex -8.32665e-17 0.25 0 + endloop + endfacet + facet normal -0.195081 0.980787 0 + outer loop + vertex -0.0326315 0.247861 0 + vertex -0.064705 0.241481 0 + vertex -0.064705 0.241481 0.1 + endloop + endfacet + facet normal -0.195081 0.980787 0 + outer loop + vertex -0.064705 0.241481 0.1 + vertex -0.0326315 0.247861 0.1 + vertex -0.0326315 0.247861 0 + endloop + endfacet + facet normal -0.321438 0.94693 0 + outer loop + vertex -0.064705 0.241481 0 + vertex -0.095671 0.23097 0 + vertex -0.095671 0.23097 0.1 + endloop + endfacet + facet normal -0.321438 0.94693 0 + outer loop + vertex -0.095671 0.23097 0.1 + vertex -0.064705 0.241481 0.1 + vertex -0.064705 0.241481 0 + endloop + endfacet + facet normal -0.44229 0.896872 0 + outer loop + vertex -0.095671 0.23097 0 + vertex -0.125 0.216506 0 + vertex -0.125 0.216506 0.1 + endloop + endfacet + facet normal -0.44229 0.896872 0 + outer loop + vertex -0.125 0.216506 0.1 + vertex -0.095671 0.23097 0.1 + vertex -0.095671 0.23097 0 + endloop + endfacet + facet normal -0.555568 0.831471 0 + outer loop + vertex -0.125 0.216506 0 + vertex -0.152191 0.198338 0 + vertex -0.152191 0.198338 0.1 + endloop + endfacet + facet normal -0.555568 0.831471 0 + outer loop + vertex -0.152191 0.198338 0.1 + vertex -0.125 0.216506 0.1 + vertex -0.125 0.216506 0 + endloop + endfacet + facet normal -0.659357 0.75183 0 + outer loop + vertex -0.152191 0.198338 0 + vertex -0.176776 0.176776 0 + vertex -0.176776 0.176776 0.1 + endloop + endfacet + facet normal -0.659357 0.75183 0 + outer loop + vertex -0.176776 0.176776 0.1 + vertex -0.152191 0.198338 0.1 + vertex -0.152191 0.198338 0 + endloop + endfacet + facet normal -0.75183 0.659357 0 + outer loop + vertex -0.176776 0.176776 0 + vertex -0.198338 0.152191 0 + vertex -0.198338 0.152191 0.1 + endloop + endfacet + facet normal -0.75183 0.659357 0 + outer loop + vertex -0.198338 0.152191 0.1 + vertex -0.176776 0.176776 0.1 + vertex -0.176776 0.176776 0 + endloop + endfacet + facet normal -0.831471 0.555568 0 + outer loop + vertex -0.198338 0.152191 0 + vertex -0.216506 0.125 0 + vertex -0.216506 0.125 0.1 + endloop + endfacet + facet normal -0.831471 0.555568 0 + outer loop + vertex -0.216506 0.125 0.1 + vertex -0.198338 0.152191 0.1 + vertex -0.198338 0.152191 0 + endloop + endfacet + facet normal -0.896872 0.44229 0 + outer loop + vertex -0.216506 0.125 0 + vertex -0.23097 0.095671 0 + vertex -0.23097 0.095671 0.1 + endloop + endfacet + facet normal -0.896872 0.44229 0 + outer loop + vertex -0.23097 0.095671 0.1 + vertex -0.216506 0.125 0.1 + vertex -0.216506 0.125 0 + endloop + endfacet + facet normal -0.94693 0.321438 0 + outer loop + vertex -0.23097 0.095671 0 + vertex -0.241481 0.064705 0 + vertex -0.241481 0.064705 0.1 + endloop + endfacet + facet normal -0.94693 0.321438 0 + outer loop + vertex -0.241481 0.064705 0.1 + vertex -0.23097 0.095671 0.1 + vertex -0.23097 0.095671 0 + endloop + endfacet + facet normal -0.980787 0.195081 0 + outer loop + vertex -0.241481 0.064705 0 + vertex -0.247861 0.0326315 0 + vertex -0.247861 0.0326315 0.1 + endloop + endfacet + facet normal -0.980787 0.195081 0 + outer loop + vertex -0.247861 0.0326315 0.1 + vertex -0.241481 0.064705 0.1 + vertex -0.241481 0.064705 0 + endloop + endfacet + facet normal -0.997858 0.0654097 0 + outer loop + vertex -0.25 8.32665e-17 0.1 + vertex -0.247861 0.0326315 0.1 + vertex -0.247861 0.0326315 0 + endloop + endfacet + facet normal -0.997858 0.0654097 -1.07752e-16 + outer loop + vertex -0.247861 0.0326315 0 + vertex -0.25 -8.32665e-17 0 + vertex -0.25 8.32665e-17 0.1 + endloop + endfacet + facet normal -0.997858 -0.0654097 0 + outer loop + vertex -0.25 -8.32665e-17 0 + vertex -0.247861 -0.0326315 0 + vertex -0.247861 -0.0326315 0.1 + endloop + endfacet + facet normal -0.997858 -0.0654097 1.07752e-16 + outer loop + vertex -0.247861 -0.0326315 0.1 + vertex -0.25 8.32665e-17 0.1 + vertex -0.25 -8.32665e-17 0 + endloop + endfacet + facet normal -0.980787 -0.195081 0 + outer loop + vertex -0.247861 -0.0326315 0 + vertex -0.241481 -0.064705 0 + vertex -0.241481 -0.064705 0.1 + endloop + endfacet + facet normal -0.980787 -0.195081 0 + outer loop + vertex -0.241481 -0.064705 0.1 + vertex -0.247861 -0.0326315 0.1 + vertex -0.247861 -0.0326315 0 + endloop + endfacet + facet normal -0.94693 -0.321438 0 + outer loop + vertex -0.241481 -0.064705 0 + vertex -0.23097 -0.095671 0 + vertex -0.23097 -0.095671 0.1 + endloop + endfacet + facet normal -0.94693 -0.321438 0 + outer loop + vertex -0.23097 -0.095671 0.1 + vertex -0.241481 -0.064705 0.1 + vertex -0.241481 -0.064705 0 + endloop + endfacet + facet normal -0.896872 -0.44229 0 + outer loop + vertex -0.23097 -0.095671 0 + vertex -0.216506 -0.125 0 + vertex -0.216506 -0.125 0.1 + endloop + endfacet + facet normal -0.896872 -0.44229 0 + outer loop + vertex -0.216506 -0.125 0.1 + vertex -0.23097 -0.095671 0.1 + vertex -0.23097 -0.095671 0 + endloop + endfacet + facet normal -0.831471 -0.555568 0 + outer loop + vertex -0.216506 -0.125 0 + vertex -0.198338 -0.152191 0 + vertex -0.198338 -0.152191 0.1 + endloop + endfacet + facet normal -0.831471 -0.555568 0 + outer loop + vertex -0.198338 -0.152191 0.1 + vertex -0.216506 -0.125 0.1 + vertex -0.216506 -0.125 0 + endloop + endfacet + facet normal -0.75183 -0.659357 0 + outer loop + vertex -0.198338 -0.152191 0 + vertex -0.176776 -0.176776 0 + vertex -0.176776 -0.176776 0.1 + endloop + endfacet + facet normal -0.75183 -0.659357 0 + outer loop + vertex -0.176776 -0.176776 0.1 + vertex -0.198338 -0.152191 0.1 + vertex -0.198338 -0.152191 0 + endloop + endfacet + facet normal 0.659357 -0.75183 0 + outer loop + vertex 0.176776 -0.176776 0 + vertex 0.176776 -0.176776 0.1 + vertex 0.152191 -0.198338 0.1 + endloop + endfacet + facet normal 0.659357 -0.75183 0 + outer loop + vertex 0.152191 -0.198338 0.1 + vertex 0.152191 -0.198338 0 + vertex 0.176776 -0.176776 0 + endloop + endfacet + facet normal 0.555568 -0.831471 0 + outer loop + vertex 0.152191 -0.198338 0 + vertex 0.152191 -0.198338 0.1 + vertex 0.125 -0.216506 0.1 + endloop + endfacet + facet normal 0.555568 -0.831471 0 + outer loop + vertex 0.125 -0.216506 0.1 + vertex 0.125 -0.216506 0 + vertex 0.152191 -0.198338 0 + endloop + endfacet + facet normal 0.44229 -0.896872 0 + outer loop + vertex 0.125 -0.216506 0 + vertex 0.125 -0.216506 0.1 + vertex 0.095671 -0.23097 0.1 + endloop + endfacet + facet normal 0.44229 -0.896872 0 + outer loop + vertex 0.095671 -0.23097 0.1 + vertex 0.095671 -0.23097 0 + vertex 0.125 -0.216506 0 + endloop + endfacet + facet normal 0.321438 -0.94693 0 + outer loop + vertex 0.095671 -0.23097 0 + vertex 0.095671 -0.23097 0.1 + vertex 0.064705 -0.241481 0.1 + endloop + endfacet + facet normal 0.321438 -0.94693 0 + outer loop + vertex 0.064705 -0.241481 0.1 + vertex 0.064705 -0.241481 0 + vertex 0.095671 -0.23097 0 + endloop + endfacet + facet normal 0.195081 -0.980787 0 + outer loop + vertex 0.064705 -0.241481 0 + vertex 0.064705 -0.241481 0.1 + vertex 0.0326315 -0.247861 0.1 + endloop + endfacet + facet normal 0.195081 -0.980787 0 + outer loop + vertex 0.0326315 -0.247861 0.1 + vertex 0.0326315 -0.247861 0 + vertex 0.064705 -0.241481 0 + endloop + endfacet + facet normal 0.0654097 -0.997858 0 + outer loop + vertex 8.32665e-17 -0.25 0 + vertex 0.0326315 -0.247861 0 + vertex 0.0326315 -0.247861 0.1 + endloop + endfacet + facet normal 0.0654097 -0.997858 1.07752e-16 + outer loop + vertex 0.0326315 -0.247861 0.1 + vertex -8.32665e-17 -0.25 0.1 + vertex 8.32665e-17 -0.25 0 + endloop + endfacet + facet normal -0.0654097 -0.997858 0 + outer loop + vertex -8.32665e-17 -0.25 0.1 + vertex -0.0326315 -0.247861 0.1 + vertex -0.0326315 -0.247861 0 + endloop + endfacet + facet normal -0.0654097 -0.997858 -1.07752e-16 + outer loop + vertex -0.0326315 -0.247861 0 + vertex 8.32665e-17 -0.25 0 + vertex -8.32665e-17 -0.25 0.1 + endloop + endfacet + facet normal -0.195081 -0.980787 0 + outer loop + vertex -0.0326315 -0.247861 0 + vertex -0.0326315 -0.247861 0.1 + vertex -0.064705 -0.241481 0.1 + endloop + endfacet + facet normal -0.195081 -0.980787 -0 + outer loop + vertex -0.064705 -0.241481 0.1 + vertex -0.064705 -0.241481 0 + vertex -0.0326315 -0.247861 0 + endloop + endfacet + facet normal -0.321438 -0.94693 0 + outer loop + vertex -0.064705 -0.241481 0 + vertex -0.064705 -0.241481 0.1 + vertex -0.095671 -0.23097 0.1 + endloop + endfacet + facet normal -0.321438 -0.94693 -0 + outer loop + vertex -0.095671 -0.23097 0.1 + vertex -0.095671 -0.23097 0 + vertex -0.064705 -0.241481 0 + endloop + endfacet + facet normal -0.44229 -0.896872 0 + outer loop + vertex -0.095671 -0.23097 0 + vertex -0.095671 -0.23097 0.1 + vertex -0.125 -0.216506 0.1 + endloop + endfacet + facet normal -0.44229 -0.896872 -0 + outer loop + vertex -0.125 -0.216506 0.1 + vertex -0.125 -0.216506 0 + vertex -0.095671 -0.23097 0 + endloop + endfacet + facet normal -0.555568 -0.831471 0 + outer loop + vertex -0.125 -0.216506 0 + vertex -0.125 -0.216506 0.1 + vertex -0.152191 -0.198338 0.1 + endloop + endfacet + facet normal -0.555568 -0.831471 -0 + outer loop + vertex -0.152191 -0.198338 0.1 + vertex -0.152191 -0.198338 0 + vertex -0.125 -0.216506 0 + endloop + endfacet + facet normal -0.659357 -0.75183 0 + outer loop + vertex -0.152191 -0.198338 0 + vertex -0.152191 -0.198338 0.1 + vertex -0.176776 -0.176776 0.1 + endloop + endfacet + facet normal -0.659357 -0.75183 -0 + outer loop + vertex -0.176776 -0.176776 0.1 + vertex -0.176776 -0.176776 0 + vertex -0.152191 -0.198338 0 + endloop + endfacet +endsolid cylinder diff --git a/tutorials/immersedBoundary/movingCylinderInChannelIco/save/blockMeshDict b/tutorials/immersedBoundary/movingCylinderInChannelIco/save/blockMeshDict new file mode 100644 index 000000000..070ca5469 --- /dev/null +++ b/tutorials/immersedBoundary/movingCylinderInChannelIco/save/blockMeshDict @@ -0,0 +1,69 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | foam-extend: Open Source CFD | +| \\ / O peration | Version: 3.2 | +| \\ / A nd | Web: http://www.foam-extend.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object blockMeshDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +convertToMeters 1; + +vertices +( + (-1 -0.5 0) + (2 -0.5 0) + (2 0.5 0) + (-1 0.5 0) + (-1 -0.5 0.1) + (2 -0.5 0.1) + (2 0.5 0.1) + (-1 0.5 0.1) +); + +blocks +( + hex (0 1 2 3 4 5 6 7) (75 25 1) simpleGrading (1 1 1) +); + +edges +( +); + +patches +( + patch in + ( + (0 4 7 3) + ) + patch out + ( + (2 6 5 1) + ) + patch top + ( + (3 7 6 2) + ) + patch bottom + ( + (1 5 4 0) + ) + empty frontAndBack + ( + (0 3 2 1) + (4 5 6 7) + ) +); + +mergePatchPairs +( +); + +// ************************************************************************* // diff --git a/tutorials/immersedBoundary/movingCylinderInChannelIco/save/boundary b/tutorials/immersedBoundary/movingCylinderInChannelIco/save/boundary new file mode 100644 index 000000000..6bacece3d --- /dev/null +++ b/tutorials/immersedBoundary/movingCylinderInChannelIco/save/boundary @@ -0,0 +1,60 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | foam-extend: Open Source CFD | +| \\ / O peration | Version: 3.2 | +| \\ / A nd | Web: http://www.foam-extend.org | +| \\/ M anipulation | For copyright notice see file Copyright | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class polyBoundaryMesh; + location "constant/polyMesh"; + object boundary; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +6 +( + ibCylinder + { + type immersedBoundary; + nFaces 0; + startFace 3650; + + internalFlow no; + } + in + { + type patch; + nFaces 25; + startFace 3650; + } + out + { + type patch; + nFaces 25; + startFace 3675; + } + top + { + type patch; + nFaces 75; + startFace 3700; + } + bottom + { + type patch; + nFaces 75; + startFace 3775; + } + frontAndBack + { + type empty; + nFaces 3750; + startFace 3850; + } +) + +// ************************************************************************* // diff --git a/tutorials/immersedBoundary/movingCylinderInChannelIco/system/controlDict b/tutorials/immersedBoundary/movingCylinderInChannelIco/system/controlDict new file mode 100644 index 000000000..21e890c9f --- /dev/null +++ b/tutorials/immersedBoundary/movingCylinderInChannelIco/system/controlDict @@ -0,0 +1,83 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | foam-extend: Open Source CFD | +| \\ / O peration | Version: 3.2 | +| \\ / A nd | Web: http://www.foam-extend.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object controlDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +application icoDyMFoam; + +startFrom startTime; + +startTime 0; + +stopAt endTime; + +endTime 5; + +deltaT 0.01; + +writeControl runTime; +writeInterval 0.2; + +// writeControl timeStep; +// writeInterval 1; + +purgeWrite 0; + +writeFormat ascii; + +writePrecision 6; + +writeCompression compressed; + +timeFormat general; + +timePrecision 6; + +runTimeModifiable yes; + +adjustTimeStep no; + +maxCo 0.2; + +libs +( + "libimmersedBoundary.so" + "libimmersedBoundaryDynamicFvMesh.so" +); + +functions +( + forces + { + type immersedBoundaryForces; + functionObjectLibs ("libimmersedBoundaryForceFunctionObject.so"); + + outputControl timeStep; + outputInterval 1; + patches ( ibCylinder ); + + pName p; + UName U; + rhoName rhoInf; + rhoInf 1; + + log true; + CofR ( 0 0 0 ); + + Aref 0.05; + Uref 1; + } +); + +// ************************************************************************* // diff --git a/tutorials/immersedBoundary/movingCylinderInChannelIco/system/decomposeParDict b/tutorials/immersedBoundary/movingCylinderInChannelIco/system/decomposeParDict new file mode 100644 index 000000000..9107479e0 --- /dev/null +++ b/tutorials/immersedBoundary/movingCylinderInChannelIco/system/decomposeParDict @@ -0,0 +1,50 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | foam-extend: Open Source CFD | +| \\ / O peration | Version: 3.2 | +| \\ / A nd | Web: http://www.foam-extend.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object decomposeParDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +numberOfSubdomains 10; + +method simple; + +simpleCoeffs +{ + n (5 2 1); + delta 0.001; +} + +hierarchicalCoeffs +{ + n (1 1 1); + delta 0.001; + order xyz; +} + +metisCoeffs +{ + processorWeights 4(1 1 1 1); +} + +manualCoeffs +{ + dataFile "cellDecomposition"; +} + +distributed no; + +roots +( +); + +// ************************************************************************* // diff --git a/tutorials/immersedBoundary/movingCylinderInChannelIco/system/fvSchemes b/tutorials/immersedBoundary/movingCylinderInChannelIco/system/fvSchemes new file mode 100644 index 000000000..974b06b9a --- /dev/null +++ b/tutorials/immersedBoundary/movingCylinderInChannelIco/system/fvSchemes @@ -0,0 +1,59 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | foam-extend: Open Source CFD | +| \\ / O peration | Version: 3.2 | +| \\ / A nd | Web: http://www.foam-extend.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object fvSchemes; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +ddtSchemes +{ + default Euler; +} + +gradSchemes +{ + default Gauss linear; + grad(p) Gauss linear; +} + +divSchemes +{ + default none; + div(phi,U) Gauss upwind; +} + +laplacianSchemes +{ + default none; + laplacian(nu,U) Gauss linear corrected; + laplacian((1|A(U)),p) Gauss linear corrected; + + laplacian(1,p) Gauss linear corrected; +} + +interpolationSchemes +{ + default linear; + interpolate(HbyA) linear; +} + +snGradSchemes +{ + default corrected; +} + +fluxRequired +{ + p; +} + +// ************************************************************************* // diff --git a/tutorials/immersedBoundary/movingCylinderInChannelIco/system/fvSolution b/tutorials/immersedBoundary/movingCylinderInChannelIco/system/fvSolution new file mode 100644 index 000000000..515d57959 --- /dev/null +++ b/tutorials/immersedBoundary/movingCylinderInChannelIco/system/fvSolution @@ -0,0 +1,68 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | foam-extend: Open Source CFD | +| \\ / O peration | Version: 3.2 | +| \\ / A nd | Web: http://www.foam-extend.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object fvSolution; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +solvers +{ + p + { + solver amgSolver; + cycle W-cycle; + policy PAMG; + nPreSweeps 2; + nPostSweeps 2; + groupSize 4; + minCoarseEqns 4; + nMaxLevels 100; + scale on; + smoother symGaussSeidel; + + minIter 1; + maxIter 100; + tolerance 1e-7; + relTol 0.01; + } + + U + { + solver BiCGStab; + preconditioner ILU0; + + minIter 1; + maxIter 1000; + tolerance 1e-08; + relTol 0; + } +} + +SIMPLE +{ + nNonOrthogonalCorrectors 5; + + pRefPoint (0 -0.45 0.05); + pRefValue 0; +} + +PIMPLE +{ + nOuterCorrectors 1; + nCorrectors 4; + nNonOrthogonalCorrectors 0; + + pRefPoint (0 -0.45 0.05); + pRefValue 0; +} + +// ************************************************************************* // diff --git a/tutorials/immersedBoundary/movingCylinderInChannelIco/system/mapFieldsDict b/tutorials/immersedBoundary/movingCylinderInChannelIco/system/mapFieldsDict new file mode 100644 index 000000000..66655e92f --- /dev/null +++ b/tutorials/immersedBoundary/movingCylinderInChannelIco/system/mapFieldsDict @@ -0,0 +1,30 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | foam-extend: Open Source CFD | +| \\ / O peration | Version: 3.2 | +| \\ / A nd | Web: http://www.foam-extend.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object mapFieldsDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +// List of pairs of source/target patches for mapping +patchMap +( +// lid movingWall +); + +// List of target patches cutting the source domain (these need to be +// handled specially e.g. interpolated from internal values) +cuttingPatches +( +// fixedWalls +); + +// ************************************************************************* //