multiplication of scalar and volVectorField
Hi,
I use following two methods in order to get the multiplication of Reynolds number and drag coefficient. (Drag coefficient, Cd, here is assumed constant scalar here for convenience) Code:
Re = (magUr*dp*rhoa)/mua; Code:
Re = (magUr*dp*rhoa)/mua; However, when I use these two code parts, I get different velocity field results at the end. Are these two code parts exactly the same? or can they give different results when I, let's say, interpolate them? |
Are you sure you're dealing with a volVectorField? I didn't think you could access the internal field directly with operator[], I thought you had to use Re.field() or Re.dimensionedField() first.
You could be missing the operations on the boundaryField. If you are dealing with vectorFields and vectors, the two pieces of code you show are equivalent, except that the indexed loop is about 10x slower. The operators are optimized with fancy pointer loops, register keywords, and special accommodations for vector machines. |
Dear David,
I am terribly sorry, now I noticed it. It is volScalarField, of course, not volVectorField. Indeed, at the end, velocity field at the outlet is wrong if I use the second method. So, can it be due to the fact that I do not update the boundary field? Let me explain it a little more: I am using a modified version of bubbleFoam, where I changed the definition of drag coefficient and relative reynolds number. When I use the first example above, my velocity field is reasonable. However, this option does not allow me to modify the Cd*Re cell by cell. But when I use the second example, although it should do the same effect, it does not. Velocity values are not correct at the outlet boundary. So, do you think it may be because I do not update the boundary field? How can I get the same results in both cases? Thank you |
What I want to do is this:
Let's say I have a volScalarField Re: Code:
FoamFile I want to modify CdRe cell by cell depending on the Re values, so that I can use it in my equations. |
I may have solved it.
I added this line after forall loop: CdRe.correctBoundaryConditions(); Now it seems to be working fine. Thank you! |
You should try to stay away from indexed loops on the internal field whenever possible. They are slow. Try to use full-field operators.
|
All times are GMT -4. The time now is 16:41. |