From d5852c09da36436e3d498af2a51a33e1da1b1d2a Mon Sep 17 00:00:00 2001 From: Henrik Rusche Date: Tue, 21 Jun 2016 11:09:08 +0200 Subject: [PATCH] Removed superfluous; Synced duplicated files; Converted binary files --- .../backup/fluidSolidInterface.C | 2653 -- .../extrapolatedFvPatchField.C | 701 - .../extrapolatedFvPatchField.H | 196 - .../extrapolatedFvPatchFields.C | 43 - .../extrapolatedFvPatchFields.H | 49 - .../extrapolatedFvPatchFieldsFwd.H | 51 - .../icoFluid/updateRobinFsiInterface.H | 59 - .../updateRobinFsiInterface.H | 0 .../finiteVolume/fvc/fvcGradf.C.backup | 884 - .../finiteVolume/fvc/fvcGradf.C.new | 264 - .../freesteam-2.1/.cproject | 43 - .../freesteam-2.1/.project | 79 - .../fluid/constant/polyMesh/cellZones | Bin 8944 -> 0 bytes .../fluid/constant/polyMesh/cellZones.gz | Bin 0 -> 4742 bytes .../fluid/constant/polyMesh/faceZones | 4023 -- .../fluid/constant/polyMesh/faceZones.gz | Bin 0 -> 9351 bytes .../fluid/constant/polyMesh/faces | Bin 176911 -> 0 bytes .../fluid/constant/polyMesh/faces.gz | Bin 0 -> 52837 bytes .../fluid/constant/polyMesh/neighbour | Bin 16478 -> 0 bytes .../fluid/constant/polyMesh/neighbour.gz | Bin 0 -> 6756 bytes .../fluid/constant/polyMesh/owner | Bin 33034 -> 0 bytes .../fluid/constant/polyMesh/owner.gz | Bin 0 -> 10001 bytes .../fluid/constant/polyMesh/pointZones | 4172 -- .../fluid/constant/polyMesh/pointZones.gz | Bin 0 -> 9680 bytes .../fluid/constant/polyMesh/points | Bin 100261 -> 0 bytes .../fluid/constant/polyMesh/points.gz | Bin 0 -> 10811 bytes .../interface-solid-zone_1.vtk | Bin 4983 -> 0 bytes .../solid/constant/polyMesh/cellZones | Bin 2943 -> 0 bytes .../solid/constant/polyMesh/cellZones.gz | Bin 0 -> 1353 bytes .../solid/constant/polyMesh/faceZones | Bin 6101 -> 0 bytes .../solid/constant/polyMesh/faceZones.gz | Bin 0 -> 2386 bytes .../solid/constant/polyMesh/faces | Bin 47185 -> 0 bytes .../solid/constant/polyMesh/faces.gz | Bin 0 -> 14008 bytes .../solid/constant/polyMesh/neighbour | Bin 4535 -> 0 bytes .../solid/constant/polyMesh/neighbour.gz | Bin 0 -> 1568 bytes .../solid/constant/polyMesh/owner | Bin 9372 -> 0 bytes .../solid/constant/polyMesh/owner.gz | Bin 0 -> 2743 bytes .../solid/constant/polyMesh/pointZones | Bin 5810 -> 0 bytes .../solid/constant/polyMesh/pointZones.gz | Bin 0 -> 2910 bytes .../solid/constant/polyMesh/points | Bin 29965 -> 0 bytes .../solid/constant/polyMesh/points.gz | Bin 0 -> 3301 bytes .../polyMesh/sets/interface-solid-zone | 123 - .../constant/polyMesh/sets/nonAlignedEdges | 1235 - .../3dBeam/constant/polyMesh.old/boundary | 40 - .../3dBeam/constant/polyMesh.old/cellZones | 10031 ----- .../3dBeam/constant/polyMesh.old/faceZones | 27932 -------------- .../3dBeam/constant/polyMesh.old/faces | 32124 --------------- .../3dBeam/constant/polyMesh.old/neighbour | 27925 -------------- .../3dBeam/constant/polyMesh.old/owner | 32125 ---------------- .../3dBeam/constant/polyMesh.old/pointZones | 21 - .../3dBeam/constant/polyMesh.old/points | 12245 ------ .../constant/polyMesh.old/zoneToPatchName | 32 - 52 files changed, 157050 deletions(-) delete mode 100644 applications/solvers/FSI/fluidSolidInteraction/fluidSolidInterface/backup/fluidSolidInterface.C delete mode 100644 applications/solvers/FSI/fluidSolidInteraction/fluidSolvers/fvPatchFields/extrapolated.mixed/extrapolatedFvPatchField.C delete mode 100644 applications/solvers/FSI/fluidSolidInteraction/fluidSolvers/fvPatchFields/extrapolated.mixed/extrapolatedFvPatchField.H delete mode 100644 applications/solvers/FSI/fluidSolidInteraction/fluidSolvers/fvPatchFields/extrapolated.mixed/extrapolatedFvPatchFields.C delete mode 100644 applications/solvers/FSI/fluidSolidInteraction/fluidSolvers/fvPatchFields/extrapolated.mixed/extrapolatedFvPatchFields.H delete mode 100644 applications/solvers/FSI/fluidSolidInteraction/fluidSolvers/fvPatchFields/extrapolated.mixed/extrapolatedFvPatchFieldsFwd.H delete mode 100644 applications/solvers/FSI/fluidSolidInteraction/fluidSolvers/icoFluid/updateRobinFsiInterface.H rename applications/solvers/FSI/fluidSolidInteraction/{fluidSolvers/consistentIcoFluid => include}/updateRobinFsiInterface.H (100%) delete mode 100644 applications/solvers/FSI/fluidSolidInteraction/solidSolvers/finiteVolume/fvc/fvcGradf.C.backup delete mode 100644 applications/solvers/FSI/fluidSolidInteraction/solidSolvers/finiteVolume/fvc/fvcGradf.C.new delete mode 100644 src/thermophysicalModels/thermophysicalFunctions/freesteam-2.1/.cproject delete mode 100644 src/thermophysicalModels/thermophysicalFunctions/freesteam-2.1/.project delete mode 100644 tutorials/FSI/ampFsiFoam/axisymmetricTube/fluid/constant/polyMesh/cellZones create mode 100644 tutorials/FSI/ampFsiFoam/axisymmetricTube/fluid/constant/polyMesh/cellZones.gz delete mode 100644 tutorials/FSI/ampFsiFoam/axisymmetricTube/fluid/constant/polyMesh/faceZones create mode 100644 tutorials/FSI/ampFsiFoam/axisymmetricTube/fluid/constant/polyMesh/faceZones.gz delete mode 100644 tutorials/FSI/ampFsiFoam/axisymmetricTube/fluid/constant/polyMesh/faces create mode 100644 tutorials/FSI/ampFsiFoam/axisymmetricTube/fluid/constant/polyMesh/faces.gz delete mode 100644 tutorials/FSI/ampFsiFoam/axisymmetricTube/fluid/constant/polyMesh/neighbour create mode 100644 tutorials/FSI/ampFsiFoam/axisymmetricTube/fluid/constant/polyMesh/neighbour.gz delete mode 100644 tutorials/FSI/ampFsiFoam/axisymmetricTube/fluid/constant/polyMesh/owner create mode 100644 tutorials/FSI/ampFsiFoam/axisymmetricTube/fluid/constant/polyMesh/owner.gz delete mode 100644 tutorials/FSI/ampFsiFoam/axisymmetricTube/fluid/constant/polyMesh/pointZones create mode 100644 tutorials/FSI/ampFsiFoam/axisymmetricTube/fluid/constant/polyMesh/pointZones.gz delete mode 100644 tutorials/FSI/ampFsiFoam/axisymmetricTube/fluid/constant/polyMesh/points create mode 100644 tutorials/FSI/ampFsiFoam/axisymmetricTube/fluid/constant/polyMesh/points.gz delete mode 100644 tutorials/FSI/ampFsiFoam/axisymmetricTube/solid/VTK/interface-solid-zone/interface-solid-zone_1.vtk delete mode 100644 tutorials/FSI/ampFsiFoam/axisymmetricTube/solid/constant/polyMesh/cellZones create mode 100644 tutorials/FSI/ampFsiFoam/axisymmetricTube/solid/constant/polyMesh/cellZones.gz delete mode 100644 tutorials/FSI/ampFsiFoam/axisymmetricTube/solid/constant/polyMesh/faceZones create mode 100644 tutorials/FSI/ampFsiFoam/axisymmetricTube/solid/constant/polyMesh/faceZones.gz delete mode 100644 tutorials/FSI/ampFsiFoam/axisymmetricTube/solid/constant/polyMesh/faces create mode 100644 tutorials/FSI/ampFsiFoam/axisymmetricTube/solid/constant/polyMesh/faces.gz delete mode 100644 tutorials/FSI/ampFsiFoam/axisymmetricTube/solid/constant/polyMesh/neighbour create mode 100644 tutorials/FSI/ampFsiFoam/axisymmetricTube/solid/constant/polyMesh/neighbour.gz delete mode 100644 tutorials/FSI/ampFsiFoam/axisymmetricTube/solid/constant/polyMesh/owner create mode 100644 tutorials/FSI/ampFsiFoam/axisymmetricTube/solid/constant/polyMesh/owner.gz delete mode 100644 tutorials/FSI/ampFsiFoam/axisymmetricTube/solid/constant/polyMesh/pointZones create mode 100644 tutorials/FSI/ampFsiFoam/axisymmetricTube/solid/constant/polyMesh/pointZones.gz delete mode 100644 tutorials/FSI/ampFsiFoam/axisymmetricTube/solid/constant/polyMesh/points create mode 100644 tutorials/FSI/ampFsiFoam/axisymmetricTube/solid/constant/polyMesh/points.gz delete mode 100644 tutorials/FSI/ampFsiFoam/axisymmetricTube/solid/constant/polyMesh/sets/interface-solid-zone delete mode 100644 tutorials/FSI/ampFsiFoam/axisymmetricTube/solid/constant/polyMesh/sets/nonAlignedEdges delete mode 100644 tutorials/FSI/solidFoam/3dBeam/constant/polyMesh.old/boundary delete mode 100644 tutorials/FSI/solidFoam/3dBeam/constant/polyMesh.old/cellZones delete mode 100644 tutorials/FSI/solidFoam/3dBeam/constant/polyMesh.old/faceZones delete mode 100644 tutorials/FSI/solidFoam/3dBeam/constant/polyMesh.old/faces delete mode 100644 tutorials/FSI/solidFoam/3dBeam/constant/polyMesh.old/neighbour delete mode 100644 tutorials/FSI/solidFoam/3dBeam/constant/polyMesh.old/owner delete mode 100644 tutorials/FSI/solidFoam/3dBeam/constant/polyMesh.old/pointZones delete mode 100644 tutorials/FSI/solidFoam/3dBeam/constant/polyMesh.old/points delete mode 100644 tutorials/FSI/solidFoam/3dBeam/constant/polyMesh.old/zoneToPatchName diff --git a/applications/solvers/FSI/fluidSolidInteraction/fluidSolidInterface/backup/fluidSolidInterface.C b/applications/solvers/FSI/fluidSolidInteraction/fluidSolidInterface/backup/fluidSolidInterface.C deleted file mode 100644 index dfdc8006e..000000000 --- a/applications/solvers/FSI/fluidSolidInteraction/fluidSolidInterface/backup/fluidSolidInterface.C +++ /dev/null @@ -1,2653 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / 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 "fluidSolidInterface.H" -#include "volFields.H" -#include "polyPatchID.H" -#include "ZoneIDs.H" -#include "RectangularMatrix.H" -#include "primitivePatchInterpolation.H" -#include "twoDPointCorrector.H" - -#include "tetPointFields.H" -#include "fixedValueTetPolyPatchFields.H" -#include "tetPolyPatchInterpolation.H" -#include "tetFemMatrices.H" - -#include "fixedValuePointPatchFields.H" -#include "RBFMotionSolver.H" -#include "ggiInterpolation.H" -#include "IOmanip.H" -#include "dynamicMotionSolverFvMesh.H" -#include "motionSolver.H" -#include "totalVelocityLaplacianFvMotionSolver.H" - -#include "faCFD.H" - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -namespace Foam -{ - defineTypeNameAndDebug(fluidSolidInterface, 0); -// defineRunTimeSelectionTable(fluidSolidInterface, dictionary); -} - -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // - -void Foam::fluidSolidInterface::calcCurrentSolidZonePoints() const -{ - // Find global face zones - if (currentSolidZonePointsPtr_) - { - FatalErrorIn - ( - "void fluidSolidInterface::" - "calcCurrentSolidZonePoints() const" - ) - << "Current solid zone points alarady exist" - << abort(FatalError); - } - - currentSolidZonePointsPtr_ = - new vectorField(stress().currentFaceZonePoints(solidZoneIndex())); -} - -void Foam::fluidSolidInterface::calcCurrentSolidZonePatch() const -{ - // Find global face zones - if (currentSolidZonePatchPtr_) - { - FatalErrorIn - ( - "void fluidSolidInterface::" - "calcCurrentSolidZonePatch() const" - ) - << "Current solid zone patch alarady exists" - << abort(FatalError); - } - - currentSolidZonePatchPtr_ = - new PrimitivePatch - ( - solidMesh().faceZones()[solidZoneIndex_]().localFaces(), - currentSolidZonePoints() - ); -} - -void Foam::fluidSolidInterface::calcFluidToSolidInterpolator() const -{ - // Find global face zones - if (fluidToSolidPtr_) - { - FatalErrorIn - ( - "void fluidSolidInterface::" - "calcFluidToSolidInterpolator() const" - ) - << "Fluid to solid interpolator already exists" - << abort(FatalError); - } - - fluidToSolidPtr_ = - new zoneToZoneInterpolation - ( - fluidMesh().faceZones()[fluidZoneIndex_](), - solidMesh().faceZones()[solidZoneIndex_](), - intersection::VISIBLE - ); - - Info << "Checking fluid-to-solid interpolator" << endl; - { - vectorField fluidPatchFaceCentres = - vectorField - ( - fluidMesh().boundaryMesh()[fluidPatchIndex_].faceCentres() - ); - - vectorField fluidZoneFaceCentres - ( - fluidMesh().faceZones()[fluidZoneIndex_].size(), - vector::zero - ); - - const label fluidPatchStart = - fluidMesh().boundaryMesh()[fluidPatchIndex_].start(); - - forAll (fluidPatchFaceCentres, i) - { - fluidZoneFaceCentres - [ - fluidMesh().faceZones()[fluidZoneIndex_].whichFace - ( - fluidPatchStart + i - ) - ] = - fluidPatchFaceCentres[i]; - } - - // Parallel data exchange: collect faceCentres field on all processors - reduce(fluidZoneFaceCentres, sumOp()); - - vectorField solidZoneFaceCentres = - fluidToSolidPtr_->faceInterpolate - ( - fluidZoneFaceCentres - ); - - vectorField solidPatchFaceCentres - ( - solidMesh().boundaryMesh()[solidPatchIndex_].size(), - vector::zero - ); - - const label solidPatchStart = - solidMesh().boundaryMesh()[solidPatchIndex_].start(); - - forAll(solidPatchFaceCentres, i) - { - solidPatchFaceCentres[i] = - solidZoneFaceCentres - [ - solidMesh().faceZones()[solidZoneIndex_] - .whichFace(solidPatchStart + i) - ]; - } - - scalar maxDist = gMax - ( - mag - ( - solidPatchFaceCentres - - solidMesh().boundaryMesh()[solidPatchIndex_].faceCentres() - ) - ); - - Info << "Fluid-to-solid face interpolation error: " << maxDist - << endl; - } -} - -// void Foam::fluidSolidInterface::calcGgiFluidToSolidInterpolator() const -// { -// // Find global face zones -// if (ggiFluidToSolidPtr_) -// { -// FatalErrorIn -// ( -// "void fluidSolidInterface::" -// "calcGgiFluidToSolidInterpolator() const" -// ) -// << "Ggi fluid to solid interpolator already exists" -// << abort(FatalError); -// } - -// ggiFluidToSolidPtr_ = -// new ggiZoneInterpolation -// ( -// fluidMesh().faceZones()[fluidZoneIndex_](), -// solidMesh().faceZones()[solidZoneIndex_](), -// tensorField(0), -// tensorField(0), -// vectorField(0), // Slave-to-master separation. Bug fix -// 0, // Non-overlapping face tolerances -// 0, // HJ, 24/Oct/2008 -// true, // Rescale weighting factors. Bug fix, MB. -// ggiInterpolation::AABB //BB_OCTREE // Octree search, MB. -// ); - - -// Info << "Checking fluid-to-solid interpolator" << endl; -// { -// vectorField fluidPatchFaceCentres = -// vectorField -// ( -// fluidMesh().boundaryMesh()[fluidPatchIndex_].faceCentres() -// ); - -// vectorField fluidZoneFaceCentres -// ( -// fluidMesh().faceZones()[fluidZoneIndex_].size(), -// vector::zero -// ); - -// const label fluidPatchStart = -// fluidMesh().boundaryMesh()[fluidPatchIndex_].start(); - -// forAll (fluidPatchFaceCentres, i) -// { -// fluidZoneFaceCentres -// [ -// fluidMesh().faceZones()[fluidZoneIndex_].whichFace -// ( -// fluidPatchStart + i -// ) -// ] = -// fluidPatchFaceCentres[i]; -// } - -// // Parallel data exchange: collect faceCentres field on all processors -// reduce(fluidZoneFaceCentres, sumOp()); - -// vectorField solidZoneFaceCentres = -// ggiFluidToSolidPtr_->masterToSlave -// ( -// fluidZoneFaceCentres -// ); - -// vectorField solidPatchFaceCentres -// ( -// solidMesh().boundaryMesh()[solidPatchIndex_].size(), -// vector::zero -// ); - -// const label solidPatchStart = -// solidMesh().boundaryMesh()[solidPatchIndex_].start(); - -// forAll(solidPatchFaceCentres, i) -// { -// solidPatchFaceCentres[i] = -// solidZoneFaceCentres -// [ -// solidMesh().faceZones()[solidZoneIndex_] -// .whichFace(solidPatchStart + i) -// ]; -// } - -// scalar maxDist = gMax -// ( -// mag -// ( -// solidPatchFaceCentres -// - solidMesh().boundaryMesh()[solidPatchIndex_].faceCentres() -// ) -// ); - -// Info << "Fluid-to-solid face interpolation error: " << maxDist -// << endl; -// } - -// Info << "Number of uncovered master faces: " -// << ggiFluidToSolidPtr_->uncoveredMasterFaces().size() << endl; - -// Info << "Number of uncovered slave faces: " -// << ggiFluidToSolidPtr_->uncoveredSlaveFaces().size() << endl; -// } - - -void Foam::fluidSolidInterface::calcGgiInterpolator() const -{ - // Create extended ggi interpolation - if (ggiInterpolatorPtr_) - { - FatalErrorIn - ( - "void fluidSolidInterface::" - "calcGgiInterpolator() const" - ) - << "Ggi interpolator already exists" - << abort(FatalError); - } - - // Create copy of solid face zone primitive patch in current configuration - - deleteDemandDrivenData(currentSolidZonePatchPtr_); - deleteDemandDrivenData(currentSolidZonePointsPtr_); - -// currentSolidZonePatch().movePoints(currentSolidZonePoints()); - - Info << "Create extended GGI zone-to-zone interpolator" << endl; - - ggiInterpolatorPtr_ = - new extendedGgiZoneInterpolation - ( - fluidMesh().faceZones()[fluidZoneIndex_](), - currentSolidZonePatch(), -// solidMesh().faceZones()[solidZoneIndex_](), - tensorField(0), - tensorField(0), - vectorField(0), // Slave-to-master separation. Bug fix - 0, // Non-overlapping face tolerances - 0, // HJ, 24/Oct/2008 - true, // Rescale weighting factors. Bug fix, MB. - ggiInterpolation::AABB - // N_SQUARED BB_OCTREE AABB THREE_D_DISTANCE - // Octree search, MB. - ); - -// currentSolidZonePatch().writeVTK("solidZone"); -// fluidMesh().faceZones()[fluidZoneIndex_]().writeVTK("fluidZone"); -// fluidMesh().boundaryMesh()[fluidPatchIndex_].writeVTK -// ( -// "fluidPatch", -// fluidMesh().boundaryMesh()[fluidPatchIndex_], -// fluidMesh().points() -// ); - - Info << "Checking fluid-to-solid face interpolator" << endl; - { - vectorField fluidPatchFaceCentres = - vectorField - ( - fluidMesh().boundaryMesh()[fluidPatchIndex_].faceCentres() - ); - - vectorField fluidZoneFaceCentres - ( - fluidMesh().faceZones()[fluidZoneIndex_].size(), - vector::zero - ); - - const label fluidPatchStart = - fluidMesh().boundaryMesh()[fluidPatchIndex_].start(); - - forAll (fluidPatchFaceCentres, i) - { - fluidZoneFaceCentres - [ - fluidMesh().faceZones()[fluidZoneIndex_].whichFace - ( - fluidPatchStart + i - ) - ] = - fluidPatchFaceCentres[i]; - } - - // Parallel data exchange: collect faceCentres field on all processors - reduce(fluidZoneFaceCentres, sumOp()); - - vectorField solidZoneFaceCentres = - ggiInterpolatorPtr_->masterToSlave - ( - fluidZoneFaceCentres - ); - - vectorField solidPatchFaceCentres - ( - solidMesh().boundaryMesh()[solidPatchIndex_].size(), - vector::zero - ); - - const label solidPatchStart = - solidMesh().boundaryMesh()[solidPatchIndex_].start(); - - forAll(solidPatchFaceCentres, i) - { - solidPatchFaceCentres[i] = - solidZoneFaceCentres - [ - solidMesh().faceZones()[solidZoneIndex_] - .whichFace(solidPatchStart + i) - ]; - } - - scalar maxDist = gMax - ( - mag - ( - solidPatchFaceCentres - - solidMesh().boundaryMesh()[solidPatchIndex_].faceCentres() - ) - ); - - Info << "Fluid-to-solid face interpolation error: " << maxDist - << endl; - } - - Info << "Checking solid-to-fluid point interpolator (GGI)" << endl; - { - vectorField solidZonePoints_ = - currentSolidZonePoints(); -// solidMesh().faceZones()[solidZoneIndex_]().localPoints(); - - vectorField solidZonePoints = - ggiInterpolatorPtr_->slaveToMasterPointInterpolate - ( - solidZonePoints_ - ); - - vectorField fluidZonePoints = - fluidMesh().faceZones()[fluidZoneIndex_]().localPoints(); - - scalar maxDist = gMax - ( - mag - ( - fluidZonePoints - - solidZonePoints - ) - ); - - Info << "Solid-to-fluid point interpolation error (GGI): " << maxDist - << endl; - } - - Info << "Number of uncovered master faces: " - << ggiInterpolatorPtr_->uncoveredMasterFaces().size() << endl; - - Info << "Number of uncovered slave faces: " - << ggiInterpolatorPtr_ ->uncoveredSlaveFaces().size() << endl; -} - - -void Foam::fluidSolidInterface::calcSolidToFluidInterpolator() const -{ - // Find global face zones - if (solidToFluidPtr_) - { - FatalErrorIn - ( - "void fluidSolidInterface::" - "calcSolidToFluidInterpolator() const" - ) - << "Solid to fluid interpolator already exists" - << abort(FatalError); - } - - solidToFluidPtr_ = - new zoneToZoneInterpolation - ( - solidMesh().faceZones()[solidZoneIndex_](), - fluidMesh().faceZones()[fluidZoneIndex_](), - intersection::VISIBLE - ); - - Info << "Checking solid-to-fluid interpolator" << endl; - { - vectorField solidZonePoints_ = - solidMesh().faceZones()[solidZoneIndex_]().localPoints(); - - vectorField solidZonePoints = - solidToFluidPtr_->pointInterpolate - ( - solidZonePoints_ - ); - - vectorField fluidZonePoints = - fluidMesh().faceZones()[fluidZoneIndex_]().localPoints(); - - scalar maxDist = gMax - ( - mag - ( - fluidZonePoints - - solidZonePoints - ) - ); - - Info << "Solid-to-fluid point interpolation error: " << maxDist - << endl; - } -} - - -void Foam::fluidSolidInterface:: -calcAccumulatedFluidInterfaceDisplacement() const -{ - // Read accumulated displacement - if (accumulatedFluidInterfaceDisplacementPtr_) - { - FatalErrorIn - ( - "void fluidSolidInterface::" - "calcAccumulatedFluidInterfaceDisplacement() const" - ) - << "Accumulated displacement field already exists" - << abort(FatalError); - } - - // Accumulated fluid interface displacement - IOobject accumulatedFluidInterfaceDisplacementHeader - ( - "accumulatedFluidInterfaceDisplacement", - flow().runTime().timeName(), - fluidMesh(), - IOobject::MUST_READ - ); - - if(accumulatedFluidInterfaceDisplacementHeader.headerOk()) - { - Pout << "Reading accumulated fluid interface displacement" << endl; - - accumulatedFluidInterfaceDisplacementPtr_ = - new vectorIOField - ( - IOobject - ( - "accumulatedFluidInterfaceDisplacement", - flow().runTime().timeName(), - fluidMesh(), - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ) - ); - } - else - { - Pout << "Creating accumulated fluid interface displacement" << endl; - - accumulatedFluidInterfaceDisplacementPtr_ = - new vectorIOField - ( - IOobject - ( - "accumulatedFluidInterfaceDisplacement", - flow().runTime().timeName(), - fluidMesh(), - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - vectorField - ( - fluidMesh().boundaryMesh()[fluidPatchIndex()].nPoints(), - vector::zero - ) - ); - } -} - - -void Foam::fluidSolidInterface::calcMinEdgeLength() const -{ - // Read accumulated displacement - if (minEdgeLengthPtr_) - { - FatalErrorIn - ( - "void fluidSolidInterface::" - "calcMinEdgeLength() const" - ) - << "Minimal edge lengths already exist" - << abort(FatalError); - } - - minEdgeLengthPtr_ = - new scalarField - ( - fluidMesh().faceZones()[fluidZoneIndex_]().nPoints(), - 0 - ); - scalarField& minEdgeLength = *minEdgeLengthPtr_; - - - const edgeList& edges = - fluidMesh().faceZones()[fluidZoneIndex_]().edges(); - - const vectorField& points = - fluidMesh().faceZones()[fluidZoneIndex_]().localPoints(); - - const labelListList& pointEdges = - fluidMesh().faceZones()[fluidZoneIndex_]().pointEdges(); - - forAll(points, pointI) - { - const labelList& curPointEdges = pointEdges[pointI]; - - scalar minLength = GREAT; - - forAll(curPointEdges, edgeI) - { - const edge& curEdge = edges[curPointEdges[edgeI]]; - - scalar Le = curEdge.mag(points); - - if (Le < minLength) - { - minLength = Le; - } - } - - minEdgeLength[pointI] = minLength; - } - -// Pout << "Min edge length: " << min(minEdgeLength) << endl; -// Pout << "gMin edge length: " << gMin(minEdgeLength) << endl; -} - -Foam::vectorIOField& -Foam::fluidSolidInterface::accumulatedFluidInterfaceDisplacement() -{ - if (!accumulatedFluidInterfaceDisplacementPtr_) - { - calcAccumulatedFluidInterfaceDisplacement(); - } - - return *accumulatedFluidInterfaceDisplacementPtr_; -} - - -const Foam::scalarField& Foam::fluidSolidInterface::minEdgeLength() const -{ - if (!minEdgeLengthPtr_) - { - calcMinEdgeLength(); - } - - return *minEdgeLengthPtr_; -} - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -Foam::fluidSolidInterface::fluidSolidInterface -( - dynamicFvMesh& fMesh, - fvMesh& sMesh -) -: - IOdictionary - ( - IOobject - ( - "fsiProperties", - fMesh.time().constant(), - fMesh, - IOobject::MUST_READ, - IOobject::NO_WRITE - ) - ), - fluidMesh_(fMesh), - flow_(fluidSolver::New(fluidMesh_)), - solidMesh_(sMesh), - stress_(solidSolver::New(solidMesh_)), - solidPatchIndex_(-1), - solidZoneIndex_(-1), - fluidPatchIndex_(-1), - fluidZoneIndex_(-1), - currentSolidZonePointsPtr_(NULL), - currentSolidZonePatchPtr_(NULL), - fluidToSolidPtr_(NULL), -// ggiFluidToSolidPtr_(NULL), - ggiInterpolatorPtr_(NULL), - solidToFluidPtr_(NULL), - couplingScheme_(lookup("couplingScheme")), - relaxationFactor_(readScalar(lookup("relaxationFactor"))), - aitkenRelaxationFactor_(relaxationFactor_), - outerCorrTolerance_(readScalar(lookup("outerCorrTolerance"))), - nOuterCorr_(readInt(lookup("nOuterCorr"))), - coupled_(lookup("coupled")), - predictor_(false), //(lookup("predictor")), - couplingReuse_(readInt(lookup("couplingReuse"))), - interfaceDeformationLimit_ - ( - readScalar(lookup("interfaceDeformationLimit")) - ), - fluidZonePointsDispl_(), - fluidZonePointsDisplRef_(), - fluidZonePointsDisplPrev_(), - solidZonePointsDispl_(), - solidZonePointsDisplRef_(), - interfacePointsDispl_(), - interfacePointsDisplPrev_(), - solidZonePressure_(), - solidZoneTraction_(), - solidZoneTractionPrev_(), - predictedSolidZoneTraction_(), - residual_(), - residualPrev_(), - maxResidualNorm_(0), - maxIntDisplNorm_(0), - outerCorr_(0), -// closedFluidDomain_(lookup("closedFluidDomain")), -// refPressure_(0), -// refPressureIncrement_(0), -// compressibility_(readScalar(lookup("compressibility"))), - interpolatorUpdateFrequency_ - ( - readInt(lookup("interpolatorUpdateFrequency")) - ), - fluidPatchPointsV_(), - fluidPatchPointsW_(), - fluidPatchPointsT_(), - accumulatedFluidInterfaceDisplacementPtr_(NULL), - minEdgeLengthPtr_(NULL) -{ - // Solid patch index - - word solidPatchName(lookup("solidPatch")); - - polyPatchID solidPatch(solidPatchName, solidMesh().boundaryMesh()); - - if (!solidPatch.active()) - { - FatalErrorIn("fluidSolidInterface::fluidSolidInterface(...)") - << "Solid patch name " << solidPatchName << " not found." - << abort(FatalError); - } - - solidPatchIndex_ = solidPatch.index(); - - - // Solid face zone index - - word solidZoneName(lookup("solidZone")); - - faceZoneID solidZone - ( - solidZoneName, - solidMesh().faceZones() - ); - - if (!solidZone.active()) - { - FatalErrorIn("") - << "Solid face zone name " << solidZoneName - << " not found. Please check your face zone definition." - << abort(FatalError); - } - - solidZoneIndex_ = solidZone.index(); - - - // Fluid patch index - - word fluidPatchName(lookup("fluidPatch")); - - polyPatchID fluidPatch(fluidPatchName, fluidMesh().boundaryMesh()); - - if (!fluidPatch.active()) - { - FatalErrorIn("fluidSolidInterface::fluidSolidInterface(...)") - << "Fluid patch name " << fluidPatchName << " not found." - << abort(FatalError); - } - - fluidPatchIndex_ = fluidPatch.index(); - - - // Fluid face zone index - - word fluidZoneName(lookup("fluidZone")); - - faceZoneID fluidZone - ( - fluidZoneName, - fluidMesh().faceZones() - ); - - if (!fluidZone.active()) - { - FatalErrorIn("fluidSolidInterface::fluidSolidInterface(...)") - << "Fluid face zone name " << fluidZoneName - << " not found. Please check your face zone definition." - << abort(FatalError); - } - - fluidZoneIndex_ = fluidZone.index(); - - - // Check coupling scheme - if - ( - (couplingScheme_ == "IQN-ILS") - || (couplingScheme_ == "Aitken") - || (couplingScheme_ == "FixedRelaxation") - ) - { - Info<< "Selecting coupling scheme " << couplingScheme_ << endl; - } - else - { - FatalErrorIn - ( - "fluidSolidInterface::fluidSolidInterface(...)" - ) << "couplingScheme: " << couplingScheme_ - << " is not a valid choice. " - << "Options are: IQN-ILS, Aitken, FixedRelaxation" - << abort(FatalError); - } - - // Initialize solid zone pressure - solidZonePressure_ = - scalarField(solidMesh().faceZones()[solidZoneIndex()].size(), 0.0); - - solidZoneTraction_ = - vectorField - ( - solidMesh().faceZones()[solidZoneIndex_]().size(), - vector::zero - ); - - solidZoneTractionPrev_ = - vectorField - ( - solidMesh().faceZones()[solidZoneIndex_]().size(), - vector::zero - ); - - predictedSolidZoneTraction_ = - vectorField - ( - solidMesh().faceZones()[solidZoneIndex_]().size(), - vector::zero - ); - - residual_ = - vectorField - ( - fluidMesh().faceZones()[fluidZoneIndex_]().nPoints(), - vector::zero - ); - - if (found("predictor")) - { - predictor_ = Switch(lookup("predictor")); - } -} - - -// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // - -Foam::fluidSolidInterface::~fluidSolidInterface() -{ - deleteDemandDrivenData(currentSolidZonePointsPtr_); - deleteDemandDrivenData(currentSolidZonePatchPtr_); - deleteDemandDrivenData(fluidToSolidPtr_); -// deleteDemandDrivenData(ggiFluidToSolidPtr_); - deleteDemandDrivenData(ggiInterpolatorPtr_); - deleteDemandDrivenData(solidToFluidPtr_); - deleteDemandDrivenData(accumulatedFluidInterfaceDisplacementPtr_); - deleteDemandDrivenData(minEdgeLengthPtr_); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -const Foam::vectorField& -Foam::fluidSolidInterface::currentSolidZonePoints() const -{ - if (!currentSolidZonePointsPtr_) - { - calcCurrentSolidZonePoints(); - } - - return *currentSolidZonePointsPtr_; -} - -const Foam::PrimitivePatch& -Foam::fluidSolidInterface::currentSolidZonePatch() const -{ - if (!currentSolidZonePatchPtr_) - { - calcCurrentSolidZonePatch(); - } - - return *currentSolidZonePatchPtr_; -} - -const Foam::zoneToZoneInterpolation& -Foam::fluidSolidInterface::fluidToSolid() const -{ - if (!fluidToSolidPtr_) - { - calcFluidToSolidInterpolator(); - } - - return *fluidToSolidPtr_; -} - -// const Foam::ggiZoneInterpolation& -// Foam::fluidSolidInterface::ggiFluidToSolid() const -// { -// if (!ggiFluidToSolidPtr_) -// { -// calcGgiFluidToSolidInterpolator(); -// } - -// return *ggiFluidToSolidPtr_; -// } - -const Foam::extendedGgiZoneInterpolation& -Foam::fluidSolidInterface::ggiInterpolator() const -{ - if (!ggiInterpolatorPtr_) - { - calcGgiInterpolator(); - } - - return *ggiInterpolatorPtr_; -} - -const Foam::zoneToZoneInterpolation& -Foam::fluidSolidInterface::solidToFluid() const -{ - if (!solidToFluidPtr_) - { - calcSolidToFluidInterpolator(); - } - - return *solidToFluidPtr_; -} - -void Foam::fluidSolidInterface::initializeFields() -{ - fluidZonePointsDispl_ = - vectorField - ( - fluidMesh().faceZones()[fluidZoneIndex_]().nPoints(), - vector::zero - ); - - fluidZonePointsDisplRef_ = - vectorField - ( - fluidMesh().faceZones()[fluidZoneIndex_]().nPoints(), - vector::zero - ); - - fluidZonePointsDisplPrev_ = - vectorField - ( - fluidMesh().faceZones()[fluidZoneIndex_]().nPoints(), - vector::zero - ); - - solidZonePointsDispl_ = - vectorField - ( - fluidMesh().faceZones()[fluidZoneIndex_]().nPoints(), - vector::zero - ); - - solidZonePointsDisplRef_ = - vectorField - ( - fluidMesh().faceZones()[fluidZoneIndex_]().nPoints(), - vector::zero - ); - - residualPrev_ = residual_; -// vectorField -// ( -// fluidMesh().faceZones()[fluidZoneIndex_]().nPoints(), -// vector::zero -// ); - - residual_ = - vectorField - ( - fluidMesh().faceZones()[fluidZoneIndex_]().nPoints(), - vector::zero - ); - - maxResidualNorm_ = 0; - - outerCorr_ = 0; - - nOuterCorr_ = readInt(lookup("nOuterCorr")); - - outerCorrTolerance_ = readScalar(lookup("outerCorrTolerance")); - - coupled_ = Switch(lookup("coupled")); - - couplingReuse_ = readInt(lookup("couplingReuse")); - - relaxationFactor_ = readScalar(lookup("relaxationFactor")); - - - interfacePointsDispl_ = - vectorField - ( - fluidMesh().faceZones()[fluidZoneIndex_]().nPoints(), - vector::zero - ); - - interfacePointsDisplPrev_ = - vectorField - ( - fluidMesh().faceZones()[fluidZoneIndex_]().nPoints(), - vector::zero - ); - -// refPressure_ += refPressureIncrement_; - -// if (timeIndex_ < runTime().timeIndex()) -// { -// timeIndex_ = runTime().timeIndex(); - -// } -} - - -void Foam::fluidSolidInterface::updateInterpolator() -{ -// label interpolatorUpdateFrequency_ = 2; - -// Info << runTime().timeIndex() << endl; - - if (!ggiInterpolatorPtr_) - { - ggiInterpolator(); - } - else if (interpolatorUpdateFrequency_ != 0) - { - if (((runTime().timeIndex()-1)%interpolatorUpdateFrequency_) == 0) - { - deleteDemandDrivenData(ggiInterpolatorPtr_); - ggiInterpolator(); - } - } -// else -// { -// if ((runTime().timeIndex()-1) == 0) -// { -// deleteDemandDrivenData(ggiInterpolatorPtr_); -// ggiInterpolator(); -// } -// } -} - - -void Foam::fluidSolidInterface::updateDisplacement() -{ - Info << "\nTime = " << flow().runTime().timeName() - << ", iteration: " << outerCorr() << endl; - -// if (outerCorr_ == 1) -// { -// // Cancel residual from previous time step -// fluidZonePointsDisplPrev() = fluidZonePointsDispl(); -// fluidZonePointsDispl() += residualPrev(); -// } - - - if (couplingScheme() == "FixedRelaxation") - { - Info << "Current fsi under-relaxation factor: " - << relaxationFactor() << endl; - - fluidZonePointsDisplPrev() = fluidZonePointsDispl(); - - // if (outerCorr_ == 1) - // { - // // Cancel residual from previous time step - // fluidZonePointsDispl() += residualPrev(); - // } - - fluidZonePointsDispl() += relaxationFactor()*residual(); - } - else if (couplingScheme() == "Aitken") - { - if (outerCorr_ < 3) - { - Info << "Current fsi under-relaxation factor: " - << relaxationFactor() << endl; - - fluidZonePointsDisplPrev() = fluidZonePointsDispl(); - - // if (outerCorr_ == 1) - // { - // // Cancel residual from previous time step - // fluidZonePointsDispl() += residualPrev(); - // } - - if ((outerCorr_ == 1) && predictor()) - { - fluidZonePointsDispl() += residual(); - } - else - { - fluidZonePointsDispl() += relaxationFactor()*residual(); - } -// fluidZonePointsDispl() += relaxationFactor()*residual(); - } - else - { - aitkenRelaxationFactor() = - -aitkenRelaxationFactor() - *( - sum - ( - residualPrev() - & (residual() - residualPrev()) - ) - /( - sum - ( - (residual() - residualPrev()) - & (residual() - residualPrev()) - ) - ) - ); - - if (Pstream::parRun()) - { - if(!Pstream::master()) - { - aitkenRelaxationFactor() = 0.0; - } - - //- pass to all procs - reduce(aitkenRelaxationFactor(), sumOp()); - } - - aitkenRelaxationFactor() = mag(aitkenRelaxationFactor()); - - if (aitkenRelaxationFactor()>1) - { - aitkenRelaxationFactor() = relaxationFactor(); - } - - Info << "Current fsi under-relaxation factor (Aitken): " - << aitkenRelaxationFactor() << endl; - - fluidZonePointsDisplPrev() = fluidZonePointsDispl(); - - fluidZonePointsDispl() += - aitkenRelaxationFactor()*residual(); - } - } - else if (couplingScheme() == "IQN-ILS") - { -// A fluid structure interaction solver with IQN-ILS -// coupling algorithm (J. Degroote, K.-J. Bathe and J. Vierendeels. -// Performance of a new partitioned procedure versus a monolithic -// procedure in fluid-structure interaction. Computers & Structures - - // IQN-ILS - if (outerCorr_ == 1) - { - // Clean up data from old time steps - - Info << "Modes before clean-up : " << fluidPatchPointsT_.size(); - - while (true) - { - if (fluidPatchPointsT_.size()) - { - if - ( - flow().runTime().timeIndex()-couplingReuse() - > fluidPatchPointsT_[0] - ) - { - for (label i = 0; i < fluidPatchPointsT_.size()-1; i++) - { - fluidPatchPointsT_[i] = fluidPatchPointsT_[i+1]; - fluidPatchPointsV_[i] = fluidPatchPointsV_[i+1]; - fluidPatchPointsW_[i] = fluidPatchPointsW_[i+1]; - } - fluidPatchPointsT_.remove(); - fluidPatchPointsV_.remove(); - fluidPatchPointsW_.remove(); - } - else - { - break; - } - } - else - { - break; - } - } - - Info << ", modes after clean-up : " - << fluidPatchPointsT_.size() << endl; - } - else if (outerCorr_ == 2) - { - // Set reference in the first coupling iteration - solidZonePointsDisplRef() = solidZonePointsDispl(); - fluidZonePointsDisplRef() = fluidZonePointsDispl(); - } - else - { - // Reference has been set in the first coupling iteration - fluidPatchPointsV_.append - ( - ( - solidZonePointsDispl() - - fluidZonePointsDispl() - ) - - ( - solidZonePointsDisplRef() - - fluidZonePointsDisplRef() - ) - ); - - fluidPatchPointsW_.append - ( - solidZonePointsDispl() - - solidZonePointsDisplRef() - ); - - fluidPatchPointsT_.append - ( - flow().runTime().timeIndex() - ); - } - - if (fluidPatchPointsT_.size() > 1) - { - updateDisplacementUsingIQNILS(); - } - else - { - // Relax the interface displacement - Info << "Current fsi under-relaxation factor: " - << relaxationFactor() << endl; - - fluidZonePointsDisplPrev() = fluidZonePointsDispl(); - - // if (outerCorr_ == 1) - // { - // // Cancel residual from previous time step - // fluidZonePointsDispl() += residualPrev(); - // } - - if ((outerCorr_ == 1) && predictor()) - { - fluidZonePointsDispl() += residual(); - } - else - { - fluidZonePointsDispl() += relaxationFactor()*residual(); - } - } - } - - - // Make sure that displacement on all processors is equal to one - // calculated on master processor - if (Pstream::parRun()) - { - if(!Pstream::master()) - { - fluidZonePointsDispl() *= 0.0; - } - - //- pass to all procs - reduce(fluidZonePointsDispl(), sumOp()); - - label globalFluidZoneIndex = - findIndex(flow().globalFaceZones(), fluidZoneIndex()); - - if (globalFluidZoneIndex == -1) - { - FatalErrorIn - ( - "fluidSolidInterface::updateDisplacement()" - ) << "global zone point map is not availabel" - << abort(FatalError); - } - - const labelList& map = - flow().globalToLocalFaceZonePointMap()[globalFluidZoneIndex]; - - if(!Pstream::master()) - { - vectorField fluidZonePointsDisplGlobal = - fluidZonePointsDispl(); - - forAll(fluidZonePointsDisplGlobal, globalPointI) - { - label localPoint = map[globalPointI]; - - fluidZonePointsDispl()[localPoint] = - fluidZonePointsDisplGlobal[globalPointI]; - } - } - } -} - - -Foam::scalar Foam::fluidSolidInterface::updateWeakDisplacement() -{ - vectorField solidZonePointsDisplAtSolid = - stress().faceZonePointDisplacementIncrement(solidZoneIndex()); - - solidZonePointsDispl() = - ggiInterpolator().slaveToMasterPointInterpolate - ( - solidZonePointsDisplAtSolid - ); - - vectorField solidZonePointsTotDisplAtSolid = - stress().faceZonePointDisplacement(solidZoneIndex()); - - vectorField solidZonePointsTotDispl = - ggiInterpolator().slaveToMasterPointInterpolate - ( - solidZonePointsTotDisplAtSolid - ); - - - residualPrev() = residual(); - - residual() = solidZonePointsDispl() - fluidZonePointsDispl(); - - fluidZonePointsDisplPrev() = fluidZonePointsDispl(); - - fluidZonePointsDispl() += residual(); - - // Make sure that displacement on all processors is equal to one - // calculated on master processor - if (Pstream::parRun()) - { - if(!Pstream::master()) - { - fluidZonePointsDispl() *= 0.0; - } - - //- pass to all procs - reduce(fluidZonePointsDispl(), sumOp()); - - label globalFluidZoneIndex = - findIndex(flow().globalFaceZones(), fluidZoneIndex()); - - if (globalFluidZoneIndex == -1) - { - FatalErrorIn - ( - "fluidSolidInterface::updateDisplacement()" - ) << "global zone point map is not availabel" - << abort(FatalError); - } - - const labelList& map = - flow().globalToLocalFaceZonePointMap()[globalFluidZoneIndex]; - - if(!Pstream::master()) - { - vectorField fluidZonePointsDisplGlobal = - fluidZonePointsDispl(); - - forAll(fluidZonePointsDisplGlobal, globalPointI) - { - label localPoint = map[globalPointI]; - - fluidZonePointsDispl()[localPoint] = - fluidZonePointsDisplGlobal[globalPointI]; - } - } - } - - - // Calculate residual norm - - scalar residualNorm = ::sqrt(gSum(magSqr(residual()))); - scalar residualNorm_2 = residualNorm; - - if (residualNorm > maxResidualNorm_) - { - maxResidualNorm_ = residualNorm; - } - - residualNorm /= maxResidualNorm_ + SMALL; - - Info << "Current fsi relative residual norm: " << residualNorm << endl; - - interfacePointsDisplPrev_ = interfacePointsDispl_; - - interfacePointsDispl_ = solidZonePointsDispl(); - - vectorField intTotDispl = - interfacePointsDispl_ + solidZonePointsTotDispl; - scalar intTotDisplNorm = ::sqrt(gSum(magSqr(intTotDispl))); - if (intTotDisplNorm > maxIntDisplNorm_) - { - maxIntDisplNorm_ = intTotDisplNorm; - } - - residualNorm_2 /= maxIntDisplNorm_ + SMALL; - - Info << "Alternative fsi residual: " << residualNorm_2 << endl; - - return min(residualNorm_2, residualNorm); -// return residualNorm; -} - - -void Foam::fluidSolidInterface::updateDisplacementUsingIQNILS() -{ - // Consider fluidPatchPointsV as a matrix V - // with as columns the items - // in the DynamicList and calculate the QR-decomposition of V - // with modified Gram-Schmidt - label cols = fluidPatchPointsV_.size(); - RectangularMatrix R(cols, cols, 0.0); - RectangularMatrix C(cols, 1); - RectangularMatrix Rcolsum(1, cols); - DynamicList Q; - - for (label i = 0; i < cols; i++) - { - Q.append(fluidPatchPointsV_[cols-1-i]); - } - - for (label i = 0; i < cols; i++) - { - // Normalize column i - R[i][i] = Foam::sqrt(sum(Q[i] & Q[i])); - Q[i] /= R[i][i]; - - // Orthogonalize columns to the right of column i - for (label j = i+1; j < cols; j++) - { - R[i][j] = sum(Q[i] & Q[j]); - Q[j] -= R[i][j]*Q[i]; - } - - // Project minus the residual vector on the Q - C[i][0] = sum - ( - Q[i] - & ( - fluidZonePointsDispl() - - solidZonePointsDispl() - ) - ); - } - - // Solve the upper triangular system - for (label j = 0; j < cols; j++) - { - Rcolsum[0][j] = 0.0; - for (label i = 0; i < j+1; i++) - { - Rcolsum[0][j] += cmptMag(R[i][j]); - } - } - scalar epsilon = 1.0E-10*max(Rcolsum); - for (label i = 0; i < cols; i++) - { - if (cmptMag(R[i][i]) > epsilon) - { - for (label j = i+1; j < cols; j++) - { - R[i][j] /= R[i][i]; - } - C[i][0] /= R[i][i]; - R[i][i] = 1.0; - } - } - for (label j = cols-1; j >= 0; j--) - { - if (cmptMag(R[j][j]) > epsilon) - { - for (label i = 0; i < j; i++) - { - C[i][0] -= C[j][0]*R[i][j]; - } - } - else - { - C[j][0] = 0.0; - } - } - - fluidZonePointsDisplPrev() = fluidZonePointsDispl(); - - fluidZonePointsDispl() = solidZonePointsDispl(); - - for (label i = 0; i < cols; i++) - { - fluidZonePointsDispl() += fluidPatchPointsW_[i]*C[cols-1-i][0]; - } -} - -void Foam::fluidSolidInterface::moveFluidMesh() -{ - // Get fluid patch displacement from fluid zone displacement - - vectorField fluidPatchPointsDispl - ( - fluidMesh().boundaryMesh()[fluidPatchIndex()].nPoints(), - vector::zero - ); - - vectorField fluidPatchPointsDisplPrev - ( - fluidMesh().boundaryMesh()[fluidPatchIndex()].nPoints(), - vector::zero - ); - - const labelList& fluidPatchMeshPoints = - fluidMesh().boundaryMesh()[fluidPatchIndex()].meshPoints(); - - forAll(fluidPatchPointsDispl, pointI) - { - label curMeshPointID = fluidPatchMeshPoints[pointI]; - - label curFluidZonePointID = - fluidMesh().faceZones()[fluidZoneIndex()]() - .whichPoint(curMeshPointID); - - fluidPatchPointsDispl[pointI] = - fluidZonePointsDispl()[curFluidZonePointID]; - - fluidPatchPointsDisplPrev[pointI] = - fluidZonePointsDisplPrev()[curFluidZonePointID]; - } - - // Move fluid mesh - const vectorField& n = - fluidMesh().boundaryMesh()[fluidPatchIndex()].pointNormals(); - - primitivePatchInterpolation patchInterpolator - ( - fluidMesh().boundaryMesh()[fluidPatchIndex()] - ); - - scalarField pointDeltaCoeffs = - patchInterpolator.faceToPointInterpolate - ( - fluidMesh().boundary()[fluidPatchIndex()].deltaCoeffs() - ); - - scalar delta = - gMax - ( - mag - ( - n - & ( - accumulatedFluidInterfaceDisplacement() - + fluidPatchPointsDispl - - fluidPatchPointsDisplPrev - ) - ) - *pointDeltaCoeffs - ); - - Info << "Maximal accumulated displacement of interface points: " - << delta << endl; - - if (false) -// if (delta < interfaceDeformationLimit()) - { - // Move only interface points - pointField newPoints = fluidMesh().allPoints(); - - const labelList& meshPoints = - fluidMesh().boundaryMesh()[fluidPatchIndex()].meshPoints(); - - forAll (fluidPatchPointsDispl, pointI) - { - newPoints[meshPoints[pointI]] += - fluidPatchPointsDispl[pointI] - - fluidPatchPointsDisplPrev[pointI]; - } - - twoDPointCorrector twoDCorrector(fluidMesh()); - - twoDCorrector.correctPoints(newPoints); - - fluidMesh_.movePoints(newPoints); - - // Accumulate interface points displacement - accumulatedFluidInterfaceDisplacement() += - fluidPatchPointsDispl - - fluidPatchPointsDisplPrev; - } - else - { -// // Move whole fluid mesh -// const pointField& oldAllPoints = fluidMesh().allPoints(); -// pointField newPoints = fluidMesh().allPoints(); - -// const labelList& meshPoints = -// fluidMesh().boundaryMesh()[fluidPatchIndex()].meshPoints(); - -// forAll (accumulatedFluidInterfaceDisplacement(), pointI) -// { -// newPoints[meshPoints[pointI]] -= -// accumulatedFluidInterfaceDisplacement()[pointI]; -// } - -// twoDPointCorrector twoDCorrector(fluidMesh()); - -// twoDCorrector.correctPoints(newPoints); - -// fluidMesh_.movePoints(newPoints); - -// accumulatedFluidInterfaceDisplacement() += -// fluidPatchPointsDispl -// - fluidPatchPointsDisplPrev; - - // Check mesh motion solver type - bool feMotionSolver = - fluidMesh().objectRegistry::foundObject - ( - "motionU" - ); - - bool fvMotionSolver = - fluidMesh().objectRegistry::foundObject - ( - "pointMotionU" - ); - - bool rbfMotionSolver = - fluidMesh().objectRegistry::foundObject - ( - "dynamicMeshDict" - ); - - if (rbfMotionSolver) - { - // Grab RBF motion solver - RBFMotionSolver& ms = - const_cast - ( - fluidMesh().objectRegistry::lookupObject - ( - "dynamicMeshDict" - ) - ); - - Info << "RBF mesh motion" << endl; - - const labelList& movingMeshPoints = ms.movingIDs(); - - vectorField motion(movingMeshPoints.size(), vector::zero); - - vectorField fluidPatchDisplacement = - accumulatedFluidInterfaceDisplacement(); -// /flow().runTime().deltaT().value(); - - const labelList& meshPoints = - fluidMesh().boundaryMesh()[fluidPatchIndex()].meshPoints(); - - forAll(meshPoints, pointI) - { - label curMovingPoint = - findIndex(movingMeshPoints, meshPoints[pointI]); - - if (curMovingPoint != -1) - { - motion[curMovingPoint] = fluidPatchDisplacement[pointI]; - } - } - - ms.setMotion(motion); - -// FatalErrorIn("fluidSolidInterface::moveFluidMesh()") -// << "Problem with fluid mesh motion solver selection" -// << abort(FatalError); - } - else if (feMotionSolver) - { - tetPointVectorField& motionU = - const_cast - ( - fluidMesh().objectRegistry:: - lookupObject - ( - "motionU" - ) - ); - - fixedValueTetPolyPatchVectorField& motionUFluidPatch = - refCast - ( - motionU.boundaryField()[fluidPatchIndex()] - ); - - tetPolyPatchInterpolation tppi - ( - refCast(motionUFluidPatch.patch()) - ); - - motionUFluidPatch == - tppi.pointToPointInterpolate - ( - accumulatedFluidInterfaceDisplacement() - /flow().runTime().deltaT().value() - ); - } - else if (fvMotionSolver) - { - // Grab RBF motion solver -// const motionSolver& ms = -// fluidMesh().objectRegistry::lookupObject -// ( -// "dynamicMeshDict" -// ); - -// const dynamicMotionSolverFvMesh& dmsMesh = -// refCast(fluidMesh_); - - pointVectorField& motionU = - const_cast - ( - fluidMesh().objectRegistry:: - lookupObject - ( - "pointMotionU" - ) - ); - - fixedValuePointPatchVectorField& motionUFluidPatch = - refCast - ( - motionU.boundaryField()[fluidPatchIndex()] - ); - - if (false) -// if (isA(ms)) - { - pointIOField refAllPoints - ( - IOobject - ( - "points", - fluidMesh_.time().constant(), - polyMesh::meshSubDir, - fluidMesh_, - IOobject::MUST_READ, - IOobject::NO_WRITE - ) - ); - - Pout << refAllPoints.size() << endl; - Pout << fluidMesh_.time().constant() << endl; - Pout << polyMesh::meshSubDir << endl; - - { - vectorField p = - fluidMesh().faceZones()[fluidZoneIndex_]() - .localPoints(); - - const labelList& mp = - fluidMesh().faceZones()[fluidZoneIndex_]() - .meshPoints(); - - forAll(mp, pI) - { -// p[pI] = oldAllPoints[mp[pI]]; - p[pI] = refAllPoints[mp[pI]]; - } - - const faceList& f = - fluidMesh().faceZones()[fluidZoneIndex_]() - .localFaces(); - - vectorField C(f.size(), vector::zero); - - forAll(C, faceI) - { - C[faceI] = f[faceI].centre(p); - } - - Info << "_" << average(C) << endl; - } - - vectorField totalMotionUFluidPatch = - fluidPatchPointsDispl - - fluidPatchPointsDisplPrev; - -// forAll (totalMotionUFluidPatch, pointI) -// { -// totalMotionUFluidPatch[pointI] += -// ( -// oldAllPoints[meshPoints[pointI]] -// - refAllPoints[meshPoints[pointI]] -// ); -// } - - totalMotionUFluidPatch /= flow().runTime().deltaT().value(); - - motionUFluidPatch == totalMotionUFluidPatch; - } - else - { - motionUFluidPatch == - ( - fluidPatchPointsDispl - - fluidPatchPointsDisplPrev - )/flow().runTime().deltaT().value(); - -// accumulatedFluidInterfaceDisplacement() -// /flow().runTime().deltaT().value(); - } - } - else - { - FatalErrorIn("fluidSolidInterface::moveFluidMesh()") - << "Problem with fluid mesh motion solver selection" - << abort(FatalError); - } - - fluidMesh_.update(); - - accumulatedFluidInterfaceDisplacement() = - vectorField - ( - accumulatedFluidInterfaceDisplacement().size(), - vector::zero - ); - } - - - // Move unused fluid mesh points - { - vectorField newPoints = fluidMesh().allPoints(); - - const labelList& fluidZoneMeshPoints = - fluidMesh().faceZones()[fluidZoneIndex()]().meshPoints(); - - forAll(fluidZonePointsDispl(), pointI) - { - if (fluidZoneMeshPoints[pointI] >= fluidMesh().nPoints()) - { - newPoints[fluidZoneMeshPoints[pointI]] += - fluidZonePointsDispl()[pointI] - - fluidZonePointsDisplPrev()[pointI]; - } - } - - twoDPointCorrector twoDCorrector(fluidMesh()); - - twoDCorrector.correctPoints(newPoints); - - fluidMesh_.movePoints(newPoints); - } - - // Evaluate interface velocity - const_cast(flow().U()) - .boundaryField()[fluidPatchIndex()].evaluate(); -} - - -void Foam::fluidSolidInterface::updateForce() -{ - Info << "Setting traction on solid patch" << endl; - - vectorField fluidZoneTraction = - flow().faceZoneViscousForce - ( - fluidZoneIndex(), - fluidPatchIndex() - ); - - scalarField fluidZonePressure = - flow().faceZonePressureForce(fluidZoneIndex(), fluidPatchIndex()); - - - // Fluid zone face normals - - vectorField p = - fluidMesh().faceZones()[fluidZoneIndex_]().localPoints(); - - - const labelList& mp = - fluidMesh().faceZones()[fluidZoneIndex_]().meshPoints(); - const vectorField& allPoints = fluidMesh().allPoints(); - forAll(mp, pI) - { - p[pI] = allPoints[mp[pI]]; - } - - const faceList& f = - fluidMesh().faceZones()[fluidZoneIndex_]().localFaces(); - - vectorField n(f.size(), vector::zero); - forAll(n, faceI) - { - n[faceI] = f[faceI].normal(p); - n[faceI] /= mag(n[faceI]); - } - - // Fluid zone total traction - vectorField fluidZoneTotalTraction = - fluidZoneTraction - fluidZonePressure*n; - - -// vectorField solidZoneTraction = -// ggiInterpolator().masterToSlave -// ( -// -fluidZoneTraction -// ); - - vectorField solidZoneTotalTraction = - ggiInterpolator().masterToSlave - ( - -fluidZoneTotalTraction - ); - -// scalarField solidZoneMuEff = -// ggiInterpolator().masterToSlave -// ( -// flow().faceZoneMuEff(fluidZoneIndex(), fluidPatchIndex()) -// ); - -// tensorField solidZoneSurfaceGradientOfVelocity = -// stress().faceZoneSurfaceGradientOfVelocity -// ( -// solidZoneIndex(), -// solidPatchIndex() -// ); - -// vectorField solidZoneNormal = -// stress().faceZoneNormal -// ( -// solidZoneIndex(), -// solidPatchIndex() -// ); - - // Add part of the viscous force present only - // at the deforming and moving walls -// solidZoneTraction += -// solidZoneMuEff -// *( -// -2*tr(solidZoneSurfaceGradientOfVelocity)*solidZoneNormal -// + (solidZoneSurfaceGradientOfVelocity&solidZoneNormal) -// ); - -// vectorField movingTraction = -// solidZoneMuEff -// *( -// -2*tr(solidZoneSurfaceGradientOfVelocity)*solidZoneNormal -// + (solidZoneSurfaceGradientOfVelocity&solidZoneNormal) -// ); - -// Info << "Movig wall traction, max: " -// << max(mag(movingTraction)) -// << ", avg: " << average(mag(movingTraction)) -// << ", min: " << min(mag(movingTraction)) << endl; - -// vector Fm = -// sum -// ( -// movingTraction -// *solidMesh().magSf().boundaryField()[solidPatchIndex()] -// ); - -// Info << "Movig wall total force: " << Fm << endl; - - solidZonePressure_ = -// fluidToSolid().faceInterpolate -// ggiFluidToSolid().masterToSlave - ggiInterpolator().masterToSlave - ( - fluidZonePressure - ); - -// vectorField solidZoneNormal = -// ggiInterpolator().masterToSlave(-n); - - if (coupled()) - { -// stress().setPressure -// ( -// solidPatchIndex(), -// solidZoneIndex(), -// solidZonePressure_ -// ); - - stress().setTraction - ( - solidPatchIndex(), - solidZoneIndex(), - solidZoneTotalTraction - ); - -// stress().setVelocityAndTraction -// ( -// solidPatchIndex(), -// solidZoneIndex(), -// solidZoneTotalTraction, -// solidZoneNormal, -// solidZoneNormal -// ); - } - - // Total force at the fluid side of the interface - { - vectorField p = - fluidMesh().faceZones()[fluidZoneIndex_]().localPoints(); - - const labelList& mp = - fluidMesh().faceZones()[fluidZoneIndex_]().meshPoints(); - const vectorField& allPoints = fluidMesh().allPoints(); - forAll(mp, pI) - { - p[pI] = allPoints[mp[pI]]; - } - - const faceList& f = - fluidMesh().faceZones()[fluidZoneIndex_]().localFaces(); - - vectorField S(f.size(), vector::zero); - - vectorField C(f.size(), vector::zero); - - forAll(S, faceI) - { - S[faceI] = f[faceI].normal(p); - C[faceI] = f[faceI].centre(p); - } - - vector totalTractionForce = sum(fluidZoneTotalTraction*mag(S)); - -// vector totalPressureForce = sum(fluidZonePressure*S); - -// Info << setprecision(12); - Info << "Total force (fluid) = " - << totalTractionForce << endl; - - Info << average(C) << ", " << sum(mag(S)) - << ", " << sum(fluidZoneTotalTraction) << endl; - -// Info << "Total pressure force (fluid) = " -// << totalPressureForce << endl; - } - - // Totla force at the solid side of the interface - { - vectorField p = - solidMesh().faceZones()[solidZoneIndex_]().localPoints(); - - const labelList& mp = - solidMesh().faceZones()[solidZoneIndex_]().meshPoints(); - const vectorField& allPoints = solidMesh().allPoints(); - forAll(mp, pI) - { - p[pI] = allPoints[mp[pI]]; - } - - const faceList& f = - solidMesh().faceZones()[solidZoneIndex_]().localFaces(); - - vectorField S(f.size(), vector::zero); - vectorField C(f.size(), vector::zero); - - forAll(S, faceI) - { - S[faceI] = f[faceI].normal(p); - C[faceI] = f[faceI].centre(p); - } - - vector totalTractionForce = - sum(solidZoneTotalTraction*mag(S)); - -// vector totalPressureForce = -// sum(solidZonePressure_*S); - -// Info << setprecision(12); - Info << "Total force (solid) = " - << totalTractionForce << endl; - - Info << average(C) << ", " << sum(mag(S)) - << ", " << sum(fluidZoneTotalTraction) << endl; - -// Info << sum(mag(S)) << ", " << sum(fluidZoneTotalTraction) << endl; - -// Info << "Total pressure force (solid) = " -// << totalPressureForce << endl; - } -} - - -void Foam::fluidSolidInterface::updateWeakForce() -{ - Info << "Setting weak traction on solid patch" << endl; - - vectorField fluidZoneTraction = - flow().faceZoneViscousForce - ( - fluidZoneIndex(), - fluidPatchIndex() - ); - - scalarField fluidZonePressure = - flow().faceZonePressureForce - ( - fluidZoneIndex(), - fluidPatchIndex() - ); - - - // Calculate current interface zone face normals - // (this is maybe not necessary but I want to be sure - // that normal is correct for whole zone) - vectorField n(fluidZonePressure.size(), vector::zero); - { - vectorField p = - fluidMesh().faceZones()[fluidZoneIndex_]().localPoints(); - - const labelList& mp = - fluidMesh().faceZones()[fluidZoneIndex_]().meshPoints(); - - const vectorField& allPoints = fluidMesh().allPoints(); - - forAll(mp, pI) - { - p[pI] = allPoints[mp[pI]]; - } - - const faceList& f = - fluidMesh().faceZones()[fluidZoneIndex_]().localFaces(); - - forAll(n, faceI) - { - n[faceI] = f[faceI].normal(p); - n[faceI] /= mag(n[faceI]); - } - } - - - // Velocity at fluid and solid side of the interface - // needed for kinamtically coupled beta scheme - -// // After fluid model solution (Robin bc) -// vectorField fluidZoneVelocity = -// flow().faceZoneVelocity -// ( -// fluidZoneIndex(), -// fluidPatchIndex() -// ); - -// // Velocity calculated by solving structure model -// // in previous time step -// vectorField solidZoneVelocity = -// stress().faceZoneVelocity -// ( -// solidZoneIndex(), -// solidPatchIndex() -// ); - -// vectorField solidZoneVelocityAtFluid = -// ggiInterpolator().slaveToMaster -// ( -// solidZoneVelocity -// ); - - -// // Pressure force correction according to -// // kinematically coupled beta scheme -// scalar rhoSolid = stress().rheology().rho()()[0]; -// scalar mu = stress().rheology().mu()()[0]; -// scalar lambda = stress().rheology().lambda()()[0]; -// scalar ap = sqrt((lambda+2*mu)/rhoSolid); -// scalar hSolid = ap*flow().runTime().deltaT().value(); - -// Info << hSolid << endl; - - // Fluid interface velocity from previous step - vectorField fluidZoneVelocity = - flow().U().boundaryField()[fluidPatchIndex_]; - -// vectorField fluidZoneVelocityOld = -// flow().U().oldTime().boundaryField()[fluidPatchIndex_]; - -// scalarField fluidZonePressureCorr = -// rhoSolid*hSolid* -// ((fluidZoneVelocity - fluidZoneVelocityOld)&n) -// /flow().runTime().deltaT().value(); -// scalarField fluidZonePressureCorr = -// rhoSolid*hSolid* -// ((fluidZoneVelocity - solidZoneVelocityAtFluid)&n) -// /flow().runTime().deltaT().value(); - - - - // Fluid zone total traction - -// Info << max(fluidZonePressureCorr) << ", " -// << average(fluidZonePressureCorr) << endl; - - vectorField fluidZoneTotalTraction = - fluidZoneTraction - fluidZonePressure*n; - - vectorField solidZoneTotalTraction = - ggiInterpolator().masterToSlave - ( - -fluidZoneTotalTraction - ); - - vectorField solidZoneVelocity = - ggiInterpolator().masterToSlave - ( - fluidZoneVelocity - ); - - vectorField solidZoneNormal = - ggiInterpolator().masterToSlave(-n); - - solidZonePressure_ = - ggiInterpolator().masterToSlave - ( - fluidZonePressure - ); - - if (coupled()) - { - stress().setVelocityAndTraction - ( - solidPatchIndex(), - solidZoneIndex(), - solidZoneTotalTraction, - solidZoneVelocity, - solidZoneNormal - ); - -// stress().setTraction -// ( -// solidPatchIndex(), -// solidZoneIndex(), -// solidZoneTotalTraction -// ); - } - - // Total force at the fluid side of the interface - { - vectorField p = - fluidMesh().faceZones()[fluidZoneIndex_]().localPoints(); - - const labelList& mp = - fluidMesh().faceZones()[fluidZoneIndex_]().meshPoints(); - const vectorField& allPoints = fluidMesh().allPoints(); - forAll(mp, pI) - { - p[pI] = allPoints[mp[pI]]; - } - - const faceList& f = - fluidMesh().faceZones()[fluidZoneIndex_]().localFaces(); - - vectorField S(f.size(), vector::zero); -// vectorField C(f.size(), vector::zero); - - forAll(S, faceI) - { - S[faceI] = f[faceI].normal(p); -// C[faceI] = f[faceI].centre(p); - } - - vector totalTractionForce = sum(fluidZoneTotalTraction*mag(S)); - -// Info << setprecision(12); - Info << "Total force (fluid) = " - << totalTractionForce << endl; - } - - // Totla force at the solid side of the interface - { - vectorField p = - solidMesh().faceZones()[solidZoneIndex_]().localPoints(); - - const labelList& mp = - solidMesh().faceZones()[solidZoneIndex_]().meshPoints(); - const vectorField& allPoints = solidMesh().allPoints(); - forAll(mp, pI) - { - p[pI] = allPoints[mp[pI]]; - } - - const faceList& f = - solidMesh().faceZones()[solidZoneIndex_]().localFaces(); - - vectorField S(f.size(), vector::zero); -// vectorField C(f.size(), vector::zero); - - forAll(S, faceI) - { - S[faceI] = f[faceI].normal(p); -// C[faceI] = f[faceI].centre(p); - } - - vector totalTractionForce = - sum(solidZoneTotalTraction*mag(S)); - - // Info << setprecision(12); - Info << "Total force (solid) = " - << totalTractionForce << endl; - } - -// if (coupled()) -// { -// Info << "Setting weak traction on solid patch" << endl; - -// predictedSolidZoneTraction_ = -// 2*solidZoneTraction_ - solidZoneTractionPrev_; - -// stress().setTraction -// ( -// solidPatchIndex(), -// solidZoneIndex(), -// solidZoneTraction_ -// ); -// } -} - - -void Foam::fluidSolidInterface::updateWeakTraction() -{ - Info << "Update weak traction on solid patch" << endl; - - solidZoneTractionPrev_ = solidZoneTraction_; - - // Calc fluid traction - - const vectorField& p = - fluidMesh().faceZones()[fluidZoneIndex_]().localPoints(); - const faceList& f = - fluidMesh().faceZones()[fluidZoneIndex_]().localFaces(); - - vectorField n(f.size(), vector::zero); - forAll(n, faceI) - { - n[faceI] = f[faceI].normal(p); - n[faceI] /= mag(n[faceI]); - } - - vectorField fluidZoneTraction = - flow().faceZoneViscousForce - ( - fluidZoneIndex(), - fluidPatchIndex() - ) - - flow().faceZonePressureForce(fluidZoneIndex(), fluidPatchIndex())*n; - - vectorField fluidZoneTractionAtSolid = - ggiInterpolator().masterToSlave - ( - -fluidZoneTraction - ); - - scalar beta_ = 1.0; -// scalar beta_ = relaxationFactor_; - - solidZoneTraction_ = - beta_*fluidZoneTractionAtSolid - + (1.0-beta_)*predictedSolidZoneTraction_; - - - // Total force at the fluid side of the interface - { - const vectorField& p = - fluidMesh().faceZones()[fluidZoneIndex_]().localPoints(); - - const faceList& f = - fluidMesh().faceZones()[fluidZoneIndex_]().localFaces(); - - vectorField S(f.size(), vector::zero); - - forAll(S, faceI) - { - S[faceI] = f[faceI].normal(p); - } - - vector totalTractionForce = sum(fluidZoneTraction*mag(S)); - - Info << "Total force (fluid) = " - << totalTractionForce << endl; - } - - // Totla force at the solid side of the interface - { - const vectorField& p = - solidMesh().faceZones()[solidZoneIndex_]().localPoints(); - - const faceList& f = - solidMesh().faceZones()[solidZoneIndex_]().localFaces(); - - vectorField S(f.size(), vector::zero); - - forAll(S, faceI) - { - S[faceI] = f[faceI].normal(p); - } - - vector totalTractionForce = - sum(fluidZoneTractionAtSolid*mag(S)); - - Info << "Total force (solid) = " - << totalTractionForce << endl; - } -} - - -void Foam::fluidSolidInterface::predictAndUpdateForce() -{ - if (coupled()) - { - Info << "Setting traction on solid patch using prediction" << endl; - - stress().setPressure - ( - solidPatchIndex(), - solidZoneIndex(), - stress().predictPressure(solidPatchIndex(), solidZoneIndex()) - ); - - stress().setTraction - ( - solidPatchIndex(), - solidZoneIndex(), - stress().predictTraction(solidPatchIndex(), solidZoneIndex()) - ); - } -} - - -void Foam::fluidSolidInterface::evolveStress() -{ -// if (closedFluidDomain()) -// { -// DynamicList p0; -// DynamicList dV; - -// scalar requiredVolumeIncrement = 0; -// forAll(flow().U().boundaryField(), patchI) -// { -// if (patchI != fluidPatchIndex()) -// { -// requiredVolumeIncrement += -// sum -// ( -// flow().U().boundaryField()[patchI] -// & fluidMesh().Sf().boundaryField()[patchI] -// ) -// *runTime().deltaT().value(); -// } -// } - -// scalar volumeIncrement = 0; - -// label nIter = 0; - -// do -// { -// // Calc ref. pressure increment - -// if (dV.size() == 1) -// { -// refPressureIncrement_ += compressibility_*dV[0]; -// } -// else if (dV.size() >= 2) -// { -// label i = p0.size() - 1; - -// refPressureIncrement_ = -// p0[i-1] -// - dV[i-1]*(p0[i] - p0[i-1]) -// /(dV[i] - dV[i-1] + SMALL); -// } - -// p0.append(refPressureIncrement_); - -// stress().setPressure -// ( -// solidPatchIndex(), -// solidZoneIndex(), -// solidZonePressure_ + refPressure() + refPressureIncrement() -// ); - - -// // Solve solid -// stress().evolve(); - -// // Calculate volume increment - -// const labelList& meshPoints = -// solidMesh().faceZones()[solidZoneIndex()]().meshPoints(); - -// const faceList& localFaces = -// solidMesh().faceZones()[solidZoneIndex()]().localFaces(); - -// const vectorField& localPoints = -// solidMesh().faceZones()[solidZoneIndex()]().localPoints(); - - -// vectorField oldLocalPoints = -// localPoints -// + vectorField -// ( -// stress().pointD().oldTime(), -// meshPoints -// ); - -// vectorField newLocalPoints = -// localPoints -// + vectorField -// ( -// stress().pointD(), -// meshPoints -// ); - -// volumeIncrement = 0; - -// forAll(localFaces, faceI) -// { -// volumeIncrement += -// localFaces[faceI].sweptVol -// ( -// oldLocalPoints, -// newLocalPoints -// ); -// } - -// volumeIncrement -= requiredVolumeIncrement; - -// dV.append(volumeIncrement); -// } -// while(mag(volumeIncrement) > SMALL*10 && ++nIter < 10); - - -// Info << "Solid volume increment: " << volumeIncrement << endl; -// Info << "Ref pressure: " << refPressure_ << endl; -// Info << "Ref pressure increment: " << refPressureIncrement_ << endl; -// Info << "Calculated compressibility = " -// << (refPressureIncrement() - p0[0])/(dV[0] + SMALL) << endl; -// } -// else -// { -// stress().evolve(); -// } - - stress().evolve(); -} - - -Foam::scalar Foam::fluidSolidInterface::updateResidual() -{ - vectorField solidZonePointsDisplAtSolid = - stress().faceZonePointDisplacementIncrement(solidZoneIndex()); - - vectorField solidZonePointsTotDisplAtSolid = - stress().faceZonePointDisplacement(solidZoneIndex()); - - solidZonePointsDispl() = -// solidToFluid().pointInterpolate - ggiInterpolator().slaveToMasterPointInterpolate - ( - solidZonePointsDisplAtSolid - ); - - vectorField solidZonePointsTotDispl = - ggiInterpolator().slaveToMasterPointInterpolate - ( - solidZonePointsTotDisplAtSolid - ); - - residualPrev() = residual(); - - residual() = solidZonePointsDispl() - fluidZonePointsDispl(); - -// const scalarField& minLe = minEdgeLength(); - -// scalar residualNorm = gMax(mag(residual())/(minLe + SMALL)); - - scalar residualNorm = ::sqrt(gSum(magSqr(residual()))); - scalar residualNorm_2 = residualNorm; - -// Info << "Current fsi residual norm: " << residualNorm << endl; - - if (residualNorm > maxResidualNorm_) - { - maxResidualNorm_ = residualNorm; - } - -// Info << "Current fsi max residual norm: " << maxResidualNorm_ << endl; - - residualNorm /= maxResidualNorm_ + SMALL; - - Info << "Current fsi relative residual norm: " << residualNorm << endl; - - interfacePointsDisplPrev_ = interfacePointsDispl_; - - interfacePointsDispl_ = solidZonePointsDispl(); -// 0.5*(solidZonePointsDispl() + fluidZonePointsDispl()); - - vectorField intTotDispl = - interfacePointsDispl_ + solidZonePointsTotDispl; - scalar intTotDisplNorm = ::sqrt(gSum(magSqr(intTotDispl))); - if (intTotDisplNorm > maxIntDisplNorm_) - { - maxIntDisplNorm_ = intTotDisplNorm; - } - - residualNorm_2 /= maxIntDisplNorm_ + SMALL; - -// scalar alterResidual = -// max(mag(interfacePointsDispl_ - interfacePointsDisplPrev_)) -// /(max(mag(interfacePointsDispl_ + solidZonePointsTotDispl)) + SMALL); - - Info << "Alternative fsi residual: " << residualNorm_2 << endl; - - return min(residualNorm_2, residualNorm); -// return residualNorm; -} - - -// bool Foam::fluidSolidInterface::read() -// { -// if (regIOobject::read()) -// { -// fluidProperties_ = subDict(type() + "Coeffs"); - -// return true; -// } -// else -// { -// return false; -// } -// } - - -// ************************************************************************* // diff --git a/applications/solvers/FSI/fluidSolidInteraction/fluidSolvers/fvPatchFields/extrapolated.mixed/extrapolatedFvPatchField.C b/applications/solvers/FSI/fluidSolidInteraction/fluidSolvers/fvPatchFields/extrapolated.mixed/extrapolatedFvPatchField.C deleted file mode 100644 index 36053e5db..000000000 --- a/applications/solvers/FSI/fluidSolidInteraction/fluidSolvers/fvPatchFields/extrapolated.mixed/extrapolatedFvPatchField.C +++ /dev/null @@ -1,701 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / 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 "extrapolatedFvPatchField.H" -#include "surfaceFields.H" -#include "dictionary.H" -#include "emptyPolyPatch.H" -#include "cyclicPolyPatch.H" -#include "scalarMatrices.H" -#include "volFields.H" -#include "skewCorrectionVectors.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -template -extrapolatedFvPatchField::extrapolatedFvPatchField -( - const fvPatch& p, - const DimensionedField& iF -) -: - mixedFvPatchField(p, iF), - iPoints_(p.size()), - zeroGradient_(true), - fixesValue_(false) -{} - - -template -extrapolatedFvPatchField::extrapolatedFvPatchField -( - const extrapolatedFvPatchField& ptf, - const fvPatch& p, - const DimensionedField& iF, - const fvPatchFieldMapper& mapper -) -: - mixedFvPatchField(ptf, p, iF, mapper), - iPoints_(p.size()), - zeroGradient_(ptf.zeroGradient_), - fixesValue_(ptf.fixesValue_) -{} - - -template -extrapolatedFvPatchField::extrapolatedFvPatchField -( - const fvPatch& p, - const DimensionedField& iF, - const dictionary& dict -) -: - mixedFvPatchField(p, iF), - iPoints_(p.size()), - zeroGradient_(true), - fixesValue_(false) -{ - if (dict.found("zeroGradient")) - { - zeroGradient_ = Switch(dict.lookup("zeroGradient")); - } - - this->valueFraction() = 0; - - if (dict.found("fixesValue")) - { - fixesValue_ = Switch(dict.lookup("fixesValue")); - this->valueFraction() = 1.0; - } - - if (dict.found("refValue")) - { - this->refValue() = Field("refValue", dict, p.size()); - } - else - { - this->refValue() = pTraits::zero; - } - - if (dict.found("refGradient")) - { - this->refGrad() = Field("refGradient", dict, p.size()); - } - else - { - this->refGrad() = pTraits::zero; - } - - if (dict.found("value")) - { - Field::operator=(Field("value", dict, p.size())); - } - else - { - mixedFvPatchField::evaluate(); - } - - -// this->refValue() = pTraits::zero; -// this->refGrad() = pTraits::zero; - -} - - -template -extrapolatedFvPatchField::extrapolatedFvPatchField -( - const extrapolatedFvPatchField& ptf -) -: - mixedFvPatchField(ptf), - iPoints_(ptf.size()), - zeroGradient_(ptf.zeroGradient_), - fixesValue_(ptf.fixesValue_) -{} - - -template -extrapolatedFvPatchField::extrapolatedFvPatchField -( - const extrapolatedFvPatchField& ptf, - const DimensionedField& iF -) -: - mixedFvPatchField(ptf, iF), - iPoints_(ptf.size()), - zeroGradient_(ptf.zeroGradient_), - fixesValue_(ptf.fixesValue_) -{} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -template -void extrapolatedFvPatchField::autoMap -( - const fvPatchFieldMapper& m -) -{ - mixedFvPatchField::autoMap(m); -// gradient_.autoMap(m); -} - - -template -void extrapolatedFvPatchField::rmap -( - const fvPatchField& ptf, - const labelList& addr -) -{ - mixedFvPatchField::rmap(ptf, addr); - -// const extrapolatedFvPatchField& fgptf = -// refCast >(ptf); - -// gradient_.rmap(fgptf.gradient_, addr); -} - - -template -void extrapolatedFvPatchField::updateCoeffs() -{ - - if (this->updated()) - { - return; - } - - const fvMesh& mesh = this->patch().boundaryMesh().mesh(); - - const cellList& cells = mesh.cells(); - - const unallocLabelList& owner = mesh.owner(); - const unallocLabelList& neighbour = mesh.neighbour(); - - const unallocLabelList& patchCells = this->patch().faceCells(); - - const surfaceScalarField& weights = mesh.weights(); - const vectorField& faceCentres = mesh.faceCentres(); - const vectorField& cellCentres = mesh.cellCentres(); - - skewCorrectionVectors scv(mesh); - - vectorField n = this->patch().nf(); - - iPoints_.clear(); - iPoints_.setSize(this->patch().size()); - - forAll(patchCells, faceI) - { - label curCell = patchCells[faceI]; - - const labelList& curCellFaces = cells[curCell]; - - iPoints_.set(faceI, new DynamicList()); - - // Add face centre points - forAll(curCellFaces, fI) - { - label curFace = curCellFaces[fI]; - - label patchID = mesh.boundaryMesh().whichPatch(curFace); - - if(mesh.isInternalFace(curFace)) - { - vector curFaceIntersection = - weights[curFace] - *( - cellCentres[owner[curFace]] - - cellCentres[neighbour[curFace]] - ) - + cellCentres[neighbour[curFace]]; - - iPoints_[faceI].append(curFaceIntersection); - } - else if (patchID != this->patch().index()) - { - if - ( - mesh.boundaryMesh()[patchID].type() - == cyclicPolyPatch::typeName - ) - { - label start = mesh.boundaryMesh()[patchID].start(); - label localFaceID = curFace - start; - - const unallocLabelList& cycPatchCells = - mesh.boundaryMesh()[patchID].faceCells(); - - label sizeby2 = cycPatchCells.size()/2; - - if (localFaceID < sizeby2) - { - vector curFaceIntersection = - weights[curFace] - *( - cellCentres[cycPatchCells[localFaceID]] - - cellCentres - [ - cycPatchCells[localFaceID + sizeby2] - ] - ) - + cellCentres - [ - cycPatchCells[localFaceID + sizeby2] - ]; - - iPoints_[faceI].append(curFaceIntersection); - } - else - { - vector curFaceIntersection = - weights[curFace] - *( - cellCentres[cycPatchCells[localFaceID]] - - cellCentres - [ - cycPatchCells[localFaceID - sizeby2] - ] - ) - + cellCentres - [ - cycPatchCells[localFaceID - sizeby2] - ]; - - iPoints_[faceI].append(curFaceIntersection); - } - } - else if - ( - mesh.boundaryMesh()[patchID].type() - == processorPolyPatch::typeName - ) - { - label start = mesh.boundaryMesh()[patchID].start(); - label localFaceID = curFace - start; - - const unallocLabelList& procPatchCells = - mesh.boundaryMesh()[patchID].faceCells(); - - iPoints_[faceI].append - ( - weights.boundaryField()[patchID][localFaceID] - *( - cellCentres[procPatchCells[localFaceID]] - - mesh.C().boundaryField()[patchID][localFaceID] - ) - + mesh.C().boundaryField()[patchID][localFaceID] - ); - } - else if - ( - mesh.boundaryMesh()[patchID].type() - == emptyPolyPatch::typeName - ) - { - iPoints_[faceI].append(faceCentres[curFace]); - } - else - { - // Normal patches - - iPoints_[faceI].append(faceCentres[curFace]); - } - } - } - } - - mixedFvPatchField::updateCoeffs(); -} - - -template -void extrapolatedFvPatchField::evaluate(const Pstream::commsTypes) -{ - if (!this->updated()) - { - this->updateCoeffs(); - } - - const fvMesh& mesh = this->patch().boundaryMesh().mesh(); - - const cellList& cells = mesh.cells(); - - const unallocLabelList& owner = mesh.owner(); - const unallocLabelList& neighbour = mesh.neighbour(); - - const unallocLabelList& patchCells = this->patch().faceCells(); - - const surfaceScalarField& weights = mesh.weights(); -// const vectorField& faceCentres = mesh.faceCentres(); - const vectorField& cellCentres = mesh.cellCentres(); - - const Field& phiI = this->internalField(); - - word fieldName = - this->dimensionedInternalField().name(); - - const GeometricField& phi = - mesh.lookupObject > - ( - fieldName - ); - - vectorField n = this->patch().nf(); - const vectorField& C = this->patch().Cf(); - - Field patchPhi(this->patch().size(), pTraits::zero); - - forAll(patchCells, faceI) - { - label curCell = patchCells[faceI]; - - const labelList& curCellFaces = cells[curCell]; - - DynamicList iPhi; -// DynamicList iPoint; - -// // Add first cell centre point -// iPhi.append(phiI[curCell]); -// iPoint.append(cellCentres[curCell]); - - // Add face centre points - forAll(curCellFaces, fI) - { - label curFace = curCellFaces[fI]; - - label patchID = mesh.boundaryMesh().whichPatch(curFace); - - if(mesh.isInternalFace(curFace)) - { - iPhi.append - ( - weights[curFace] - *( - phiI[owner[curFace]] - - phiI[neighbour[curFace]] - ) - + phiI[neighbour[curFace]] - ); - -// vector curFaceIntersection = -// weights[curFace] -// *( -// cellCentres[owner[curFace]] -// - cellCentres[neighbour[curFace]] -// ) -// + cellCentres[neighbour[curFace]]; - -// iPoint.append(curFaceIntersection); - } - else if (patchID != this->patch().index()) - { - if - ( - mesh.boundaryMesh()[patchID].type() - == cyclicPolyPatch::typeName - ) - { - label start = mesh.boundaryMesh()[patchID].start(); - label localFaceID = curFace - start; - - const unallocLabelList& cycPatchCells = - mesh.boundaryMesh()[patchID].faceCells(); - - label sizeby2 = cycPatchCells.size()/2; - - if (localFaceID < sizeby2) - { - iPhi.append - ( - weights.boundaryField()[patchID][localFaceID] - *( - phiI[cycPatchCells[localFaceID]] - - phiI[cycPatchCells[localFaceID + sizeby2]] - ) - + phiI[cycPatchCells[localFaceID + sizeby2]] - ); - -// vector curFaceIntersection = -// weights[curFace] -// *( -// cellCentres[cycPatchCells[localFaceID]] -// - cellCentres -// [ -// cycPatchCells[localFaceID + sizeby2] -// ] -// ) -// + cellCentres -// [ -// cycPatchCells[localFaceID + sizeby2] -// ]; - -// iPoint.append(curFaceIntersection); - } - else - { - iPhi.append - ( - weights.boundaryField()[patchID][localFaceID] - *( - phiI[cycPatchCells[localFaceID]] - - phiI[cycPatchCells[localFaceID - sizeby2]] - ) - + phiI[cycPatchCells[localFaceID - sizeby2]] - ); - -// vector curFaceIntersection = -// weights[curFace] -// *( -// cellCentres[cycPatchCells[localFaceID]] -// - cellCentres -// [ -// cycPatchCells[localFaceID - sizeby2] -// ] -// ) -// + cellCentres -// [ -// cycPatchCells[localFaceID - sizeby2] -// ]; - -// iPoint.append(curFaceIntersection); - } - } - else if - ( - mesh.boundaryMesh()[patchID].type() - == processorPolyPatch::typeName - ) - { - label start = mesh.boundaryMesh()[patchID].start(); - label localFaceID = curFace - start; - - const unallocLabelList& procPatchCells = - mesh.boundaryMesh()[patchID].faceCells(); - - iPhi.append - ( - weights.boundaryField()[patchID][localFaceID] - *( - phiI[procPatchCells[localFaceID]] - - phi.boundaryField()[patchID][localFaceID] - ) - + phi.boundaryField()[patchID][localFaceID] - ); - - -// const processorPolyPatch& procPatch = -// refCast -// ( -// mesh.boundaryMesh()[patchID] -// ); - -// vector ngbCellCentre = -// procPatch.neighbFaceCellCentres()[localFaceID]; - -// vector curFaceIntersection = -// faceCentres[curFace]; - -// iPoint.append(curFaceIntersection); - } - else if - ( - mesh.boundaryMesh()[patchID].type() - == emptyPolyPatch::typeName - ) - { - iPhi.append(phiI[curCell]); -// iPoint.append(faceCentres[curFace]); - } - else - { - // Normal patches - - label start = mesh.boundaryMesh()[patchID].start(); - label localFaceID = curFace - start; - - iPhi.append - ( - phi.boundaryField()[patchID][localFaceID] - ); - -// iPoint.append(faceCentres[curFace]); - } - } - } - - Type avgPhi = phiI[curCell]; - vector avgPoint = cellCentres[curCell]; - -// Type avgPhi = average(iPhi); -// vector avgPoint = average(iPoint); - - // Weights - scalarField W(iPoints_[faceI].size(), 1.0); - - label nCoeffs = 3; - scalarRectangularMatrix M - ( - iPoints_[faceI].size(), - nCoeffs, - 0.0 - ); - -// vector origin = C[faceI]; - - scalar L = max(mag(iPoints_[faceI]-avgPoint)); - - for (label i=0; i coeffs(nCoeffs, pTraits::zero); - Field source(iPoints_[faceI].size(), pTraits::zero); - - for (label i=0; i::operator=(patchPhi); - this->refValue() = patchPhi; - - if (!fixesValue_) - { - if (zeroGradient_) - { - this->refGrad() = pTraits::zero; - } - else - { - this->refGrad() = - (patchPhi - this->patchInternalField()) - *this->patch().deltaCoeffs(); - } - } - - fvPatchField::evaluate(); -} - - -template -void extrapolatedFvPatchField::write(Ostream& os) const -{ - mixedFvPatchField::write(os); - -// this->writeEntry("value", os); - - os.writeKeyword("zeroGradient") - << zeroGradient_ << token::END_STATEMENT << nl; - - os.writeKeyword("fixesValue") - << fixesValue_ << token::END_STATEMENT << nl; -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - -// ************************************************************************* // diff --git a/applications/solvers/FSI/fluidSolidInteraction/fluidSolvers/fvPatchFields/extrapolated.mixed/extrapolatedFvPatchField.H b/applications/solvers/FSI/fluidSolidInteraction/fluidSolvers/fvPatchFields/extrapolated.mixed/extrapolatedFvPatchField.H deleted file mode 100644 index 6c9d44179..000000000 --- a/applications/solvers/FSI/fluidSolidInteraction/fluidSolvers/fvPatchFields/extrapolated.mixed/extrapolatedFvPatchField.H +++ /dev/null @@ -1,196 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / 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::extrapolatedFvPatchField - -Description - Foam::extrapolatedFvPatchField - -SourceFiles - extrapolatedFvPatchField.C - -\*---------------------------------------------------------------------------*/ - -#ifndef extrapolatedFvPatchField_H -#define extrapolatedFvPatchField_H - -#include "mixedFvPatchField.H" -#include "PtrList.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -/*---------------------------------------------------------------------------*\ - Class extrapolatedFvPatch Declaration -\*---------------------------------------------------------------------------*/ - -template -class extrapolatedFvPatchField -: - public mixedFvPatchField -{ - // Private data - - //- Interpolation points - PtrList > iPoints_; - - //- Return zero gradient - Switch zeroGradient_; - - //- Fixes value - Switch fixesValue_; - -public: - - //- Runtime type information - TypeName("extrapolated"); - - - // Constructors - - //- Construct from patch and internal field - extrapolatedFvPatchField - ( - const fvPatch&, - const DimensionedField& - ); - - //- Construct from patch, internal field and dictionary - extrapolatedFvPatchField - ( - const fvPatch&, - const DimensionedField&, - const dictionary& - ); - - //- Construct by mapping the given extrapolatedFvPatchField - // onto a new patch - extrapolatedFvPatchField - ( - const extrapolatedFvPatchField&, - const fvPatch&, - const DimensionedField&, - const fvPatchFieldMapper& - ); - - //- Construct as copy - extrapolatedFvPatchField - ( - const extrapolatedFvPatchField& - ); - - //- Construct and return a clone - virtual tmp > clone() const - { - return tmp > - ( - new extrapolatedFvPatchField(*this) - ); - } - - //- Construct as copy setting internal field reference - extrapolatedFvPatchField - ( - const extrapolatedFvPatchField&, - const DimensionedField& - ); - - //- Construct and return a clone setting internal field reference - virtual tmp > clone - ( - const DimensionedField& iF - ) const - { - return tmp > - ( - new extrapolatedFvPatchField(*this, iF) - ); - } - - - // Member functions - - // Access - - //- Return true if this patch field fixes a value. - // Needed to check if a level has to be specified while solving - // Poissons equations. - virtual bool fixesValue() const - { - return fixesValue_; - } - - // Return defining fields - - - // Mapping functions - - //- Map (and resize as needed) from self given a mapping object - virtual void autoMap - ( - const fvPatchFieldMapper& - ); - - //- Reverse map the given fvPatchField onto this fvPatchField - virtual void rmap - ( - const fvPatchField&, - const labelList& - ); - - - // Evaluation functions - - //- Update the coefficients associated with the patch field - // Sets Updated to true - virtual void updateCoeffs(); - - //- Evaluate the patch field - virtual void evaluate - ( - const Pstream::commsTypes commsType=Pstream::blocking - ); - - //- Write - virtual void write(Ostream&) const; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#ifdef NoRepository -# include "extrapolatedFvPatchField.C" -#endif - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/applications/solvers/FSI/fluidSolidInteraction/fluidSolvers/fvPatchFields/extrapolated.mixed/extrapolatedFvPatchFields.C b/applications/solvers/FSI/fluidSolidInteraction/fluidSolvers/fvPatchFields/extrapolated.mixed/extrapolatedFvPatchFields.C deleted file mode 100644 index fade97008..000000000 --- a/applications/solvers/FSI/fluidSolidInteraction/fluidSolvers/fvPatchFields/extrapolated.mixed/extrapolatedFvPatchFields.C +++ /dev/null @@ -1,43 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / 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 "extrapolatedFvPatchFields.H" -#include "addToRunTimeSelectionTable.H" -#include "volFields.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -makePatchFields(extrapolated); - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - -// ************************************************************************* // diff --git a/applications/solvers/FSI/fluidSolidInteraction/fluidSolvers/fvPatchFields/extrapolated.mixed/extrapolatedFvPatchFields.H b/applications/solvers/FSI/fluidSolidInteraction/fluidSolvers/fvPatchFields/extrapolated.mixed/extrapolatedFvPatchFields.H deleted file mode 100644 index 7c4717f82..000000000 --- a/applications/solvers/FSI/fluidSolidInteraction/fluidSolvers/fvPatchFields/extrapolated.mixed/extrapolatedFvPatchFields.H +++ /dev/null @@ -1,49 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / 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 . - -\*---------------------------------------------------------------------------*/ - -#ifndef extrapolatedFvPatchFields_H -#define extrapolatedFvPatchFields_H - -#include "extrapolatedFvPatchField.H" -#include "fieldTypes.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -makePatchTypeFieldTypedefs(extrapolated) - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/applications/solvers/FSI/fluidSolidInteraction/fluidSolvers/fvPatchFields/extrapolated.mixed/extrapolatedFvPatchFieldsFwd.H b/applications/solvers/FSI/fluidSolidInteraction/fluidSolvers/fvPatchFields/extrapolated.mixed/extrapolatedFvPatchFieldsFwd.H deleted file mode 100644 index 2f2176b00..000000000 --- a/applications/solvers/FSI/fluidSolidInteraction/fluidSolvers/fvPatchFields/extrapolated.mixed/extrapolatedFvPatchFieldsFwd.H +++ /dev/null @@ -1,51 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / 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 . - -\*---------------------------------------------------------------------------*/ - -#ifndef extrapolatedFvPatchFieldsFwd_H -#define extrapolatedFvPatchFieldsFwd_H - -#include "fvPatchField.H" -#include "fieldTypes.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -template class extrapolatedFvPatchField; - -makePatchTypeFieldTypedefs(extrapolated) - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/applications/solvers/FSI/fluidSolidInteraction/fluidSolvers/icoFluid/updateRobinFsiInterface.H b/applications/solvers/FSI/fluidSolidInteraction/fluidSolvers/icoFluid/updateRobinFsiInterface.H deleted file mode 100644 index dbb4029c9..000000000 --- a/applications/solvers/FSI/fluidSolidInteraction/fluidSolvers/icoFluid/updateRobinFsiInterface.H +++ /dev/null @@ -1,59 +0,0 @@ -forAll(p().boundaryField(), patchI) -{ - if - ( - ( - isA(p().boundaryField()[patchI]) - && isA(U().boundaryField()[patchI]) - ) - || ( - isA(p().boundaryField()[patchI]) - && isA(U().boundaryField()[patchI]) - ) - ) - { - word ddtScheme - ( - mesh.schemesDict().ddtScheme("ddt(" + U().name() +')') - ); - - if - ( - ddtScheme - == fv::EulerDdtScheme::typeName - ) - { - phi().boundaryField()[patchI] = phi().oldTime().boundaryField()[patchI]; - rAUf.boundaryField()[patchI] = runTime().deltaT().value(); - } - else if - ( - ddtScheme - == fv::backwardDdtScheme::typeName - ) - { - if(runTime().timeIndex() == 1) - { - phi().boundaryField()[patchI] = phi().oldTime().boundaryField()[patchI]; - rAUf.boundaryField()[patchI] = runTime().deltaT().value(); - - phi().oldTime().oldTime(); - } - else - { - scalar deltaT = runTime().deltaT().value(); - scalar deltaT0 = runTime().deltaT0().value(); - - scalar Cn = 1 + deltaT/(deltaT + deltaT0); - scalar Coo = deltaT*deltaT/(deltaT0*(deltaT + deltaT0)); - scalar Co = Cn + Coo; - - phi().boundaryField()[patchI] = - (Co/Cn)*phi().oldTime().boundaryField()[patchI] - - (Coo/Cn)*phi().oldTime().oldTime().boundaryField()[patchI]; - - rAUf.boundaryField()[patchI] = runTime().deltaT().value()/Cn; - } - } - } -} diff --git a/applications/solvers/FSI/fluidSolidInteraction/fluidSolvers/consistentIcoFluid/updateRobinFsiInterface.H b/applications/solvers/FSI/fluidSolidInteraction/include/updateRobinFsiInterface.H similarity index 100% rename from applications/solvers/FSI/fluidSolidInteraction/fluidSolvers/consistentIcoFluid/updateRobinFsiInterface.H rename to applications/solvers/FSI/fluidSolidInteraction/include/updateRobinFsiInterface.H diff --git a/applications/solvers/FSI/fluidSolidInteraction/solidSolvers/finiteVolume/fvc/fvcGradf.C.backup b/applications/solvers/FSI/fluidSolidInteraction/solidSolvers/finiteVolume/fvc/fvcGradf.C.backup deleted file mode 100644 index 92369ef1c..000000000 --- a/applications/solvers/FSI/fluidSolidInteraction/solidSolvers/finiteVolume/fvc/fvcGradf.C.backup +++ /dev/null @@ -1,884 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / 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 "fvcGradf.H" -#include "fvMesh.H" -#include "volFields.H" -#include "surfaceFields.H" -#include "pointFields.H" -#include "ggiFvPatch.H" -#include "wedgeFvPatch.H" -#include "leastSquaresVolPointInterpolation.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace fvc -{ - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -template -tmp -< - GeometricField - < - typename outerProduct::type, - fvsPatchField, - surfaceMesh - > -> fGrad -( - const GeometricField& vf, - const GeometricField& pf -) -{ - typedef typename outerProduct::type GradType; - - const fvMesh& mesh = vf.mesh(); - - tmp > tGrad - ( - new GeometricField - ( - IOobject - ( - "grad" + vf.name() + "f", - vf.instance(), - mesh, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - mesh, - dimensioned - ( - "0", - vf.dimensions()/dimLength, - pTraits::zero - ) - ) - ); - Field& gradI = tGrad().internalField(); - - const vectorField& points = mesh.points(); - const faceList& faces = mesh.faces(); - - surfaceVectorField n = mesh.Sf()/mesh.magSf(); - const vectorField& nI = n.internalField(); - - const Field& pfI = pf.internalField(); - - forAll(gradI, faceI) - { - const face& curFace = faces[faceI]; - - vector Rf = curFace.centre(points); - - scalar mag = curFace.mag(points); - - const edgeList curFaceEdges = curFace.edges(); - - gradI[faceI] = pTraits::zero; - scalar faceArea = 0; - - forAll(curFaceEdges, edgeI) - { - const edge& curEdge = curFaceEdges[edgeI]; - - // Projected edge vector - vector e = curEdge.vec(points); - e -= nI[faceI]*(nI[faceI]&e); - - // Edge length vector - vector Le = (e^nI[faceI]); - Le *= curFace.edgeDirection(curEdge); - - // Edge-centre field value - Type fe = - 0.5 - *( - pfI[curEdge.start()] - + pfI[curEdge.end()] - ); - - // Gradient - gradI[faceI] += Le*fe; - - // Area - vector Re = curEdge.centre(points) - Rf; - Re -= nI[faceI]*(nI[faceI]&Re); - faceArea += (Le&Re); - } - - faceArea /= 2.0; - - gradI[faceI] /= mag; // faceArea; // mag - } - - forAll(tGrad().boundaryField(), patchI) - { - Field& patchGrad = tGrad().boundaryField()[patchI]; - - const vectorField& patchN = n.boundaryField()[patchI]; - - forAll(patchGrad, faceI) - { - label globalFaceID = mesh.boundaryMesh()[patchI].start() + faceI; - - const face& curFace = mesh.faces()[globalFaceID]; - - vector Rf = curFace.centre(points); - - scalar mag = curFace.mag(points); - - const edgeList curFaceEdges = curFace.edges(); - - patchGrad[faceI] = pTraits::zero; - scalar faceArea = 0; - - forAll(curFaceEdges, edgeI) - { - const edge& curEdge = curFaceEdges[edgeI]; - - // Projected edge vector - vector e = curEdge.vec(points); - e -= patchN[faceI]*(patchN[faceI]&e); - - // Edge length vector - vector Le = (e^patchN[faceI]); - Le *= curFace.edgeDirection(curEdge); - - // Edge-centre field value - Type fe = - 0.5 - *( - pfI[curEdge.start()] - + pfI[curEdge.end()] - ); - - // Gradient - patchGrad[faceI] += Le*fe; - - // Area - vector Re = curEdge.centre(points) - Rf; - Re -= patchN[faceI]*(patchN[faceI]&Re); - faceArea += (Le&Re); - } - - faceArea /= 2.0; - - patchGrad[faceI] /= mag; //faceArea; //mag - } - } - - forAll(mesh.boundary(), patchI) - { - if (mesh.boundary()[patchI].type() == ggiFvPatch::typeName) - { - const ggiFvPatch& ggiPatch = - refCast(mesh.boundary()[patchI]); - - if (!ggiPatch.master()) - { - Field& slaveGrad = - tGrad().boundaryField()[patchI]; - const Field& masterGrad = - tGrad().boundaryField()[ggiPatch.shadowIndex()]; - - slaveGrad = ggiPatch.interpolate(masterGrad); - } - } - } - - -// // Calculate boundary gradient -// forAll(mesh.boundary(), patchI) -// { -// Field ppf = pf.boundaryField()[patchI].patchInternalField(); - -// tGrad().boundaryField()[patchI] == -// fGrad(mesh.boundaryMesh()[patchI], ppf); -// } - - -// const GeometricField& gradU = -// mesh.lookupObject > -// ( -// "grad(" + vf.name() + ")" -// ); -// tGrad() = ((I - n*n)&fvc::interpolate(gradU)); - - // Add normal component of the gradient -// tGrad() -= n*(n&tGrad()); - - tGrad() += n*fvc::snGrad(vf); - - return tGrad; -} - - -template -tmp -< - GeometricField - < - typename outerProduct::type, - fvsPatchField, - surfaceMesh - > -> -fGrad -( - const GeometricField& vf, - const GeometricField& pf, - const GeometricField - < - typename outerProduct::type, - fvPatchField, - volMesh - >& gradVf -) -{ - const fvMesh& mesh = vf.mesh(); - - const leastSquaresVolPointInterpolation& vpi = - mesh.lookupObject - ( - "leastSquaresVolPointInterpolation" - ); - - labelList axisPoints = vpi.pointAxisEdges().toc(); - -// const labelListList& pCells = mesh.pointCells(); - -// GeometricField& pf_ = -// const_cast&>(pf); - -// forAll(axisPoints, pointI) -// { -// label curPoint = axisPoints[pointI]; - -// const labelList& curPointCells = pCells[curPoint]; - -// pf_[curPoint] = pTraits::zero; -// forAll (curPointCells, cellI) -// { -// label curCell = curPointCells[cellI]; -// vector delta = -// mesh.points()[curPoint] -// - mesh.cellCentres()[curCell]; -// pf_[curPoint] += vf[curCell] + (delta&gradVf[curCell]); -// } -// pf_[curPoint] /= curPointCells.size(); - -// pf_[curPoint] = -// transform -// ( -// sqr(vector(0, 1, 0)), -// pf[curPoint] -// ); -// } -// pf_.correctBoundaryConditions(); - - typedef typename outerProduct::type GradType; - - tmp > tGrad = - fsGrad(vf, pf); - - GeometricField fGradVf = - fvc::interpolate(gradVf); - surfaceVectorField n = mesh.Sf()/mesh.magSf(); - fGradVf -= n*(n & fGradVf); -// fGradVf += n*fvc::snGrad(vf); - - -// forAll(tGrad().internalField(), faceI) -// { -// if (mesh.faceCentres()[faceI].x() < 0.1) -// { -// tGrad()[faceI] = fGradVf[faceI]; -// } -// } - - -// const labelListList& pFaces = mesh.pointFaces(); - -// forAll(axisPoints, pointI) -// { -// label curPoint = axisPoints[pointI]; - -// const labelList& curPointFaces = pFaces[curPoint]; - -// forAll(curPointFaces, faceI) -// { -// label curFace = curPointFaces[faceI]; - -// if (curFace < mesh.nInternalFaces()) -// { -// tGrad()[curFace] = fGradVf[curFace]; -// } -// } -// } - - tGrad() = fGradVf; - -// tGrad().internalField() = fGradVf.internalField(); - -// forAll(tGrad().boundaryField(), patchI) -// { -// if (isA(mesh.boundary()[patchI])) -// { -// tGrad().boundaryField()[patchI] = -// fGradVf.boundaryField()[patchI]; -// } -// } - - - tGrad() += n*fvc::snGrad(vf); - - -// forAll(fGradVf.internalField(), faceI) -// { -// tGrad()[faceI] = fGradVf[faceI]; -// } - - - - - - return tGrad; -} - - -template -tmp -< - GeometricField - < - typename outerProduct::type, - fvsPatchField, - surfaceMesh - > -> fsGrad -( - const GeometricField& vf, - const GeometricField& pf -) -{ - typedef typename outerProduct::type GradType; - - const fvMesh& mesh = vf.mesh(); - - tmp > tGrad - ( - new GeometricField - ( - IOobject - ( - "grad" + vf.name() + "f", - vf.instance(), - mesh, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - mesh, - dimensioned - ( - "0", - vf.dimensions()/dimLength, - pTraits::zero - ) - ) - ); - Field& gradI = tGrad().internalField(); - - const vectorField& points = mesh.points(); - const faceList& faces = mesh.faces(); - - surfaceVectorField n = mesh.Sf()/mesh.magSf(); - const vectorField& nI = n.internalField(); - - const Field& pfI = pf.internalField(); - - forAll(gradI, faceI) - { - const face& curFace = faces[faceI]; - - vector Rf = curFace.centre(points); - - scalar mag = curFace.mag(points); - - const edgeList curFaceEdges = curFace.edges(); - - gradI[faceI] = pTraits::zero; - scalar faceArea = 0; - - forAll(curFaceEdges, edgeI) - { - const edge& curEdge = curFaceEdges[edgeI]; - - // Projected edge vector - vector e = curEdge.vec(points); - e -= nI[faceI]*(nI[faceI]&e); - - // Edge length vector - vector Le = (e^nI[faceI]); - Le *= curFace.edgeDirection(curEdge); - - // Edge-centre field value - Type fe = - 0.5 - *( - pfI[curEdge.start()] - + pfI[curEdge.end()] - ); - - // Gradient - gradI[faceI] += Le*fe; - - // Area - vector Re = curEdge.centre(points) - Rf; - Re -= nI[faceI]*(nI[faceI]&Re); - faceArea += (Le&Re); - } - - faceArea /= 2.0; - - gradI[faceI] /= mag; // faceArea; // mag - } - - forAll(tGrad().boundaryField(), patchI) - { - Field& patchGrad = tGrad().boundaryField()[patchI]; - - const vectorField& patchN = n.boundaryField()[patchI]; - - forAll(patchGrad, faceI) - { - label globalFaceID = mesh.boundaryMesh()[patchI].start() + faceI; - - const face& curFace = mesh.faces()[globalFaceID]; - - vector Rf = curFace.centre(points); - - scalar mag = curFace.mag(points); - - const edgeList curFaceEdges = curFace.edges(); - - patchGrad[faceI] = pTraits::zero; - scalar faceArea = 0; - - forAll(curFaceEdges, edgeI) - { - const edge& curEdge = curFaceEdges[edgeI]; - - // Projected edge vector - vector e = curEdge.vec(points); - e -= patchN[faceI]*(patchN[faceI]&e); - - // Edge length vector - vector Le = (e^patchN[faceI]); - Le *= curFace.edgeDirection(curEdge); - - // Edge-centre field value - Type fe = - 0.5 - *( - pfI[curEdge.start()] - + pfI[curEdge.end()] - ); - - // Gradient - patchGrad[faceI] += Le*fe; - - // Area - vector Re = curEdge.centre(points) - Rf; - Re -= patchN[faceI]*(patchN[faceI]&Re); - faceArea += (Le&Re); - } - - faceArea /= 2.0; - - patchGrad[faceI] /= mag; //faceArea; //mag - } - } - - forAll(mesh.boundary(), patchI) - { - if (mesh.boundary()[patchI].type() == ggiFvPatch::typeName) - { - const ggiFvPatch& ggiPatch = - refCast(mesh.boundary()[patchI]); - - if (!ggiPatch.master()) - { - Field& slaveGrad = - tGrad().boundaryField()[patchI]; - const Field& masterGrad = - tGrad().boundaryField()[ggiPatch.shadowIndex()]; - - slaveGrad = ggiPatch.interpolate(masterGrad); - } - } - } - - return tGrad; -} - - -template class FaceList> -tmp::type> > fGrad -( - const PrimitivePatch& patch, - const Field& ppf -) -{ - typedef typename outerProduct::type GradType; - - tmp > tGrad - ( - new Field - ( - patch.size(), - pTraits::zero - ) - ); - Field& grad = tGrad(); - - const vectorField& points = patch.localPoints(); - const faceList& faces = patch.localFaces(); - - forAll(grad, faceI) - { - const face& curFace = faces[faceI]; - - vector n = curFace.normal(points); - n /= mag(n); - - vector Rf = curFace.centre(points); - - scalar mag = curFace.mag(points); - - const edgeList curFaceEdges = curFace.edges(); - - scalar faceArea = 0; - - forAll(curFaceEdges, edgeI) - { - const edge& curEdge = curFaceEdges[edgeI]; - - // Projected edge vector - vector e = curEdge.vec(points); - e -= n*(n&e); - - // Edge length vector - vector Le = (e^n); - Le *= curFace.edgeDirection(curEdge); - - // Edge-centre displacement - Type fe = - 0.5 - *( - ppf[curEdge.start()] - + ppf[curEdge.end()] - ); - - // Gradient - grad[faceI] += Le*fe; - - // Area - vector Re = curEdge.centre(points) - Rf; - Re -= n*(n&Re); - faceArea += (Le&Re); - } - - faceArea /= 2.0; - - grad[faceI] /= mag; //faceArea; - } - - return tGrad; -} - - -template -tmp -< - GeometricField - < - typename outerProduct::type, - fvPatchField, - volMesh - > -> grad -( - const GeometricField& vf, - const GeometricField& pf -) -{ - typedef typename outerProduct::type GradType; - - const fvMesh& mesh = vf.mesh(); - - tmp > tGrad - ( - new GeometricField - ( - IOobject - ( - "grad(" + vf.name() + ")", - vf.instance(), - mesh, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - mesh, - dimensioned - ( - "0", - vf.dimensions()/dimLength, - pTraits::zero - ) - ) - ); - - Field& iGrad = tGrad().internalField(); - - const vectorField& points = mesh.points(); - - const faceList& faces = mesh.faces(); - - const Field& pfI = pf.internalField(); - - const unallocLabelList& owner = mesh.owner(); - const unallocLabelList& neighbour = mesh.neighbour(); - - scalarField V(iGrad.size(), 0.0); - - forAll(owner, faceI) - { - const face& curFace = faces[faceI]; - - // If the face is a triangle, do a direct calculation - if (curFace.size() == 3) - { - GradType SF = - curFace.normal(points)*curFace.average(points, pfI); - - iGrad[owner[faceI]] += SF; - iGrad[neighbour[faceI]] -= SF; - - scalar SR = (curFace.normal(points)&curFace.centre(points)); - - V[owner[faceI]] += SR; - V[neighbour[faceI]] -= SR; - } - else - { - label nPoints = curFace.size(); - - point centrePoint = point::zero; - Type cf = pTraits::zero; - - for (register label pI=0; pI(mesh.boundary()[patchI])) - { - iGrad[pFaceCells[faceI]] += - curFace.normal(points)*vf.boundaryField()[patchI][faceI]; - - V[pFaceCells[faceI]] += - (curFace.normal(points)&curFace.centre(points)); - } - else if (curFace.size() == 3) - { - // If the face is a triangle, do a direct calculation - iGrad[pFaceCells[faceI]] += - curFace.normal(points)*curFace.average(points, pfI); - - V[pFaceCells[faceI]] += - (curFace.normal(points)&curFace.centre(points)); - } - else - { - label nPoints = curFace.size(); - - point centrePoint = point::zero; - Type cf = pTraits::zero; - - for (register label pI=0; pI(mesh).grad(vf)().internalField(); - - tGrad().correctBoundaryConditions(); - - // Calculate boundary gradient - forAll(mesh.boundary(), patchI) - { - if - ( - mesh.boundary()[patchI].size() - && !vf.boundaryField()[patchI].coupled() - && !isA(mesh.boundary()[patchI]) - ) - { - Field ppf = - pf.boundaryField()[patchI].patchInternalField(); - - tGrad().boundaryField()[patchI] == - fGrad(mesh.boundaryMesh()[patchI], ppf); - } - } - - - // Normal gradient - fv::gaussGrad(mesh).correctBoundaryConditions(vf, tGrad()); - - return tGrad; -} - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace fvc - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - -// ************************************************************************* // diff --git a/applications/solvers/FSI/fluidSolidInteraction/solidSolvers/finiteVolume/fvc/fvcGradf.C.new b/applications/solvers/FSI/fluidSolidInteraction/solidSolvers/finiteVolume/fvc/fvcGradf.C.new deleted file mode 100644 index 3fea0c92e..000000000 --- a/applications/solvers/FSI/fluidSolidInteraction/solidSolvers/finiteVolume/fvc/fvcGradf.C.new +++ /dev/null @@ -1,264 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / 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 "fvcGradf.H" -#include "fvMesh.H" -#include "volFields.H" -#include "surfaceFields.H" -#include "pointFields.H" - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace fvc -{ - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -template -tmp -< - GeometricField - < - typename outerProduct::type, - fvsPatchField, - surfaceMesh - > -> grad -( - const GeometricField& vf, - const GeometricField& pf -) -{ - typedef typename outerProduct::type GradType; - - const fvMesh& mesh = vf.mesh(); - - tmp > tGrad - ( - new GeometricField - ( - IOobject - ( - "grad" + vf.name() + "f", - vf.instance(), - mesh, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - mesh, - dimensioned - ( - "0", - vf.dimensions()/dimLength, - pTraits::zero - ) - ) - ); - Field& gradI = tGrad().internalField(); - - const vectorField& points = mesh.points(); - const faceList& faces = mesh.faces(); - -// const vectorField& faceCentres = mesh.faceCentres(); - - const labelList& owner = mesh.owner(); - const labelList& neighbour = mesh.neighbour(); - - const volVectorField& C = mesh.C(); - const surfaceVectorField& Cf = mesh.Cf(); - - const GeometricField& gradVf = - mesh.lookupObject > - ( - "grad(" + vf.name() + ")" - ); - - surfaceVectorField n = mesh.Sf()/mesh.magSf(); -// const vectorField& nI = n.internalField(); - - const Field& pfI = pf.internalField(); - - forAll(gradI, faceI) - { - const face& curFace = faces[faceI]; - - const edgeList curFaceEdges = curFace.edges(); - - Type curFaceFieldValue = pTraits::zero; - - // Owner contribution - label own = owner[faceI]; - curFaceFieldValue += - 0.5*(vf[own] + ((Cf[faceI] - C[own]) & gradVf[own])); - - // Neighbour contribution - label nei = neighbour[faceI]; - curFaceFieldValue += - 0.5*(vf[nei] + ((Cf[faceI] - C[nei]) & gradVf[nei])); - - gradI[faceI] = pTraits::zero; - scalar faceArea = 0; - - forAll(curFaceEdges, edgeI) - { - const edge& curEdge = curFaceEdges[edgeI]; - - vectorField p(3, vector::zero); - p[0] = points[curEdge.start()]; - p[1] = points[curEdge.end()]; - p[2] = Cf[faceI]; - - Field f(3, pTraits::zero); - f[0] = pfI[curEdge.start()]; - f[1] = pfI[curEdge.end()]; - f[2] = curFaceFieldValue; - - triFace tri(0, 1, 2); - - vector triCentre = tri.centre(p); - vector triNormal = tri.normal(p); - triNormal /= mag(triNormal); - edgeList triEdges = tri.edges(); - - - GradType triGrad = pTraits::zero; - - forAll(triEdges, eI) - { - vector e = triEdges[eI].vec(p); - - vector Le = (e^triNormal); - Le *= tri.edgeDirection(triEdges[eI]); - - // Edge-centre value of the field - Type fe = - 0.5*(f[triEdges[eI].start()] + f[triEdges[eI].end()]); - - // Gradient - triGrad += Le*fe; - } - - // Gradient - gradI[faceI] += triGrad; - - // Area - faceArea += tri.mag(p); - } - - gradI[faceI] /= faceArea; - } - - forAll(tGrad().boundaryField(), patchI) - { - Field& patchGrad = tGrad().boundaryField()[patchI]; - - const vectorField& pCf = Cf.boundaryField()[patchI]; - - forAll(patchGrad, faceI) - { - label globalFaceID = mesh.boundaryMesh()[patchI].start() + faceI; - - const face& curFace = mesh.faces()[globalFaceID]; - - const edgeList curFaceEdges = curFace.edges(); - - const Type& curFaceFieldValue = - vf.boundaryField()[patchI][faceI]; - - patchGrad[faceI] = pTraits::zero; - scalar faceArea = 0; - - forAll(curFaceEdges, edgeI) - { - const edge& curEdge = curFaceEdges[edgeI]; - - vectorField p(3, vector::zero); - p[0] = points[curEdge.start()]; - p[1] = points[curEdge.end()]; - p[2] = pCf[faceI]; - - Field f(3, pTraits::zero); - f[0] = pfI[curEdge.start()]; - f[1] = pfI[curEdge.end()]; - f[2] = curFaceFieldValue; - - triFace tri(0, 1, 2); - - vector triCentre = tri.centre(p); - vector triNormal = tri.normal(p); - triNormal /= mag(triNormal); - edgeList triEdges = tri.edges(); - - - GradType triGrad = pTraits::zero; - - forAll(triEdges, eI) - { - vector e = triEdges[eI].vec(p); - - vector Le = (e^triNormal); - Le *= tri.edgeDirection(triEdges[eI]); - - // Edge-centre value of the field - Type fe = - 0.5*(f[triEdges[eI].start()] + f[triEdges[eI].end()]); - - // Gradient - triGrad += Le*fe; - } - - // Gradient - patchGrad[faceI] += triGrad; - - // Area - faceArea += tri.mag(p); - } - - patchGrad[faceI] /= faceArea; - } - } - - // Add normal component of the gradient - tGrad() += n*fvc::snGrad(vf); - - return tGrad; -} - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace fvc - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/thermophysicalModels/thermophysicalFunctions/freesteam-2.1/.cproject b/src/thermophysicalModels/thermophysicalFunctions/freesteam-2.1/.cproject deleted file mode 100644 index d79ccac3d..000000000 --- a/src/thermophysicalModels/thermophysicalFunctions/freesteam-2.1/.cproject +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/thermophysicalModels/thermophysicalFunctions/freesteam-2.1/.project b/src/thermophysicalModels/thermophysicalFunctions/freesteam-2.1/.project deleted file mode 100644 index d96828587..000000000 --- a/src/thermophysicalModels/thermophysicalFunctions/freesteam-2.1/.project +++ /dev/null @@ -1,79 +0,0 @@ - - - freesteam - - - - - - org.eclipse.cdt.managedbuilder.core.genmakebuilder - clean,full,incremental, - - - ?name? - - - - org.eclipse.cdt.make.core.append_environment - true - - - org.eclipse.cdt.make.core.autoBuildTarget - all - - - org.eclipse.cdt.make.core.buildArguments - - - - org.eclipse.cdt.make.core.buildCommand - make - - - org.eclipse.cdt.make.core.cleanBuildTarget - clean - - - org.eclipse.cdt.make.core.contents - org.eclipse.cdt.make.core.activeConfigSettings - - - org.eclipse.cdt.make.core.enableAutoBuild - false - - - org.eclipse.cdt.make.core.enableCleanBuild - true - - - org.eclipse.cdt.make.core.enableFullBuild - true - - - org.eclipse.cdt.make.core.fullBuildTarget - all - - - org.eclipse.cdt.make.core.stopOnError - true - - - org.eclipse.cdt.make.core.useDefaultBuildCmd - true - - - - - org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder - full,incremental, - - - - - - org.eclipse.cdt.core.cnature - org.eclipse.cdt.core.ccnature - org.eclipse.cdt.managedbuilder.core.managedBuildNature - org.eclipse.cdt.managedbuilder.core.ScannerConfigNature - - diff --git a/tutorials/FSI/ampFsiFoam/axisymmetricTube/fluid/constant/polyMesh/cellZones b/tutorials/FSI/ampFsiFoam/axisymmetricTube/fluid/constant/polyMesh/cellZones deleted file mode 100644 index 4387ce0f2417b0bc9dbf9ce3d29b533d12962e05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8944 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 literal 0 HcmV?d00001 diff --git a/tutorials/FSI/ampFsiFoam/axisymmetricTube/fluid/constant/polyMesh/faceZones b/tutorials/FSI/ampFsiFoam/axisymmetricTube/fluid/constant/polyMesh/faceZones deleted file mode 100644 index d2d0b5ded..000000000 --- a/tutorials/FSI/ampFsiFoam/axisymmetricTube/fluid/constant/polyMesh/faceZones +++ /dev/null @@ -1,4023 +0,0 @@ -/*--------------------------------*- 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 regIOobject; - location "constant/polyMesh"; - object faceZones; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -2 -( -default-interior -{ - type faceZone; - faceLabels List