using System; using System.Collections.Generic; using System.Linq; using System.Text; using Annulus; using Azimuth; namespace Slipstream.UnitTests { public class BoundaryBodyTests : UnitTestSharp.TestFixture { public static SimplePolygon airfoil = new SimplePolygon(new Vector[] { new Vector(0, 0), new Vector(-10, 0), new Vector(-12, 1), new Vector(-11, 2), new Vector(-9, 3), new Vector(-8, 4), }); public static SimplePolygon bluffRectangle = new SimplePolygon(new Vector[] { new Vector(-10, -1), new Vector(-10, 1), new Vector(10, 1), new Vector(10, -1), }); public static SimplePolygon bluffSquare = new SimplePolygon(new Vector[] { new Vector(-5, -5), new Vector(-5, 5), new Vector(5, 5), new Vector(5, -5), }); public static SimplePolygon equiTris = new SimplePolygon(new Vector[] { new Vector(0, 0), new Vector(1, 0), new Vector(0.5, Math.Sqrt(3)/2), }); public void BluffSquareTest() { var perimeter = equiTris.CalculatePerimeter(); BoundaryBody AirfoilBody = new BoundaryBody(equiTris, Vector.Zero, 0.0, 3); AirfoilBody.LinearVelocity = Vector.Zero; var freeStreeamVelocity = new Vector(100, 0); AirfoilBody.EnforceBoundaryConditions((x, i) => freeStreeamVelocity); var panelVelocities = AirfoilBody.PanelPositionWS.Select(x => AirfoilBody.VelocityAtPoint(x)).ToList(); var panelNormals = AirfoilBody.PanelNormalsWS.ToList(); var panelTangents = AirfoilBody.PanelTangentsWS.ToList(); Scalar circulation = 0; for (int i = 0; i < panelVelocities.Count; ++i) { var dot = (AirfoilBody.LinearVelocity + panelVelocities[i]).DotProduct(panelNormals[i]); CheckEqual(0, dot); circulation += panelVelocities[i].DotProduct(panelTangents[i]); } CheckEqual(0, circulation); } } }