CFD Online Discussion Forums (https://www.cfd-online.com/Forums/)
-   OpenFOAM (https://www.cfd-online.com/Forums/openfoam/)
-   -   Need ur help (https://www.cfd-online.com/Forums/openfoam/108617-need-ur-help.html)

 Rocky4 October 28, 2012 22:44

Need ur help

Dear Foamers,

i have a volScalarField (say X) whose value at the patches and cells depends on the cell values of another volScalarField (sayY). i am able to change the value of X at the cells using

forAll(X, celli)
{ if (Y[celli] ==0)
{X[celli] =a;}
else
{X[celli]=b;}}

however i am unable to do the same for the patches of X
i.e if Y[celli] =0 where celli is any boundary cell then X[patchi] should be set to 'a' else it should be set to 'b'.something like this

forAll(X.boundaryField(), patchi)
{ //if (Y[celli] ==0) ,this represents any boundary cell value of field Y
{X.boundaryField()[patchi] =a;}
else
{X.boundaryField()[patchi]=b;}}

can someone can give a detailed code to accomplish this task?
i m new to openfoam. any kind of help is greatly appreciated. thanks in advance.

I would do this:-
Code:

```forAll(X.boundaryField(), patchi) {  forAll(X.boundaryField()[patchi],celli)  {   if(Y.boundaryField()[patchi][celli]==0)       X.boundaryField()[patchi][celli]=a;   else     X.boundaryField()[patchi][celli]=b;  } }```
NOTE:
1. By the way, you have a typo in the if loop: you probably mean
Code:

`Y[celli]==0`
2. For doubles or floats, comparison directly like this may fail. You may be better off checking if the absolute value is within a small region around zero.
3. The volScalarFields can be directly copied and assigned to each other.
I don't know if something like this would work:
Code:

`X=(Y==0)?a:b`

 Rocky4 October 29, 2012 00:46

thanks a lot for your kind help .i will just try it out .and yes i had typo in the if loop.
thanks alot.
regards
mandeep

 Rocky4 October 29, 2012 13:32

I tried it and worked great.in my actual code the x field is assigned value 'a' if 0<y<1 and 'b' if y=1. so the issue of 0 didn't comeup.once again thanks alot for ur kind help
regards
mandeep

Good that it worked. :)

The issue is not with zero in particular; two doubles should not be compared directly like this
Code:

`x==y`
Rather you want to check if
Code:

`abs(x-y)<=epsilon`
where epsilon is a small number.

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