diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionFoam.C b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionFoam.C index 48b28a07e4..5297be327f 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionFoam.C +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionFoam.C @@ -40,13 +40,14 @@ Description #include "rhoThermo.H" #include "turbulenceModel.H" #include "fixedGradientFvPatchFields.H" +#include "zeroGradientFvPatchFields.H" #include "regionProperties.H" #include "compressibleCourantNo.H" #include "solidRegionDiffNo.H" #include "solidThermo.H" #include "radiationModel.H" #include "fvIOoptionList.H" - +#include "coordinateSystem.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/chtMultiRegionSimpleFoam.C b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/chtMultiRegionSimpleFoam.C index d076652a1d..a3615c4309 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/chtMultiRegionSimpleFoam.C +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/chtMultiRegionSimpleFoam.C @@ -37,6 +37,7 @@ Description #include "solidThermo.H" #include "radiationModel.H" #include "fvIOoptionList.H" +#include "coordinateSystem.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/solid/solveSolid.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/solid/solveSolid.H index 7573002af5..93f7146730 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/solid/solveSolid.H +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/solid/solveSolid.H @@ -3,7 +3,9 @@ { fvScalarMatrix hEqn ( - - fvm::laplacian(betav*alpha, h, "laplacian(alpha,h)") + thermo.isotropic() + ? -fvm::laplacian(betav*thermo.alpha(), h, "laplacian(alpha,h)") + : -fvm::laplacian(betav*tAnialpha(), h, "laplacian(alpha,h)") + fvOptions(rho, h) ); diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/createSolidFields.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/createSolidFields.H index df3915980b..703ed6e4c2 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/createSolidFields.H +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/createSolidFields.H @@ -1,4 +1,5 @@ // Initialise solid field pointer lists + PtrList coordinates(solidRegions.size()); PtrList thermos(solidRegions.size()); PtrList radiations(solidRegions.size()); PtrList solidHeatSources(solidRegions.size()); @@ -23,6 +24,16 @@ new fv::IOoptionList(solidRegions[i]) ); + if (!thermos[i].isotropic()) + { + Info<< " Adding coordinateSystems\n" << endl; + coordinates.set + ( + i, + coordinateSystem::New(solidRegions[i], thermos[i]) + ); + } + IOobject betavSolidIO ( "betavSolid", diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/setRegionSolidFields.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/setRegionSolidFields.H index ad8894a631..a36fa7e98f 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/setRegionSolidFields.H +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/setRegionSolidFields.H @@ -8,10 +8,36 @@ tmp tcp = thermo.Cp(); const volScalarField& cp = tcp(); - tmp talpha = thermo.alpha(); - const volScalarField& alpha = talpha(); - tmp tkappa = thermo.kappa(); - const volScalarField& kappa = tkappa(); + tmp tAnialpha; + + if (!thermo.isotropic()) + { + tmp tkappaCp = thermo.Kappa()/cp; + + const coordinateSystem& coodSys = coordinates[i]; + tAnialpha = + tmp + ( + new volSymmTensorField + ( + IOobject + ( + "Anialpha", + runTime.timeName(), + mesh, + IOobject::NO_READ, + IOobject::NO_WRITE + ), + mesh, + tkappaCp().dimensions(), + zeroGradientFvPatchVectorField::typeName + ) + ); + + volSymmTensorField& Anialpha = tAnialpha(); + Anialpha.internalField() = coodSys.R().transformVector(tkappaCp()); + Anialpha.correctBoundaryConditions(); + } volScalarField& h = thermo.he(); diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/solidRegionDiffNo.C b/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/solidRegionDiffNo.C index 437ea78327..9ec57f2f92 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/solidRegionDiffNo.C +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/solidRegionDiffNo.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -56,38 +56,4 @@ Foam::scalar Foam::solidRegionDiffNo return DiNum; } - -Foam::scalar Foam::solidRegionDiffNo -( - const fvMesh& mesh, - const Time& runTime, - const volScalarField& Cprho, - const volSymmTensorField& kappadirectional -) -{ - scalar DiNum = 0.0; - scalar meanDiNum = 0.0; - - volScalarField kappa(mag(kappadirectional)); - - //- Take care: can have fluid domains with 0 cells so do not test for - // zero internal faces. - surfaceScalarField kapparhoCpbyDelta - ( - mesh.surfaceInterpolation::deltaCoeffs() - * fvc::interpolate(kappa) - / fvc::interpolate(Cprho) - ); - - DiNum = gMax(kapparhoCpbyDelta.internalField())*runTime.deltaT().value(); - - meanDiNum = (average(kapparhoCpbyDelta)).value()*runTime.deltaT().value(); - - Info<< "Region: " << mesh.name() << " Diffusion Number mean: " << meanDiNum - << " max: " << DiNum << endl; - - return DiNum; -} - - // ************************************************************************* // diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/solidRegionDiffNo.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/solidRegionDiffNo.H index cb4dd30b6a..77eda7c843 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/solidRegionDiffNo.H +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/solidRegionDiffNo.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -41,15 +41,6 @@ namespace Foam const volScalarField& Cprho, const volScalarField& kappa ); - - scalar solidRegionDiffNo - ( - const fvMesh& mesh, - const Time& runTime, - const volScalarField& Cprho, - const volSymmTensorField& kappa - ); - } #endif diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/solidRegionDiffusionNo.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/solidRegionDiffusionNo.H index 878780baf1..a7a65b17bd 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/solidRegionDiffusionNo.H +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/solidRegionDiffusionNo.H @@ -1,18 +1,29 @@ - scalar DiNum = -GREAT; +scalar DiNum = -GREAT; - forAll(solidRegions, i) +forAll(solidRegions, i) +{ + #include "setRegionSolidFields.H" + + tmp magKappa; + if (thermo.isotropic()) { - #include "setRegionSolidFields.H" - - DiNum = max - ( - solidRegionDiffNo - ( - solidRegions[i], - runTime, - rho*cp, - kappa - ), - DiNum - ); + magKappa = thermo.kappa(); } + else + { + magKappa = mag(thermo.Kappa()); + } + + DiNum = max + ( + solidRegionDiffNo + ( + solidRegions[i], + runTime, + rho*cp, + magKappa() + ), + DiNum + ); + +} diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/solveSolid.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/solveSolid.H index 86f23292e3..7bf7562d9b 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/solveSolid.H +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/solveSolid.H @@ -9,7 +9,11 @@ if (finalIter) tmp hEqn ( fvm::ddt(betav*rho, h) - - fvm::laplacian(betav*alpha, h, "laplacian(alpha,h)") + - ( + thermo.isotropic() + ? fvm::laplacian(betav*thermo.alpha(), h, "laplacian(alpha,h)") + : fvm::laplacian(betav*tAnialpha(), h, "laplacian(alpha,h)") + ) == fvOptions(rho, h) ); diff --git a/src/thermophysicalModels/solidSpecie/transport/const/constAnIsoSolidTransport.H b/src/thermophysicalModels/solidSpecie/transport/const/constAnIsoSolidTransport.H index 60b846fd7a..718f648143 100644 --- a/src/thermophysicalModels/solidSpecie/transport/const/constAnIsoSolidTransport.H +++ b/src/thermophysicalModels/solidSpecie/transport/const/constAnIsoSolidTransport.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -111,6 +111,9 @@ public: return "constAnIso<" + Thermo::typeName() + '>'; } + //- Is the thermal conductivity isotropic + static const bool isotropic = false; + //- Isotropic thermal conductivity [W/mK] inline scalar kappa(const scalar p, const scalar T) const; diff --git a/src/thermophysicalModels/solidSpecie/transport/const/constIsoSolidTransport.H b/src/thermophysicalModels/solidSpecie/transport/const/constIsoSolidTransport.H index 5b49beab67..fc9cb4438a 100644 --- a/src/thermophysicalModels/solidSpecie/transport/const/constIsoSolidTransport.H +++ b/src/thermophysicalModels/solidSpecie/transport/const/constIsoSolidTransport.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -112,6 +112,9 @@ public: return "constIso<" + Thermo::typeName() + '>'; } + //- Is the thermal conductivity isotropic + static const bool isotropic = true; + //- Isotropic thermal conductivity [W/mK] inline scalar kappa(const scalar p, const scalar T) const; diff --git a/src/thermophysicalModels/solidSpecie/transport/exponential/exponentialSolidTransport.H b/src/thermophysicalModels/solidSpecie/transport/exponential/exponentialSolidTransport.H index 00cc81e1b3..3592626d80 100644 --- a/src/thermophysicalModels/solidSpecie/transport/exponential/exponentialSolidTransport.H +++ b/src/thermophysicalModels/solidSpecie/transport/exponential/exponentialSolidTransport.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -121,6 +121,9 @@ public: return "exponential<" + Thermo::typeName() + '>'; } + //- Is the thermal conductivity isotropic + static const bool isotropic = true; + //- Thermal conductivity [W/mK] inline scalar kappa(const scalar p, const scalar T) const; diff --git a/src/thermophysicalModels/solidThermo/solidThermo/heSolidThermo.H b/src/thermophysicalModels/solidThermo/solidThermo/heSolidThermo.H index 8d13ea6e28..146656d69e 100644 --- a/src/thermophysicalModels/solidThermo/solidThermo/heSolidThermo.H +++ b/src/thermophysicalModels/solidThermo/solidThermo/heSolidThermo.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -99,6 +99,12 @@ public: //- Anisotropic thermal conductivity [W/m/K] virtual tmp Kappa() const; + //- Return true if thermal conductivity is isotropic + virtual bool isotropic() const + { + return MixtureType::thermoType::isotropic; + } + // Per patch calculation diff --git a/src/thermophysicalModels/solidThermo/solidThermo/solidThermo.H b/src/thermophysicalModels/solidThermo/solidThermo/solidThermo.H index e3cf9b8e19..04934ca950 100644 --- a/src/thermophysicalModels/solidThermo/solidThermo/solidThermo.H +++ b/src/thermophysicalModels/solidThermo/solidThermo/solidThermo.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -144,6 +144,9 @@ public: //- Thermal conductivity [W/m/K] virtual tmp Kappa() const = 0; + //- Return true if thermal conductivity is isotropic + virtual bool isotropic() const = 0; + // Per patch calculation