diff --git a/applications/solvers/multiphase/twoPhaseEulerFoam/interfacialModels/dragModels/segregated/segregated.C b/applications/solvers/multiphase/twoPhaseEulerFoam/interfacialModels/dragModels/segregated/segregated.C index 92b82e53..7ae380da 100644 --- a/applications/solvers/multiphase/twoPhaseEulerFoam/interfacialModels/dragModels/segregated/segregated.C +++ b/applications/solvers/multiphase/twoPhaseEulerFoam/interfacialModels/dragModels/segregated/segregated.C @@ -138,11 +138,7 @@ Foam::tmp Foam::dragModels::segregated::K() const ( pair_.rho() *pair_.magUr() - /( - magGradI - *max(alpha1*alpha2, sqr(residualAlpha_)) - *muI - ) + /(magGradI*muI) ); volScalarField lambda(m_*ReI + n_*muAlphaI/muI); diff --git a/applications/solvers/multiphase/twoPhaseEulerFoam/phaseIncompressibleTurbulenceModels/kineticTheoryModels/kineticTheoryModel/kineticTheoryModel.C b/applications/solvers/multiphase/twoPhaseEulerFoam/phaseIncompressibleTurbulenceModels/kineticTheoryModels/kineticTheoryModel/kineticTheoryModel.C index 20428f9c..29baaf9c 100644 --- a/applications/solvers/multiphase/twoPhaseEulerFoam/phaseIncompressibleTurbulenceModels/kineticTheoryModels/kineticTheoryModel/kineticTheoryModel.C +++ b/applications/solvers/multiphase/twoPhaseEulerFoam/phaseIncompressibleTurbulenceModels/kineticTheoryModels/kineticTheoryModel/kineticTheoryModel.C @@ -132,6 +132,34 @@ Foam::RASModels::kineticTheoryModel::kineticTheoryModel ), U.mesh(), dimensionedScalar("zero", dimensionSet(0, 2, -1, 0, 0), 0.0) + ), + + gs0_ + ( + IOobject + ( + IOobject::groupName("gs0", phase.name()), + U.time().timeName(), + U.mesh(), + IOobject::NO_READ, + IOobject::NO_WRITE + ), + U.mesh(), + dimensionedScalar("zero", dimensionSet(0, 0, 0, 0, 0), 0.0) + ), + + kappa_ + ( + IOobject + ( + IOobject::groupName("kappa", phase.name()), + U.time().timeName(), + U.mesh(), + IOobject::NO_READ, + IOobject::NO_WRITE + ), + U.mesh(), + dimensionedScalar("zero", dimensionSet(0, 2, -1, 0, 0), 0.0) ) { if (type == typeName) @@ -371,17 +399,17 @@ void Foam::RASModels::kineticTheoryModel::correct() volSymmTensorField D(symm(gradU)); // Calculating the radial distribution function - volScalarField gs0(radialModel_->g0(alpha, alphaMinFriction_, alphaMax_)); + gs0_ = radialModel_->g0(alpha, alphaMinFriction_, alphaMax_); if (!equilibrium_) { // particle viscosity (Table 3.2, p.47) - nut_ = viscosityModel_->nu(alpha, Theta_, gs0, rho, da, e_); + nut_ = viscosityModel_->nu(alpha, Theta_, gs0_, rho, da, e_); volScalarField ThetaSqrt(sqrt(Theta_)); // Bulk viscosity p. 45 (Lun et al. 1984). - lambda_ = (4.0/3.0)*sqr(alpha)*da*gs0*(1.0 + e_)*ThetaSqrt/sqrtPi; + lambda_ = (4.0/3.0)*sqr(alpha)*da*gs0_*(1.0 + e_)*ThetaSqrt/sqrtPi; // Stress tensor, Definitions, Table 3.1, p. 43 volSymmTensorField tau(2.0*nut_*D + (lambda_ - (2.0/3.0)*nut_)*tr(D)*I); @@ -391,7 +419,7 @@ void Foam::RASModels::kineticTheoryModel::correct() ( 12.0*(1.0 - sqr(e_)) *max(sqr(alpha), residualAlpha_) - *gs0*(1.0/da)*ThetaSqrt/sqrtPi + *gs0_*(1.0/da)*ThetaSqrt/sqrtPi ); // NB, drag = K*alpha*alpha2, @@ -426,17 +454,14 @@ void Foam::RASModels::kineticTheoryModel::correct() granularPressureModel_->granularPressureCoeff ( alpha, - gs0, + gs0_, rho, e_ )/rho ); // 'thermal' conductivity (Table 3.3, p. 49) - volScalarField kappa - ( - conductivityModel_->kappa(alpha, Theta_, gs0, rho, da, e_) - ); + kappa_ = conductivityModel_->kappa(alpha, Theta_, gs0_, rho, da, e_); // Construct the granular temperature equation (Eq. 3.20, p. 44) // NB. note that there are two typos in Eq. 3.20: @@ -450,7 +475,7 @@ void Foam::RASModels::kineticTheoryModel::correct() + fvm::div(alphaPhi, Theta_) - fvc::Sp(fvc::ddt(alpha) + fvc::div(alphaPhi), Theta_) ) - - fvm::laplacian(kappa, Theta_, "laplacian(kappa, Theta)") + - fvm::laplacian(kappa_, Theta_, "laplacian(kappa, Theta)") == fvm::SuSp(-((PsCoeff*I) && gradU), Theta_) + (tau && gradU) @@ -466,23 +491,23 @@ void Foam::RASModels::kineticTheoryModel::correct() { // Equilibrium => dissipation == production // Eq. 4.14, p.82 - volScalarField K1(2.0*(1.0 + e_)*rho*gs0); + volScalarField K1(2.0*(1.0 + e_)*rho*gs0_); volScalarField K3 ( 0.5*da*rho* ( (sqrtPi/(3.0*(3.0-e_))) - *(1.0 + 0.4*(1.0 + e_)*(3.0*e_ - 1.0)*alpha*gs0) - +1.6*alpha*gs0*(1.0 + e_)/sqrtPi + *(1.0 + 0.4*(1.0 + e_)*(3.0*e_ - 1.0)*alpha*gs0_) + +1.6*alpha*gs0_*(1.0 + e_)/sqrtPi ) ); volScalarField K2 ( - 4.0*da*rho*(1.0 + e_)*alpha*gs0/(3.0*sqrtPi) - 2.0*K3/3.0 + 4.0*da*rho*(1.0 + e_)*alpha*gs0_/(3.0*sqrtPi) - 2.0*K3/3.0 ); - volScalarField K4(12.0*(1.0 - sqr(e_))*rho*gs0/(da*sqrtPi)); + volScalarField K4(12.0*(1.0 - sqr(e_))*rho*gs0_/(da*sqrtPi)); volScalarField trD ( @@ -508,6 +533,8 @@ void Foam::RASModels::kineticTheoryModel::correct() (l1 + sqrt(l2 + l3)) /(2.0*max(alpha, residualAlpha_)*K4) ); + + kappa_ = conductivityModel_->kappa(alpha, Theta_, gs0_, rho, da, e_); } Theta_.max(0); @@ -515,12 +542,12 @@ void Foam::RASModels::kineticTheoryModel::correct() { // particle viscosity (Table 3.2, p.47) - nut_ = viscosityModel_->nu(alpha, Theta_, gs0, rho, da, e_); + nut_ = viscosityModel_->nu(alpha, Theta_, gs0_, rho, da, e_); volScalarField ThetaSqrt(sqrt(Theta_)); // Bulk viscosity p. 45 (Lun et al. 1984). - lambda_ = (4.0/3.0)*sqr(alpha)*da*gs0*(1.0 + e_)*ThetaSqrt/sqrtPi; + lambda_ = (4.0/3.0)*sqr(alpha)*da*gs0_*(1.0 + e_)*ThetaSqrt/sqrtPi; // Frictional pressure volScalarField pf diff --git a/applications/solvers/multiphase/twoPhaseEulerFoam/phaseIncompressibleTurbulenceModels/kineticTheoryModels/kineticTheoryModel/kineticTheoryModel.H b/applications/solvers/multiphase/twoPhaseEulerFoam/phaseIncompressibleTurbulenceModels/kineticTheoryModels/kineticTheoryModel/kineticTheoryModel.H index a24b5aaa..28386be1 100644 --- a/applications/solvers/multiphase/twoPhaseEulerFoam/phaseIncompressibleTurbulenceModels/kineticTheoryModels/kineticTheoryModel/kineticTheoryModel.H +++ b/applications/solvers/multiphase/twoPhaseEulerFoam/phaseIncompressibleTurbulenceModels/kineticTheoryModels/kineticTheoryModel/kineticTheoryModel.H @@ -128,6 +128,12 @@ class kineticTheoryModel //- The granular bulk viscosity volScalarField lambda_; + //- The granular radial distribution + volScalarField gs0_; + + //- The granular "thermal" conductivity + volScalarField kappa_; + // Private Member Functions diff --git a/src/TurbulenceModels/phaseIncompressible/LES/Niceno/NicenoKEqn.C b/src/TurbulenceModels/phaseIncompressible/LES/Niceno/NicenoKEqn.C index 07002a6a..30356990 100644 --- a/src/TurbulenceModels/phaseIncompressible/LES/Niceno/NicenoKEqn.C +++ b/src/TurbulenceModels/phaseIncompressible/LES/Niceno/NicenoKEqn.C @@ -182,7 +182,7 @@ tmp NicenoKEqn::bubbleG() const tmp bubbleG ( - Cp_*gas*sqr(magUr)*fluid.drag(gas).K()/liquid.rho() + Cp_*sqr(magUr)*fluid.drag(gas).K()/liquid.rho() ); return bubbleG; diff --git a/src/TurbulenceModels/phaseIncompressible/RAS/LaheyKEpsilon/LaheyKEpsilon.C b/src/TurbulenceModels/phaseIncompressible/RAS/LaheyKEpsilon/LaheyKEpsilon.C index 8454103e..83edf7de 100644 --- a/src/TurbulenceModels/phaseIncompressible/RAS/LaheyKEpsilon/LaheyKEpsilon.C +++ b/src/TurbulenceModels/phaseIncompressible/RAS/LaheyKEpsilon/LaheyKEpsilon.C @@ -194,9 +194,10 @@ tmp LaheyKEpsilon::bubbleG() const tmp bubbleG ( Cp_ + *liquid*liquid.rho() *( pow3(magUr) - + pow(fluid.drag(gas).K()*gas.d()/liquid.rho(), 4.0/3.0) + + pow(fluid.drag(gas).CdRe()*liquid.nu()/gas.d(), 4.0/3.0) *pow(magUr, 5.0/3.0) ) *gas diff --git a/src/TurbulenceModels/phaseIncompressible/RAS/mixtureKEpsilon/mixtureKEpsilon.C b/src/TurbulenceModels/phaseIncompressible/RAS/mixtureKEpsilon/mixtureKEpsilon.C index 23d69508..52cc2eca 100644 --- a/src/TurbulenceModels/phaseIncompressible/RAS/mixtureKEpsilon/mixtureKEpsilon.C +++ b/src/TurbulenceModels/phaseIncompressible/RAS/mixtureKEpsilon/mixtureKEpsilon.C @@ -380,7 +380,7 @@ tmp mixtureKEpsilon::Ct2() const volScalarField beta ( (6*this->Cmu_/(4*sqrt(3.0/2.0))) - *alphag*fluid.drag(gas).K()/liquid.rho() + *fluid.drag(gas).K()/liquid.rho() *(liquidTurbulence.k_/liquidTurbulence.epsilon_) ); volScalarField Ct0((3 + beta)/(1 + beta + 2*gas.rho()/liquid.rho())); @@ -488,10 +488,10 @@ tmp mixtureKEpsilon::bubbleG() const tmp bubbleG ( Cp_ - *sqr(liquid)*liquid.rho() + *liquid*liquid.rho() *( pow3(magUr) - + pow(fluid.drag(gas).K()*gas.d()/liquid.rho(), 4.0/3.0) + + pow(fluid.drag(gas).CdRe()*liquid.nu()/gas.d(), 4.0/3.0) *pow(magUr, 5.0/3.0) ) *gas @@ -501,7 +501,7 @@ tmp mixtureKEpsilon::bubbleG() const // Simple model // tmp bubbleG // ( - // Cp_*sqr(liquid)*gas*fluid.drag(gas).K()*sqr(magUr) + // Cp_*liquid*fluid.drag(gas).K()*sqr(magUr) // ); return bubbleG; diff --git a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIInterpolation.C b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIInterpolation.C index 3dd2863e..cd586639 100644 --- a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIInterpolation.C +++ b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIInterpolation.C @@ -206,32 +206,40 @@ void Foam::AMIInterpolation::normaliseWeights ) { // Normalise the weights - wghtSum.setSize(wght.size()); + wghtSum.setSize(wght.size(), 0.0); label nLowWeight = 0; forAll(wght, faceI) { scalarList& w = wght[faceI]; - scalar denom = patchAreas[faceI]; - scalar s = sum(w); - scalar t = s/denom; - - if (conformal) + if (w.size()) { - denom = s; + scalar denom = patchAreas[faceI]; + + scalar s = sum(w); + scalar t = s/denom; + + if (conformal) + { + denom = s; + } + + forAll(w, i) + { + w[i] /= denom; + } + + wghtSum[faceI] = t; + + if (t < lowWeightTol) + { + nLowWeight++; + } } - - forAll(w, i) + else { - w[i] /= denom; - } - - wghtSum[faceI] = t; - - if (t < lowWeightTol) - { - nLowWeight++; + wghtSum[faceI] = 0; } } @@ -534,6 +542,7 @@ Foam::AMIInterpolation::AMIInterpolation const SourcePatch& srcPatch, const TargetPatch& tgtPatch, const faceAreaIntersect::triangulationMode& triMode, + const bool requireMatch, const interpolationMethod& method, const scalar lowWeightCorrection, const bool reverseTarget @@ -541,6 +550,7 @@ Foam::AMIInterpolation::AMIInterpolation : method_(method), reverseTarget_(reverseTarget), + requireMatch_(requireMatch), singlePatchProc_(-999), lowWeightCorrection_(lowWeightCorrection), srcAddress_(), @@ -564,6 +574,7 @@ Foam::AMIInterpolation::AMIInterpolation const TargetPatch& tgtPatch, const autoPtr& surfPtr, const faceAreaIntersect::triangulationMode& triMode, + const bool requireMatch, const interpolationMethod& method, const scalar lowWeightCorrection, const bool reverseTarget @@ -571,6 +582,7 @@ Foam::AMIInterpolation::AMIInterpolation : method_(method), reverseTarget_(reverseTarget), + requireMatch_(requireMatch), singlePatchProc_(-999), lowWeightCorrection_(lowWeightCorrection), srcAddress_(), @@ -654,6 +666,7 @@ Foam::AMIInterpolation::AMIInterpolation : method_(fineAMI.method_), reverseTarget_(fineAMI.reverseTarget_), + requireMatch_(fineAMI.requireMatch_), singlePatchProc_(fineAMI.singlePatchProc_), lowWeightCorrection_(-1.0), srcAddress_(), @@ -862,7 +875,8 @@ void Foam::AMIInterpolation::update srcMagSf_, tgtMagSf_, triMode_, - reverseTarget_ + reverseTarget_, + requireMatch_ ) ); @@ -978,7 +992,8 @@ void Foam::AMIInterpolation::update srcMagSf_, tgtMagSf_, triMode_, - reverseTarget_ + reverseTarget_, + requireMatch_ ) ); diff --git a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIInterpolation.H b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIInterpolation.H index a8193358..7dbacd9e 100644 --- a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIInterpolation.H +++ b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIInterpolation.H @@ -116,6 +116,10 @@ private: // that the orientation of the target patch should be reversed const bool reverseTarget_; + //- Flag to indicate that the two patches must be matched/an overlap + // exists between them + const bool requireMatch_; + //- Index of processor that holds all of both sides. -1 in all other // cases label singlePatchProc_; @@ -276,6 +280,7 @@ public: const SourcePatch& srcPatch, const TargetPatch& tgtPatch, const faceAreaIntersect::triangulationMode& triMode, + const bool requireMatch = true, const interpolationMethod& method = imFaceAreaWeight, const scalar lowWeightCorrection = -1, const bool reverseTarget = false @@ -288,6 +293,7 @@ public: const TargetPatch& tgtPatch, const autoPtr& surf, const faceAreaIntersect::triangulationMode& triMode, + const bool requireMatch = true, const interpolationMethod& method = imFaceAreaWeight, const scalar lowWeightCorrection = -1, const bool reverseTarget = false diff --git a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/AMIMethod/AMIMethod.C b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/AMIMethod/AMIMethod.C index eb9406c5..292d8167 100644 --- a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/AMIMethod/AMIMethod.C +++ b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/AMIMethod/AMIMethod.C @@ -98,6 +98,10 @@ bool Foam::AMIMethod::initialise ( "void Foam::AMIMethod::initialise" "(" + "labelListList&, " + "scalarListList&, " + "labelListList&, " + "scalarListList&, " "label&, " "label&" ")" @@ -129,14 +133,24 @@ bool Foam::AMIMethod::initialise if (!foundFace) { - FatalErrorIn - ( - "void Foam::AMIMethod::initialise" - "(" - "label&, " - "label&" - ")" - ) << "Unable to find initial target face" << abort(FatalError); + if (requireMatch_) + { + FatalErrorIn + ( + "void Foam::AMIMethod::initialise" + "(" + "labelListList&, " + "scalarListList&, " + "labelListList&, " + "scalarListList&, " + "label&, " + "label&" + ")" + ) << "Unable to find initial target face" + << abort(FatalError); + } + + return false; } } @@ -327,12 +341,14 @@ Foam::AMIMethod::AMIMethod const scalarField& srcMagSf, const scalarField& tgtMagSf, const faceAreaIntersect::triangulationMode& triMode, - const bool reverseTarget + const bool reverseTarget, + const bool requireMatch ) : srcPatch_(srcPatch), tgtPatch_(tgtPatch), reverseTarget_(reverseTarget), + requireMatch_(requireMatch), srcMagSf_(srcMagSf), tgtMagSf_(tgtMagSf), srcNonOverlap_(), diff --git a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/AMIMethod/AMIMethod.H b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/AMIMethod/AMIMethod.H index 673a695a..06afc1a2 100644 --- a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/AMIMethod/AMIMethod.H +++ b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/AMIMethod/AMIMethod.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2014 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -85,6 +85,10 @@ protected: // that the orientation of the target patch should be reversed const bool reverseTarget_; + //- Flag to indicate that the two patches must be matched/an overlap + // exists between them + const bool requireMatch_; + //- Source face areas const scalarField& srcMagSf_; @@ -166,9 +170,18 @@ public: const scalarField& srcMagSf, const scalarField& tgtMagSf, const faceAreaIntersect::triangulationMode& triMode, - const bool reverseTarget + const bool reverseTarget, + const bool requireMatch ), - (srcPatch, tgtPatch, srcMagSf, tgtMagSf, triMode, reverseTarget) + ( + srcPatch, + tgtPatch, + srcMagSf, + tgtMagSf, + triMode, + reverseTarget, + requireMatch + ) ); //- Construct from components @@ -179,7 +192,8 @@ public: const scalarField& srcMagSf, const scalarField& tgtMagSf, const faceAreaIntersect::triangulationMode& triMode, - const bool reverseTarget + const bool reverseTarget, + const bool requireMatch ); //- Selector @@ -191,7 +205,8 @@ public: const scalarField& srcMagSf, const scalarField& tgtMagSf, const faceAreaIntersect::triangulationMode& triMode, - const bool reverseTarget + const bool reverseTarget, + const bool requireMatch ); diff --git a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/AMIMethod/AMIMethodNew.C b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/AMIMethod/AMIMethodNew.C index 39cc1d3f..d06294d5 100644 --- a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/AMIMethod/AMIMethodNew.C +++ b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/AMIMethod/AMIMethodNew.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2014 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -35,7 +35,8 @@ Foam::AMIMethod::New const scalarField& srcMagSf, const scalarField& tgtMagSf, const faceAreaIntersect::triangulationMode& triMode, - const bool reverseTarget + const bool reverseTarget, + const bool requireMatch ) { if (debug) @@ -58,6 +59,7 @@ Foam::AMIMethod::New "const scalarField&, " "const scalarField&, " "const faceAreaIntersect::triangulationMode&, " + "const bool, " "const bool" ")" ) << "Unknown AMIMethod type " @@ -75,7 +77,8 @@ Foam::AMIMethod::New srcMagSf, tgtMagSf, triMode, - reverseTarget + reverseTarget, + requireMatch ) ); } diff --git a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/directAMI/directAMI.C b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/directAMI/directAMI.C index fa5d0b73..70673d31 100644 --- a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/directAMI/directAMI.C +++ b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/directAMI/directAMI.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2014 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -106,7 +106,8 @@ Foam::directAMI::directAMI const scalarField& srcMagSf, const scalarField& tgtMagSf, const faceAreaIntersect::triangulationMode& triMode, - const bool reverseTarget + const bool reverseTarget, + const bool requireMatch ) : AMIMethod @@ -116,7 +117,8 @@ Foam::directAMI::directAMI srcMagSf, tgtMagSf, triMode, - reverseTarget + reverseTarget, + requireMatch ) {} diff --git a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/directAMI/directAMI.H b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/directAMI/directAMI.H index e7842ff9..dc273c79 100644 --- a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/directAMI/directAMI.H +++ b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/directAMI/directAMI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2014 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -102,7 +102,8 @@ public: const scalarField& srcMagSf, const scalarField& tgtMagSf, const faceAreaIntersect::triangulationMode& triMode, - const bool reverseTarget = false + const bool reverseTarget = false, + const bool requireMatch = true ); diff --git a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/faceAreaWeightAMI/faceAreaWeightAMI.C b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/faceAreaWeightAMI/faceAreaWeightAMI.C index 05dcd1e2..d9cfb840 100644 --- a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/faceAreaWeightAMI/faceAreaWeightAMI.C +++ b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/faceAreaWeightAMI/faceAreaWeightAMI.C @@ -482,6 +482,7 @@ Foam::faceAreaWeightAMI::faceAreaWeightAMI const scalarField& tgtMagSf, const faceAreaIntersect::triangulationMode& triMode, const bool reverseTarget, + const bool requireMatch, const bool restartUncoveredSourceFace ) : @@ -492,7 +493,8 @@ Foam::faceAreaWeightAMI::faceAreaWeightAMI srcMagSf, tgtMagSf, triMode, - reverseTarget + reverseTarget, + requireMatch ), restartUncoveredSourceFace_(restartUncoveredSourceFace) {} diff --git a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/faceAreaWeightAMI/faceAreaWeightAMI.H b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/faceAreaWeightAMI/faceAreaWeightAMI.H index d1a48a54..2d1b5520 100644 --- a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/faceAreaWeightAMI/faceAreaWeightAMI.H +++ b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/faceAreaWeightAMI/faceAreaWeightAMI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2014 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -144,6 +144,7 @@ public: const scalarField& tgtMagSf, const faceAreaIntersect::triangulationMode& triMode, const bool reverseTarget = false, + const bool requireMatch = true, const bool restartUncoveredSourceFace = true ); diff --git a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/mapNearestAMI/mapNearestAMI.C b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/mapNearestAMI/mapNearestAMI.C index be6f590f..59d8c5cd 100644 --- a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/mapNearestAMI/mapNearestAMI.C +++ b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/mapNearestAMI/mapNearestAMI.C @@ -183,7 +183,8 @@ Foam::mapNearestAMI::mapNearestAMI const scalarField& srcMagSf, const scalarField& tgtMagSf, const faceAreaIntersect::triangulationMode& triMode, - const bool reverseTarget + const bool reverseTarget, + const bool requireMatch ) : AMIMethod @@ -193,7 +194,8 @@ Foam::mapNearestAMI::mapNearestAMI srcMagSf, tgtMagSf, triMode, - reverseTarget + reverseTarget, + requireMatch ) {} diff --git a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/mapNearestAMI/mapNearestAMI.H b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/mapNearestAMI/mapNearestAMI.H index 0daf2666..86d8c615 100644 --- a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/mapNearestAMI/mapNearestAMI.H +++ b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/mapNearestAMI/mapNearestAMI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2014 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -116,7 +116,8 @@ public: const scalarField& srcMagSf, const scalarField& tgtMagSf, const faceAreaIntersect::triangulationMode& triMode, - const bool reverseTarget = false + const bool reverseTarget = false, + const bool requireMatch = true ); diff --git a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/partialFaceAreaWeightAMI/partialFaceAreaWeightAMI.C b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/partialFaceAreaWeightAMI/partialFaceAreaWeightAMI.C index ad0f6376..4eddbe63 100644 --- a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/partialFaceAreaWeightAMI/partialFaceAreaWeightAMI.C +++ b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/partialFaceAreaWeightAMI/partialFaceAreaWeightAMI.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2014 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -63,7 +63,8 @@ partialFaceAreaWeightAMI const scalarField& srcMagSf, const scalarField& tgtMagSf, const faceAreaIntersect::triangulationMode& triMode, - const bool reverseTarget + const bool reverseTarget, + const bool requireMatch ) : faceAreaWeightAMI @@ -73,7 +74,8 @@ partialFaceAreaWeightAMI srcMagSf, tgtMagSf, triMode, - reverseTarget + reverseTarget, + requireMatch ) {} diff --git a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/partialFaceAreaWeightAMI/partialFaceAreaWeightAMI.H b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/partialFaceAreaWeightAMI/partialFaceAreaWeightAMI.H index 4fd0ea24..de8afcf0 100644 --- a/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/partialFaceAreaWeightAMI/partialFaceAreaWeightAMI.H +++ b/src/meshTools/AMIInterpolation/AMIInterpolation/AMIMethod/partialFaceAreaWeightAMI/partialFaceAreaWeightAMI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2014 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -93,7 +93,8 @@ public: const scalarField& srcMagSf, const scalarField& tgtMagSf, const faceAreaIntersect::triangulationMode& triMode, - const bool reverseTarget = false + const bool reverseTarget = false, + const bool requireMatch = true ); diff --git a/src/meshTools/AMIInterpolation/patches/cyclicACMI/cyclicACMIPolyPatch/cyclicACMIPolyPatch.C b/src/meshTools/AMIInterpolation/patches/cyclicACMI/cyclicACMIPolyPatch/cyclicACMIPolyPatch.C index f8fdacbd..426eb5ce 100644 --- a/src/meshTools/AMIInterpolation/patches/cyclicACMI/cyclicACMIPolyPatch/cyclicACMIPolyPatch.C +++ b/src/meshTools/AMIInterpolation/patches/cyclicACMI/cyclicACMIPolyPatch/cyclicACMIPolyPatch.C @@ -208,6 +208,8 @@ Foam::cyclicACMIPolyPatch::cyclicACMIPolyPatch tgtMask_(), updated_(false) { + AMIRequireMatch_ = false; + // Non-overlapping patch might not be valid yet so cannot determine // associated patchID } @@ -230,6 +232,8 @@ Foam::cyclicACMIPolyPatch::cyclicACMIPolyPatch tgtMask_(), updated_(false) { + AMIRequireMatch_ = false; + if (nonOverlapPatchName_ == name) { FatalIOErrorIn @@ -267,6 +271,8 @@ Foam::cyclicACMIPolyPatch::cyclicACMIPolyPatch tgtMask_(), updated_(false) { + AMIRequireMatch_ = false; + // Non-overlapping patch might not be valid yet so cannot determine // associated patchID } @@ -291,6 +297,8 @@ Foam::cyclicACMIPolyPatch::cyclicACMIPolyPatch tgtMask_(), updated_(false) { + AMIRequireMatch_ = false; + if (nonOverlapPatchName_ == name()) { FatalErrorIn @@ -328,7 +336,9 @@ Foam::cyclicACMIPolyPatch::cyclicACMIPolyPatch srcMask_(), tgtMask_(), updated_(false) -{} +{ + AMIRequireMatch_ = false; +} // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // diff --git a/src/meshTools/AMIInterpolation/patches/cyclicAMI/cyclicAMIPolyPatch/cyclicAMIPolyPatch.C b/src/meshTools/AMIInterpolation/patches/cyclicAMI/cyclicAMIPolyPatch/cyclicAMIPolyPatch.C index b8284d43..8c41bc6b 100644 --- a/src/meshTools/AMIInterpolation/patches/cyclicAMI/cyclicAMIPolyPatch/cyclicAMIPolyPatch.C +++ b/src/meshTools/AMIInterpolation/patches/cyclicAMI/cyclicAMIPolyPatch/cyclicAMIPolyPatch.C @@ -388,6 +388,7 @@ void Foam::cyclicAMIPolyPatch::resetAMI nbrPatch0, surfPtr(), faceAreaIntersect::tmMesh, + AMIRequireMatch_, AMIMethod, AMILowWeightCorrection_, AMIReverse_ @@ -501,6 +502,7 @@ Foam::cyclicAMIPolyPatch::cyclicAMIPolyPatch separationVector_(vector::zero), AMIPtr_(NULL), AMIReverse_(false), + AMIRequireMatch_(true), AMILowWeightCorrection_(-1.0), surfPtr_(NULL), surfDict_(fileName("surface")) @@ -530,6 +532,7 @@ Foam::cyclicAMIPolyPatch::cyclicAMIPolyPatch separationVector_(vector::zero), AMIPtr_(NULL), AMIReverse_(dict.lookupOrDefault("flipNormals", false)), + AMIRequireMatch_(true), AMILowWeightCorrection_(dict.lookupOrDefault("lowWeightCorrection", -1.0)), surfPtr_(NULL), surfDict_(dict.subOrEmptyDict("surface")) @@ -639,6 +642,7 @@ Foam::cyclicAMIPolyPatch::cyclicAMIPolyPatch separationVector_(pp.separationVector_), AMIPtr_(NULL), AMIReverse_(pp.AMIReverse_), + AMIRequireMatch_(pp.AMIRequireMatch_), AMILowWeightCorrection_(pp.AMILowWeightCorrection_), surfPtr_(NULL), surfDict_(pp.surfDict_) @@ -669,6 +673,7 @@ Foam::cyclicAMIPolyPatch::cyclicAMIPolyPatch separationVector_(pp.separationVector_), AMIPtr_(NULL), AMIReverse_(pp.AMIReverse_), + AMIRequireMatch_(pp.AMIRequireMatch_), AMILowWeightCorrection_(pp.AMILowWeightCorrection_), surfPtr_(NULL), surfDict_(pp.surfDict_) @@ -713,6 +718,7 @@ Foam::cyclicAMIPolyPatch::cyclicAMIPolyPatch separationVector_(pp.separationVector_), AMIPtr_(NULL), AMIReverse_(pp.AMIReverse_), + AMIRequireMatch_(pp.AMIRequireMatch_), AMILowWeightCorrection_(pp.AMILowWeightCorrection_), surfPtr_(NULL), surfDict_(pp.surfDict_) diff --git a/src/meshTools/AMIInterpolation/patches/cyclicAMI/cyclicAMIPolyPatch/cyclicAMIPolyPatch.H b/src/meshTools/AMIInterpolation/patches/cyclicAMI/cyclicAMIPolyPatch/cyclicAMIPolyPatch.H index c9c0055a..40cfc95e 100644 --- a/src/meshTools/AMIInterpolation/patches/cyclicAMI/cyclicAMIPolyPatch/cyclicAMIPolyPatch.H +++ b/src/meshTools/AMIInterpolation/patches/cyclicAMI/cyclicAMIPolyPatch/cyclicAMIPolyPatch.H @@ -56,7 +56,24 @@ class cyclicAMIPolyPatch private: - // Private data + // Private Member Functions + + //- Return normal of face at max distance from rotation axis + vector findFaceNormalMaxRadius(const pointField& faceCentres) const; + + void calcTransforms + ( + const primitivePatch& half0, + const pointField& half0Ctrs, + const vectorField& half0Areas, + const pointField& half1Ctrs, + const vectorField& half1Areas + ); + + +protected: + + // Protected data //- Name of other half mutable word nbrPatchName_; @@ -97,6 +114,9 @@ private: //- Flag to indicate that slave patch should be reversed for AMI const bool AMIReverse_; + //- Flag to indicate that patches should match/overlap + bool AMIRequireMatch_; + //- Low weight correction threshold for AMI const scalar AMILowWeightCorrection_; @@ -107,23 +127,6 @@ private: const dictionary surfDict_; - // Private Member Functions - - //- Return normal of face at max distance from rotation axis - vector findFaceNormalMaxRadius(const pointField& faceCentres) const; - - void calcTransforms - ( - const primitivePatch& half0, - const pointField& half0Ctrs, - const vectorField& half0Areas, - const pointField& half1Ctrs, - const vectorField& half1Areas - ); - - -protected: - // Protected Member Functions //- Reset the AMI interpolator diff --git a/src/meshTools/mappedPatches/mappedPolyPatch/mappedPatchBase.C b/src/meshTools/mappedPatches/mappedPolyPatch/mappedPatchBase.C index d4e15763..6ab8930a 100644 --- a/src/meshTools/mappedPatches/mappedPolyPatch/mappedPatchBase.C +++ b/src/meshTools/mappedPatches/mappedPolyPatch/mappedPatchBase.C @@ -836,6 +836,7 @@ void Foam::mappedPatchBase::calcAMI() const samplePolyPatch(), // nbrPatch0, surfPtr(), faceAreaIntersect::tmMesh, + true, AMIPatchToPatchInterpolation::imFaceAreaWeight, -1, AMIReverse_ diff --git a/src/meshTools/regionCoupled/patches/regionCoupledPolyPatch/regionCoupledBase.C b/src/meshTools/regionCoupled/patches/regionCoupledPolyPatch/regionCoupledBase.C index 224a104c..a18e83da 100644 --- a/src/meshTools/regionCoupled/patches/regionCoupledPolyPatch/regionCoupledBase.C +++ b/src/meshTools/regionCoupled/patches/regionCoupledPolyPatch/regionCoupledBase.C @@ -91,6 +91,7 @@ void Foam::regionCoupledBase::resetAMI() const nbrPatch0, surfPtr(), faceAreaIntersect::tmMesh, + true, AMIPatchToPatchInterpolation::imFaceAreaWeight, -1, AMIReverse_ diff --git a/src/regionModels/regionModel/regionModel/regionModel.C b/src/regionModels/regionModel/regionModel/regionModel.C index 5e147d22..46eae955 100644 --- a/src/regionModels/regionModel/regionModel/regionModel.C +++ b/src/regionModels/regionModel/regionModel/regionModel.C @@ -242,6 +242,7 @@ Foam::regionModels::regionModel::interRegionAMI p, nbrP, faceAreaIntersect::tmMesh, + true, AMIPatchToPatchInterpolation::imFaceAreaWeight, -1, flip @@ -284,6 +285,7 @@ Foam::regionModels::regionModel::interRegionAMI p, nbrP, faceAreaIntersect::tmMesh, + true, AMIPatchToPatchInterpolation::imFaceAreaWeight, -1, flip diff --git a/src/sampling/meshToMeshInterpolation/meshToMesh/meshToMesh.C b/src/sampling/meshToMeshInterpolation/meshToMesh/meshToMesh.C index eebb219a..2b2b7e97 100644 --- a/src/sampling/meshToMeshInterpolation/meshToMesh/meshToMesh.C +++ b/src/sampling/meshToMeshInterpolation/meshToMesh/meshToMesh.C @@ -419,6 +419,7 @@ Foam::meshToMesh::patchAMIs() const srcPP, tgtPP, faceAreaIntersect::tmMesh, + false, interpolationMethodAMI(method_), -1, true // flip target patch since patch normals are aligned