
[Sponsors] 
April 21, 2011, 16:22 
Using source term in OpenFOAM

#1 
New Member
Join Date: Apr 2011
Posts: 7
Rep Power: 6 
Hi,
I am new to CFD and OpenFOAM. I am trying to learn OpenFOAM and creating a simple problem and solve it using OpenFOAM. I would like to solve a steadystate 2d poisson problem, similar to Laplacian(U) = 50 * (x + y) where x and y are the coordinates of cell centers. I am not sure how to represent the source term in the OpenFOAM program. I have represented this equation in my solver application as Code:
volScalarField x = U.mesh().C() & vector(1,0,0); volScalarField y = U.mesh().C() & vector(0,1,0); fvVectorMatrix UEqn ( fvm::laplacian(U) == 50 * (x + y) ); UEqn.solve(); "note: no known conversion for argument 1 from ‘Foam::tmp<Foam::fvMatrix<Foam::Vector<double> > >’ to ‘const Foam::instant&’" What is the right way to specify the source terms in the equation? Thanks in advance. 

April 22, 2011, 08:32 

#2 
Senior Member
Cyprien
Join Date: Feb 2010
Location: Stanford University
Posts: 232
Rep Power: 9 
Hi! and welcome on board
your first error is obvious : You add x and y which are scalarFields whereas laplacian(U) is a vectorField ! You should define x and y as volVectorField ! Best, Cyp 

April 22, 2011, 13:51 

#3 
New Member
Join Date: Apr 2011
Posts: 7
Rep Power: 6 
Cyp,
Thanks a lot for the reply.. I have modified the problem to convert the scalar to vector. Code:
volScalarField x = U.mesh().C() & vector(1,0,0); volScalarField y = U.mesh().C() & vector(0,1,0); dimensionedScalar fifty ( "fifty", dimensionSet(0, 2, 1, 0, 0, 0 ,0), 50.0 ); fvVectorMatrix UEqn ( fvm::laplacian(U) == (fifty * (x + y)) * vector(1,0,0) ); But, if I try to modify the source term to contain exponential, it compiles correctly, but fails to run with the following error: Code:
fvVectorMatrix UEqn ( fvm::laplacian(U) == (exp(fifty * (x + y))) * vector(1,0,0) ); Code:
> FOAM FATAL ERROR: Argument of trancendental function not dimensionless From function trans(const dimensionSet& ds) in file dimensionSet/dimensionSet.C at line 370. Also, is the above method the right way to compute the source term for the equation, or are there any better ways to compute and pass it to the equation? Thank you. 

April 22, 2011, 15:51 

#4 
Senior Member
Cyprien
Join Date: Feb 2010
Location: Stanford University
Posts: 232
Rep Power: 9 
are you sure about your differential equation ? in my opinion, you have something wrong. indeed, the inside of exponential must be unitless! In the other side, your source term ought to have the same dimension than laplacian(U).


April 22, 2011, 16:59 

#5 
New Member
Join Date: Apr 2011
Posts: 7
Rep Power: 6 
Cyp,
My governing eqn. is a second order pde of the form Laplacian(phi) = exp(fifty * (x + y)) where, x and y are the coordinates of the points on the 2D plate. x and y are actually dimensionless quantities I have used the following operations to extract these coordinates, which returns me a dimensional quantity in meters. Code:
volScalarField x = U.mesh().C() & vector(1,0,0); volScalarField y = U.mesh().C() & vector(0,1,0); Thank you 

April 25, 2011, 08:56 

#6  
Senior Member
Mirko Vukovic
Join Date: Mar 2009
Posts: 159
Rep Power: 8 
Quote:


April 25, 2011, 13:51 

#7 
New Member
Join Date: Apr 2011
Posts: 7
Rep Power: 6 
Thanks Mirko.. taking the fifty as inverse meters worked.


April 25, 2011, 14:33 

#8 
Senior Member
Mirko Vukovic
Join Date: Mar 2009
Posts: 159
Rep Power: 8 

April 25, 2011, 14:53 

#9 
New Member
Join Date: Apr 2011
Posts: 7
Rep Power: 6 
Sure..
I have attached the solver files.. I am completely new to OpenFoam (this is my first code written in openfoam).. so the code is pretty immature and dumb.. I will also be happy to hear suggestions and better alternatives for the code.. 

April 25, 2011, 19:13 

#10 
New Member
Join Date: Apr 2011
Posts: 7
Rep Power: 6 
Similar to the equation for the source term, I would also like to specify the equations for the boundary conditions, which depends on the coordinates of the cells, like,
boundary value at south edge is 100x; where x is the xcoordinate of the face center. Where should I specify those equations? Do I need to set the boundaryField type as "calculated" and specify the equations in the solver? or should I add the equations in the dictionary file itself? Thanks. 

April 26, 2011, 09:42 

#11  
Senior Member
Mirko Vukovic
Join Date: Mar 2009
Posts: 159
Rep Power: 8 
Quote:
Note: to get the y coordinate, this should work: scalarField y = patch().Cf().component(1); Remember to compile it using `> wmake libso', not just `> wmake'. Good luck. Mirko 

April 26, 2011, 11:01 

#12 
Senior Member
Bernhard
Join Date: Sep 2009
Location: Delft
Posts: 790
Rep Power: 13 
For the boundary condition. It would save you a lot of time if you use the groovyBC library. You can use easy expressions for the value or the gradient of a variable at the boundary.
You now hardcoded the source term in your solver, but that really makes your solver casespecific, which is usually unwanted. You can also easily define a field (see createFields), which you use as a source term. This sourcefield can then be set in your casedirectory 0/. (using funkySetFields) By the way, funkySetFields and groovyBC are combined in swak4Foam. 

April 26, 2011, 15:45 

#13 
New Member
Join Date: Apr 2011
Posts: 7
Rep Power: 6 
Mirko and Bernhard,
Thank you very much for the reply.. I will look into the swak4Foam library... 

August 7, 2011, 08:51 
Dear user369

#14  
Senior Member
Join Date: Jun 2011
Posts: 141
Rep Power: 6 
Quote:
can you send me test case file for your solver? also I think it better that you specify the U as a scalar not vector why you specify U as a vector ? Best Regards 

Thread Tools  
Display Modes  


Similar Threads  
Thread  Thread Starter  Forum  Replies  Last Post 
swak4foam building problem  GGerber  OpenFOAM Installation  54  April 24, 2015 16:02 
Large source term in species equation  MACFD  FLUENT  4  January 4, 2011 15:16 
Compiling gmshFoam with OpenFOAM1.5  BlGene  Open Source Meshers: Gmsh, Netgen, CGNS, ...  10  August 6, 2009 04:26 
gradient source term UDF  ak6g08  Fluent UDF and Scheme Programming  0  July 9, 2009 06:37 
UDFs for Scalar Eqn  Fluid/Solid HT  Greg Perkins  FLUENT  0  October 11, 2000 03:43 