diff --git a/applications/utilities/surface/surfaceInertia/surfaceInertia.C b/applications/utilities/surface/surfaceInertia/surfaceInertia.C index 0819c4bbb6b32a731aeca482d9fd1f02bdf6ad86..c68608feda20f82c1ace1309a39a108c40fae517 100644 --- a/applications/utilities/surface/surfaceInertia/surfaceInertia.C +++ b/applications/utilities/surface/surfaceInertia/surfaceInertia.C @@ -591,18 +591,27 @@ int main(int argc, char *argv[]) if (showTransform) { - Info<< "Transform tensor from reference state (Q). " << nl + Info<< "Transform tensor from reference state (orientation):" << nl + << eVec.T() << nl << "Rotation tensor required to transform " "from the body reference frame to the global " "reference frame, i.e.:" << nl - << "globalVector = Q & bodyLocalVector" - << nl << eVec.T() + << "globalVector = orientation & bodyLocalVector" + << endl; + + Info<< nl + << "Entries for sixDoFRigidBodyDisplacement boundary condition:" + << nl + << " mass " << m << token::END_STATEMENT << nl + << " centreOfMass " << cM << token::END_STATEMENT << nl + << " momentOfInertia " << eVal << token::END_STATEMENT << nl + << " orientation " << eVec.T() << token::END_STATEMENT << endl; } if (calcAroundRefPt) { - Info << "Inertia tensor relative to " << refPt << ": " + Info<< nl << "Inertia tensor relative to " << refPt << ": " << nl << applyParallelAxisTheorem(m, cM, J, refPt) << endl; } diff --git a/src/OpenFOAM/interpolations/interpolateSplineXY/interpolateSplineXY.C b/src/OpenFOAM/interpolations/interpolateSplineXY/interpolateSplineXY.C new file mode 100644 index 0000000000000000000000000000000000000000..2fa74142cd13e87a949a2d027af9de42bfec4ffe --- /dev/null +++ b/src/OpenFOAM/interpolations/interpolateSplineXY/interpolateSplineXY.C @@ -0,0 +1,126 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2010-2010 OpenCFD Ltd. + \\/ 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 "interpolateSplineXY.H" +#include "primitiveFields.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +template<class Type> +Foam::Field<Type> Foam::interpolateSplineXY +( + const scalarField& xNew, + const scalarField& xOld, + const Field<Type>& yOld +) +{ + Field<Type> yNew(xNew.size()); + + forAll(xNew, i) + { + yNew[i] = interpolateSmoothXY(xNew[i], xOld, yOld); + } + + return yNew; +} + + +template<class Type> +Type Foam::interpolateSplineXY +( + const scalar x, + const scalarField& xOld, + const Field<Type>& yOld +) +{ + label n = xOld.size(); + + // early exit if out of bounds or only one value + if (n == 1 || x < xOld[0]) + { + return yOld[0]; + } + if (x > xOld[n - 1]) + { + return yOld[n - 1]; + } + + // linear interpolation if only two values + if (n == 2) + { + return (x - xOld[0])/(xOld[1] - xOld[0])*(yOld[1] - yOld[0]) + yOld[0]; + } + + // find bounding knots + label hi = 0; + while (hi < n && xOld[hi] < x) + { + hi++; + } + + label lo = hi - 1; + + const Type& y1 = yOld[lo]; + const Type& y2 = yOld[hi]; + + Type y0; + if (lo == 0) + { + y0 = 2*y1 - y2; + } + else + { + y0 = yOld[lo - 1]; + } + + Type y3; + if (hi + 1 == n) + { + y3 = 2*y2 - y1; + } + else + { + y3 = yOld[hi + 1]; + } + + // weighting + scalar mu = (x - xOld[lo])/(xOld[hi] - xOld[lo]); + + // interpolate + return + 0.5 + *( + 2*y1 + + mu + *( + -y0 + y2 + + mu*((2*y0 - 5*y1 + 4*y2 - y3) + mu*(-y0 + 3*y1 - 3*y2 + y3)) + ) + ); +} + + +// ************************************************************************* // diff --git a/src/OpenFOAM/interpolations/interpolateSplineXY/interpolateSplineXY.H b/src/OpenFOAM/interpolations/interpolateSplineXY/interpolateSplineXY.H new file mode 100644 index 0000000000000000000000000000000000000000..7d06169ea8349ec5fe4743971a51483bf76e1759 --- /dev/null +++ b/src/OpenFOAM/interpolations/interpolateSplineXY/interpolateSplineXY.H @@ -0,0 +1,84 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2010-2010 OpenCFD Ltd. + \\/ 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 + +InNamespace + Foam + +Description + Interpolates y values from one curve to another with a different x + distribution. + + Uses Catmull-Rom spline interpolation between points. + +SourceFiles + interpolateSplineXY.C + +\*---------------------------------------------------------------------------*/ + +#ifndef interpolateSplineXY_H +#define interpolateSplineXY_H + +#include "scalar.H" +#include "primitiveFieldsFwd.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +template<class Type> +Field<Type> interpolateSplineXY +( + const scalarField& xNew, + const scalarField& xOld, + const Field<Type>& yOld +); + + +template<class Type> +Type interpolateSplineXY +( + const scalar x, + const scalarField& xOld, + const Field<Type>& yOld +); + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository +# include "interpolateSplineXY.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/tabulated6DoFMotion/tabulated6DoFMotion.C b/src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/tabulated6DoFMotion/tabulated6DoFMotion.C index b4d6bf06d2d6dd3d31a7ceab7048a72750e2d947..38ef552948f9a9b89d7c5f7dc4a760208a429abc 100644 --- a/src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/tabulated6DoFMotion/tabulated6DoFMotion.C +++ b/src/dynamicFvMesh/solidBodyMotionFvMesh/solidBodyMotionFunctions/tabulated6DoFMotion/tabulated6DoFMotion.C @@ -27,7 +27,7 @@ License #include "addToRunTimeSelectionTable.H" #include "Tuple2.H" #include "IFstream.H" -#include "interpolateXY.H" +#include "interpolateSplineXY.H" #include "mathematicalConstants.H" using namespace Foam::constant::mathematical; @@ -98,7 +98,7 @@ Foam::solidBodyMotionFunctions::tabulated6DoFMotion::transformation() const << exit(FatalError); } - translationRotationVectors TRV = interpolateXY + translationRotationVectors TRV = interpolateSplineXY ( t, times_, diff --git a/src/lagrangian/coalCombustion/submodels/surfaceReactionModel/COxidationDiffusionLimitedRate/COxidationDiffusionLimitedRate.C b/src/lagrangian/coalCombustion/submodels/surfaceReactionModel/COxidationDiffusionLimitedRate/COxidationDiffusionLimitedRate.C index 67bd87f76bdc117e8b2f60f31526703dcff93ff8..71e40a0a64c10b9bc376acb529565e064467877a 100644 --- a/src/lagrangian/coalCombustion/submodels/surfaceReactionModel/COxidationDiffusionLimitedRate/COxidationDiffusionLimitedRate.C +++ b/src/lagrangian/coalCombustion/submodels/surfaceReactionModel/COxidationDiffusionLimitedRate/COxidationDiffusionLimitedRate.C @@ -123,7 +123,8 @@ Foam::scalar Foam::COxidationDiffusionLimitedRate<CloudType>::calculate const scalar YO2 = this->owner().mcCarrierThermo().Y(O2GlobalId_)[cellI]; // Change in C mass [kg] - scalar dmC = 4.0*constant::mathematical::pi*d*D_*YO2*Tc*rhoc/(Sb_*(T + Tc))*dt; + scalar dmC = + 4.0*constant::mathematical::pi*d*D_*YO2*Tc*rhoc/(Sb_*(T + Tc))*dt; // Limit mass transfer by availability of C dmC = min(mass*fComb, dmC); diff --git a/src/lagrangian/coalCombustion/submodels/surfaceReactionModel/COxidationKineticDiffusionLimitedRate/COxidationKineticDiffusionLimitedRate.C b/src/lagrangian/coalCombustion/submodels/surfaceReactionModel/COxidationKineticDiffusionLimitedRate/COxidationKineticDiffusionLimitedRate.C index f6f7b79c9acd1a9a2d980fa653836a033e58c329..3fb7d1887959f37a1ff702208ac4b3825184a7d4 100644 --- a/src/lagrangian/coalCombustion/submodels/surfaceReactionModel/COxidationKineticDiffusionLimitedRate/COxidationKineticDiffusionLimitedRate.C +++ b/src/lagrangian/coalCombustion/submodels/surfaceReactionModel/COxidationKineticDiffusionLimitedRate/COxidationKineticDiffusionLimitedRate.C @@ -140,7 +140,7 @@ Foam::scalar Foam::COxidationKineticDiffusionLimitedRate<CloudType>::calculate const scalar Ap = constant::mathematical::pi*sqr(d); // Change in C mass [kg] - scalar dmC = Ap*rhoc*specie::RR*Tc*YO2/WO2_*D0*Rk/(D0 + Rk); + scalar dmC = Ap*rhoc*specie::RR*Tc*YO2/WO2_*D0*Rk/(D0 + Rk)*dt; // Limit mass transfer by availability of C dmC = min(mass*fComb, dmC);