[cig-commits] r3949 - in long/3D/Gale/trunk/src/StgFEM: . Discretisation/src

walter at geodynamics.org walter at geodynamics.org
Thu Jul 6 02:08:19 PDT 2006


Author: walter
Date: 2006-07-06 02:08:19 -0700 (Thu, 06 Jul 2006)
New Revision: 3949

Modified:
   long/3D/Gale/trunk/src/StgFEM/
   long/3D/Gale/trunk/src/StgFEM/Discretisation/src/AnalyticSolution.c
   long/3D/Gale/trunk/src/StgFEM/Discretisation/src/FeVariable.h
Log:
 r665 at earth:  boo | 2006-07-06 02:04:20 -0700
  r658 at earth (orig r599):  RobertTurnbull | 2006-07-02 06:15:05 -0700
  Adding some verbose output stuff to AnalyticSolution functions
  	If you want to print the values of the analytic field and the calculated for each node then
  	set analyticSolutionVerbose as true in your input file or on the command line (i.e. --analyticSolutionVerbose=True)
  
 



Property changes on: long/3D/Gale/trunk/src/StgFEM
___________________________________________________________________
Name: svk:merge
   - 38867592-cf10-0410-9e16-a142ea72ac34:/cig:664
db209038-57f2-0310-97fa-b160e0ae9d04:/trunk:598
   + 38867592-cf10-0410-9e16-a142ea72ac34:/cig:665
db209038-57f2-0310-97fa-b160e0ae9d04:/trunk:599

Modified: long/3D/Gale/trunk/src/StgFEM/Discretisation/src/AnalyticSolution.c
===================================================================
--- long/3D/Gale/trunk/src/StgFEM/Discretisation/src/AnalyticSolution.c	2006-07-06 09:08:03 UTC (rev 3948)
+++ long/3D/Gale/trunk/src/StgFEM/Discretisation/src/AnalyticSolution.c	2006-07-06 09:08:19 UTC (rev 3949)
@@ -108,7 +108,7 @@
 	return self;
 }
 
-void _AnalyticSolution_Init( AnalyticSolution* self, Swarm* integrationSwarm, LiveComponentRegister* LC_Register, AbstractContext* context ) {
+void _AnalyticSolution_Init( AnalyticSolution* self, Swarm* integrationSwarm, LiveComponentRegister* LC_Register, AbstractContext* context, Bool verboseMode ) {
 	self->LC_Register = LC_Register;
 	self->integrationSwarm = integrationSwarm;
 	self->context = context;
@@ -125,6 +125,11 @@
 			_AnalyticSolution_Initialise, self );
 	EP_AppendClassHook( Context_GetEntryPoint( context, AbstractContext_EP_DumpClass ), 
 			AnalyticSolution_TestAll, self );
+
+	if ( verboseMode ) {
+		Stream* infoStream = Journal_MyStream( Info_Type, self );
+		Stream_SetLevel( infoStream, 2 );
+	}
 }
 
 void _AnalyticSolution_Delete( void* analyticSolution ) {
@@ -161,11 +166,13 @@
 	AnalyticSolution* self = (AnalyticSolution*)analyticSolution;
 	AbstractContext*  context;
 	Swarm*            integrationSwarm;
+	Bool              verboseMode;
 
 	context = Stg_ComponentFactory_ConstructByName( cf, "context", AbstractContext, True );
 	integrationSwarm = Stg_ComponentFactory_ConstructByName( cf, "gaussSwarm", Swarm, True );
+	verboseMode = Stg_ComponentFactory_GetRootDictBool( cf, "analyticSolutionVerbose", False );
 
-	_AnalyticSolution_Init( self, integrationSwarm, cf->LCRegister, context );
+	_AnalyticSolution_Init( self, integrationSwarm, cf->LCRegister, context, verboseMode );
 }
 
 void _AnalyticSolution_Build( void* analyticSolution, void* data ) {
@@ -213,6 +220,8 @@
 	Dof_Index                                    dofAtEachNodeCount;
 	Node_DomainIndex                             dNode_I;
 	double*                                      value;
+	Stream*                                      infoStream = Journal_MyStream( Info_Type, self );
+	FeVariable*                                  feVariable;
 
 	/* Do some error checking */
 	assert( Stg_ObjectList_Count( self->analyticFeVariableList ) >= analyticFeVariable_I );
@@ -222,6 +231,7 @@
 		Stg_CheckType( Stg_ObjectList_At( self->analyticFeVariableList, analyticFeVariable_I ), FeVariable );
 	solutionFunction   = (AnalyticSolution_FeVariableSolutionFunction*) 
 		Stg_ObjectList_ObjectAt( self->analyticFeVariableFuncList, analyticFeVariable_I );
+	feVariable = AnalyticSolution_GetFeVariableFromAnalyticFeVariable( self, analyticFeVariable );
 
 	/* Get number of degrees of freedom at each node (assuming they are the same) */
 	dofAtEachNodeCount = analyticFeVariable->dofLayout->dofCounts[0];
@@ -237,6 +247,36 @@
 
 		/* Put value on node */
 		FeVariable_SetValueAtNode( analyticFeVariable, dNode_I, value );
+
+		/* Print verbose information */
+		if ( Stream_IsPrintableLevel( infoStream, 2 ) ) {
+			Dimension_Index dim = analyticFeVariable->dim;
+			Dimension_Index dim_I;
+			Dof_Index       dof_I;
+
+			/* Print Coord */
+			Journal_Printf( infoStream, "Node = %u Coord ( ", dNode_I );
+			for ( dim_I = 0 ; dim_I < dim - 1 ; dim_I++ ) {
+				Journal_Printf( infoStream, "%g, ", coord[ dim_I ] );
+			}
+			Journal_Printf( infoStream, "%g ) ", coord[ dim_I ] );
+
+			/* Print Analytic Values */
+			Journal_Printf( infoStream, "%s ( ", analyticFeVariable->name );
+			for ( dof_I = 0 ; dof_I < dofAtEachNodeCount - 1 ; dof_I++ ) {
+				Journal_Printf( infoStream, "%g, ", value[ dof_I ] );
+			}
+			Journal_Printf( infoStream, "%g ) ", value[ dof_I ] );
+
+			/* Print FeVariable Values */
+			memset( value, 0, dofAtEachNodeCount * sizeof(double) );
+			FeVariable_GetValueAtNode( feVariable, dNode_I, value );
+			Journal_Printf( infoStream, "%s ( ", feVariable->name );
+			for ( dof_I = 0 ; dof_I < dofAtEachNodeCount - 1 ; dof_I++ ) {
+				Journal_Printf( infoStream, "%g, ", value[ dof_I ] );
+			}
+			Journal_Printf( infoStream, "%g )\n", value[ dof_I ] );			
+		}
 	}
 
 	Memory_Free( value );

Modified: long/3D/Gale/trunk/src/StgFEM/Discretisation/src/FeVariable.h
===================================================================
--- long/3D/Gale/trunk/src/StgFEM/Discretisation/src/FeVariable.h	2006-07-06 09:08:03 UTC (rev 3948)
+++ long/3D/Gale/trunk/src/StgFEM/Discretisation/src/FeVariable.h	2006-07-06 09:08:19 UTC (rev 3949)
@@ -56,7 +56,7 @@
 	extern const Type FeVariable_Type;
 
 	typedef void (FeVariable_InterpolateWithinElementFunction) (void* fieldVariable, Element_DomainIndex dElement_I, Coord xi, double* value );
-	typedef void (FeVariable_GetValueAtNodeFunction) (void* feVariable, Node_DomainIndex dElement_I, double* value );
+	typedef void (FeVariable_GetValueAtNodeFunction) (void* feVariable, Node_DomainIndex dNode_I, double* value );
 	
 	/** FeVariable class contents */
 	#define __FeVariable \
@@ -237,7 +237,7 @@
 	/** Prints out the value at each DOF for this FeVariable */
 	void FeVariable_PrintLocalDiscreteValues( void* variable, Stream* stream );
 
-	void _FeVariable_GetValueAtNode( void* feVariable, Node_LocalIndex lNode_I, double* value ) ;
+	void _FeVariable_GetValueAtNode( void* feVariable, Node_DomainIndex dNode_I, double* value ) ;
 
 	/* --- Public Functions --- */
 



More information about the cig-commits mailing list