CFD Online Discussion Forums

CFD Online Discussion Forums (https://www.cfd-online.com/Forums/)
-   OpenFOAM Running, Solving & CFD (https://www.cfd-online.com/Forums/openfoam-solving/)
-   -   Flux Boundary Conditions (https://www.cfd-online.com/Forums/openfoam-solving/57985-flux-boundary-conditions.html)

nandiganavishal December 2, 2008 18:05

Hi All, I have a square dom
 
Hi All,

I have a square domain and I am having the following equation

fvm::ddt(C1) == fvm::laplacian(D1,C1) + K1 * fvc::laplacian(Phi) * fvm::Sp(1.0,C1)+ K1 * (fvc::grad(Phi) & fvc::grad(C1))

where D1,K1 are constants...

Now I want to set b.cs at the wall of my C1 variable. The b.c is to set the flux = 0, which is given as

-D1*grad(C1) - K1*C1*grad(Phi) = 0

at the upperwall and lowerwall of the square domain. Can anyone help me out how exactly should I go about doing this.

Thanks

Regards

Vishal

7islands December 3, 2008 20:07

Hi, I saw your direct email c
 
Hi,
I saw your direct email contact to me. I do not have so much to suggest without the knowledge of the physics you are trying to solve, but what looks strange to me is that you have three sets of equations on the boundaries
-D1*dC1/dx - K1*C1*dPhi/dx = 0
-D1*dC1/dy - K1*C1*dPhi/dy = 0
-D1*dC1/dz - K1*C1*dPhi/dz = 0
to determine C1 (assuming C1 is a scalar variable). If that in fact means a surface-normal gradient, you would be able to write a derived b.c. of mixed type.

Takuya

nandiganavishal December 4, 2008 12:13

Hi Takuya, >> "If that in f
 
Hi Takuya,

>> "If that in fact means a surface-normal gradient, you would be able to write a derived b.c. of mixed type. "

Thanks a lot for the reply. May I know how exactly should we go about incorporating the above statement. (I am fairly new to OpenFoam). Could you tell me which tutorial I can follow or how exactly should I get started.

Kindly do the needful.

Thanks

Regards

Vishal

nandiganavishal December 4, 2008 14:15

Dear Takuya, I just would l
 
Dear Takuya,

I just would like to add on my previous mail. I would like to make flux in the normal direction to be zero. i.e since my problem is 2-d, i want to make flux in the y direction to be zero. Hence my equation is
-D1*dC1/dy - K1*C1*dPhi/dy = 0

or
-D1*dC1/dn - K1*C1*dPhi/dn = 0 in general where n is normal direction.

Kindly do the needful help.

Regards

Vishal Nandigana

7islands December 11, 2008 09:20

The mixed type bc code is in $
 
The mixed type bc code is in $FOAM_SRC/finiteVolume/fields/fvPatchFields/basic/mixed. You'll also find several examples of its derived types under $FOAM_SRC/finiteVolume/fields/fvPatchFields/derived (grep -r mixedFvPatch is your friend). Besides if you have knowledge about basic C++ and a bit of persistence, they just should be more than enough.

T

nandiganavishal December 11, 2008 11:58

Thanks for the tip Takuya. I w
 
Thanks for the tip Takuya. I will certainly go through it.


Vishal

nandiganavishal February 6, 2009 01:44

Dear Takuya, I have coded m
 
Dear Takuya,

I have coded my flux boundary condition which I had mentioned before. The following is how my code looks, but I don't know why I get an error, I would like to know whether I have coded it in the correct way.. Kindly give your suggestions

Boundary condition code looks like this:


const polyPatchList& patches = mesh.boundaryMesh();

forAll (patches, patchI){

if(C1.boundaryField()[patchI].type()=="fixedGradient"){
fixedGradientFvPatchScalarField& nameOfYourChoice =
refCast<fixedgradientfvpatchscalarfield>(C1.bounda ryField()[patchI]);
scalarField& otherNameOfYourChoice = nameOfYourChoice.gradient();
otherNameOfYourChoice = -C1*Z1*fvc::snGrad(Phi);
}

}
Kindly let me know what is the mistake I am making... As the error I get is something like this

C1 Residual C2 Residual Phi Residual
Begin to solve C11#0 Foam::error::printStack(Foam::-Ostream&) in
"/home/vishal/OpenFOAM/OpenFOAM-1.5/lib/linuxGccDPOpt/libOpenFOAM.so"
#1 Foam::sigFpe::sigFpeHandler(int) in
"/home/vishal/OpenFOAM/OpenFOAM-1.5/lib/linuxGccDPOpt/libOpenFOAM.so"
#2 Uninterpreted: [0xb7f12420]
#3 Foam::divide(Foam::Field<double>&, Foam::UList<double> const&,
Foam::UList<double> const&) in
"/home/vishal/OpenFOAM/OpenFOAM-1.5/lib/linuxGccDPOpt/libOpenFOAM.so"
#4 Foam::operator/(Foam::UList<double> const&, Foam::UList<double>
const&) in "/home/vishal/OpenFOAM/OpenFOAM-1.5/lib/linuxGccDPOpt/libOpenFOAM.so"
#5 Foam::fixedGradientFvPatchField<double>::evaluate( Foam::Pstream::commsTypes)
in "/home/vishal/OpenFOAM/OpenFOAM-1.5/lib/linuxGccDPOpt/libfiniteVolume.so"
#6 Foam::GeometricField<double, Foam::fvPatchField,
Foam::volMesh>::GeometricBoundaryField::evaluate() in
"/home/vishal/OpenFOAM/vishal-1.5/applications/bin/linuxGccDPOpt/electroosmoticF oam"
#7 Foam::fvMatrix<double>::solve(Foam::Istream&) in
"/home/vishal/OpenFOAM/OpenFOAM-1.5/lib/linuxGccDPOpt/libfiniteVolume.so"
#8 main in "/home/vishal/OpenFOAM/vishal-1.5/applications/bin/linuxGccDPOpt/electroosmoticF oam"
#9 __libc_start_main in "/lib/tls/i686/cmov/libc.so.6"
#10 Foam::regIOobject::readIfModified() in
"/home/vishal/OpenFOAM/vishal-1.5/applications/bin/linuxGccDPOpt/electroosmoticF oam"
Floating point exception

Regards

Vishal

7islands February 6, 2009 09:01

Hi Vishal, Not so sure as I h
 
Hi Vishal,
Not so sure as I have never tried this way, but at least shouldn't
otherNameOfYourChoice = -C1*Z1*fvc::snGrad(Phi);
be
otherNameOfYourChoice = -nameOfYourChoice*Z1*fvc::snGrad(Phi);
?

Takuya

nandiganavishal February 6, 2009 12:34

http://www.cfd-online.com/Ope
 
http://www.cfd-online.com/OpenFOAM_D...hment_icon.gif ionFluxFvPatchScalarField.H
http://www.cfd-online.com/OpenFOAM_D...hment_icon.gif ionFluxFvPatchScalarField.C
http://www.cfd-online.com/OpenFOAM_D...hment_icon.gif C1
http://www.cfd-online.com/OpenFOAM_D...hment_icon.gif blockMeshDict

Dear Takuya,

Thanks a lot for your suggestion. I tried as you have suggested but I get the following error...

vishal@kiwi2:~/OpenFOAM/vishal-1.5/run/PNP_code_sending_to_jing/coupledFoam_modified/coupledFoam$ wmake
SOURCE=coupledFoam.C ; g++ -m32 -Dlinux -DDP -Wall -Wno-strict-aliasing -Wextra -Wno-unused-parameter -Wold-style-cast -O3 -DNoRepository -ftemplate-depth-40 -I/home/vishal/OpenFOAM/OpenFOAM-1.5/src/finiteVolume/lnInclude -IlnInclude -I. -I/home/vishal/OpenFOAM/OpenFOAM-1.5/src/OpenFOAM/lnInclude -I/home/vishal/OpenFOAM/OpenFOAM-1.5/src/OSspecific/Unix/lnInclude -fPIC -pthread -c $SOURCE -o Make/linuxGccDPOpt/coupledFoam.o
In file included from coupledFoam.C:69:
C1Eqn.H: In function 'int main(int, char**)':
C1Eqn.H:12: error: no match for 'operator*' in 'Foam::operator-(const Foam::UList<t>&) [with Type = double]() * Z1'
/home/vishal/OpenFOAM/OpenFOAM-1.5/src/OpenFOAM/lnInclude/dimensionSet.H:266: note: candidates are: Foam::dimensionSet Foam::operator*(const Foam::dimensionSet&, const Foam::dimensionSet&)
/home/vishal/OpenFOAM/OpenFOAM-1.5/src/OpenFOAM/lnInclude/dimensionedScalar.H:56: note: Foam::dimensionedScalar Foam::operator*(const Foam::dimensionedScalar&, Foam::scalar)
/home/vishal/OpenFOAM/OpenFOAM-1.5/src/OpenFOAM/lnInclude/scalarField.H:81: note: Foam::tmp<foam::field<double> > Foam::operator*(const Foam::UList<double>&, const Foam::UList<double>&)
/home/vishal/OpenFOAM/OpenFOAM-1.5/src/OpenFOAM/lnInclude/scalarField.H:81: note: Foam::tmp<foam::field<double> > Foam::operator*(const Foam::UList<double>&, const Foam::tmp<foam::field<double> >&)
/home/vishal/OpenFOAM/OpenFOAM-1.5/src/OpenFOAM/lnInclude/scalarField.H:81: note: Foam::tmp<foam::field<double> > Foam::operator*(const Foam::tmp<foam::field<double> >&, const Foam::UList<double>&)
/home/vishal/OpenFOAM/OpenFOAM-1.5/src/OpenFOAM/lnInclude/scalarField.H:81: note: Foam::tmp<foam::field<double> > Foam::operator*(const Foam::tmp<foam::field<double> >&, const Foam::tmp<foam::field<double> >&)
/home/vishal/OpenFOAM/OpenFOAM-1.5/src/OpenFOAM/lnInclude/symmTensorField.H:70: note: Foam::tmp<foam::field<foam::vector<double> > > Foam::operator*(const Foam::UList<foam::symmtensor<double> >&)
/home/vishal/OpenFOAM/OpenFOAM-1.5/src/OpenFOAM/lnInclude/symmTensorField.H:70: note: Foam::tmp<foam::field<foam::vector<double> > > Foam::operator*(const Foam::tmp<foam::field<foam::symmtensor<double> > >&)
/home/vishal/OpenFOAM/OpenFOAM-1.5/src/OpenFOAM/lnInclude/tensorField.H:75: note: Foam::tmp<foam::field<foam::vector<double> > > Foam::operator*(const Foam::UList<foam::tensor<double> >&)
/home/vishal/OpenFOAM/OpenFOAM-1.5/src/OpenFOAM/lnInclude/tensorField.H:75: note: Foam::tmp<foam::field<foam::vector<double> > > Foam::operator*(const Foam::tmp<foam::field<foam::tensor<double> > >&)
/home/vishal/OpenFOAM/OpenFOAM-1.5/src/OpenFOAM/lnInclude/tensorField.H:76: note: Foam::tmp<foam::field<foam::tensor<double> > > Foam::operator*(const Foam::UList<foam::vector<double> >&)
/home/vishal/OpenFOAM/OpenFOAM-1.5/src/OpenFOAM/lnInclude/tensorField.H:76: note: Foam::tmp<foam::field<foam::tensor<double> > > Foam::operator*(const Foam::tmp<foam::field<foam::vector<double> > >&)
/home/vishal/OpenFOAM/OpenFOAM-1.5/src/OpenFOAM/lnInclude/dimensionedSymmTensor.H:68: note: Foam::dimensionedVector Foam::operator*(const Foam::dimensionedSymmTensor&)
/home/vishal/OpenFOAM/OpenFOAM-1.5/src/OpenFOAM/lnInclude/dimensionedTensor.H:74: note: Foam::dimensionedVector Foam::operator*(const Foam::dimensionedTensor&)
/home/vishal/OpenFOAM/OpenFOAM-1.5/src/OpenFOAM/lnInclude/dimensionedTensor.H:77: note: Foam::dimensionedTensor Foam::operator*(const Foam::dimensionedVector&)
/home/vishal/OpenFOAM/OpenFOAM-1.5/src/finiteVolume/lnInclude/initContinuityErrs.H:38: warning: unused variable 'cumulativeContErr'
make: *** [Make/linuxGccDPOpt/coupledFoam.o] Error 1


Further, I also tried to incorporate the boundary condition as given in the tutorials where they have incorporated the traction boundary condition or chtmultiregion tutorials... I am attaching those files too... but even there I get some errors like


Reading field C1

keyword gradient is undefined in dictionary
"/home/vishal/OpenFOAM/vishal-1.5/run/electroosmotic_transient_navier_stokes_jing_code/electroosmoticFoam_Steady/0/C1::upperwall"

file: /home/vishal/OpenFOAM/vishal-1.5/run/electroosmotic_transient_navier_stokes_jing_code/electroosmoticFoam_Steady/0/C1::upperwall
from line 37 to line 41.

From function dictionary::lookupEntry(const word& keyword) const
in file db/dictionary/dictionary.C at line 213.

FOAM exiting

Kindly give your suggestions with regard to this....

Kindly do the needful.

Regards

Vishal

7islands February 6, 2009 20:55

As to your solver complaining
 
As to your solver complaining about "keyword gradient is undefined in dictionary" in the entry upperwall, I do not see the boundaryField upperwall in your C1 file. Is this really the file in question? Anyway, as your ionNormalFlux BC is a derived type of fixedGradient you need a gradient entry as a placeholder. So the entry should look like

upperwall
{
type ionNormalFlux;
gradient uniform ...;
...
}
.

T

7islands February 6, 2009 21:10

Yep you need a gradient entry
 
Yep you need a gradient entry in upperwall as I wrote in my previous post.

T

nandiganavishal February 6, 2009 21:14

Dear Takuya, Thanks for the
 
Dear Takuya,

Thanks for the quick reply. So now does it look something like this...

upperwall
{
type ionNormalFlux;
Phi WallElectricField;
Zi Z1;
Di D1;
gradient uniform 0;

}

Thanks

Regards

Vishal

luca February 7, 2009 02:53

Hi Vishal, the error says t
 
Hi Vishal,

the error says that you search for an object (i.e. a volScalarField ) that is not yet instantiated. You have to be consistent in your creatFields.H and your class member "void Foam::ionFluxFvPatchScalarField::updateCoeffs()".

Moreover in your case you have not a clear coding: you search for a volScalarField Di_ that is defined as a word if I checked right and Di_ is a private data that you can access easily without "lookupPatchField". Foam in this case searches for a Di_ volScalarField defined in the main code that I guess is not what you want.

L.

nandiganavishal February 7, 2009 12:00

Hi Luca, Thanks for the sug
 
Hi Luca,

Thanks for the suggestions..

Di_ is my transport property.. I have two variables D1 and D2 under my transport property...

Do could throw some light as to what exactly I have to do to solve my problem.. I am looking to incorporate a boundary condition like
grad(C1) = - Z1*C1*snGrad(Phi)/D1 = 0
grad(C2) = - Z2*C2*snGrad(Phi)/D2 = 0

Kindly suggest how I have to make changes in my files to solve my problem.. I am relatively new to OpenFOAM.

Regards

Vishal

Kelvin_mk February 2, 2011 19:10

Hi Vishal,

I have the same problem. I want to set the same flux BC at the wall. Did you write this type of b.c. in OpenFoam. I am very new to OpenFoam. I have to write this b.c. to solve my problem. I'm ver pleased if you reply to me.

Thank you very much...

mmkr825 September 6, 2012 13:03

About zero flux boundary condition...
 
Hi everyone,
I am new to OpenFoam and i am doing my project on flow through channels. For my project i need to give zero flux boundary condition at walls (for variable T). And i applied zero flux in my governing equation and i got an expression like

grad(T)=f(T,strainRate)

where f=some function.

I saw your previous posts. I think you had found solution. please guide me how to write this boundary condition.


All times are GMT -4. The time now is 09:02.