private static void TestMbbBeamHardCoded() { // Parameters int numElementsX = 60, numElementsY = 20; double filterAreaRadius = 1.5; // Define the optimization var material = new ElasticMaterial2D(StressState2D.PlaneStress) { YoungModulus = youngModulus, PoissonRatio = 0.3 }; var fem = new LinearFemAnalysis2DUniformHardcoded(numElementsX, numElementsY, material, LinearFemAnalysis2DUniformHardcoded.BoundaryConditions.MbbBeam); var filter = new MeshIndependentSensitivityFilter2DUniform(numElementsX, numElementsY, filterAreaRadius); TestMbbBeam(fem, filter); }
private static void TestCantileverBeamHardCoded() { // Parameters int numElementsX = 32, numElementsY = 20; double filterAreaRadius = 1.2; // Define the fem analysis and the filter var material = new ElasticMaterial2D(StressState2D.PlaneStress) { YoungModulus = 1.0, PoissonRatio = 0.3 }; var fem = new LinearFemAnalysis2DUniformHardcoded(numElementsX, numElementsY, material, LinearFemAnalysis2DUniformHardcoded.BoundaryConditions.ShortCantilever); var filter = new MeshIndependentSensitivityFilter2DUniform(numElementsX, numElementsY, filterAreaRadius); // Run the test TestCantileverBeam(fem, filter); }
private static void TestCantileverBeamWith2LoadCasesHardCoded() { // Parameters int numElementsX = 30, numElementsY = 30; double filterAreaRadius = 1.2, volumeFraction = 0.4, penalty = 3.0; // Define the optimization var material = new ElasticMaterial2D(StressState2D.PlaneStress) { YoungModulus = youngModulus, PoissonRatio = 0.3 }; var fem = new LinearFemAnalysis2DUniformHardcoded(numElementsX, numElementsY, material, LinearFemAnalysis2DUniformHardcoded.BoundaryConditions.Cantilever2LoadCases); var filter = new MeshIndependentSensitivityFilter2DUniform(numElementsX, numElementsY, filterAreaRadius); var materialInterpolation = new PowerLawMaterialInterpolation(youngModulus, penalty, 1E-3); var simp = new TopologySimpLinear2D(fem, optimAlgorithmBuilder, filter, materialInterpolation, volumeFraction); var logger = new ObjectiveFunctionLogger(); simp.Logger = logger; // Run the optimization simp.Initialize(); (double compliance, Vector densities) = simp.Optimize(); // Check the history of the compliance (objective function) var expectedCompliances = Vector.CreateFromArray( TopologySimp99LinesTests.ComplianceHistoryForCantileverWith2LoadCases); Assert.True(expectedCompliances.Equals( Vector.CreateFromArray(logger.ObjectiveFunctionValues.ToArray()), 1E-11)); // Check the optimum element densities (design variables). string densitiesPath = Directory.GetParent(Directory.GetCurrentDirectory()).Parent.Parent.FullName + @"\Resources\topology99lines_cantilever_loadcases_densities.txt"; var reader = new FullMatrixReader(false, ','); Vector densitiesExpected = reader.ReadFile(densitiesPath).Reshape(false); Assert.True(densitiesExpected.Equals(densities, 1E-11)); }