|
[Sponsors] |
September 7, 2009, 16:09 |
Problem with simple if-comparison
|
#1 |
Senior Member
Sebastian Gatzka
Join Date: Mar 2009
Location: Frankfurt, Germany
Posts: 729
Rep Power: 20 |
Hello World.
I'm completely confused ... This is really embarrassing as it's about a simple if condition ... Have a look at the code-(sniped): Don't mind what it's actually doing, concentrate on the bold red if-condition. Code:
int main(int argc, char *argv[]) { faceSet facesSet(mesh, setName); labelList faces(facesSet.toc()); vectorField faceCenterCoordinates(facesSet.size()); for (label i=startTime; i<endTime; i++) { for (label k=0; k<facesSet.size(); k++) { int faceNumber = faces[k]; if (i == startTime) { faceCenterCoordinates[k] = mesh.Cf()[faceNumber]; } if (i == startTime) { Info<< "faceCenterCoordinates[1].component(2) = " << faceCenterCoordinates[1].component(2) <<endl; Info<< "faceCenterCoordinates[2].component(2) = " << faceCenterCoordinates[2].component(2) <<endl; if ( faceCenterCoordinates[1].component(2) == faceCenterCoordinates[2].component(2) ) { Info << " Components identical !!! " << endl; } } } } It is not satisfied (meaning its Info-line "Components identical !!!" is not displayed while running the program) although the bold black italic Info-line displays the following: Code:
faceCenterCoordinates[1].component(2) = 1.5625 faceCenterCoordinates[2].component(2) = 1.5625 So what's wrong with this?! Is there any difference between the displayed values and the contents of the vectorField?! In the further progress of this code I'm writing this faceCenterCoordinates vectorField to a file an it displayed 5-digit-numbers (4 digits after the dot). So there can't be any problem with this ... Hope for your ideas ... Sebastian
__________________
Schrödingers wife: "What did you do to the cat? It's half dead!" |
|
September 7, 2009, 16:17 |
|
#2 |
Senior Member
Matvey Kraposhin
Join Date: Mar 2009
Location: Moscow, Russian Federation
Posts: 355
Rep Power: 21 |
Values displayed with some tolerance (it means, that difference could be after 6 or N digits after dot)
Try to calculate and output difference between two values, or refomulate condition like inequality: if ( mag(faceCenterCoordinates[1].component(2) - faceCenterCoordinates[2].component(2)) < VSMALL ) { /// do something } |
|
September 8, 2009, 08:06 |
|
#3 |
Senior Member
Sebastian Gatzka
Join Date: Mar 2009
Location: Frankfurt, Germany
Posts: 729
Rep Power: 20 |
Yes this worked!
The output from Code:
mag(faceCenterCoordinates[1].component(2) - faceCenterCoordinates[2].component(2)) By the way: What is the difference between SMALL and VSMALL and where is it defined?
__________________
Schrödingers wife: "What did you do to the cat? It's half dead!" |
|
September 8, 2009, 08:21 |
|
#4 |
Senior Member
Matvey Kraposhin
Join Date: Mar 2009
Location: Moscow, Russian Federation
Posts: 355
Rep Power: 21 |
VSMALL - means Very SMALL.
For single precision: SMALL = 1e-6, VSMALL = 1e-37 For double precision: SMALL = 1e-15, VSMALL = 1e-300 this definitions are related with machine word length, and, i think, it's done for independence of platform type for more information, see file scalar.H |
|
|
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
Simple mathematical problem? | Frank Wedburn | Main CFD Forum | 8 | March 23, 2012 18:26 |
A simple problem. | raintung | FLUENT | 0 | March 31, 2003 08:56 |
simple problem | Taher | FLUENT | 2 | September 3, 2002 11:32 |
extremely simple problem... can you solve it properly? | Mikhail | Main CFD Forum | 40 | September 9, 1999 10:11 |
? Simple CFD problem | Davy | Main CFD Forum | 0 | August 21, 1998 07:19 |