CFD Online Discussion Forums

CFD Online Discussion Forums (http://www.cfd-online.com/Forums/)
-   OpenFOAM (http://www.cfd-online.com/Forums/openfoam/)
-   -   coordinate depending source term (http://www.cfd-online.com/Forums/openfoam/66243-coordinate-depending-source-term.html)

jmmeena July 9, 2009 13:55

coordinate depending source term
 
Dear Sir/Madam,

I am doing a heat transfer problem with source term. Source term itself depends on the x,y,z, coordinates. I have tried following :

Teqn:

{
fvScalarMatrix TEqn
(
(rho)*(Cp)*fvm::ddt(T)
+ fvm::div(phi, T)
- (rho)*(Cp)*fvm::laplacian(DT, T)
==
Q
);

TEqn.relax();

eqnResidual = TEqn.solve().initialResidual();
maxResidual = max(eqnResidual, maxResidual);

}


Q is source term which is defined as:

Info<< "Reading sourceProperties\n" << endl;

IOdictionary sourceProperties
(
IOobject
(
"sourceProperties",
runTime.constant(),
mesh,
IOobject::MUST_READ,
IOobject::NO_WRITE
)
);

dimensionedScalar Acos
(
sourceProperties.lookup("Acos")
);

dimensionedScalar Rcos
(
sourceProperties.lookup("Rcos")
);

dimensionedScalar Zcos
(
sourceProperties.lookup("Zcos")
);

dimensionedScalar Q("Q", Acos*cos(0.5*3.14*(sqrt((x[0]*x[0])+(x[1]*x[1])))/Rcos)*cos(0.5*3.14*x[2]/Zcos));

if (Q < 0.)
{
Q = 0.0;
}



Error:
readSourceProperties.H: In function ‘int main(int, char**)’:
readSourceProperties.H:30: erreur: ‘x’ was not declared in this scope
readSourceProperties.H:32: erreur: no match for ‘operator<’ in ‘Q < 0.0’
make: *** [Make/linux64GccDPOpt/sourceBuoyantSimpleFoam.o] Erreur 1


I thought to use x[0] for x, x[1] for y and x[2] for z ! but OpenFOAM reports error in this. Hence my question is: How to input coordinates for Q so that it OpenFOAM will understand it ?

thankyou in advance !!

regards,
JM

henrik July 12, 2009 13:44

Dear jmmeena,

1) Use mesh.C().x() for the x-coordinate

2) Your coordinate dependant source should be a volScalarField

3) Use max-function to bound Q @ zero

Henrik

isabel July 15, 2009 04:16

Thank you very much, Henrik.
I have wrotten these lines in my code:


volScalarField x = mesh.C().x();
volScalarField y = mesh.C().y();


and I have this error in these lines (line 89 and line 90):


isabel@isabel-desktop:~/OpenFOAM/isabel-1.5/applications/solvers/multiphase/interFoamModificado$ wmake
SOURCE=interFoamModificado.C ; g++ -m32 -Dlinux -DDP -Wall -Wno-strict-aliasing -Wextra -Wno-unused-parameter -Wold-style-cast -O3 -DNoRepository -ftemplate-depth-40 -I/home/isabel/OpenFOAM/OpenFOAM-1.5/src/transportModels -I/home/isabel/OpenFOAM/OpenFOAM-1.5/src/transportModels/incompressible/lnInclude -I/home/isabel/OpenFOAM/OpenFOAM-1.5/src/transportModels/interfaceProperties/lnInclude -I/home/isabel/OpenFOAM/OpenFOAM-1.5/src/finiteVolume/lnInclude -IlnInclude -I. -I/home/isabel/OpenFOAM/OpenFOAM-1.5/src/OpenFOAM/lnInclude -I/home/isabel/OpenFOAM/OpenFOAM-1.5/src/OSspecific/Unix/lnInclude -fPIC -pthread -c $SOURCE -o Make/linuxGccDPOpt/interFoamModificado.o
In file included from interFoamModificado.C:84:
pEqn.H: In function ‘int main(int, char**)’:
pEqn.H:89: error: ‘const struct Foam::GeometricField<Foam::Vector<double>, Foam::fvPatchField, Foam::volMesh>’ has no member named ‘x’
pEqn.H:90: error: ‘const struct Foam::GeometricField<Foam::Vector<double>, Foam::fvPatchField, Foam::volMesh>’ has no member named ‘y’
/home/isabel/OpenFOAM/OpenFOAM-1.5/src/finiteVolume/lnInclude/readPISOControls.H:3: warning: unused variable ‘nCorr’
make: *** [Make/linuxGccDPOpt/interFoamModificado.o] Error 1
isabel@isabel-desktop:~/OpenFOAM/isabel-1.5/applications/solvers/multiphase/interFoamModificado$

henrik July 15, 2009 04:37

Dear Isabel, dear jmmeena,

stupid me ...

vector v;
Info << v.x(); // OK

volVectorField vf;
Info << vf.component(vector::X); // OK

Henrik

isabel July 15, 2009 04:55

Thank you very much, Henrik, but with these lines:


vector v;
Info << v.x();

volVectorField vf;
Info << vf.component(vector::X);


I have this error (line 90 is “volVectorField vf;”) :


isabel@isabel-desktop:~/OpenFOAM/isabel-1.5/applications/solvers/multiphase/interFoamModificado$ wmake
Making dependency list for source file interFoamModificado.C
SOURCE=interFoamModificado.C ; g++ -m32 -Dlinux -DDP -Wall -Wno-strict-aliasing -Wextra -Wno-unused-parameter -Wold-style-cast -O3 -DNoRepository -ftemplate-depth-40 -I/home/isabel/OpenFOAM/OpenFOAM-1.5/src/transportModels -I/home/isabel/OpenFOAM/OpenFOAM-1.5/src/transportModels/incompressible/lnInclude -I/home/isabel/OpenFOAM/OpenFOAM-1.5/src/transportModels/interfaceProperties/lnInclude -I/home/isabel/OpenFOAM/OpenFOAM-1.5/src/finiteVolume/lnInclude -IlnInclude -I. -I/home/isabel/OpenFOAM/OpenFOAM-1.5/src/OpenFOAM/lnInclude -I/home/isabel/OpenFOAM/OpenFOAM-1.5/src/OSspecific/Unix/lnInclude -fPIC -pthread -c $SOURCE -o Make/linuxGccDPOpt/interFoamModificado.o
In file included from interFoamModificado.C:84:
pEqn.H: In function ‘int main(int, char**)’:
pEqn.H:90: error: no matching function for call to ‘Foam::GeometricField<Foam::Vector<double>, Foam::fvPatchField, Foam::volMesh>::GeometricField()’
/home/isabel/OpenFOAM/OpenFOAM-1.5/src/OpenFOAM/lnInclude/GeometricField.C:611: note: candidates are: Foam::GeometricField<Type, PatchField, GeoMesh>::GeometricField(const Foam::IOobject&, const Foam::GeometricField<Type, PatchField, GeoMesh>&, const Foam::wordList&) [with Type = Foam::Vector<double>, PatchField = Foam::fvPatchField, GeoMesh = Foam::volMesh]
/home/isabel/OpenFOAM/OpenFOAM-1.5/src/OpenFOAM/lnInclude/GeometricField.C:576: note: Foam::GeometricField<Type, PatchField, GeoMesh>::GeometricField(const Foam::IOobject&, const Foam::GeometricField<Type, PatchField, GeoMesh>&, const Foam::word&) [with Type = Foam::Vector<double>, PatchField = Foam::fvPatchField, GeoMesh = Foam::volMesh]
/home/isabel/OpenFOAM/OpenFOAM-1.5/src/OpenFOAM/lnInclude/GeometricField.C:545: note: Foam::GeometricField<Type, PatchField, GeoMesh>::GeometricField(const Foam::word&, const Foam::tmp<Foam::GeometricField<Type, PatchField, GeoMesh> >&) [with Type = Foam::Vector<double>, PatchField = Foam::fvPatchField, GeoMesh = Foam::volMesh]
/home/isabel/OpenFOAM/OpenFOAM-1.5/src/OpenFOAM/lnInclude/GeometricField.C:512: note: Foam::GeometricField<Type, PatchField, GeoMesh>::GeometricField(const Foam::word&, const Foam::GeometricField<Type, PatchField, GeoMesh>&) [with Type = Foam::Vector<double>, PatchField = Foam::fvPatchField, GeoMesh = Foam::volMesh]
/home/isabel/OpenFOAM/OpenFOAM-1.5/src/OpenFOAM/lnInclude/GeometricField.C:480: note: Foam::GeometricField<Type, PatchField, GeoMesh>::GeometricField(const Foam::IOobject&, const Foam::GeometricField<Type, PatchField, GeoMesh>&) [with Type = Foam::Vector<double>, PatchField = Foam::fvPatchField, GeoMesh = Foam::volMesh]
/home/isabel/OpenFOAM/OpenFOAM-1.5/src/OpenFOAM/lnInclude/GeometricField.C:448: note: Foam::GeometricField<Type, PatchField, GeoMesh>::GeometricField(const Foam::tmp<Foam::GeometricField<Type, PatchField, GeoMesh> >&) [with Type = Foam::Vector<double>, PatchField = Foam::fvPatchField, GeoMesh = Foam::volMesh]
/home/isabel/OpenFOAM/OpenFOAM-1.5/src/OpenFOAM/lnInclude/GeometricField.C:416: note: Foam::GeometricField<Type, PatchField, GeoMesh>::GeometricField(const Foam::GeometricField<Type, PatchField, GeoMesh>&) [with Type = Foam::Vector<double>, PatchField = Foam::fvPatchField, GeoMesh = Foam::volMesh]
/home/isabel/OpenFOAM/OpenFOAM-1.5/src/OpenFOAM/lnInclude/GeometricField.C:378: note: Foam::GeometricField<Type, PatchField, GeoMesh>::GeometricField(const Foam::IOobject&, const typename GeoMesh::Mesh&, Foam::Istream&) [with Type = Foam::Vector<double>, PatchField = Foam::fvPatchField, GeoMesh = Foam::volMesh]
/home/isabel/OpenFOAM/OpenFOAM-1.5/src/OpenFOAM/lnInclude/GeometricField.C:337: note: Foam::GeometricField<Type, PatchField, GeoMesh>::GeometricField(const Foam::IOobject&, const typename GeoMesh::Mesh&) [with Type = Foam::Vector<double>, PatchField = Foam::fvPatchField, GeoMesh = Foam::volMesh]
/home/isabel/OpenFOAM/OpenFOAM-1.5/src/OpenFOAM/lnInclude/GeometricField.C:313: note: Foam::GeometricField<Type, PatchField, GeoMesh>::GeometricField(const Foam::IOobject&, const typename GeoMesh::Mesh&, const Foam::dimensionSet&, const Foam::Field<Type>&, const Foam::PtrList<PatchField<Type> >&) [with Type = Foam::Vector<double>, PatchField = Foam::fvPatchField, GeoMesh = Foam::volMesh]
/home/isabel/OpenFOAM/OpenFOAM-1.5/src/OpenFOAM/lnInclude/GeometricField.C:283: note: Foam::GeometricField<Type, PatchField, GeoMesh>::GeometricField(const Foam::IOobject&, const typename GeoMesh::Mesh&, const Foam::dimensioned<Type>&, const Foam::wordList&) [with Type = Foam::Vector<double>, PatchField = Foam::fvPatchField, GeoMesh = Foam::volMesh]
/home/isabel/OpenFOAM/OpenFOAM-1.5/src/OpenFOAM/lnInclude/GeometricField.C:254: note: Foam::GeometricField<Type, PatchField, GeoMesh>::GeometricField(const Foam::IOobject&, const typename GeoMesh::Mesh&, const Foam::dimensioned<Type>&, const Foam::word&) [with Type = Foam::Vector<double>, PatchField = Foam::fvPatchField, GeoMesh = Foam::volMesh]
/home/isabel/OpenFOAM/OpenFOAM-1.5/src/OpenFOAM/lnInclude/GeometricField.C:227: note: Foam::GeometricField<Type, PatchField, GeoMesh>::GeometricField(const Foam::IOobject&, const typename GeoMesh::Mesh&, const Foam::dimensionSet&, const Foam::wordList&) [with Type = Foam::Vector<double>, PatchField = Foam::fvPatchField, GeoMesh = Foam::volMesh]
/home/isabel/OpenFOAM/OpenFOAM-1.5/src/OpenFOAM/lnInclude/GeometricField.C:197: note: Foam::GeometricField<Type, PatchField, GeoMesh>::GeometricField(const Foam::IOobject&, const typename GeoMesh::Mesh&, const Foam::dimensionSet&, const Foam::word&) [with Type = Foam::Vector<double>, PatchField = Foam::fvPatchField, GeoMesh = Foam::volMesh]
/home/isabel/OpenFOAM/OpenFOAM-1.5/src/finiteVolume/lnInclude/readPISOControls.H:3: warning: unused variable ‘nCorr’
make: *** [Make/linuxGccDPOpt/interFoamModificado.o] Error 1
isabel@isabel-desktop:~/OpenFOAM/isabel-1.5/applications/solvers/multiphase/interFoamModificado$

henrik July 15, 2009 05:06

Dear Isabel,

Quote:

class xyz;
was meant as a forward declaration and only actually works if the class has a null constructor and volVectorField does not. I just tried to say: "Given a volVectorField, do something like this".

Okay, you want to try:

Quote:

volScalarField x = mesh.C().component(vector::X);
volScalarField y = mesh.C().component(vector::Y);
Henrik

isabel July 15, 2009 05:18

Thank you very much, Henrik.
Now it works.


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