CFD Online Discussion Forums

CFD Online Discussion Forums (http://www.cfd-online.com/Forums/)
-   OpenFOAM Running, Solving & CFD (http://www.cfd-online.com/Forums/openfoam-solving/)
-   -   Ek decay (http://www.cfd-online.com/Forums/openfoam-solving/60086-ek-decay.html)

michso July 31, 2006 16:59

I am trying to adjust dnsFoam
 
I am trying to adjust dnsFoam to calculate the decay of turbulence (in space). For that, in my domain (say 32, 16, 16 - with inlet bc) the turbulence forcing is active in the first half only (1:16,1:16,1:16), the other part should be calculated without the extra source term. How can I do that in a compact and elegant way? Some CFD codes allow to define different fluid zones, is that a case with OF? I've got no experience with OF and need some help

Regards,
Mick

sampaio July 31, 2006 17:17

A possible way to do this (far
 
A possible way to do this (far from clever, tough http://www.cfd-online.com/OpenFOAM_D...lipart/sad.gif ) is to create a new scalar field (say, alpha) to act like a switch:
it is 0 outside your forcing subdomain and 1 inside.

Then you set the initial conditions accordingly and never change this variable (alpha).

In the main code, you multiply alpha by the force, and that's it.

Cheers,
luiz

mattijs July 31, 2006 17:17

Please post your message under
 
Please post your message under one topic only.

Mattijs

michso August 1, 2006 06:12

Luiz, That's indeed my questi
 
Luiz,
That's indeed my question. How to create such a scalar field to be 1 in the first half of the domain and 0 in the second. Could you give me an example?

Regards,
Mick

sampaio August 1, 2006 07:13

Add your switch variable (alph
 
Add your switch variable (alpha) to createFields.H

volScalarField alpha
(
IOobject
(
"alpha",
runTime.timeName(),
mesh,
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
mesh
);


Your "0" directory must now contain initial value for this variable all over the domain. Set it to 0 over all domain and boundary conditions.

Then, create a auxiliar case, whose geometry is exactly that of your forcing subdomain. Construct such a case and set alpha = 1 in all this auxiliary geometry (case).

Use mapFields utility to map fields from the auxiliary case to the real one:

mapFields . auxiliar_case . real_case

This way, your variable alph (dont forget to alter mapFieldsDict accordingly) will now be 1 in the region coincident with the auxiliar case geometry and 0 elsewhere.

Then, run the case (real one)

Good luck

pierre August 1, 2006 07:17

the setFields utility might be
 
the setFields utility might be helpful. Have a look at the dam break tutorial for the interFoam solver. You can also look at the guide. Hope this helps.

michso August 1, 2006 09:59

Luiz, Pierre, Thanks a lot fo
 
Luiz, Pierre,
Thanks a lot for your prompt reactions and valuable remarks. I think that now I will be able to go further with my project.

Cheerio,
M

michso August 1, 2006 16:24

Guys, What is great about our
 
Guys,
What is great about our life is that solving one problem creates at least 2 new ;-).
Anyway, I simply overlooked that Kmesh generates the forcing field based on the entire geometry. My idea is to generate non-zero forcing for the half of my domain only (e.g. 16 16 16) and solve the problem in a bigger domain (32 16 16). As mentioned in the first post I have got no experience with OF and rather little with C programming (especially using OF macros). Does anyone know how to fool Kmesh and consequently UOprocess to take only the half of my domain to generate forcing?

Regards,
Mick


All times are GMT -4. The time now is 20:34.