예제 #1
0
 public ContinuumElement3DNonLinearDefGradFactory(IContinuumMaterial3DDefGrad commonMaterial, IDynamicMaterial commonDynamicProperties,
                                                  double lambdag)
 {
     this.commonDynamicProperties = commonDynamicProperties;
     this.commonMaterial          = commonMaterial;
     this.lambdag = lambdag;
 }
예제 #2
0
        public Hexa8NonLinearDefGrad(IContinuumMaterial3DDefGrad material, IQuadrature3D quadratureForStiffness)
        {
            this.nGaussPoints           = quadratureForStiffness.IntegrationPoints.Count;
            this.QuadratureForStiffness = quadratureForStiffness;
            this.Interpolation          = InterpolationHexa8Reverse.UniqueInstance;

            materialsAtGaussPoints = new IContinuumMaterial3DDefGrad[nGaussPoints];
            for (int i = 0; i < nGaussPoints; i++)
            {
                materialsAtGaussPoints[i] = (IContinuumMaterial3DDefGrad)material.Clone();
            }
        }
예제 #3
0
        private ContinuumElement3DNonLinearDefGrad CreateElement(CellType cellType, IReadOnlyList <Node> nodes,
                                                                 IContinuumMaterial3DDefGrad material, IDynamicMaterial commonDynamicProperties)
        {
            int numGPs = integrationsForStiffness[cellType].IntegrationPoints.Count;
            var materialsAtGaussPoints = new IContinuumMaterial3DDefGrad[numGPs];

            for (int gp = 0; gp < numGPs; ++gp)
            {
                materialsAtGaussPoints[gp] = (IContinuumMaterial3DDefGrad)commonMaterial.Clone();
            }
            return(new ContinuumElement3DNonLinearDefGrad(nodes, interpolations[cellType],
                                                          integrationsForStiffness[cellType], integrationsForMass[cellType], extrapolations[cellType],
                                                          material, commonDynamicProperties, lambdag));
        }
예제 #4
0
        public Hexa8ThermoHyperElastic(IContinuumMaterial3DDefGrad hyperElasticMaterial, ThermalMaterial thermalMaterial,
                                       IQuadrature3D quadratureForStiffness, IQuadrature3D quadratureForMass, IGaussPointExtrapolation3D gaussPointExtrapolation)
        {
            this.thermalMaterial             = thermalMaterial;
            this.nGaussPoints                = quadratureForStiffness.IntegrationPoints.Count;
            this.QuadratureForConsistentMass = quadratureForMass;
            this.QuadratureForStiffness      = quadratureForStiffness;
            this.Interpolation               = InterpolationHexa8Reverse.UniqueInstance;

            materialsAtGaussPoints = new IContinuumMaterial3DDefGrad[nGaussPoints];
            for (int i = 0; i < nGaussPoints; i++)
            {
                materialsAtGaussPoints[i] = (IContinuumMaterial3DDefGrad)hyperElasticMaterial.Clone();
            }
        }
예제 #5
0
        public ContinuumElement3DNonLinearDefGrad(IReadOnlyList <Node> nodes, IContinuumMaterial3DDefGrad material, IQuadrature3D quadratureForStiffness,
                                                  IIsoparametricInterpolation3D interpolation)
        {
            this.nGaussPoints           = quadratureForStiffness.IntegrationPoints.Count;
            this.QuadratureForStiffness = quadratureForStiffness;
            this.Interpolation          = interpolation;


            materialsAtGaussPoints = new IContinuumMaterial3DDefGrad[nGaussPoints];
            for (int i = 0; i < nGaussPoints; i++)
            {
                materialsAtGaussPoints[i] = (IContinuumMaterial3DDefGrad)material.Clone();
            }

            dofTypes = new IDofType[nodes.Count][];
            for (int i = 0; i < nodes.Count; i++)
            {
                dofTypes[i] = new IDofType[]
                {
                    StructuralDof.TranslationX, StructuralDof.TranslationY, StructuralDof.TranslationZ
                };
            }
        }
예제 #6
0
        internal static int DefineContinuumElement3DNonLinearDefGrad(Model model, IContinuumMaterial3DDefGrad material3D, IDynamicMaterial dynamicMaterial)
        {
            // Node creation
            var node1 = new Node(id: 1, x: 0.0, y: 0.0, z: 0.0);
            var node2 = new Node(id: 2, x: 100.0, y: 0.0, z: 0.0);
            var node3 = new Node(id: 3, x: 0.0, y: 100.0, z: 0.0);
            var node4 = new Node(id: 4, x: 100.0, y: 100.0, z: 0.0);
            var node5 = new Node(id: 5, x: 0.0, y: 0.0, z: 100.0);
            var node6 = new Node(id: 6, x: 100.0, y: 0.0, z: 100.0);
            var node7 = new Node(id: 7, x: 0.0, y: 100.0, z: 100.0);
            var node8 = new Node(id: 8, x: 100.0, y: 100.0, z: 100.0);

            // Create List of nodes
            IList <Node> nodes = new List <Node>();

            nodes.Add(node1);
            nodes.Add(node2);
            nodes.Add(node3);
            nodes.Add(node4);
            nodes.Add(node5);
            nodes.Add(node6);
            nodes.Add(node7);
            nodes.Add(node8);

            numberOfNodes = nodes.Count;

            // Add nodes to the nodes dictonary of the model
            for (int i = 0; i < numberOfNodes; ++i)
            {
                model.NodesDictionary.Add(i, nodes[i]);
            }

            int[][] connectivityMatrix = new int[8][];
            connectivityMatrix[0] = new int[] { 1, 1, 2, 4, 3, 5, 6, 8, 7 };

            var factory = new ContinuumElement3DNonLinearDefGradFactory(material3D, dynamicMaterial, lambdag);

            for (int i = 0; i < 1; i++)
            {
                List <Node> elementNodeSet = new List <Node>(8);
                for (int j = 1; j < 9; j++)
                {
                    elementNodeSet.Add((Node)model.NodesDictionary[connectivityMatrix[i][j] - 1]);
                }

                var hexa8element = new Element()
                {
                    ID          = connectivityMatrix[i][0],
                    ElementType = factory.CreateElement(CellType.Hexa8, elementNodeSet),
                };

                for (int j = 1; j < 9; j++)
                {
                    hexa8element.AddNode(model.NodesDictionary[connectivityMatrix[i][j] - 1]);
                }

                model.ElementsDictionary.Add(hexa8element.ID, hexa8element);
                model.SubdomainsDictionary[0].Elements.Add(hexa8element);
            }

            return(numberOfNodes);
        }