[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