CFD Online Discussion Forums

CFD Online Discussion Forums (
-   OpenFOAM Bugs (
-   -   EigenVecotrsbug (

asteria January 16, 2008 09:29

Hi all~ I'm trying to get eig
Hi all~
I'm trying to get eigenvalues and eigenvectors from some tensor. There is no problem in tensor and in eigenvalues. but The problem occurs when one of eigenvalue is negative. and I found some source code in /home/asteria/OpenFOAM/OpenFOAM-1.4.1/src/OpenFOAM/primitives/tensor/tensor.C

in line 186 and 382 as below.
vector eigenVector(const tensor& t, const scalar lambda)
if (lambda < SMALL)
return vector::zero;
I think this line is the reason it gives zero vector when of which eigenvalue is negative.
Do you guys have any idea about why they add line like these?
Thanks in advance,


henry January 16, 2008 16:32

Hi Hyunchang, I think this
Hi Hyunchang,

I think this is a slight oversight and the test should be

if (mag(lambda) < SMALL)

to avoid attempting to calculate eigenvectors for zero eigenvalues. Of coarse it is debatable if SMALL is the correct level of smallness for the test and I am open to suggestions.


asteria January 17, 2008 11:22

Hi, Henry. Thanks for your ans
Hi, Henry. Thanks for your answer.
I changed the file, /home/asteria/OpenFOAM/OpenFOAM-1.4.1/src/OpenFOAM/lnInclude/tensor.C
and compile it again and did tensorTest and the result is like this.

asteria@leehc:~/OpenFOAM/OpenFOAM-1.4.1/applications/test/tensor> tensorTest
(2 4 6 5 7 9 8 10 12)
(1.33333 1.33333 -0.333333 1.33333 1.83333 -0.333333 -0.333333 -0.333333 0.333333)
(1 0 0 1.66533e-16 1 0 -5.55112e-17 0 1)
(1 2 3)(4 5 6)(7 8 9)
tensor (9e-05 5.65685e-05 0 5.65685e-05 8.90625e-05 5.21632e-05 0 5.21632e-05 4.6143e-05)
eigenvalues (-2.09381e-06 6.80075e-05 0.000159292)
eigenvectors (0.384905 -0.626627 0.677633 0.705091 -0.274123 -0.653991 0.595563 0.729517 0.336317)
Check determinant -2.26823e-14 -2.26823e-14
Check eigenvectors (-8.05919e-07 1.31204e-06 -1.41884e-06)(-8.05919e-07 1.31204e-06 -1.41884e-06) (4.79514e-05 -1.86424e-05 -4.44762e-05)(4.79514e-05 -1.86424e-05 -4.44762e-05) (9.48684e-05 0.000116206 5.35726e-05)(9.48684e-05 0.000116206 5.35726e-05)
Check transformation (157 367 577 367 856 1345 577 1345 2113) (157 367 577 367 856 1345 577 1345 2113)
Check symmetric transformation (157 367 577 856 1345 2113)
(1 2 3 4 6 9)
(1 2 3 4 5 6)
(2 4 6 8 10 12)

I changed the tensor, t6 as I want.
Now although one of three eigenvalues is negative, but it still gives correct eigenvectors.(I compared it with the result of mathematica.)

and Henry. I know it could be a silly question but I'm quite new and fool in c++ and OpenFOAM. How can I find the definition of SMALL? and can you explain me about the role of lnInclude folder? cause I changed the tensor.C file in that( lnInclude) folder but after recompiling tensor.C in the other folder is also changed!

Thanks to stand me.


ps. And We are trying to modify twoPhaseEulerFoam that it could solve additional moments transfer equations. But I don't know much about how to write code in OpenFOAM, like defining new variable and solving new equation and something like that. so I'm doing that very silly way and I'm not sure that I'm going right direction. so can I send you a question when I need your advise?

henry January 17, 2008 11:41

There are various ways to find
There are various ways to find things in OpenFOAM source, you could use the Doxygen documentation and search-engine or more directly use grep e.g.

cd $FOAM_SRC/OpenFOAM/lnInclude
grep SMALL *.H

which will give you

doubleScalar.H:static const doubleScalar doubleScalarSMALL = 1.0e-15;


floatScalar.H:static const floatScalar floatScalarSMALL = 1.0e-6;

OpenCFD would be happy to help you develop your OpenFOAM applications as part of a support contract, details of which can be requested from our web-site.


asteria January 18, 2008 07:45

Thanks Henry
Thanks Henry


All times are GMT -4. The time now is 18:48.