public void CalcStrainAndStressGlobal(List <Node> nodes, Material material) { double E = material.GetE(); double nu = material.GetNu(); Cmatrix C = new Cmatrix(E, nu); Matrix <double> C_matrix = C.CreateMatrix(); for (int i = 0; i < nodes.Count; i++) { List <Vector <double> > stress = nodes[i].GetStress(); double amount = stress.Count; Vector <double> globalStress = Vector <double> .Build.Dense(6); for (int k = 0; k < stress.Count; k++) { globalStress[0] += stress[k][0]; globalStress[1] += stress[k][1]; globalStress[2] += stress[k][2]; globalStress[3] += stress[k][3]; globalStress[4] += stress[k][4]; globalStress[5] += stress[k][5]; } for (int j = 0; j < globalStress.Count; j++) { globalStress[j] = (double)globalStress[j] / amount; } nodes[i].SetGlobalStrain(C_matrix.Inverse().Multiply(globalStress)); //Adding Mises var tempStressVec = Vector <double> .Build.Dense(globalStress.Count + 1); globalStress.Storage.CopySubVectorTo(tempStressVec.Storage, 0, 0, 6); double Sxx = globalStress[0]; double Syy = globalStress[1]; double Szz = globalStress[2]; double Sxy = globalStress[3]; double Sxz = globalStress[4]; double Syz = globalStress[5]; double mises = Math.Sqrt(0.5 * (Math.Pow(Sxx - Syy, 2) + Math.Pow(Syy - Szz, 2) + Math.Pow(Szz - Sxx, 2)) + 3 * (Math.Pow(Sxy, 2) + Math.Pow(Sxz, 2) + Math.Pow(Syz, 2))); tempStressVec.At(6, mises); nodes[i].SetGlobalStress(tempStressVec); } }
public void CalcStrainAndStress(List <Element> elements, Material material) { double E = material.GetE(); double nu = material.GetNu(); Cmatrix C = new Cmatrix(E, nu); Matrix <double> C_matrix = C.CreateMatrix(); List <Matrix <double> > B_e = new List <Matrix <double> >(); List <int> c_e = new List <int>(); List <Node> nodes_e = new List <Node>(); StrainCalc sC = new StrainCalc(); for (int i = 0; i < elements.Count; i++) { B_e = elements[i].GetBMatrixes(); nodes_e = elements[i].GetVertices(); sC.StrainCalculations(B_e, nodes_e, C_matrix); } }