public AbaqusProblemBuilder(double[][] shellVertices, int[][] shellFaces, IList <int> a1, IList <int> a2, IList <int> bc) { ShellVertices = shellVertices; ShellFaces = shellFaces; ShellProperties = new AbaqusShellElementProperty[ShellFaces.Length]; var shellProp = new AbaqusShellElementProperty(0.01, 5e9, 1, 0); for (int i = 0; i < ShellFaces.Length; i++) { ShellProperties[i] = shellProp; } int nodeNum = shellVertices.Length; // actuator length (in m) double[] pta_0, pta_1; double sec, l, alpha, E, density; AbaqusTrussElementProperty trussProp; // A1 pta_0 = shellVertices[a1[0]]; pta_1 = shellVertices[a1[1]]; l = Math.Sqrt( (pta_1[0] - pta_0[0]) * (pta_1[0] - pta_0[0]) + (pta_1[1] - pta_0[1]) * (pta_1[1] - pta_0[1]) + (pta_1[2] - pta_0[2]) * (pta_1[2] - pta_0[2]) ); E = 210e9; density = 8; sec = Math.PI * Math.Pow(0.1, 2); alpha = 1e-3 / l; trussProp = new AbaqusTrussElementProperty(sec, E, density, alpha); A1 = new Actuator(a1[0], a1[1], nodeNum, nodeNum + 1, trussProp); // A1 pta_0 = shellVertices[a2[0]]; pta_1 = shellVertices[a2[1]]; l = Math.Sqrt( (pta_1[0] - pta_0[0]) * (pta_1[0] - pta_0[0]) + (pta_1[1] - pta_0[1]) * (pta_1[1] - pta_0[1]) + (pta_1[2] - pta_0[2]) * (pta_1[2] - pta_0[2]) ); alpha = 1e-3 / l; trussProp = new AbaqusTrussElementProperty(sec, E, density, alpha); A2 = new Actuator(a2[0], a2[1], nodeNum + 2, nodeNum + 3, trussProp); // BC BC = new BoundaryCondition[bc.Count]; for (int i = 0; i < bc.Count; i++) { BC[i] = BoundaryCondition.CreateEncastreBC(bc[i]); } }
public Actuator(int shellNodeNum_0, int shellNodeNum_1, int trussNodeNum_0, int trussNodeNum_1, AbaqusTrussElementProperty prop) { ShellNode_0 = shellNodeNum_0; ShellNode_1 = shellNodeNum_1; TrussNode_0 = trussNodeNum_0; TrussNode_1 = trussNodeNum_1; Property = prop; }