private static void TestTriangle() { var t = 0.01; var e = 210e9; var nu = 0.2; var n1 = new Node(new Point(0, 0, 0)); var n2 = new Node(new Point(3, 5, 7)); var n3 = new Node(new Point(1, -5, 4)); var dkt = new TriangleFlatShell() { Behavior = PlaneElementBehaviour.ThinPlate, PoissonRatio = nu, ElasticModulus = e, Thickness = t }; dkt.Nodes[0] = n1; dkt.Nodes[1] = n2; dkt.Nodes[2] = n3; var tri = new TriangleElement(); tri.Behavior = PlateElementBehaviours.Shell; tri.Section = new UniformParametric2DSection() { T = t }; tri.Material = new UniformIsotropicMaterial(e, nu);// {E = e, Nu = nu}; tri.Nodes[0] = n1; tri.Nodes[1] = n2; tri.Nodes[2] = n3; var kTri = tri.GetLocalStifnessMatrix(); var kDkt = dkt.GetLocalPlateBendingStiffnessMatrix(); var d = kTri - kDkt; var xi = 0.162598494; var eta = 0.284984989; var b1 = new DktHelper().GetBMatrixAt(tri, xi, eta); var lpts = dkt.GetLocalPoints(); var b2 = DktElement.GetBMatrix(xi, eta, new[] { lpts[0].X, lpts[1].X, lpts[2].X }, new[] { lpts[0].Y, lpts[1].Y, lpts[2].Y }); // new DktHelper().GetBMatrixAt(tri, tri.GetTransformationMatrix(), xi, eta); tri.GetLocalStifnessMatrix(); //GC.Collect(); var db = b1 - b2; }
public Force[] GetGlobalEquivalentNodalLoads(DktElement element) { var a = (element as DktElement).GetArea(); Vector local = Vector.Zero; if (CoordinationSystem == CoordinationSystem.Global) { var global = new Vector(_ux, _uy, _uz); local = element.TranformGlobalToLocal(global); } else { local = new Vector(_ux, _uy, _uz); } local.X = local.Y = 0;//dkt only local Uz var glob = element.TranformLocalToGlobal(local); var buf = new Force[] { new Force(glob * a / 3, Vector.Zero), new Force(glob * a / 3, Vector.Zero), new Force(glob * a / 3, Vector.Zero) }; return(buf); }
private void AddDktElement(MeshBuilder bldr, DktElement elm) { PolygonYz section = null; var r = ElementVisualThickness / 2; var p1 = elm.Nodes[0].Location; var p2 = elm.Nodes[1].Location; var p3 = elm.Nodes[2].Location; bldr.AddTriangle(p1, p3, p2); }
private Force[] GetGlobalEquivalentNodalLoads(DktElement elm) { //using lumped method. var area = elm.GetArea(); var totv = area * elm.Thickness; var totfx = _vx * totv; var totfy = _vy * totv; var totfz = _vz * totv; var f = new Force(totfx / 3, totfy / 3, totfz / 3, 0, 0, 0); return(new Force[] { f, f, f }); }
public static void Test2() { //a console beam #region creating model var model = new Model(); var l = 10; //in [m] var w = 1; var t = 0.1; // var e = 210e9; //3600 ksi var no = 0.2; //Poisson ratio var n = 10; var m = 100; var span = 0.1; var nodes = new Node[n + 1][]; for (var i = 0; i <= n; i++) { nodes[i] = new Node[m + 1]; for (var j = 0; j <= m; j++) { model.Nodes.Add(nodes[i][j] = new Node(i * span, j * span, 0)); if (j == 0) { nodes[i][j].Constraints = Constraint.Fixed; } var newCns = new Constraint(DofConstraint.Fixed, DofConstraint.Fixed, DofConstraint.Released, DofConstraint.Released, DofConstraint.Released, DofConstraint.Fixed); nodes[i][j].Constraints = nodes[i][j].Constraints & newCns; } } for (var i = 0; i < n; i++) { for (var j = 0; j < m; j++) { //first elements var elm1 = new DktElement() { ElasticModulus = e, PoissonRatio = no, Thickness = t }; elm1.Nodes[0] = nodes[i][j]; elm1.Nodes[1] = nodes[i][j + 1]; elm1.Nodes[2] = nodes[i + 1][j]; model.Elements.Add(elm1); //second elements var elm2 = new DktElement() { ElasticModulus = e, PoissonRatio = no, Thickness = t }; elm2.Nodes[0] = nodes[i + 1][j + 1]; elm2.Nodes[1] = nodes[i][j + 1]; elm2.Nodes[2] = nodes[i + 1][j]; model.Elements.Add(elm2); } } //loading, 0.1 kips/sq. in. on all elements foreach (var elm in model.Elements) { elm.Loads.Add(new UniformLoadForPlanarElements() { CoordinationSystem = CoordinationSystem.Global, Uz = -1e3 }); } //test loading, not one who is defined at pdf /* * for (var i = 0; i < n; i++) * { * for (var j = 0; j < n; j++) * { * nodes[i][j].Loads.Add(new NodalLoad(new Force(0, 0, 100, 0, 0, 0))); * } * } */ #endregion model.Trace.Listeners.Add(new ConsoleTraceListener()); new ModelWarningChecker().CheckModel(model); model.Solve(); var d = nodes[n / 2][m].GetNodalDisplacement(); }
public static void Test1() { //Example 7, page 120 of "Kaushalkumar Kansara" thesis #region creating model var model = new Model(); var l = 144 * 0.0254; //in [m] var t = 6 * 0.0254; // var e = 24821126255.44; //3600 ksi var no = 0.2; //Poisson ratio var n = 9; var span = l / (n - 1); var nodes = new Node[n][]; for (var i = 0; i < n; i++) { nodes[i] = new Node[n]; for (var j = 0; j < n; j++) { model.Nodes.Add(nodes[i][j] = new Node(i * span, j * span, 0)); if (i == 0 || i == n - 1 || j == 0 || j == n - 1) { nodes[i][j].Constraints = Constraint.Fixed; } var newCns = new Constraint(DofConstraint.Fixed, DofConstraint.Fixed, DofConstraint.Released, DofConstraint.Released, DofConstraint.Released, DofConstraint.Fixed); nodes[i][j].Constraints = nodes[i][j].Constraints & newCns; } } for (var i = 0; i < n - 1; i++) { for (var j = 0; j < n - 1; j++) { //first elements var elm1 = new DktElement() { ElasticModulus = e, PoissonRatio = no, Thickness = t }; elm1.Nodes[0] = nodes[i][j]; elm1.Nodes[1] = nodes[i][j + 1]; elm1.Nodes[2] = nodes[i + 1][j]; model.Elements.Add(elm1); //second elements var elm2 = new DktElement() { ElasticModulus = e, PoissonRatio = no, Thickness = t }; elm2.Nodes[0] = nodes[i + 1][j + 1]; elm2.Nodes[1] = nodes[i][j + 1]; elm2.Nodes[2] = nodes[i + 1][j]; model.Elements.Add(elm2); } } //loading, 0.1 kips/sq. in. on all elements foreach (var elm in model.Elements) { elm.Loads.Add(new UniformLoadForPlanarElements() { CoordinationSystem = CoordinationSystem.Global, Uz = 689475.728 //0.1 kips/sq. in. }); } //test loading, not one who is defined at pdf /* * for (var i = 0; i < n; i++) * { * for (var j = 0; j < n; j++) * { * nodes[i][j].Loads.Add(new NodalLoad(new Force(0, 0, 100, 0, 0, 0))); * } * } */ #endregion model.Trace.Listeners.Add(new ConsoleTraceListener()); new ModelWarningChecker().CheckModel(model); model.Solve(); var d = nodes[n / 2][n / 2].GetNodalDisplacement(); }