private void SetTri(FEWorld world, uint valueId) { System.Diagnostics.Debug.Assert(Type == ElementType.Tri); if (Type != ElementType.Tri) { return; } FieldValue fv = world.GetFieldValue(valueId); uint quantityId = fv.QuantityId; int feOrder; { uint feId = world.GetTriangleFEIdFromMesh(quantityId, MeshId, 0); // 先頭の要素 System.Diagnostics.Debug.Assert(feId != 0); TriangleFE triFE = world.GetTriangleFE(quantityId, feId); feOrder = triFE.Order; ElemPtCount = triFE.NodeCount; } Indexs = new uint[ElemPtCount * ElemCount]; for (int iTri = 0; iTri < ElemCount; iTri++) { uint feId = world.GetTriangleFEIdFromMesh(quantityId, MeshId, (uint)iTri); System.Diagnostics.Debug.Assert(feId != 0); TriangleFE triFE = world.GetTriangleFE(quantityId, feId); for (int iPt = 0; iPt < ElemPtCount; iPt++) { Indexs[iTri * ElemPtCount + iPt] = (uint)triFE.NodeCoordIds[iPt]; } } }
public void SetColors(uint bubbleValueId, FieldDerivativeType dt, FEWorld world, IColorMap colorMap) { FieldValue fv = world.GetFieldValue(bubbleValueId); System.Diagnostics.Debug.Assert(fv.IsBubble == true); uint quantityId = fv.QuantityId; var mesh = world.Mesh; MeshType meshType; int[] vertexs; mesh.GetConnectivity(MeshId, out meshType, out vertexs); if (Type == ElementType.Tri) { Colors = new float[ElemCount * 3]; for (int iTri = 0; iTri < ElemCount; iTri++) { // Bubble uint feId = world.GetTriangleFEIdFromMesh(quantityId, MeshId, (uint)iTri); System.Diagnostics.Debug.Assert(feId != 0); double value = fv.GetShowValue((int)(feId - 1), 0, dt); var color = colorMap.GetColor(value); for (int iColor = 0; iColor < 3; iColor++) { Colors[iTri * 3 + iColor] = (float)color[iColor]; } } } else if (Type == ElementType.Quad) { // TRIと同じでよいが要素IDを取得するメソッドが現状ない throw new NotImplementedException(); } }
private void UpdateSymmetricTensor2(uint valueId, FieldDerivativeType dt, FEWorld world) { ValueDof = 6; FieldValue fv = world.GetFieldValue(valueId); uint quantityId = fv.QuantityId; uint dof = fv.Dof; System.Diagnostics.Debug.Assert(fv.IsBubble == true); var mesh = world.Mesh; MeshType meshType; int[] vertexs; mesh.GetConnectivity(MeshId, out meshType, out vertexs); if (Type == ElementType.Tri) { Values = new double[ElemCount * ValueDof]; for (int iTri = 0; iTri < ElemCount; iTri++) { // Bubble uint feId = world.GetTriangleFEIdFromMesh(quantityId, MeshId, (uint)iTri); System.Diagnostics.Debug.Assert(feId != 0); double[] sigma = new double[dof]; for (int iDof = 0; iDof < dof; iDof++) { sigma[iDof] = fv.GetShowValue((int)(feId - 1), iDof, dt); } double[] vecs; double ls; double[] vecl; double ll; GetPrincipalStressVectorForSymmetricTensor2(sigma, out vecs, out ls, out vecl, out ll); Values[iTri * ValueDof + 0] = vecs[0]; Values[iTri * ValueDof + 1] = vecs[1]; Values[iTri * ValueDof + 2] = ls; Values[iTri * ValueDof + 3] = vecl[0]; Values[iTri * ValueDof + 4] = vecl[1]; Values[iTri * ValueDof + 5] = ll; } } else if (Type == ElementType.Quad) { // TRIと同じでよいが要素IDを取得するメソッドが現状ない throw new NotImplementedException(); } }
private void UpdateVector(uint valueId, FieldDerivativeType dt, FEWorld world) { ValueDof = 2; FieldValue fv = world.GetFieldValue(valueId); uint quantityId = fv.QuantityId; uint dof = fv.Dof; System.Diagnostics.Debug.Assert(fv.IsBubble == true); var mesh = world.Mesh; MeshType meshType; int[] vertexs; mesh.GetConnectivity(MeshId, out meshType, out vertexs); if (Type == ElementType.Tri) { Values = new double[ElemCount * ValueDof]; for (int iTri = 0; iTri < ElemCount; iTri++) { // Bubble uint feId = world.GetTriangleFEIdFromMesh(quantityId, MeshId, (uint)iTri); System.Diagnostics.Debug.Assert(feId != 0); System.Diagnostics.Debug.Assert(dof >= ValueDof); for (int iDof = 0; iDof < ValueDof; iDof++) { double u = fv.GetShowValue((int)(feId - 1), iDof, dt); Values[iTri * ValueDof + iDof] = u; } } } else if (Type == ElementType.Quad) { // TRIと同じでよいが要素IDを取得するメソッドが現状ない throw new NotImplementedException(); } }