CFD Online Discussion Forums (http://www.cfd-online.com/Forums/)
-   OpenFOAM (http://www.cfd-online.com/Forums/openfoam/)

 mmkr825 March 19, 2013 02:42

Hi Foamers,
I am using OpenFOAM2.1.1 version. My solver is steady state and i prepared it by modifying "simpleFoam" solver. I am facing problem with boundary condition for the scalar field (lets say T).
The governing equation for the field T as follows:
Code:
solve ( fvm::div(phi, T) + fvc::div(J) );
At the fixed Walls i need to apply zero flux boundary condition. In the above equation "J" is the flux. So i need to apply J.n=0 at fixed walls. I have little experienced in handling "groovyBC".
Can anyone help me how to write this expression. Thanks in advance.

Regards
M Mallikarjuna Reddy

 gschaider March 19, 2013 06:04

Quote:
 Originally Posted by mmkr825 (Post 414869) Hi Foamers, I am using OpenFOAM2.1.1 version. My solver is steady state and i prepared it by modifying "simpleFoam" solver. I am facing problem with boundary condition for the scalar field (lets say T). The governing equation for the field T as follows: Code: solve ( fvm::div(phi, T) + fvc::div(J) ); At the fixed Walls i need to apply zero flux boundary condition. In the above equation "J" is the flux. So i need to apply J.n=0 at fixed walls. I have little experienced in handling "groovyBC". Can anyone help me how to write this expression. Thanks in advance. Regards M Mallikarjuna Reddy
And J is related to T how?

Assuming that J is a surface field then fvc::div(J) only uses the values on the boundary patches (the situation is not better if J is a volume-field).

Anyway: if you're not doing completely different physics to somebody else then J is somehow related to grad(T) which makes the second term boil down to something like laplacian(lambda,T) for which you can use the fvm-form which makes everything much more stable.

If J is completely unrelated to T then only the actual value of div(J) in the cells matters for the solution of the T-equation and if J is a vector and J=(0,0,0) is not good enough for you then a slip-boundary condition is sufficient

 mmkr825 March 19, 2013 07:57

Quote:
 Originally Posted by gschaider (Post 414925) And J is related to T how? Assuming that J is a surface field then fvc::div(J) only uses the values on the boundary patches (the situation is not better if J is a volume-field). Anyway: if you're not doing completely different physics to somebody else then J is somehow related to grad(T) which makes the second term boil down to something like laplacian(lambda,T) for which you can use the fvm-form which makes everything much more stable. If J is completely unrelated to T then only the actual value of div(J) in the cells matters for the solution of the T-equation and if J is a vector and J=(0,0,0) is not good enough for you then a slip-boundary condition is sufficient

Dear gschaider,
Thanks for the quick response. In my case i defined J as volume field:
Code:

```volVectorField J     (         IOobject         (             "J",             runTime.timeName(),             mesh,             IOobject::NO_READ,             IOobject::NO_WRITE         ),         -f1*fvc::div(Epnn1)+fvc::laplacian(f2, U)     );```
Where Epnn1 is defined as:

Quote:
 volTensorField Epnn1 ( IOobject ( "Epnn1", runTime.timeName(), mesh, IOobject::NO_READ, IOobject::NO_WRITE ), f3*Q );
Where f1,f2 and f3 are functions of T and Q is a tensor. I defined Q as:

Quote:
 dimensionedTensor Q ( "Q", dimensionSet(0, 0, 0, 0, 0, 0, 0), tensor(1,0,0,0,0.58,0,0,0,0.38) );
As you noticed if J is function of grad(T), then my problem could be easy. But in my case i don't have any explicit expression for J in-terms of grad(T). Could you please elaborate the method in which I can use a slip boundary condition for my case by using groovyBC?
Moreover i am struggling with divergence problem. From your valuable suggestion I understood that there is divergence in my case since J is defined as a volume field. Should I define J at the surface field to achieve convergence?

Thanks
Reddy

 gschaider March 19, 2013 09:00

Quote:
 Originally Posted by mmkr825 (Post 414955) Dear gschaider, Thanks for the quick response. In my case i defined J as volume field: Code: ```volVectorField J     (         IOobject         (             "J",             runTime.timeName(),             mesh,             IOobject::NO_READ,             IOobject::NO_WRITE         ),         -f1*fvc::div(Epnn1)+fvc::laplacian(f2, U)     );``` Where Epnn1 is defined as: Where f1,f2 and f3 are functions of T and Q is a tensor. I defined Q as: As you noticed if J is function of grad(T), then my problem could be easy. But in my case i don't have any explicit expression for J in-terms of grad(T). Could you please elaborate the method in which I can use a slip boundary condition for my case by using groovyBC? Moreover i am struggling with divergence problem. From your valuable suggestion I understood that there is divergence in my case since J is defined as a volume field. Should I define J at the surface field to achieve convergence? Thanks Reddy
slip has nothing to do with groovyBC. It is a standard-BC in OpenFOAM. Anyway: to set special boundary conditions for a field it is better to read that field from disc. Everything else is horrible to program.

For convergence: i can only be general here: you mentioned that the functions fX depend on T: the best strategy would be to identify the parts that depend on T, linearize them, put these parts implicitly into the T-equation using fvm-operations and only put the rest of the terms into the explicit source. Also sit down with pen and paper and see if the BC for J can be expressed in terms of T on the boundary. Then implement that BC for T. If you insist on having an all-explicit source term the way you do now you may need veeeery small time-steps (probably)

Yeah: if you know what you're doing a surfaceScalar-field for the flux is better than a volVector-field (see creation and usage of phi in the regular solvers)

 mmkr825 March 20, 2013 06:55

Quote:
 Originally Posted by gschaider (Post 414969) slip has nothing to do with groovyBC. It is a standard-BC in OpenFOAM. Anyway: to set special boundary conditions for a field it is better to read that field from disc. Everything else is horrible to program. For convergence: i can only be general here: you mentioned that the functions fX depend on T: the best strategy would be to identify the parts that depend on T, linearize them, put these parts implicitly into the T-equation using fvm-operations and only put the rest of the terms into the explicit source. Also sit down with pen and paper and see if the BC for J can be expressed in terms of T on the boundary. Then implement that BC for T. If you insist on having an all-explicit source term the way you do now you may need veeeery small time-steps (probably) Yeah: if you know what you're doing a surfaceScalar-field for the flux is better than a volVector-field (see creation and usage of phi in the regular solvers)
Dear gschaider