CFD Online Logo CFD Online URL
www.cfd-online.com
[Sponsors]
Home > Forums > Software User Forums > OpenFOAM > OpenFOAM Programming & Development

ForAll Loop

Register Blogs Community New Posts Updated Threads Search

Like Tree4Likes
  • 1 Post By sanj
  • 1 Post By Lieven
  • 1 Post By akidess
  • 1 Post By akidess

Reply
 
LinkBack Thread Tools Search this Thread Display Modes
Old   January 22, 2014, 20:57
Default ForAll Loop
  #1
New Member
 
Sanj M
Join Date: Dec 2013
Location: Ohio
Posts: 10
Rep Power: 12
sanj is on a distinguished road
Hello Guys,

Is there an alternative to the forAll loop? Basically I need to run the following code every time step and as a result it takes a long time. The code is:

forAll(alpha1, celli)
{
if (alpha1[celli] < 0)
{
alpha1[celli] = 0;
}
else if (alpha1[celli] > 1)
{
alpha1[celli]=1;
}
else
{
alpha1[celli]=alpha1[celli];
}
}//end for loop

This ensures that alpha1 in any cell is always between 0 and 1. I have heard about field operations to make it faster but dont know how to implement it. Can some one please shed some light on this matter.

Thanks,
Sanj
vivek05 likes this.
sanj is offline   Reply With Quote

Old   January 23, 2014, 02:16
Default
  #2
Senior Member
 
Lieven
Join Date: Dec 2011
Location: Leuven, Belgium
Posts: 299
Rep Power: 22
Lieven will become famous soon enough
I don't think there is a lot of alternative, but you can already simplify (read 'speed up') it a little bit by removing the identity alpha1[celli]=alpha1[celli]:
Code:
forAll(alpha1, celli)
{
   if (alpha1[celli] < 0)
   {
     alpha1[celli] = 0;
   }
   if (alpha1[celli] > 1)
   {
     alpha1[celli]=1;
   }
}
Or you can write the second 'if' with 'else if'. Nevertheless, it remains an expensive operation.

Cheers,

L
vivek05 likes this.
Lieven is offline   Reply With Quote

Old   January 23, 2014, 05:08
Default
  #3
Senior Member
 
akidess's Avatar
 
Anton Kidess
Join Date: May 2009
Location: Germany
Posts: 1,377
Rep Power: 29
akidess will become famous soon enough
Try this:
alpha1 = max(min(alpha1,1.0), 0.0);
vivek05 likes this.
__________________
*On twitter @akidTwit
*Spend as much time formulating your questions as you expect people to spend on their answer.
akidess is offline   Reply With Quote

Old   January 23, 2014, 12:29
Default
  #4
New Member
 
Sanj M
Join Date: Dec 2013
Location: Ohio
Posts: 10
Rep Power: 12
sanj is on a distinguished road
Dear Liven and Anton,

Thanks for your swift responses. I appreciate taking the time to help me.

Lieven: Yes thanks for the code it works perfectly but as you said it is still time expensive.

Anotn: I understand that the max and min will bound the alpha1 values. But, how will it update each cell if celli is missing? Pardon me for my poor knowledge in openfoam and c++.

Thanks,

Sanj
sanj is offline   Reply With Quote

Old   January 23, 2014, 12:44
Default
  #5
Senior Member
 
akidess's Avatar
 
Anton Kidess
Join Date: May 2009
Location: Germany
Posts: 1,377
Rep Power: 29
akidess will become famous soon enough
Foam functions are smart. Foam::min / Foam::max will see that you are passing a vol*Field and then automatically know to loop over all cells. You can completely throw out the forAll loop - just this single line will do.
vivek05 likes this.
__________________
*On twitter @akidTwit
*Spend as much time formulating your questions as you expect people to spend on their answer.
akidess is offline   Reply With Quote

Old   January 23, 2014, 12:50
Default
  #6
New Member
 
Sanj M
Join Date: Dec 2013
Location: Ohio
Posts: 10
Rep Power: 12
sanj is on a distinguished road
Anton,

Thank you so much it worked like a charm!!!

Sanj
sanj is offline   Reply With Quote

Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are Off
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
[Gmsh] Problem with Gmsh nishant_hull OpenFOAM Meshing & Mesh Conversion 23 August 5, 2015 02:09
forAll loop getting stuck? I'm stuck too! CHARLES OpenFOAM Programming & Development 6 October 11, 2013 16:46
basic question with 'ForAll' loop Pascal_doran OpenFOAM Post-Processing 10 December 14, 2012 17:39
[CAD formats] my stl surface is seen as just a line rcastilla OpenFOAM Meshing & Mesh Conversion 2 January 6, 2010 01:30
NACA0012 geometry/design software needed Franny Main CFD Forum 13 July 7, 2007 15:57


All times are GMT -4. The time now is 14:36.