# coordinate depending source term

 Register Blogs Members List Search Today's Posts Mark Forums Read

 July 9, 2009, 13:55 coordinate depending source term #1 Member   Jagmohan Meena Join Date: May 2009 Posts: 30 Rep Power: 16 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

 July 12, 2009, 13:44 #2 Senior Member   Henrik Rusche Join Date: Mar 2009 Location: Wernigerode, Sachsen-Anhalt, Germany Posts: 281 Rep Power: 18 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

 July 15, 2009, 04:16 #3 Senior Member   isabel Join Date: Apr 2009 Location: Spain Posts: 171 Rep Power: 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::fvPatchField, Foam::volMesh>’ has no member named ‘x’ pEqn.H:90: error: ‘const struct Foam::GeometricField, 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\$

 July 15, 2009, 04:37 #4 Senior Member   Henrik Rusche Join Date: Mar 2009 Location: Wernigerode, Sachsen-Anhalt, Germany Posts: 281 Rep Power: 18 Dear Isabel, dear jmmeena, stupid me ... vector v; Info << v.x(); // OK volVectorField vf; Info << vf.component(vector::X); // OK Henrik

 July 15, 2009, 04:55 #5 Senior Member   isabel Join Date: Apr 2009 Location: Spain Posts: 171 Rep Power: 16 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::fvPatchField, Foam::volMesh>::GeometricField()’ /home/isabel/OpenFOAM/OpenFOAM-1.5/src/OpenFOAM/lnInclude/GeometricField.C:611: note: candidates are: Foam::GeometricField::GeometricField(const Foam::IOobject&, const Foam::GeometricField&, const Foam::wordList&) [with Type = Foam::Vector, PatchField = Foam::fvPatchField, GeoMesh = Foam::volMesh] /home/isabel/OpenFOAM/OpenFOAM-1.5/src/OpenFOAM/lnInclude/GeometricField.C:576: note: Foam::GeometricField::GeometricField(const Foam::IOobject&, const Foam::GeometricField&, const Foam::word&) [with Type = Foam::Vector, PatchField = Foam::fvPatchField, GeoMesh = Foam::volMesh] /home/isabel/OpenFOAM/OpenFOAM-1.5/src/OpenFOAM/lnInclude/GeometricField.C:545: note: Foam::GeometricField::GeometricField(const Foam::word&, const Foam::tmp >&) [with Type = Foam::Vector, PatchField = Foam::fvPatchField, GeoMesh = Foam::volMesh] /home/isabel/OpenFOAM/OpenFOAM-1.5/src/OpenFOAM/lnInclude/GeometricField.C:512: note: Foam::GeometricField::GeometricField(const Foam::word&, const Foam::GeometricField&) [with Type = Foam::Vector, PatchField = Foam::fvPatchField, GeoMesh = Foam::volMesh] /home/isabel/OpenFOAM/OpenFOAM-1.5/src/OpenFOAM/lnInclude/GeometricField.C:480: note: Foam::GeometricField::GeometricField(const Foam::IOobject&, const Foam::GeometricField&) [with Type = Foam::Vector, PatchField = Foam::fvPatchField, GeoMesh = Foam::volMesh] /home/isabel/OpenFOAM/OpenFOAM-1.5/src/OpenFOAM/lnInclude/GeometricField.C:448: note: Foam::GeometricField::GeometricField(const Foam::tmp >&) [with Type = Foam::Vector, PatchField = Foam::fvPatchField, GeoMesh = Foam::volMesh] /home/isabel/OpenFOAM/OpenFOAM-1.5/src/OpenFOAM/lnInclude/GeometricField.C:416: note: Foam::GeometricField::GeometricField(const Foam::GeometricField&) [with Type = Foam::Vector, PatchField = Foam::fvPatchField, GeoMesh = Foam::volMesh] /home/isabel/OpenFOAM/OpenFOAM-1.5/src/OpenFOAM/lnInclude/GeometricField.C:378: note: Foam::GeometricField::GeometricField(const Foam::IOobject&, const typename GeoMesh::Mesh&, Foam::Istream&) [with Type = Foam::Vector, PatchField = Foam::fvPatchField, GeoMesh = Foam::volMesh] /home/isabel/OpenFOAM/OpenFOAM-1.5/src/OpenFOAM/lnInclude/GeometricField.C:337: note: Foam::GeometricField::GeometricField(const Foam::IOobject&, const typename GeoMesh::Mesh&) [with Type = Foam::Vector, PatchField = Foam::fvPatchField, GeoMesh = Foam::volMesh] /home/isabel/OpenFOAM/OpenFOAM-1.5/src/OpenFOAM/lnInclude/GeometricField.C:313: note: Foam::GeometricField::GeometricField(const Foam::IOobject&, const typename GeoMesh::Mesh&, const Foam::dimensionSet&, const Foam::Field&, const Foam::PtrList >&) [with Type = Foam::Vector, PatchField = Foam::fvPatchField, GeoMesh = Foam::volMesh] /home/isabel/OpenFOAM/OpenFOAM-1.5/src/OpenFOAM/lnInclude/GeometricField.C:283: note: Foam::GeometricField::GeometricField(const Foam::IOobject&, const typename GeoMesh::Mesh&, const Foam::dimensioned&, const Foam::wordList&) [with Type = Foam::Vector, PatchField = Foam::fvPatchField, GeoMesh = Foam::volMesh] /home/isabel/OpenFOAM/OpenFOAM-1.5/src/OpenFOAM/lnInclude/GeometricField.C:254: note: Foam::GeometricField::GeometricField(const Foam::IOobject&, const typename GeoMesh::Mesh&, const Foam::dimensioned&, const Foam::word&) [with Type = Foam::Vector, PatchField = Foam::fvPatchField, GeoMesh = Foam::volMesh] /home/isabel/OpenFOAM/OpenFOAM-1.5/src/OpenFOAM/lnInclude/GeometricField.C:227: note: Foam::GeometricField::GeometricField(const Foam::IOobject&, const typename GeoMesh::Mesh&, const Foam::dimensionSet&, const Foam::wordList&) [with Type = Foam::Vector, PatchField = Foam::fvPatchField, GeoMesh = Foam::volMesh] /home/isabel/OpenFOAM/OpenFOAM-1.5/src/OpenFOAM/lnInclude/GeometricField.C:197: note: Foam::GeometricField::GeometricField(const Foam::IOobject&, const typename GeoMesh::Mesh&, const Foam::dimensionSet&, const Foam::word&) [with Type = Foam::Vector, 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\$

July 15, 2009, 05:06
#6
Senior Member

Henrik Rusche
Join Date: Mar 2009
Location: Wernigerode, Sachsen-Anhalt, Germany
Posts: 281
Rep Power: 18
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

 July 15, 2009, 05:18 #7 Senior Member   isabel Join Date: Apr 2009 Location: Spain Posts: 171 Rep Power: 16 Thank you very much, Henrik. Now it works.