# Implementing an Equation

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

 March 3, 2013, 01:25 Implementing an Equation #1 New Member   Join Date: Apr 2012 Posts: 21 Rep Power: 5 Hi FOAMERS Do you know the simplest way to implement equation "dC/dt + grad(CL).V = 0", where C and CL are scalar and V is the velocity vector?

 March 3, 2013, 17:02 #2 Senior Member     Daniel P. Combest Join Date: Mar 2009 Location: St. Louis, USA Posts: 543 Rep Power: 18 This could be done as Code: fvScalarMatrix CEqn ( fvm::ddt(C) + U & fvc::grad(CL) ); CEqn.solve(); But the two variables C and CL are going to be explicitly coupled since grad is explicit. If in fact CL was actually some other variable related to C, say C+C0 then you could be more clever and do something like Code: fvScalarMatrix CEqn ( fvm::ddt(C) + fvm::div(phi,C) + fvm::SuSp(-fvc::div(phi),C) + U & fvc::grad(C0) ); CEqn.solve(); where this is a more conservative form of your original equation, that of course will work if CL is actually C plus something else. I'm not sure what you are working on....so I'm just throwing things out there at this point . wyldckat, Yahoo, sharonyue and 1 others like this. __________________ Dan Find me on twitter @dancombest and LinkedIn

 March 5, 2013, 13:44 #3 New Member   Join Date: Apr 2012 Posts: 21 Rep Power: 5 Daniel Thanks for your answer. In my case C = (gL + kp*(1-gL))CL, where gL is a volScalaerField and kp is constant. You have any ideas of the best way to implement this? By the way, can you explain why adding term "fvm::SuSp(-fvc::div(phi),C)" makes it more conservative? Last edited by Yahoo; March 5, 2013 at 14:01.

March 5, 2013, 14:33
#4
Senior Member

Daniel P. Combest
Join Date: Mar 2009
Location: St. Louis, USA
Posts: 543
Rep Power: 18
Quote:
 By the way, can you explain why adding term "fvm::SuSp(-fvc::div(phi),C)" makes it more conservative?
The conservative (strong) form of the advection operator is

the

Code:
fvm::SuSp(-fvc::div(phi),C)
is just

If there is incomplete convergence in your momentum portion of your solver, this will account for that fact. For a completely converged velocity field, this term will approach zero for an incompressible fluid (i.e. by the nature of continuity). Take a look at the thread origin of fvm::Sp(fvc::div(phi_), epsilon_) in kepsilon Eqn? and the post ScalarTransportFoam for RTD calculations. This is also implemented in the k-epsilon turbulence models if you would like to look at them.
__________________
Dan

Last edited by chegdan; March 5, 2013 at 15:13.

 March 6, 2013, 02:35 #5 Senior Member   Mahdi Hosseinali Join Date: Apr 2009 Posts: 124 Rep Power: 8 Dear chegdan, I believe the left side of your equation is conservative form, the right side is called primitive form. The reason for the name comes from gas dynamics and passing through the shocks. When you use the left hand side (consider C as as rho) passing through the shock your momentum will remain constant, however on your right hand side every term experiences a severe gradient which makes numerical instabilities in presence of shock. PS: I'm speaking in the context of gas dynamics, please let me know if I'm wrong. chegdan likes this.

March 12, 2013, 13:08
#6
Senior Member

Daniel P. Combest
Join Date: Mar 2009
Location: St. Louis, USA
Posts: 543
Rep Power: 18
Quote:
 I believe the left side of your equation is conservative form, the right side is called primitive form. The reason for the name comes from gas dynamics and passing through the shocks. When you use the left hand side (consider C as as rho) passing through the shock your momentum will remain constant, however on your right hand side every term experiences a severe gradient which makes numerical instabilities in presence of shock.
Thanks! Nice to learn some new lingo.
__________________
Dan