CFD Online Discussion Forums

CFD Online Discussion Forums (https://www.cfd-online.com/Forums/)
-   OpenFOAM Programming & Development (https://www.cfd-online.com/Forums/openfoam-programming-development/)
-   -   Calculating viscosity as a function of alpha (https://www.cfd-online.com/Forums/openfoam-programming-development/242738-calculating-viscosity-function-alpha.html)

aliyah. May 8, 2022 12:43

Calculating viscosity as a function of alpha
 
Hello

I want to modify the thermoPhysicalModels library in a way that by changing alpha, viscosity change.
The problem is alpha should be read from mesh and mesh should be defined in defining mu.

The original mu definition that I want to change is located in

openfoam2006/src/thermophysicalModels/specie/transport/polynomial/polynomialTransportI.H

as follow:

Code:

template<class Thermo, int PolySize>
inline Foam::scalar Foam::polynomialTransport<Thermo, PolySize>::mu
(
    const scalar p,
    const scalar T
) const
{
    return muCoeffs_.value(T);
}

So I wan to change it to something like

Code:

template<class Thermo, int PolySize>
inline Foam::scalar Foam::polynomialTransport<Thermo, PolySize>::mu
(
    const scalar p,
    const scalar T
) const
{

const fvMesh& mesh;
const volScalarField& alphaL_ = mesh.lookupObject<volScalarField>("alpha.liquid");
scalar liquidVolume = fvc::domainIntegrate(alphaL_).value();

    return muCoeffs_.value(T)/liquidVolume;
}

It will be compiled, but the mesh must be initialized; without initialization, the solver will not work when we attempt to use it.

I looked at some other codes in openfoam and initializing mesh can be done by a code like

Code:

const fvMesh& mesh = alpha1_.mesh();
I tried

Code:

const fvMesh& mesh = this->mesh();

it is not working because this does not have a member named mesh, or .

Code:

const fvMesh& mesh = T.mesh();
which obviously wrong because T is scalar.

So any suggestion how I can initialize mesh here?

überschwupper May 12, 2022 01:50

Hey,


I'm not sure if this will help you but this is how I would proceed:


This class is templated by a template class Thermo, the constructor of Thermo gets called in the initialisation list. The thermo s are obiously constructed with the input parameter "mesh", but there is no reference variable which stores the adress of mesh (which also means it wont get inherited). Thats where I think you have to go via one of the Field variables, because they store it (take a look at GeomtricField class)


I would try to get the mesh initialised by Thermo::T_.mesh() or by calling the return function Thermo.T().mesh().


I really hope that will help you, but I'm also kind of new in this field :o



Quote:

Originally Posted by aliyah. (Post 827640)
Hello

I want to modify the thermoPhysicalModels library in a way that by changing alpha, viscosity change.
The problem is alpha should be read from mesh and mesh should be defined in defining mu.

The original mu definition that I want to change is located in

openfoam2006/src/thermophysicalModels/specie/transport/polynomial/polynomialTransportI.H

as follow:

Code:

template<class Thermo, int PolySize>
inline Foam::scalar Foam::polynomialTransport<Thermo, PolySize>::mu
(
    const scalar p,
    const scalar T
) const
{
    return muCoeffs_.value(T);
}

So I wan to change it to something like

Code:

template<class Thermo, int PolySize>
inline Foam::scalar Foam::polynomialTransport<Thermo, PolySize>::mu
(
    const scalar p,
    const scalar T
) const
{

const fvMesh& mesh;
const volScalarField& alphaL_ = mesh.lookupObject<volScalarField>("alpha.liquid");
scalar liquidVolume = fvc::domainIntegrate(alphaL_).value();

    return muCoeffs_.value(T)/liquidVolume;
}

It will be compiled, but the mesh must be initialized; without initialization, the solver will not work when we attempt to use it.

I looked at some other codes in openfoam and initializing mesh can be done by a code like

Code:

const fvMesh& mesh = alpha1_.mesh();
I tried

Code:

const fvMesh& mesh = this->mesh();
it is not working because this does not have a member named mesh, or .

Code:

const fvMesh& mesh = T.mesh();
which obviously wrong because T is scalar.

So any suggestion how I can initialize mesh here?


aliyah. May 13, 2022 03:54

Quote:

Originally Posted by überschwupper (Post 827865)
Hey,


I'm not sure if this will help you but this is how I would proceed:


This class is templated by a template class Thermo, the constructor of Thermo gets called in the initialisation list. The thermo s are obiously constructed with the input parameter "mesh", but there is no reference variable which stores the adress of mesh (which also means it wont get inherited). Thats where I think you have to go via one of the Field variables, because they store it (take a look at GeomtricField class)


I would try to get the mesh initialised by Thermo::T_.mesh() or by calling the return function Thermo.T().mesh().


I really hope that will help you, but I'm also kind of new in this field :o

I appreciate your ideas. I have tried both of your suggestions, but they are both unsuccessful. This is because neither Thermo nor the Thermo::T template class have access to mesh.


All times are GMT -4. The time now is 07:04.