CFD Online Discussion Forums (http://www.cfd-online.com/Forums/)
-   OpenFOAM Programming & Development (http://www.cfd-online.com/Forums/openfoam-programming-development/)

 sahm April 26, 2011 19:16

Hi
Has any body ever tried to understand the source code of WaveTransmissive and Advective Boundary conditions?
I have studied the paper by Poinsot and Lele and its relative papers, But i don't understand how the code does the method in the paper, can any body describe the parts of the code to me? specifically I would like to know what are refValue() and valueFraction().
Yours.

 cosimobianchini April 27, 2011 03:54

That notation is consistent with the notation of the base class: mixedFvPatchField<Type>.
It is substantially a linear combination of a fixedValue and a fixedGradient with coefficient valueFraction.
The formula implemented on the boundary is:

VF=valueFraction
FV= fixedValue coeffs

Expanding all the terms for the advective and waveTransmissive you will obtain an equation of the form of the NSCE (Eq.9:13 in Poinsot and Lele, "Boundary conditions for direct simulations of compressible viscous flow", J. Computational Physics 101 (104-129), 1992) without transverse and diffusive terms recovering the LODI relations as expressed in Eq.24:28 of the same paper.
Furthermore a Linear Relaxation Method similar to Eq.40 is implemented exploiting lInf and fieldInf.
In case of inviscid one-dimensional behavior on the boundary you only have to select the correct advection speed for each of uknown you are solving.

Hope you find this information useful,
Cosimo

 giovanni10 January 24, 2012 11:33

The waveTransmissive BC

The goal in many wave-dominated flows, such as high Mach number flow, is to have boundary conditions that do not reflect waves. Walls are reflective, but inlets and outlets are generally not supposed to reflect waves.

The waveTransmissive BC attempts to reconstruct this kind of non-reflective scheme, but in a simpler fashion without full inter-field coupling. Here is an example of how it is used for a pressure outflow boundary.

outflow
{

type waveTransmissive; value uniform 80000; //important for correct I/O

field p; //the name of the field that we are working on

gamma 1.4; //the ratio of specific heats

phi phiv; //the name of the volumetric flux field ( or if you use the mass flux phi, it will be divided by rho)

rho rho; //the name of the density field

psi psi; //the name of the field that is the deriv. of density with respect to pressure

lInf 0.05; //a measure of how far away the far-field condition should be

fieldInf 80000; //the far-field value to be applied to p

}

 immortality January 26, 2013 04:12

is waveTransmissive same as pressure farfield in fluent?
Then how does advective BC work?
Whats the difference between these three BC's?

 fportela August 22, 2013 15:06

Quote:
 Originally Posted by immortality (Post 404145) is waveTransmissive same as pressure farfield in fluent? Then how does advective BC work? Whats the difference between these three BC's?
Hi Eshan,

If you look at the source code of waveTransmissive boundary condition, you see that it calls the advective boundary condition which in turn calls mixed boundary condition.

What I think happens (someone correct me if I'm wrong) is the following: a mixed (Robin) boundary condition is applied to a given variable by means of imposing some fraction (fractionValue in the source code) of fixed value and some fraction (1-fractionValue) of zero gradient. To do this, we need a reference value (to go in the fixed value part) and a value for the fraction which are computed in the advection boundary condition, in turn, for the advection boundary condition to give us an appropriate value for the reference field and the "fraction", it requires an advection velocity, which is computed in waveTransmissive as the velocity of the right running acoustic wave (normal velocity + sound speed).

What I fail to understand is how this is related in any way to the LODI of Poinsot and Lele as mentioned in the wiki. More specifically, the LODI are based on matching characteristic waves across the boundaries, and the boundary conditions are applied in terms of this wave strengths.

Hope this clarifies things a bit ;)

 cosimobianchini August 23, 2013 04:18

Well the concept of advective bc is, as you said, to calculate valueFraction, refValue and refGrad in order to respect on the boundary the following constraint:
df/dt+U*df/dn=0
where f is the generic variable we want to solve for, t is time, U is a convection velocity and n is patch normal vector.
Now you see that if you neglect interfield interaction, transverse and diffusive contribution this equation looks like NSE on the boundary (actually 1D Euler equation).
As stated in the wiki
Quote:
 the waveTransmissive BC attempts to reconstruct this kind of non-reflective scheme, but in a simpler fashion without full inter-field coupling.
this is not a full implementation of NSCBC but rather an attempt to make something simple which works well for most of the cases. In fact the problem of reflection on the boundary always exists in case of direct resolution of turbulent flows (and not only) but generally it is not a strict requirement for reflection to be 0 but rather it is sufficient that the amount of energy reflected is negligible compared to self-generated waves within the domain.
Furthermore for realistic cases you have to provide and maintain prescribed mean values, this is achieved by means of Linear Relaxation Method which solve for df/dt+U*df/dn=K(f_inf-f). WaveTransmissibe require the assignement of a reference field value (fieldInf = f_inf) and a distance where the field could be realistically be assumed unperturbed (lInf). From such value the reflectivity coefficient is calculated following K=U/lInf.
Cheers,
Cosimo

 epi_c October 10, 2014 22:03

Hi All,

I have a question. Why advectionSpeed() use phip/(rhop*this->patch().magSf()) or phip/this->patch().magSf() but not simply use:

return this->patch().template lookupPatchField<surfaceVectorField, vector>(UName_);

where UName_ being U.

 infinity August 25, 2015 05:41

Hi guys
I'm trying to change the convective velocity (Un) in advective BC. The default is 1 and I wanna change it to 0.8

any Idea?

 openfoammaofnepo November 15, 2015 06:15

Dear Cosimo,

I am a little bit curious what is the relation between the following two equations: (one is from the OpenFOAM implementation and one is from the general theory):

Code:

`VF*FV+(1-VF)*FG*delta=VF*refValue+(1-VF)*refGrad`
and
Code:

`df/dt+U*df/dn=0`
I found that the refValue has the time related information, which is shown as follows:

Code:

`            this->refValue() =                                            (                                                field.oldTime().boundaryField()[patchi] + k*fieldInf_                                            )/(1.0 + k);`
But this is not df/dt as all.