# if-loop, volScalarField comparison

 User Name Remember Me Password
 Register Blogs Members List Search Today's Posts Mark Forums Read

 LinkBack Thread Tools Search this Thread Display Modes
 April 19, 2010, 12:29 if-loop, volScalarField comparison #1 New Member   Volker Tritschler Join Date: Jan 2010 Posts: 20 Rep Power: 16 Hi all, I have a problem with a task, which seemed to be straight-forward to solve at first. I need to program an if-loop in order to compare one volScalarField (P1) to another one (P2), and for each grid point, where P1 >= P2, a certain value (d) has to be written to another volScalarField (N) at exactly the same grid point. I wrote something like: (a, b, c, d are placeholder for arbitrary volScalarFields) Code: ```volScalarField P1 = a; volScalarField P2 = b; volScalarField N = c; if (P1 >= P2) { N = d; } else { N = -d; }``` The problem is that the code in the actual version does not compare the values for every single grid point and hence does not write the value (d) to (N) for all the grid points where the logical expression is true (P1 >= P2). It's more that it just compares just one (the first?!) point of P1 with P2. Right now, I don't have any idea how to get rid of that problem, though it seems to be a very silly one. Thanks for any idea. greets, volker neeraj likes this.

 April 22, 2010, 01:30 #2 Senior Member   Alberto Passalacqua Join Date: Mar 2009 Location: Ames, Iowa, United States Posts: 1,912 Rep Power: 35 Hi, you have to loop over your cells to compare information in each point: Code: ```forAll(P1, cellI) { if (P1[cellI] > P2[cellI]) { N[cellI] = ... } else { ... } }``` Best, neeraj likes this. __________________ Alberto Passalacqua GeekoCFD - A free distribution based on openSUSE 64 bit with CFD tools, including OpenFOAM. Available as in both physical and virtual formats (current status: http://albertopassalacqua.com/?p=1541) OpenQBMM - An open-source implementation of quadrature-based moment methods. To obtain more accurate answers, please specify the version of OpenFOAM you are using.

 April 22, 2010, 04:42 #3 New Member   Volker Tritschler Join Date: Jan 2010 Posts: 20 Rep Power: 16 hi alberto, so many thanks for your help!!! It worked great. I wasn't aware of that class 'cell'. Do you know if there is a way to loop over the boundary patches as well? best volker

April 22, 2010, 11:11
#4
Senior Member

Alberto Passalacqua
Join Date: Mar 2009
Location: Ames, Iowa, United States
Posts: 1,912
Rep Power: 35
Quote:
 Originally Posted by volker hi alberto, so many thanks for your help!!! It worked great. I wasn't aware of that class 'cell'.
It's not a class, it's just an index created locally by the forAll loop

Quote:
 Do you know if there is a way to loop over the boundary patches as well?
Yes, let's assume you want to loop over the boundaries of a field p:

Code:
```forAll(p.boundaryField(), patchi)
{
// Check if it's zeroGradient (optional, depending on your case)
if (isA<zeroGradientFvPatchScalarField>(p.boundaryField()[patchi]))
{
otherFieldA.boundaryField()[patchi] = 0.0;
otherFieldB.boundaryField()[patchi] = 0.0;
}
}```
Best,
__________________
Alberto Passalacqua

GeekoCFD - A free distribution based on openSUSE 64 bit with CFD tools, including OpenFOAM. Available as in both physical and virtual formats (current status: http://albertopassalacqua.com/?p=1541)
OpenQBMM - An open-source implementation of quadrature-based moment methods.

To obtain more accurate answers, please specify the version of OpenFOAM you are using.

 April 23, 2010, 14:02 #5 New Member   Volker Tritschler Join Date: Jan 2010 Posts: 20 Rep Power: 16 perfect, big thanks to you!

 April 23, 2010, 15:18 #6 Senior Member   Alberto Passalacqua Join Date: Mar 2009 Location: Ames, Iowa, United States Posts: 1,912 Rep Power: 35 You're welcome __________________ Alberto Passalacqua GeekoCFD - A free distribution based on openSUSE 64 bit with CFD tools, including OpenFOAM. Available as in both physical and virtual formats (current status: http://albertopassalacqua.com/?p=1541) OpenQBMM - An open-source implementation of quadrature-based moment methods. To obtain more accurate answers, please specify the version of OpenFOAM you are using.

 February 27, 2020, 16:13 #7 New Member   tooran Join Date: Nov 2016 Posts: 23 Rep Power: 9 I am tyring to change a viscoisty model. I need to campare strain rate with a constant parameter (gama) if strainrate is greater than the gama then do.... so I write : ************************************************** ******************* Foam::viscosityModels::MyHerschelBulkley::calcNu() const { dimensionedScalar tone("tone", dimTime, 1.0); dimensionedScalar rtone("rtone", dimless/dimTime, 1.0); tmp sr(strainRate()); forAll(calcNu.internalField(), cellI) { if (sr[cellI]< gama_.value()) { ...... It shows me the error: error : calcNu’ does not have class type forAll(calcNu.internalField(), cellI) could you please help me? MyHerschelBulkley.C MyHerschelBulkley.H

 March 6, 2020, 21:03 #8 New Member   tooran Join Date: Nov 2016 Posts: 23 Rep Power: 9 Can any one help me?

 Thread Tools Search this Thread Search this Thread: Advanced Search Display Modes Linear Mode

 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 OffTrackbacks are Off Pingbacks are On Refbacks are On Forum Rules

 Similar Threads Thread Thread Starter Forum Replies Last Post [Gmsh] Problem with Gmsh nishant_hull OpenFOAM Meshing & Mesh Conversion 23 August 5, 2015 03:09 juho OpenFOAM Running, Solving & CFD 4 June 17, 2011 10:51 [CAD formats] my stl surface is seen as just a line rcastilla OpenFOAM Meshing & Mesh Conversion 2 January 6, 2010 02:30 MHDWill FLUENT 0 September 26, 2007 22:24 Franny Main CFD Forum 13 July 7, 2007 16:57

All times are GMT -4. The time now is 13:29.

 Contact Us - CFD Online - Privacy Statement - Top