[cig-commits] r4132 - in long/3D/Gale/trunk/src/StGermain: .
Discretisation/Geometry/tests
walter at geodynamics.org
walter at geodynamics.org
Tue Aug 1 01:52:52 PDT 2006
Author: walter
Date: 2006-08-01 01:52:51 -0700 (Tue, 01 Aug 2006)
New Revision: 4132
Modified:
long/3D/Gale/trunk/src/StGermain/
long/3D/Gale/trunk/src/StGermain/Discretisation/Geometry/tests/testFullTensorMath.0of1.FullTensorMath.txt.expected
long/3D/Gale/trunk/src/StGermain/Discretisation/Geometry/tests/testFullTensorMath.c
Log:
r2598 at earth: boo | 2006-08-01 01:50:28 -0700
r2577 at earth (orig r3700): KathleenHumble | 2006-07-23 22:01:13 -0700
Patched tests in testFullTensorMath.c so that instead of
outputing results it checks results against a
standard answer for the tests that calculate eigenvalues
and vectors.
This should fix the error on Marvin.
Property changes on: long/3D/Gale/trunk/src/StGermain
___________________________________________________________________
Name: svk:merge
- 1ef209d2-b310-0410-a72d-e20c9eb0015c:/cig:2597
afb6c753-b9d0-0310-b4e7-dbd8d91cdd35:/trunk/StGermain:3699
+ 1ef209d2-b310-0410-a72d-e20c9eb0015c:/cig:2598
afb6c753-b9d0-0310-b4e7-dbd8d91cdd35:/trunk/StGermain:3700
Modified: long/3D/Gale/trunk/src/StGermain/Discretisation/Geometry/tests/testFullTensorMath.0of1.FullTensorMath.txt.expected
===================================================================
--- long/3D/Gale/trunk/src/StGermain/Discretisation/Geometry/tests/testFullTensorMath.0of1.FullTensorMath.txt.expected 2006-08-01 08:52:46 UTC (rev 4131)
+++ long/3D/Gale/trunk/src/StGermain/Discretisation/Geometry/tests/testFullTensorMath.0of1.FullTensorMath.txt.expected 2006-08-01 08:52:51 UTC (rev 4132)
@@ -6,11 +6,15 @@
tensorArray -
-5 2
2 -2
-eigenvectorList[0].eigenvalue = -1 + 0 i
-eigenvectorList[1].eigenvalue = -6 + 0 i
-{-0.447214 + i 0, -0.894427 + i 0}
-{-0.894427 + i 0, 0.447214 + i 0}
+Eigenvalues within tolerance, 1e-06 of:
+eigenvectorListCompare[0].eigenvalue = -1 + 0 i
+eigenvectorListCompare[1].eigenvalue = -6 + 0 i
+
+Eigenvectors within tolerance, 1e-06 of:
+eigenvectorListCompare[0].vector - {-0.447214 + i 0, -0.894427 + i 0}
+eigenvectorListCompare[1].vector - {-0.894427 + i 0, 0.447214 + i 0}
+
/******************* Test Eigenvector 2 ************************/
Symmetric 3D Case - tested against:
http://www.arndt-bruenner.de/mathe/scripts/engl_eigenwert.htm - 3/11/04.
@@ -19,25 +23,33 @@
2 7 11
7 3 13
11 13 5
-eigenvectorList[0].eigenvalue = -4.4597 + 0 i
-eigenvectorList[1].eigenvalue = -9.9685 + 0 i
-eigenvectorList[2].eigenvalue = 24.428 + 0 i
-{-0.786471 + i 0, 0.61348 + i 0, 0.0714557 + i 0}
-{-0.364102 + i 0, -0.553977 + i 0, 0.748692 + i 0}
-{-0.498892 + i 0, -0.562807 + i 0, -0.659056 + i 0}
+Eigenvalues within tolerance, 1e-06 of:
+eigenvectorListCompare[0].eigenvalue = -4.4597 + 0 i
+eigenvectorListCompare[1].eigenvalue = -9.9685 + 0 i
+eigenvectorListCompare[2].eigenvalue = 24.428 + 0 i
+
+Eigenvectors within tolerance, 1e-06 of:
+eigenvectorListCompare[0].vector - {-0.786471 + i 0, 0.61348 + i 0, 0.0714557 + i 0}
+eigenvectorListCompare[1].vector - {-0.364102 + i 0, -0.553977 + i 0, 0.748692 + i 0}
+eigenvectorListCompare[2].vector - {-0.498892 + i 0, -0.562807 + i 0, -0.659056 + i 0}
+
/******************* Test Eigenvector 3 ************************/
Non-Symmetric test for 2-D
tensorArray -
4 4
3 5
-eigenvectorList[0].eigenvalue = 1 + 0 i
-eigenvectorList[1].eigenvalue = 8 + 0 i
-{-0.8 + i 0, 0.6 + i 0}
-{-0.707107 + i 0, -0.707107 + i 0}
+Eigenvalues within tolerance, 1e-06 of:
+eigenvectorListCompare[0].eigenvalue = 1 + 0 i
+eigenvectorListCompare[1].eigenvalue = 8 + 0 i
+Eigenvectors within tolerance, 1e-06 of:
+eigenvectorListCompare[0].vector - {-0.8 + i 0, 0.6 + i 0}
+eigenvectorListCompare[1].vector - {-0.707107 + i 0, -0.707107 + i 0}
+
+
/******************* Test Eigenvector 4 ************************/
Non-Symmetric Test for 3-D
@@ -45,26 +57,34 @@
4 0 3
0 5 0
2 5 6
-eigenvectorList[0].eigenvalue = 2.3542 + 0 i
-eigenvectorList[1].eigenvalue = 5 + 0 i
-eigenvectorList[2].eigenvalue = 7.6458 + 0 i
-{-0.87674 + i 0, 0 + i 0, 0.480965 + i 0}
-{-0.867472 + i 0, 0.40482 + i 0, -0.289157 + i 0}
-{-0.635406 + i 0, 0 + i 0, -0.772178 + i 0}
+Eigenvalues within tolerance, 1e-06 of:
+eigenvectorListCompare[0].eigenvalue = 2.3542 + 0 i
+eigenvectorListCompare[1].eigenvalue = 5 + 0 i
+eigenvectorListCompare[2].eigenvalue = 7.6458 + 0 i
+Eigenvectors within tolerance, 1e-06 of:
+eigenvectorListCompare[0].vector - {-0.87674 + i 0, 0 + i 0, 0.480965 + i 0}
+eigenvectorListCompare[1].vector - {-0.867472 + i 0, 0.40482 + i 0, -0.289157 + i 0}
+eigenvectorListCompare[2].vector - {-0.635406 + i 0, 0 + i 0, -0.772178 + i 0}
+
+
/******************* Test Eigenvector 5 ************************/
Non-Symmetric test with zero entries for 2-D
tensorArray -
4 0
1 5
-eigenvectorList[0].eigenvalue = 4 + 0 i
-eigenvectorList[1].eigenvalue = 5 + 0 i
-{0.707107 + i 0, -0.707107 + i 0}
-{0 + i 0, 1 + i 0}
+Eigenvalues within tolerance, 1e-06 of:
+eigenvectorListCompare[0].eigenvalue = 4 + 0 i
+eigenvectorListCompare[1].eigenvalue = 5 + 0 i
+Eigenvectors within tolerance, 1e-06 of:
+eigenvectorListCompare[0].vector - {0.707107 + i 0, -0.707107 + i 0}
+eigenvectorListCompare[1].vector - {0 + i 0, 1 + i 0}
+
+
/******************* Test Eigenvector 6 ************************/
Non-Symmetric test with complex eigenvalues for 2-D
@@ -76,11 +96,15 @@
tensorArray -
3 -2
4 -1
-eigenvectorList[0].eigenvalue = 1 + 2 i
-eigenvectorList[1].eigenvalue = 1 - 2 i
-{0.408248 + i 0.408248, 0.816497 + i 0}
-{0.408248 + i -0.408248, 0.816497 + i 0}
+Eigenvalues within tolerance, 1e-06 of:
+eigenvectorListCompare[0].eigenvalue = 1 + 2 i
+eigenvectorListCompare[1].eigenvalue = 1 - 2 i
+
+Eigenvectors within tolerance, 1e-06 of:
+eigenvectorListCompare[0].vector - {0.408248 + i 0.408248, 0.816497 + i 0}
+eigenvectorListCompare[1].vector - {0.408248 + i -0.408248, 0.816497 + i 0}
+
/******************* Test Eigenvector 7 ************************/
Non-Symmetric test with complex eigenvalues for 3-D
Tested against Soluions in:
@@ -92,18 +116,22 @@
1 0 0
2 1 -2
3 2 1
-eigenvectorList[0].eigenvalue = 1 + 0 i
-eigenvectorList[1].eigenvalue = 1 + 2 i
-eigenvectorList[2].eigenvalue = 1 - 2 i
-{0.485071 + i 0, -0.727607 + i 0, 0.485071 + i 0}
-{0 + i 0, 0.707107 + i 0, 0 + i -0.707107}
-{0 + i 0, 0.707107 + i 0, 0 + i 0.707107}
+Eigenvalues within tolerance, 1e-06 of:
+eigenvectorListCompare[0].eigenvalue = 1 + 0 i
+eigenvectorListCompare[1].eigenvalue = 1 + 2 i
+eigenvectorListCompare[2].eigenvalue = 1 - 2 i
+Eigenvectors within tolerance, 1e-06 of:
+eigenvectorListCompare[0].vector - {0.485071 + i 0, -0.727607 + i 0, 0.485071 + i 0}
+eigenvectorListCompare[1].vector - {0 + i 0, 0.707107 + i 0, 0 + i -0.707107}
+eigenvectorListCompare[2].vector - {0 + i 0, 0.707107 + i 0, 0 + i 0.707107}
+
+
/******************* Eigenvector Test 8 ************************/
Test Calc eigenvectors function with repeated roots
-Tested against Soluions in:
+Tested against Solutions in:
Elementary Differential Equations and Boundary Value Problems, 6th Ed
By William E. Boyce and Richard C. DiPrima
Problem: ch 7.3, question 24
@@ -112,20 +140,27 @@
3 2 4
2 0 2
4 2 3
-eigenvectorList[0].eigenvalue = -1 + 0 i
-eigenvectorList[1].eigenvalue = -1 + 0 i
-eigenvectorList[2].eigenvalue = 8 + 0 i
-{0 + i 0, -0.894427 + i 0, 0.447214 + i 0}
-{-0.719905 + i 0, 0.519697 + i 0, 0.460056 + i 0}
-{0.666667 + i 0, 0.333333 + i 0, 0.666667 + i 0}
+Eigenvalues within tolerance, 1e-06 of:
+eigenvectorListCompare[0].eigenvalue = -1 + 0 i
+eigenvectorListCompare[1].eigenvalue = -1 + 0 i
+eigenvectorListCompare[2].eigenvalue = 8 + 0 i
+
+Non-repeated Eigenvector within tolerance, 1e-06,
+And Repeated Eigenvectors follow pattern:
+2 * x_1 + x_2 + 2 * x_3 = 0 to within tolerance, 1e-06 of:
+One set of correct eigenvectors:
+eigenvectorListCompare[0].vector - {0 + i 0, -0.894427 + i 0, 0.447214 + i 0}
+eigenvectorListCompare[1].vector - {-0.719905 + i 0, 0.519697 + i 0, 0.460056 + i 0}
+eigenvectorListCompare[2].vector - {0.666667 + i 0, 0.333333 + i 0, 0.666667 + i 0}
+
For repeated eigenvalues with non-degenerate eigenvectors,
eigenvectors have to be in same plane as solution vectors
rather than exactly the same, as eigenvectors can be arbitrarily set
-based on tensor array equation.
-For this problem, solution for eigenvectors collapses to:
+based on the specific tensor array equation.
+For this problem, solution for repeated eigenvectors collapses to:
2 * x_1 + x_2 + 2 * x_3 = 0
-Eigenvectors are then set base on what x_1, x_2 and x_3 are set to equal.
+Eigenvectors are then set based on what x_1, x_2 and x_3 are set to equal.
/******************* Test 9 ************************/
Test Symmetric Tensor to Tensor Array function
@@ -159,13 +194,13 @@
2-D
complexTensorArray -
- 4 + 0 i 4 + 1 i
- 3 + 0.33 i 5 + 100 i
+ 4 + 0 i 4 + 1 i
+ 3 + 0.33 i 5 + 100 i
3-D
complexTensorArray -
- 1 + 0.5 i 2 + 0 i 3 + 0 i
- 4 + 0 i 5 + 1 i 6 + 2 i
- 7 + 0 i 8 + 0 i 9 + 30 i
+ 1 + 0.5 i 2 + 0 i 3 + 0 i
+ 4 + 0 i 5 + 1 i 6 + 2 i
+ 7 + 0 i 8 + 0 i 9 + 30 i
/******************* Test 11 ************************/
Test print ComplexMatrix function
@@ -188,33 +223,33 @@
1 3
4 5
complexTensorArray -
- 1 + 0 i 3 + 0 i
- 4 + 0 i 5 + 0 i
+ 1 + 0 i 3 + 0 i
+ 4 + 0 i 5 + 0 i
3-D conversion
tensorArray -
1 3 4
5 7 8
9 11 12
complexTensorArray -
- 1 + 0 i 3 + 0 i 4 + 0 i
- 5 + 0 i 7 + 0 i 8 + 0 i
- 9 + 0 i 11 + 0 i 12 + 0 i
+ 1 + 0 i 3 + 0 i 4 + 0 i
+ 5 + 0 i 7 + 0 i 8 + 0 i
+ 9 + 0 i 11 + 0 i 12 + 0 i
/******************* Test 13 ************************/
Test ComplexTensorArray to ComplexMatrix conversion function
2-D conversion
complexTensorArray -
- 1 + 0.5 i 2 + 0 i
- 3 + 0 i 4 + 0 i
+ 1 + 0.5 i 2 + 0 i
+ 3 + 0 i 4 + 0 i
complexMatrix -
1 + 0.5 i 2 + 0 i
3 + 0 i 4 + 0 i
3-D conversion
complexTensorArray -
- 1 + 0.5 i 2 + 0 i 3 + 0 i
- 4 + 0 i 5 + 1 i 6 + 2 i
- 7 + 0 i 8 + 0 i 9 + 30 i
+ 1 + 0.5 i 2 + 0 i 3 + 0 i
+ 4 + 0 i 5 + 1 i 6 + 2 i
+ 7 + 0 i 8 + 0 i 9 + 30 i
complexMatrix -
1 + 0.5 i 2 + 0 i 3 + 0 i
4 + 0 i 5 + 1 i 6 + 2 i
@@ -225,29 +260,29 @@
2-D conversion
complexTensorArray -
- 1 + 0 i 2 + 0 i
- 3 + 0 i 4 + 0 i
+ 1 + 0 i 2 + 0 i
+ 3 + 0 i 4 + 0 i
tensorArray -
1 2
3 4
3-D conversion
complexTensorArray -
- 1 + 0 i 2 + 0 i 3 + 0 i
- 4 + 0 i 5 + 0 i 6 + 0 i
- 7 + 0 i 88 + 0 i 9.5 + 0 i
+ 1 + 0 i 2 + 0 i 3 + 0 i
+ 4 + 0 i 5 + 0 i 6 + 0 i
+ 7 + 0 i 88 + 0 i 9.5 + 0 i
tensorArray -
1 2 3
4 5 6
7 88 9.5
Failing conversion
complexTensorArray -
- 1 + 1 i 2 + 0 i 3 + 0 i
- 4 + 0 i 5 + 0 i 6 + 0 i
- 7 + 0 i 88 + 0 i 9.5 + 0 i
+ 1 + 1 i 2 + 0 i 3 + 0 i
+ 4 + 0 i 5 + 0 i 6 + 0 i
+ 7 + 0 i 88 + 0 i 9.5 + 0 i
Cannot convert to real matrix:
Indicee 0 in complexTensorArray is complex value.
complexTensorArray -
- 1 + 1 i 2 + 0 i 3 + 0 i
- 4 + 0 i 5 + 0 i 6 + 0 i
- 7 + 0 i 88 + 0 i 9.5 + 0 i
+ 1 + 1 i 2 + 0 i 3 + 0 i
+ 4 + 0 i 5 + 0 i 6 + 0 i
+ 7 + 0 i 88 + 0 i 9.5 + 0 i
In func 'ComplexTensorArray_ToTensorArray'. Cannot convert ComplexTensor to Real Tensor
Modified: long/3D/Gale/trunk/src/StGermain/Discretisation/Geometry/tests/testFullTensorMath.c
===================================================================
--- long/3D/Gale/trunk/src/StGermain/Discretisation/Geometry/tests/testFullTensorMath.c 2006-08-01 08:52:46 UTC (rev 4131)
+++ long/3D/Gale/trunk/src/StGermain/Discretisation/Geometry/tests/testFullTensorMath.c 2006-08-01 08:52:51 UTC (rev 4132)
@@ -38,7 +38,6 @@
#include <stdio.h>
-
int main( int argc, char* argv[] ) {
MPI_Comm CommWorld;
int rank;
@@ -57,7 +56,7 @@
MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */
- Stream* stream = Journal_Register( InfoStream_Type, "FullTensorMath" );
+ Stream* stream = Journal_Register( InfoStream_Type, "FullTensorMath" );
stJournal->firewallProducesAssert = False;
Stream_RedirectFile(Journal_Register( Error_Type, "FullTensorMath"), "FullTensorMath.txt");
Stream_RedirectFile(stream, "FullTensorMath.txt");
@@ -75,10 +74,14 @@
SymmetricTensor symmTensor;
TensorArray tensorArray;
ComplexTensorArray complexTensorArray;
+ ComplexEigenvector eigenvectorList[3], eigenvectorListCompare[3], eigenvectorListDiffs[3];
+ Cmplx **complexMatrix;
+ double errorTolerance;
+ Cmplx dummy1, dummy2, dummy3;
+ int eigenCount;
+ #define STG_FULLTENSORTEST_ERROR 1.0e-6;
- ComplexEigenvector eigenvectorList[3];
- Cmplx **complexMatrix;
-
+ errorTolerance = STG_FULLTENSORTEST_ERROR;
complexMatrix = Memory_Alloc_2DArray(Cmplx, 3, 3, "complexMatrix" );
tensor[0][0] = 3; tensor[0][1] = 21; tensor[0][2] = -1; tensor[0][3] = -99; tensor[0][4] = 9;
@@ -99,13 +102,64 @@
TensorArray_CalcAllEigenvectors( tensorArray, 2, eigenvectorList );
- Journal_PrintCmplx(stream, eigenvectorList[0].eigenvalue);
- Journal_PrintCmplx(stream, eigenvectorList[1].eigenvalue);
+ /* Set comparison eigenvecorList with correct solution */
+ eigenvectorListCompare[0].eigenvalue[REAL_PART] = -1;
+ eigenvectorListCompare[0].eigenvalue[IMAG_PART] = 0;
+
+ eigenvectorListCompare[1].eigenvalue[REAL_PART] = -6;
+ eigenvectorListCompare[1].eigenvalue[IMAG_PART] = 0;
- StGermain_PrintComplexVector(stream, eigenvectorList[0].vector, 2);
- StGermain_PrintComplexVector(stream, eigenvectorList[1].vector, 2);
+ eigenvectorListCompare[0].vector[0][REAL_PART] = -0.447214;
+ eigenvectorListCompare[0].vector[0][IMAG_PART] = 0;
+ eigenvectorListCompare[0].vector[1][REAL_PART] = -0.894427;
+ eigenvectorListCompare[0].vector[1][IMAG_PART] = 0;
+ eigenvectorListCompare[1].vector[0][REAL_PART] = -0.894427;
+ eigenvectorListCompare[1].vector[0][IMAG_PART] = 0;
+
+ eigenvectorListCompare[1].vector[1][REAL_PART] = 0.447214;
+ eigenvectorListCompare[1].vector[1][IMAG_PART] = 0;
+
+ /*Check if eigenvalue solution is within tolerance */
+ Cmplx_Subtract(eigenvectorListCompare[0].eigenvalue, eigenvectorList[0].eigenvalue,
+ eigenvectorListDiffs[0].eigenvalue);
+ Cmplx_Subtract(eigenvectorListCompare[1].eigenvalue, eigenvectorList[1].eigenvalue,
+ eigenvectorListDiffs[1].eigenvalue);
+
+ if ( ( Cmplx_Modulus(eigenvectorListDiffs[0].eigenvalue) <= errorTolerance ) &&
+ (Cmplx_Modulus(eigenvectorListDiffs[1].eigenvalue) <= errorTolerance) )
+ {
+ Journal_Printf(stream, "\nEigenvalues within tolerance, %g of:\n", errorTolerance);
+ }
+ else {
+ Journal_Printf(stream, "\nEigenvalues not within tolerance, %g of:\n", errorTolerance);
+ }
+
+ /* Print correct eigenvalues */
+ Journal_PrintCmplx(stream,eigenvectorListCompare[0].eigenvalue );
+ Journal_PrintCmplx(stream,eigenvectorListCompare[1].eigenvalue );
+ /* Check if eigenvector solutions are within tolerance */
+ StGermain_ComplexVectorSubtraction( eigenvectorListDiffs[0].vector,
+ eigenvectorListCompare[0].vector,
+ eigenvectorList[0].vector, 2);
+ StGermain_ComplexVectorSubtraction( eigenvectorListDiffs[1].vector,
+ eigenvectorListCompare[1].vector,
+ eigenvectorList[1].vector, 2);
+
+ if ( (StGermain_ComplexVectorMagnitude(eigenvectorListDiffs[0].vector, 2) <=errorTolerance) &&
+ (StGermain_ComplexVectorMagnitude(eigenvectorListDiffs[1].vector, 2) <=errorTolerance) )
+ {
+
+ Journal_Printf(stream, "\nEigenvectors within tolerance, %g of:\n", errorTolerance);
+ }
+ else {
+ Journal_Printf(stream, "\nEigenvectors not within tolerance, %g of:\n", errorTolerance);
+ }
+ /* Print out correct eigenvectors */
+ StGermain_PrintNamedComplexVector( stream,eigenvectorListCompare[0].vector ,2);
+ StGermain_PrintNamedComplexVector( stream,eigenvectorListCompare[1].vector ,2);
+
Journal_Printf( stream, "\n/******************* Test Eigenvector 2 ************************/\n");
Journal_Printf( stream, "Symmetric 3D Case - tested against:\n");
Journal_Printf( stream, "http://www.arndt-bruenner.de/mathe/scripts/engl_eigenwert.htm - 3/11/04.\n");
@@ -124,15 +178,85 @@
TensorArray_CalcAllEigenvectors( tensorArray, 3, eigenvectorList );
- Journal_PrintCmplx(stream, eigenvectorList[0].eigenvalue);
- Journal_PrintCmplx(stream, eigenvectorList[1].eigenvalue);
- Journal_PrintCmplx(stream, eigenvectorList[2].eigenvalue);
+ /* Set comparison eigenvecorList with correct solution */
+ eigenvectorListCompare[0].eigenvalue[REAL_PART] = -4.45970173;
+ eigenvectorListCompare[0].eigenvalue[IMAG_PART] = 0;
+
+ eigenvectorListCompare[1].eigenvalue[REAL_PART] = -9.96854402;
+ eigenvectorListCompare[1].eigenvalue[IMAG_PART] = 0;
+
+ eigenvectorListCompare[2].eigenvalue[REAL_PART] = 24.42824575;
+ eigenvectorListCompare[2].eigenvalue[IMAG_PART] = 0;
+
+ dummy1[IMAG_PART] = 0;
+ dummy2[IMAG_PART] = 0;
+ dummy3[IMAG_PART] = 0;
+ dummy1[REAL_PART] = -0.786471;
+ dummy2[REAL_PART] = 0.61348;
+ dummy3[REAL_PART] = 0.0714557;
+ ComplexVector_SetScalar( dummy1, dummy2, dummy3,
+ eigenvectorListCompare[0].vector );
+ dummy1[REAL_PART] = -0.364102;
+ dummy2[REAL_PART] = -0.553977;
+ dummy3[REAL_PART] = 0.748692;
+ ComplexVector_SetScalar( dummy1, dummy2, dummy3,
+ eigenvectorListCompare[1].vector );
+ dummy1[REAL_PART] = -0.498892;
+ dummy2[REAL_PART] = -0.562807;
+ dummy3[REAL_PART] = -0.659056;
+ ComplexVector_SetScalar( dummy1, dummy2, dummy3,
+ eigenvectorListCompare[2].vector );
+
+ /*Check if eigenvalue solution is within tolerance */
+ Cmplx_Subtract(eigenvectorListCompare[0].eigenvalue, eigenvectorList[0].eigenvalue,
+ eigenvectorListDiffs[0].eigenvalue);
+ Cmplx_Subtract(eigenvectorListCompare[1].eigenvalue, eigenvectorList[1].eigenvalue,
+ eigenvectorListDiffs[1].eigenvalue);
+ Cmplx_Subtract(eigenvectorListCompare[2].eigenvalue, eigenvectorList[2].eigenvalue,
+ eigenvectorListDiffs[2].eigenvalue);
- StGermain_PrintComplexVector(stream, eigenvectorList[0].vector, 3);
- StGermain_PrintComplexVector(stream, eigenvectorList[1].vector, 3);
- StGermain_PrintComplexVector(stream, eigenvectorList[2].vector, 3);
-
+ if ( ( Cmplx_Modulus(eigenvectorListDiffs[0].eigenvalue) <= errorTolerance ) &&
+ (Cmplx_Modulus(eigenvectorListDiffs[1].eigenvalue) <= errorTolerance) &&
+ (Cmplx_Modulus(eigenvectorListDiffs[2].eigenvalue) <= errorTolerance) ) {
+ Journal_Printf(stream, "\nEigenvalues within tolerance, %g of:\n", errorTolerance);
+ }
+ else {
+ Journal_Printf(stream, "\nEigenvalues not within tolerance, %g of:\n", errorTolerance);
+ }
+
+ /* Print correct eigenvalues */
+ Journal_PrintCmplx(stream,eigenvectorListCompare[0].eigenvalue );
+ Journal_PrintCmplx(stream,eigenvectorListCompare[1].eigenvalue );
+ Journal_PrintCmplx(stream,eigenvectorListCompare[2].eigenvalue );
+
+ /* Check if eigenvector solutions are within tolerance */
+ StGermain_ComplexVectorSubtraction( eigenvectorListDiffs[0].vector,
+ eigenvectorListCompare[0].vector,
+ eigenvectorList[0].vector, 3);
+ StGermain_ComplexVectorSubtraction( eigenvectorListDiffs[1].vector,
+ eigenvectorListCompare[1].vector,
+ eigenvectorList[1].vector, 3);
+ StGermain_ComplexVectorSubtraction( eigenvectorListDiffs[2].vector,
+ eigenvectorListCompare[2].vector,
+ eigenvectorList[2].vector, 3);
+
+
+ if ( (StGermain_ComplexVectorMagnitude(eigenvectorListDiffs[0].vector, 3) <=errorTolerance) &&
+ (StGermain_ComplexVectorMagnitude(eigenvectorListDiffs[1].vector, 3) <=errorTolerance) &&
+ (StGermain_ComplexVectorMagnitude(eigenvectorListDiffs[2].vector, 3) <=errorTolerance) )
+ {
+
+ Journal_Printf(stream, "\nEigenvectors within tolerance, %g of:\n", errorTolerance);
+ }
+ else {
+ Journal_Printf(stream, "\nEigenvectors not within tolerance, %g of:\n", errorTolerance);
+ }
+ /* Print out correct eigenvectors */
+ StGermain_PrintNamedComplexVector( stream,eigenvectorListCompare[0].vector ,3);
+ StGermain_PrintNamedComplexVector( stream,eigenvectorListCompare[1].vector ,3);
+ StGermain_PrintNamedComplexVector( stream,eigenvectorListCompare[2].vector ,3);
+
Journal_Printf( stream, "\n/******************* Test Eigenvector 3 ************************/\n");
Journal_Printf( stream, "Non-Symmetric test for 2-D\n\n");
@@ -140,17 +264,68 @@
tensorArray[FT2D_01] = 4;
tensorArray[FT2D_10] = 3;
tensorArray[FT2D_11] = 5;
-
-
+
Journal_PrintTensorArray(stream, tensorArray, 2);
TensorArray_CalcAllEigenvectors( tensorArray, 2, eigenvectorList );
- Journal_PrintCmplx(stream, eigenvectorList[0].eigenvalue);
- Journal_PrintCmplx(stream, eigenvectorList[1].eigenvalue);
+ /* Set comparison eigenvecorList with correct solution */
+ eigenvectorListCompare[0].eigenvalue[REAL_PART] = 1;
+ eigenvectorListCompare[0].eigenvalue[IMAG_PART] = 0;
+
+ eigenvectorListCompare[1].eigenvalue[REAL_PART] = 8;
+ eigenvectorListCompare[1].eigenvalue[IMAG_PART] = 0;
- StGermain_PrintComplexVector(stream, eigenvectorList[0].vector, 2);
- StGermain_PrintComplexVector(stream, eigenvectorList[1].vector, 2);
+ eigenvectorListCompare[0].vector[0][REAL_PART] = -0.8 ;
+ eigenvectorListCompare[0].vector[0][IMAG_PART] = 0;
+ eigenvectorListCompare[0].vector[1][REAL_PART] = 0.6;
+ eigenvectorListCompare[0].vector[1][IMAG_PART] = 0;
+
+ eigenvectorListCompare[1].vector[0][REAL_PART] = -0.707107 ;
+ eigenvectorListCompare[1].vector[0][IMAG_PART] = 0;
+
+ eigenvectorListCompare[1].vector[1][REAL_PART] = -0.707107;
+ eigenvectorListCompare[1].vector[1][IMAG_PART] = 0;
+
+ /*Check if eigenvalue solution is within tolerance */
+ Cmplx_Subtract(eigenvectorListCompare[0].eigenvalue, eigenvectorList[0].eigenvalue,
+ eigenvectorListDiffs[0].eigenvalue);
+ Cmplx_Subtract(eigenvectorListCompare[1].eigenvalue, eigenvectorList[1].eigenvalue,
+ eigenvectorListDiffs[1].eigenvalue);
+
+ if ( ( Cmplx_Modulus(eigenvectorListDiffs[0].eigenvalue) <= errorTolerance ) &&
+ (Cmplx_Modulus(eigenvectorListDiffs[1].eigenvalue) <= errorTolerance) )
+ {
+ Journal_Printf(stream, "\nEigenvalues within tolerance, %g of:\n", errorTolerance);
+ }
+ else {
+ Journal_Printf(stream, "\nEigenvalues not within tolerance, %g of:\n", errorTolerance);
+ }
+
+ /* Print correct eigenvalues */
+ Journal_PrintCmplx(stream,eigenvectorListCompare[0].eigenvalue );
+ Journal_PrintCmplx(stream,eigenvectorListCompare[1].eigenvalue );
+ /* Check if eigenvector solutions are within tolerance */
+ StGermain_ComplexVectorSubtraction( eigenvectorListDiffs[0].vector,
+ eigenvectorListCompare[0].vector,
+ eigenvectorList[0].vector, 2);
+ StGermain_ComplexVectorSubtraction( eigenvectorListDiffs[1].vector,
+ eigenvectorListCompare[1].vector,
+ eigenvectorList[1].vector, 2);
+
+ if ( (StGermain_ComplexVectorMagnitude(eigenvectorListDiffs[0].vector, 2) <=errorTolerance) &&
+ (StGermain_ComplexVectorMagnitude(eigenvectorListDiffs[1].vector, 2) <=errorTolerance) )
+ {
+
+ Journal_Printf(stream, "\nEigenvectors within tolerance, %g of:\n", errorTolerance);
+ }
+ else {
+ Journal_Printf(stream, "\nEigenvectors not within tolerance, %g of:\n", errorTolerance);
+ }
+ /* Print out correct eigenvectors */
+ StGermain_PrintNamedComplexVector( stream,eigenvectorListCompare[0].vector ,2);
+ StGermain_PrintNamedComplexVector( stream,eigenvectorListCompare[1].vector ,2);
+
Journal_Printf( stream, "\n");
Journal_Printf( stream, "\n/******************* Test Eigenvector 4 ************************/\n");
@@ -168,15 +343,85 @@
Journal_PrintTensorArray(stream, tensorArray, 3);
TensorArray_CalcAllEigenvectors( tensorArray, 3, eigenvectorList );
-
+
+ /* Set comparison eigenvecorList with correct solution */
+ eigenvectorListCompare[0].eigenvalue[REAL_PART] = 2.35424868893;
+ eigenvectorListCompare[0].eigenvalue[IMAG_PART] = 0;
- Journal_PrintCmplx( stream, eigenvectorList[0].eigenvalue);
- Journal_PrintCmplx( stream, eigenvectorList[1].eigenvalue);
- Journal_PrintCmplx( stream, eigenvectorList[2].eigenvalue);
+ eigenvectorListCompare[1].eigenvalue[REAL_PART] = 5;
+ eigenvectorListCompare[1].eigenvalue[IMAG_PART] = 0;
- StGermain_PrintComplexVector(stream, eigenvectorList[0].vector, 3);
- StGermain_PrintComplexVector(stream, eigenvectorList[1].vector, 3);
- StGermain_PrintComplexVector(stream, eigenvectorList[2].vector, 3);
+ eigenvectorListCompare[2].eigenvalue[REAL_PART] = 7.645751311;
+ eigenvectorListCompare[2].eigenvalue[IMAG_PART] = 0;
+
+ dummy1[IMAG_PART] = 0;
+ dummy2[IMAG_PART] = 0;
+ dummy3[IMAG_PART] = 0;
+
+ dummy1[REAL_PART] = -0.87674 ;
+ dummy2[REAL_PART] = 0;
+ dummy3[REAL_PART] = 0.480965 ;
+ ComplexVector_SetScalar( dummy1, dummy2, dummy3,
+ eigenvectorListCompare[0].vector );
+ dummy1[REAL_PART] = -0.867472 ;
+ dummy2[REAL_PART] = 0.40482;
+ dummy3[REAL_PART] = -0.289157 ;
+ ComplexVector_SetScalar( dummy1, dummy2, dummy3,
+ eigenvectorListCompare[1].vector );
+ dummy1[REAL_PART] = -0.635406;
+ dummy2[REAL_PART] = 0;
+ dummy3[REAL_PART] = -0.772178;
+ ComplexVector_SetScalar( dummy1, dummy2, dummy3,
+ eigenvectorListCompare[2].vector );
+
+ /*Check if eigenvalue solution is within tolerance */
+ Cmplx_Subtract(eigenvectorListCompare[0].eigenvalue, eigenvectorList[0].eigenvalue,
+ eigenvectorListDiffs[0].eigenvalue);
+ Cmplx_Subtract(eigenvectorListCompare[1].eigenvalue, eigenvectorList[1].eigenvalue,
+ eigenvectorListDiffs[1].eigenvalue);
+ Cmplx_Subtract(eigenvectorListCompare[2].eigenvalue, eigenvectorList[2].eigenvalue,
+ eigenvectorListDiffs[2].eigenvalue);
+
+ if ( ( Cmplx_Modulus(eigenvectorListDiffs[0].eigenvalue) <= errorTolerance ) &&
+ (Cmplx_Modulus(eigenvectorListDiffs[1].eigenvalue) <= errorTolerance) &&
+ (Cmplx_Modulus(eigenvectorListDiffs[2].eigenvalue) <= errorTolerance) ) {
+ Journal_Printf(stream, "\nEigenvalues within tolerance, %g of:\n", errorTolerance);
+ }
+ else {
+ Journal_Printf(stream, "\nEigenvalues not within tolerance, %g of:\n", errorTolerance);
+ }
+
+ /* Print correct eigenvalues */
+ Journal_PrintCmplx(stream,eigenvectorListCompare[0].eigenvalue );
+ Journal_PrintCmplx(stream,eigenvectorListCompare[1].eigenvalue );
+ Journal_PrintCmplx(stream,eigenvectorListCompare[2].eigenvalue );
+
+ /* Check if eigenvector solutions are within tolerance */
+ StGermain_ComplexVectorSubtraction( eigenvectorListDiffs[0].vector,
+ eigenvectorListCompare[0].vector,
+ eigenvectorList[0].vector, 3);
+ StGermain_ComplexVectorSubtraction( eigenvectorListDiffs[1].vector,
+ eigenvectorListCompare[1].vector,
+ eigenvectorList[1].vector, 3);
+ StGermain_ComplexVectorSubtraction( eigenvectorListDiffs[2].vector,
+ eigenvectorListCompare[2].vector,
+ eigenvectorList[2].vector, 3);
+
+
+ if ( (StGermain_ComplexVectorMagnitude(eigenvectorListDiffs[0].vector, 3) <=errorTolerance) &&
+ (StGermain_ComplexVectorMagnitude(eigenvectorListDiffs[1].vector, 3) <=errorTolerance) &&
+ (StGermain_ComplexVectorMagnitude(eigenvectorListDiffs[2].vector, 3) <=errorTolerance) )
+ {
+
+ Journal_Printf(stream, "\nEigenvectors within tolerance, %g of:\n", errorTolerance);
+ }
+ else {
+ Journal_Printf(stream, "\nEigenvectors not within tolerance, %g of:\n", errorTolerance);
+ }
+ /* Print out correct eigenvectors */
+ StGermain_PrintNamedComplexVector( stream,eigenvectorListCompare[0].vector ,3);
+ StGermain_PrintNamedComplexVector( stream,eigenvectorListCompare[1].vector ,3);
+ StGermain_PrintNamedComplexVector( stream,eigenvectorListCompare[2].vector ,3);
Journal_Printf( stream, "\n");
@@ -190,13 +435,66 @@
Journal_PrintTensorArray(stream, tensorArray, 2);
TensorArray_CalcAllEigenvectors( tensorArray, 2, eigenvectorList );
+
+ /* Set comparison eigenvecorList with correct solution */
+ eigenvectorListCompare[0].eigenvalue[REAL_PART] = 4;
+ eigenvectorListCompare[0].eigenvalue[IMAG_PART] = 0;
- Journal_PrintCmplx( stream, eigenvectorList[0].eigenvalue);
- Journal_PrintCmplx( stream, eigenvectorList[1].eigenvalue);
+ eigenvectorListCompare[1].eigenvalue[REAL_PART] = 5;
+ eigenvectorListCompare[1].eigenvalue[IMAG_PART] = 0;
+
+ eigenvectorListCompare[0].vector[0][REAL_PART] = 0.707107;
+ eigenvectorListCompare[0].vector[0][IMAG_PART] = 0;
+
+ eigenvectorListCompare[0].vector[1][REAL_PART] = -0.707107;
+ eigenvectorListCompare[0].vector[1][IMAG_PART] = 0;
+
+ eigenvectorListCompare[1].vector[0][REAL_PART] = 0;
+ eigenvectorListCompare[1].vector[0][IMAG_PART] = 0;
+
+ eigenvectorListCompare[1].vector[1][REAL_PART] = 1;
+ eigenvectorListCompare[1].vector[1][IMAG_PART] = 0;
- StGermain_PrintComplexVector(stream, eigenvectorList[0].vector, 2);
- StGermain_PrintComplexVector(stream, eigenvectorList[1].vector, 2);
+ /*Check if eigenvalue solution is within tolerance */
+ Cmplx_Subtract(eigenvectorListCompare[0].eigenvalue, eigenvectorList[0].eigenvalue,
+ eigenvectorListDiffs[0].eigenvalue);
+ Cmplx_Subtract(eigenvectorListCompare[1].eigenvalue, eigenvectorList[1].eigenvalue,
+ eigenvectorListDiffs[1].eigenvalue);
+
+ if ( ( Cmplx_Modulus(eigenvectorListDiffs[0].eigenvalue) <= errorTolerance ) &&
+ (Cmplx_Modulus(eigenvectorListDiffs[1].eigenvalue) <= errorTolerance) )
+ {
+ Journal_Printf(stream, "\nEigenvalues within tolerance, %g of:\n", errorTolerance);
+ }
+ else {
+ Journal_Printf(stream, "\nEigenvalues not within tolerance, %g of:\n", errorTolerance);
+ }
+ /* Print correct eigenvalues */
+ Journal_PrintCmplx(stream,eigenvectorListCompare[0].eigenvalue );
+ Journal_PrintCmplx(stream,eigenvectorListCompare[1].eigenvalue );
+
+ /* Check if eigenvector solutions are within tolerance */
+ StGermain_ComplexVectorSubtraction( eigenvectorListDiffs[0].vector,
+ eigenvectorListCompare[0].vector,
+ eigenvectorList[0].vector, 2);
+ StGermain_ComplexVectorSubtraction( eigenvectorListDiffs[1].vector,
+ eigenvectorListCompare[1].vector,
+ eigenvectorList[1].vector, 2);
+
+ if ( (StGermain_ComplexVectorMagnitude(eigenvectorListDiffs[0].vector, 2) <=errorTolerance) &&
+ (StGermain_ComplexVectorMagnitude(eigenvectorListDiffs[1].vector, 2) <=errorTolerance) )
+ {
+
+ Journal_Printf(stream, "\nEigenvectors within tolerance, %g of:\n", errorTolerance);
+ }
+ else {
+ Journal_Printf(stream, "\nEigenvectors not within tolerance, %g of:\n", errorTolerance);
+ }
+ /* Print out correct eigenvectors */
+ StGermain_PrintNamedComplexVector( stream,eigenvectorListCompare[0].vector ,2);
+ StGermain_PrintNamedComplexVector( stream,eigenvectorListCompare[1].vector ,2);
+
Journal_Printf( stream, "\n");
/* Test for complex answers */
@@ -214,11 +512,63 @@
Journal_PrintTensorArray(stream, tensorArray, 2);
TensorArray_CalcAllEigenvectors( tensorArray, 2, eigenvectorList );
- Journal_PrintCmplx( stream, eigenvectorList[0].eigenvalue);
- Journal_PrintCmplx( stream, eigenvectorList[1].eigenvalue);
+ /* Set comparison eigenvecorList with correct solution */
+ eigenvectorListCompare[0].eigenvalue[REAL_PART] = 1;
+ eigenvectorListCompare[0].eigenvalue[IMAG_PART] = 2;
- StGermain_PrintComplexVector(stream, eigenvectorList[0].vector, 2);
- StGermain_PrintComplexVector(stream, eigenvectorList[1].vector, 2);
+ eigenvectorListCompare[1].eigenvalue[REAL_PART] = 1;
+ eigenvectorListCompare[1].eigenvalue[IMAG_PART] = -2;
+
+ eigenvectorListCompare[0].vector[0][REAL_PART] = 0.408248;
+ eigenvectorListCompare[0].vector[0][IMAG_PART] = 0.408248;
+
+ eigenvectorListCompare[0].vector[1][REAL_PART] = 0.816497 ;
+ eigenvectorListCompare[0].vector[1][IMAG_PART] = 0;
+
+ eigenvectorListCompare[1].vector[0][REAL_PART] = 0.408248;
+ eigenvectorListCompare[1].vector[0][IMAG_PART] = -0.408248;
+
+ eigenvectorListCompare[1].vector[1][REAL_PART] = 0.816497;
+ eigenvectorListCompare[1].vector[1][IMAG_PART] = 0;
+
+ /*Check if eigenvalue solution is within tolerance */
+ Cmplx_Subtract(eigenvectorListCompare[0].eigenvalue, eigenvectorList[0].eigenvalue,
+ eigenvectorListDiffs[0].eigenvalue);
+ Cmplx_Subtract(eigenvectorListCompare[1].eigenvalue, eigenvectorList[1].eigenvalue,
+ eigenvectorListDiffs[1].eigenvalue);
+
+ if ( ( Cmplx_Modulus(eigenvectorListDiffs[0].eigenvalue) <= errorTolerance ) &&
+ (Cmplx_Modulus(eigenvectorListDiffs[1].eigenvalue) <= errorTolerance) )
+ {
+ Journal_Printf(stream, "\nEigenvalues within tolerance, %g of:\n", errorTolerance);
+ }
+ else {
+ Journal_Printf(stream, "\nEigenvalues not within tolerance, %g of:\n", errorTolerance);
+ }
+
+ /* Print correct eigenvalues */
+ Journal_PrintCmplx(stream,eigenvectorListCompare[0].eigenvalue );
+ Journal_PrintCmplx(stream,eigenvectorListCompare[1].eigenvalue );
+ /* Check if eigenvector solutions are within tolerance */
+ StGermain_ComplexVectorSubtraction( eigenvectorListDiffs[0].vector,
+ eigenvectorListCompare[0].vector,
+ eigenvectorList[0].vector, 2);
+ StGermain_ComplexVectorSubtraction( eigenvectorListDiffs[1].vector,
+ eigenvectorListCompare[1].vector,
+ eigenvectorList[1].vector, 2);
+
+ if ( (StGermain_ComplexVectorMagnitude(eigenvectorListDiffs[0].vector, 2) <=errorTolerance) &&
+ (StGermain_ComplexVectorMagnitude(eigenvectorListDiffs[1].vector, 2) <=errorTolerance) )
+ {
+
+ Journal_Printf(stream, "\nEigenvectors within tolerance, %g of:\n", errorTolerance);
+ }
+ else {
+ Journal_Printf(stream, "\nEigenvectors not within tolerance, %g of:\n", errorTolerance);
+ }
+ /* Print out correct eigenvectors */
+ StGermain_PrintNamedComplexVector( stream,eigenvectorListCompare[0].vector ,2);
+ StGermain_PrintNamedComplexVector( stream,eigenvectorListCompare[1].vector ,2);
Journal_Printf( stream, "\n/******************* Test Eigenvector 7 ************************/\n");
Journal_Printf( stream, "Non-Symmetric test with complex eigenvalues for 3-D\n");
@@ -238,19 +588,90 @@
Journal_PrintTensorArray(stream, tensorArray, 3);
TensorArray_CalcAllEigenvectors( tensorArray, 3, eigenvectorList );
+ /* Set comparison eigenvecorList with correct solution */
+ eigenvectorListCompare[0].eigenvalue[REAL_PART] = 1;
+ eigenvectorListCompare[0].eigenvalue[IMAG_PART] = 0;
+
+ eigenvectorListCompare[1].eigenvalue[REAL_PART] = 1;
+ eigenvectorListCompare[1].eigenvalue[IMAG_PART] = 2;
+
+ eigenvectorListCompare[2].eigenvalue[REAL_PART] = 1;
+ eigenvectorListCompare[2].eigenvalue[IMAG_PART] = -2;
+
+ dummy1[REAL_PART] = 0.485071 ; dummy1[IMAG_PART] = 0;
+ dummy2[REAL_PART] = -0.727607; dummy2[IMAG_PART] = 0;
+ dummy3[REAL_PART] = 0.485071; dummy3[IMAG_PART] = 0;
- Journal_PrintCmplx( stream, eigenvectorList[0].eigenvalue);
- Journal_PrintCmplx( stream, eigenvectorList[1].eigenvalue);
- Journal_PrintCmplx( stream, eigenvectorList[2].eigenvalue);
+ ComplexVector_SetScalar( dummy1, dummy2, dummy3,
+ eigenvectorListCompare[0].vector );
+
+ dummy1[REAL_PART] = 0; dummy1[IMAG_PART] = 0;
+ dummy2[REAL_PART] = 0.707107; dummy2[IMAG_PART] = 0;
+ dummy3[REAL_PART] = 0; dummy3[IMAG_PART] = -0.707107;
+
+ ComplexVector_SetScalar( dummy1, dummy2, dummy3,
+ eigenvectorListCompare[1].vector );
+
+ dummy1[REAL_PART] = 0; dummy1[IMAG_PART] = 0;
+ dummy2[REAL_PART] = 0.707107; dummy2[IMAG_PART] = 0;
+ dummy3[REAL_PART] = 0; dummy3[IMAG_PART] = 0.707107;
+
+ ComplexVector_SetScalar( dummy1, dummy2, dummy3,
+ eigenvectorListCompare[2].vector );
- StGermain_PrintComplexVector(stream, eigenvectorList[0].vector, 3);
- StGermain_PrintComplexVector(stream, eigenvectorList[1].vector, 3);
- StGermain_PrintComplexVector(stream, eigenvectorList[2].vector, 3);
+ /*Check if eigenvalue solution is within tolerance */
+ Cmplx_Subtract(eigenvectorListCompare[0].eigenvalue, eigenvectorList[0].eigenvalue,
+ eigenvectorListDiffs[0].eigenvalue);
+ Cmplx_Subtract(eigenvectorListCompare[1].eigenvalue, eigenvectorList[1].eigenvalue,
+ eigenvectorListDiffs[1].eigenvalue);
+ Cmplx_Subtract(eigenvectorListCompare[2].eigenvalue, eigenvectorList[2].eigenvalue,
+ eigenvectorListDiffs[2].eigenvalue);
+ if ( ( Cmplx_Modulus(eigenvectorListDiffs[0].eigenvalue) <= errorTolerance ) &&
+ (Cmplx_Modulus(eigenvectorListDiffs[1].eigenvalue) <= errorTolerance) &&
+ (Cmplx_Modulus(eigenvectorListDiffs[2].eigenvalue) <= errorTolerance) ) {
+ Journal_Printf(stream, "\nEigenvalues within tolerance, %g of:\n", errorTolerance);
+ }
+ else {
+ Journal_Printf(stream, "\nEigenvalues not within tolerance, %g of:\n", errorTolerance);
+ }
+
+ /* Print correct eigenvalues */
+ Journal_PrintCmplx(stream,eigenvectorListCompare[0].eigenvalue );
+ Journal_PrintCmplx(stream,eigenvectorListCompare[1].eigenvalue );
+ Journal_PrintCmplx(stream,eigenvectorListCompare[2].eigenvalue );
+
+ /* Check if eigenvector solutions are within tolerance */
+ StGermain_ComplexVectorSubtraction( eigenvectorListDiffs[0].vector,
+ eigenvectorListCompare[0].vector,
+ eigenvectorList[0].vector, 3);
+ StGermain_ComplexVectorSubtraction( eigenvectorListDiffs[1].vector,
+ eigenvectorListCompare[1].vector,
+ eigenvectorList[1].vector, 3);
+ StGermain_ComplexVectorSubtraction( eigenvectorListDiffs[2].vector,
+ eigenvectorListCompare[2].vector,
+ eigenvectorList[2].vector, 3);
+
+
+ if ( (StGermain_ComplexVectorMagnitude(eigenvectorListDiffs[0].vector, 3) <=errorTolerance) &&
+ (StGermain_ComplexVectorMagnitude(eigenvectorListDiffs[1].vector, 3) <=errorTolerance) &&
+ (StGermain_ComplexVectorMagnitude(eigenvectorListDiffs[2].vector, 3) <=errorTolerance) )
+ {
+
+ Journal_Printf(stream, "\nEigenvectors within tolerance, %g of:\n", errorTolerance);
+ }
+ else {
+ Journal_Printf(stream, "\nEigenvectors not within tolerance, %g of:\n", errorTolerance);
+ }
+ /* Print out correct eigenvectors */
+ StGermain_PrintNamedComplexVector( stream,eigenvectorListCompare[0].vector ,3);
+ StGermain_PrintNamedComplexVector( stream,eigenvectorListCompare[1].vector ,3);
+ StGermain_PrintNamedComplexVector( stream,eigenvectorListCompare[2].vector ,3);
+
Journal_Printf( stream, "\n");
Journal_Printf( stream, "\n/******************* Eigenvector Test 8 ************************/\n");
Journal_Printf( stream, "Test Calc eigenvectors function with repeated roots\n\n");
- Journal_Printf( stream, "Tested against Soluions in:\n");
+ Journal_Printf( stream, "Tested against Solutions in:\n");
Journal_Printf( stream, "Elementary Differential Equations and Boundary Value Problems, 6th Ed\n");
Journal_Printf( stream, "By William E. Boyce and Richard C. DiPrima\n");
Journal_Printf( stream, "Problem: ch 7.3, question 24\n\n");
@@ -267,21 +688,108 @@
Journal_PrintTensorArray(stream, tensorArray, 3);
TensorArray_CalcAllEigenvectors( tensorArray, 3, eigenvectorList );
- Journal_PrintCmplx( stream, eigenvectorList[0].eigenvalue);
- Journal_PrintCmplx( stream, eigenvectorList[1].eigenvalue);
- Journal_PrintCmplx( stream, eigenvectorList[2].eigenvalue);
+ /* Set comparison eigenvecorList with correct solution */
+ eigenvectorListCompare[0].eigenvalue[REAL_PART] = -1;
+ eigenvectorListCompare[0].eigenvalue[IMAG_PART] = 0;
- StGermain_PrintComplexVector(stream, eigenvectorList[0].vector, 3);
- StGermain_PrintComplexVector(stream, eigenvectorList[1].vector, 3);
- StGermain_PrintComplexVector(stream, eigenvectorList[2].vector, 3);
+ eigenvectorListCompare[1].eigenvalue[REAL_PART] = -1;
+ eigenvectorListCompare[1].eigenvalue[IMAG_PART] = 0;
+ eigenvectorListCompare[2].eigenvalue[REAL_PART] = 8;
+ eigenvectorListCompare[2].eigenvalue[IMAG_PART] = 0;
+
+ dummy1[IMAG_PART] = 0;
+ dummy2[IMAG_PART] = 0;
+ dummy3[IMAG_PART] = 0;
+
+ dummy1[REAL_PART] = 0;
+ dummy2[REAL_PART] = -0.894427;
+ dummy3[REAL_PART] = 0.447214;
+
+ ComplexVector_SetScalar( dummy1, dummy2, dummy3,
+ eigenvectorListCompare[0].vector );
+
+ dummy1[REAL_PART] = -0.719905 ;
+ dummy2[REAL_PART] = 0.519697;
+ dummy3[REAL_PART] = 0.460056;
+
+ ComplexVector_SetScalar( dummy1, dummy2, dummy3,
+ eigenvectorListCompare[1].vector );
+ dummy1[REAL_PART] = 0.666667;
+ dummy2[REAL_PART] = 0.333333;
+ dummy3[REAL_PART] = 0.666667;
+
+ ComplexVector_SetScalar( dummy1, dummy2, dummy3,
+ eigenvectorListCompare[2].vector );
+
+ /*Check if eigenvalue solution is within tolerance */
+ Cmplx_Subtract(eigenvectorListCompare[0].eigenvalue, eigenvectorList[0].eigenvalue,
+ eigenvectorListDiffs[0].eigenvalue);
+ Cmplx_Subtract(eigenvectorListCompare[1].eigenvalue, eigenvectorList[1].eigenvalue,
+ eigenvectorListDiffs[1].eigenvalue);
+ Cmplx_Subtract(eigenvectorListCompare[2].eigenvalue, eigenvectorList[2].eigenvalue,
+ eigenvectorListDiffs[2].eigenvalue);
+
+ if ( ( Cmplx_Modulus(eigenvectorListDiffs[0].eigenvalue) <= errorTolerance ) &&
+ (Cmplx_Modulus(eigenvectorListDiffs[1].eigenvalue) <= errorTolerance) &&
+ (Cmplx_Modulus(eigenvectorListDiffs[2].eigenvalue) <= errorTolerance) ) {
+ Journal_Printf(stream, "\nEigenvalues within tolerance, %g of:\n", errorTolerance);
+ }
+ else {
+ Journal_Printf(stream, "\nEigenvalues not within tolerance, %g of:\n", errorTolerance);
+ }
+
+ /* Print correct eigenvalues */
+ Journal_PrintCmplx(stream,eigenvectorListCompare[0].eigenvalue );
+ Journal_PrintCmplx(stream,eigenvectorListCompare[1].eigenvalue );
+ Journal_PrintCmplx(stream,eigenvectorListCompare[2].eigenvalue );
+
+ /* Check if non-repeated eigenvector solution is within tolerance */
+
+ StGermain_ComplexVectorSubtraction( eigenvectorListDiffs[2].vector,
+ eigenvectorListCompare[2].vector,
+ eigenvectorList[2].vector, 3);
+
+ /* Check if repeated eigenvectors follow correct Pattern */
+ for (eigenCount = 0; eigenCount < 2; eigenCount++) {
+ Cmplx_RealMultiply(eigenvectorList[eigenCount].vector[0], 2.0, dummy1 );
+ Cmplx_RealMultiply(eigenvectorList[eigenCount].vector[2], 2.0, dummy2 );
+ Cmplx_Add( eigenvectorList[eigenCount].vector[1], dummy1, dummy3 ) ;
+ Cmplx_Add( dummy3, dummy2, eigenvectorListDiffs[eigenCount].vector[0]);
+ }
+
+ if ( ((Cmplx_Modulus(eigenvectorListDiffs[0].vector[0])) <= errorTolerance ) &&
+ ((Cmplx_Modulus(eigenvectorListDiffs[1].vector[0])) <= errorTolerance ) &&
+ (StGermain_ComplexVectorMagnitude(eigenvectorListDiffs[2].vector, 3) <=errorTolerance) )
+ {
+
+ Journal_Printf(stream, "\nNon-repeated Eigenvector within tolerance, %g,\n", errorTolerance);
+ Journal_Printf(stream, "And Repeated Eigenvectors follow pattern:\n");
+ Journal_Printf(stream, "2 * x_1 + x_2 + 2 * x_3 = 0 to within tolerance, %g of:\n", errorTolerance);
+
+ }
+ else {
+ Journal_Printf(stream, "\nEither Non-repeated Eigenvector not within tolerance, %g,\n", errorTolerance);
+ Journal_Printf(stream, "Or Repeated Eigenvectors do not follow pattern:\n");
+ Journal_Printf(stream, "2 * x_1 + x_2 + 2 * x_3 = 0 to within tolerance, %g.\n", errorTolerance);
+ Journal_Printf(stream, "Calculated solution:\n");
+ StGermain_PrintNamedComplexVector( stream,eigenvectorList[0].vector ,3);
+ StGermain_PrintNamedComplexVector( stream,eigenvectorList[1].vector ,3);
+ StGermain_PrintNamedComplexVector( stream,eigenvectorList[2].vector ,3);
+ }
+ /* Print out correct eigenvectors */
+ Journal_Printf(stream, "One set of correct eigenvectors: \n");
+ StGermain_PrintNamedComplexVector( stream,eigenvectorListCompare[0].vector ,3);
+ StGermain_PrintNamedComplexVector( stream,eigenvectorListCompare[1].vector ,3);
+ StGermain_PrintNamedComplexVector( stream,eigenvectorListCompare[2].vector ,3);
+
Journal_Printf(stream, "\nFor repeated eigenvalues with non-degenerate eigenvectors, \n");
Journal_Printf(stream, "eigenvectors have to be in same plane as solution vectors \n");
Journal_Printf(stream, "rather than exactly the same, as eigenvectors can be arbitrarily set\n");
- Journal_Printf(stream, "based on tensor array equation.\n");
- Journal_Printf(stream, "For this problem, solution for eigenvectors collapses to:\n");
+ Journal_Printf(stream, "based on the specific tensor array equation.\n");
+ Journal_Printf(stream, "For this problem, solution for repeated eigenvectors collapses to:\n");
Journal_Printf(stream, "2 * x_1 + x_2 + 2 * x_3 = 0\n");
- Journal_Printf(stream, "Eigenvectors are then set base on what x_1, x_2 and x_3 are set to equal.\n");
+ Journal_Printf(stream, "Eigenvectors are then set based on what x_1, x_2 and x_3 are set to equal.\n");
/* Test Conversion of Symmetric Tensor to Full Tensor */
Journal_Printf( stream, "\n/******************* Test 9 ************************/\n");
@@ -398,8 +906,7 @@
ComplexTensorArray_ToComplexMatrix(complexTensorArray, 3, complexMatrix ) ;
Journal_PrintComplexMatrix(stream, complexMatrix, 3);
- Memory_Free(complexMatrix);
-
+ Memory_Free(complexMatrix);
Journal_Printf( stream, "\n/******************* Test 14 ************************/\n");
Journal_Printf( stream, "Test ComplexTensorArray to TensorArray conversion function\n\n");
More information about the cig-commits
mailing list