コード例 #1
0
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 );
}
コード例 #2
0
ファイル: testTrigMath.c プロジェクト: bmi-forum/bmi-pyre
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;
}