void _HomogeneousEssentialBCs_AssignFromXML( void* analyticSolution, Stg_ComponentFactory* cf, void* data ) { HomogeneousEssentialBCs* self = (HomogeneousEssentialBCs*)analyticSolution; AbstractContext* context; ConditionFunction* condFunc; _AnalyticSolution_AssignFromXML( self, cf, data ); self->temperatureField = Stg_ComponentFactory_ConstructByName( cf, (Name)"TemperatureField", FeVariable, True, data ); AnalyticSolution_RegisterFeVariableWithAnalyticFunction( self, self->temperatureField, HomogeneousEssentialBCs_TemperatureFunction ); self->angle = StGermain_DegreeToRadian (Stg_ComponentFactory_GetRootDictDouble( cf, (Dictionary_Entry_Key)"VelocitySkewAngle", 45.0 ) ); /* Create Condition Functions */ context = Stg_ComponentFactory_ConstructByName( cf, (Name)"context", AbstractContext, True, data ); condFunc = ConditionFunction_New( HomogeneousEssentialBCs_Velocity_SkewToMesh, (Name)"Velocity_SkewToMesh", NULL ); ConditionFunction_Register_Add( context->condFunc_Register, condFunc ); condFunc = ConditionFunction_New( HomogeneousEssentialBCs_TemperatureBC, (Name)"Temperature_StepFunction", NULL ); ConditionFunction_Register_Add( context->condFunc_Register, condFunc ); }
int main( int argc, char* argv[] ) { MPI_Comm CommWorld; int rank; int numProcessors; int procToWatch; /* Initialise MPI, get world info */ MPI_Init( &argc, &argv ); MPI_Comm_dup( MPI_COMM_WORLD, &CommWorld ); MPI_Comm_size( CommWorld, &numProcessors ); MPI_Comm_rank( CommWorld, &rank ); Base_Init( &argc, &argv ); DiscretisationGeometry_Init( &argc, &argv ); MPI_Barrier( CommWorld ); /* Ensures copyright info always come first in output */ if( argc >= 2 ) { procToWatch = atoi( argv[1] ); } else { procToWatch = 0; } if( rank == procToWatch ) { double angle; double rectOriginal[] = {2.4,5,-10}; double spherical[3]; double rectangular[3]; Index dim; Stream* stream = Journal_Register( Info_Type, __FILE__ ); printf("\n****************************\n"); printf("Test angle conversion macros\n"); printf("39 degrees in radians = %2.3f\n", StGermain_DegreeToRadian( 37.0 + 3 ) ); printf("2.468 radians in degrees = %2.3f\n", StGermain_RadianToDegree( 1.234 * 2 ) ); printf("\n****************************\n"); printf("Test domain finding function\n"); angle = 1.5; printf("Angle %lf is equivalent to %lf\n", angle, StGermain_TrigDomain(angle) ); printf("Sine test: %lf = %lf\n", sin(angle), sin( StGermain_TrigDomain(angle) ) ); angle = -1.2; printf("Angle %lf is equivalent to %lf\n", angle, StGermain_TrigDomain(angle) ); printf("Sine test: %lf = %lf\n", sin(angle), sin( StGermain_TrigDomain(angle) ) ); angle = 20.0; printf("Angle %lf is equivalent to %lf\n", angle, StGermain_TrigDomain(angle) ); printf("Sine test: %lf = %lf\n", sin(angle), sin( StGermain_TrigDomain(angle) ) ); printf("\n****************************\n"); printf("Test quadrant finding function\n"); angle = 45; printf("Angle %lf degrees is in quadrant %d\n", angle, StGermain_TrigQuadrant( StGermain_DegreeToRadian(angle) )); angle = 120; printf("Angle %lf degrees is in quadrant %d\n", angle, StGermain_TrigQuadrant( StGermain_DegreeToRadian(angle) )); angle = 195; printf("Angle %lf degrees is in quadrant %d\n", angle, StGermain_TrigQuadrant( StGermain_DegreeToRadian(angle) )); angle = 340; printf("Angle %lf degrees is in quadrant %d\n", angle, StGermain_TrigQuadrant( StGermain_DegreeToRadian(angle) )); angle = 730; printf("Angle %lf degrees is in quadrant %d\n", angle, StGermain_TrigQuadrant( StGermain_DegreeToRadian(angle) )); angle = -135; printf("Angle %lf degrees is in quadrant %d\n", angle, StGermain_TrigQuadrant( StGermain_DegreeToRadian(angle) )); printf("\n****************************\n"); printf("Test coordinate conversion functions 2D\n"); dim = 2; StGermain_PrintNamedVector( stream, rectOriginal, dim ); StGermain_RectangularToSpherical( spherical, rectOriginal, dim ); StGermain_PrintNamedVector( stream, spherical, dim ); StGermain_SphericalToRectangular( rectangular, spherical, dim ); StGermain_PrintNamedVector( stream, rectangular, dim ); printf("\n****************************\n"); printf("Test coordinate conversion functions 3D\n"); dim = 3; StGermain_PrintNamedVector( stream, rectOriginal, dim ); StGermain_RectangularToSpherical( spherical, rectOriginal, dim ); StGermain_PrintNamedVector( stream, spherical, dim ); StGermain_SphericalToRectangular( rectangular, spherical, dim ); StGermain_PrintNamedVector( stream, rectangular, dim ); } printf("\n"); DiscretisationGeometry_Finalise(); Base_Finalise(); /* Close off MPI */ MPI_Finalize(); return 0; }