/[escript]/branches/domexper/weipa/src/FinleyElements.cpp
ViewVC logotype

Diff of /branches/domexper/weipa/src/FinleyElements.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 3246 by jfenwick, Mon Oct 4 01:46:30 2010 UTC revision 3247 by caltinay, Wed Oct 6 05:53:06 2010 UTC
# Line 100  namespace weipa { Line 100  namespace weipa {
100  FinleyElements::FinleyElements(const string& elementName, FinleyNodes_ptr nodeData)  FinleyElements::FinleyElements(const string& elementName, FinleyNodes_ptr nodeData)
101      : originalMesh(nodeData), name(elementName), numElements(0),      : originalMesh(nodeData), name(elementName), numElements(0),
102        numGhostElements(0), nodesPerElement(0),        numGhostElements(0), nodesPerElement(0),
103        type(ZONETYPE_UNKNOWN), finleyTypeId(NoRef), elementFactor(1)        type(ZONETYPE_UNKNOWN), finleyTypeId(Finley_NoRef), elementFactor(1)
104  {  {
105      nodeMesh.reset(new FinleyNodes(name));      nodeMesh.reset(new FinleyNodes(name));
106  }  }
# Line 266  bool FinleyElements::readFromNc(NcFile* Line 266  bool FinleyElements::readFromNc(NcFile*
266          var->get(&tag[0], numElements);          var->get(&tag[0], numElements);
267    
268          att = ncfile->get_att((name + string("_TypeId")).c_str());          att = ncfile->get_att((name + string("_TypeId")).c_str());
269          finleyTypeId = (ElementTypeId)att->as_int(0);          finleyTypeId = (Finley_ElementTypeId)att->as_int(0);
270          FinleyElementInfo f = getFinleyTypeInfo(finleyTypeId);          FinleyElementInfo f = getFinleyTypeInfo(finleyTypeId);
271          type = f.elementType;          type = f.elementType;
272          elementFactor = f.elementFactor;          elementFactor = f.elementFactor;
# Line 724  bool FinleyElements::writeToSilo(DBfile* Line 724  bool FinleyElements::writeToSilo(DBfile*
724  //  //
725  //  //
726  //  //
727  FinleyElementInfo FinleyElements::getFinleyTypeInfo(ElementTypeId typeId)  FinleyElementInfo FinleyElements::getFinleyTypeInfo(Finley_ElementTypeId typeId)
728  {  {
729      FinleyElementInfo ret;      FinleyElementInfo ret;
730      ret.multiCellIndices = NULL;      ret.multiCellIndices = NULL;
# Line 733  FinleyElementInfo FinleyElements::getFin Line 733  FinleyElementInfo FinleyElements::getFin
733      ret.quadDim = 0;      ret.quadDim = 0;
734    
735      switch (typeId) {      switch (typeId) {
736          case Point1_Contact://untested          case Finley_Point1_Contact://untested
737          case Line2Face_Contact://untested          case Finley_Line2Face_Contact://untested
738          case Line3Face_Contact://untested          case Finley_Line3Face_Contact://untested
739          case Line2Face://untested          case Finley_Line2Face://untested
740          case Line3Face://untested          case Finley_Line3Face://untested
741          case Point1://untested          case Finley_Point1://untested
742              cerr << "WARNING: Finley type " <<typeId<< " is untested!" << endl;              cerr << "WARNING: Finley type " <<typeId<< " is untested!" << endl;
743              ret.elementSize = 1;              ret.elementSize = 1;
744              ret.elementType = ZONETYPE_POLYGON;              ret.elementType = ZONETYPE_POLYGON;
745              break;              break;
746    
747          case Tri3Face_Contact://untested          case Finley_Tri3Face_Contact://untested
748          case Tri3Face://untested          case Finley_Tri3Face://untested
749              cerr << "WARNING: Finley type " <<typeId<< " is untested!" << endl;              cerr << "WARNING: Finley type " <<typeId<< " is untested!" << endl;
750          case Line2_Contact:          case Finley_Line2_Contact:
751          case Rec4Face_Contact:          case Finley_Rec4Face_Contact:
752          case Rec4Face:          case Finley_Rec4Face:
753          case Line2:          case Finley_Line2:
754              ret.elementSize = ret.reducedElementSize = 2;              ret.elementSize = ret.reducedElementSize = 2;
755              ret.elementType = ret.reducedElementType = ZONETYPE_BEAM;              ret.elementType = ret.reducedElementType = ZONETYPE_BEAM;
756              break;              break;
757    
758          case Line3:          case Finley_Line3:
759          case Line3Macro:          case Finley_Line3Macro:
760              ret.multiCellIndices = line3indices;              ret.multiCellIndices = line3indices;
761              ret.elementFactor = 2;              ret.elementFactor = 2;
762              // fall through              // fall through
763          case Line3_Contact:          case Finley_Line3_Contact:
764          case Tri6Face_Contact://untested          case Finley_Tri6Face_Contact://untested
765          case Rec8Face_Contact:          case Finley_Rec8Face_Contact:
766          case Tri6Face://untested          case Finley_Tri6Face://untested
767          case Rec8Face:          case Finley_Rec8Face:
768              //VTK_QUADRATIC_EDGE              //VTK_QUADRATIC_EDGE
769              ret.elementSize = ret.reducedElementSize = 2;              ret.elementSize = ret.reducedElementSize = 2;
770              ret.elementType = ret.reducedElementType = ZONETYPE_BEAM;              ret.elementType = ret.reducedElementType = ZONETYPE_BEAM;
771              break;              break;
772    
773          case Tet4Face_Contact://untested          case Finley_Tet4Face_Contact://untested
774          case Tet4Face://untested          case Finley_Tet4Face://untested
775              cerr << "WARNING: Finley type " <<typeId<< " is untested!" << endl;              cerr << "WARNING: Finley type " <<typeId<< " is untested!" << endl;
776          case Tri3_Contact:          case Finley_Tri3_Contact:
777          case Tri3:          case Finley_Tri3:
778              ret.elementSize = ret.reducedElementSize = 3;              ret.elementSize = ret.reducedElementSize = 3;
779              ret.elementType = ret.reducedElementType = ZONETYPE_TRIANGLE;              ret.elementType = ret.reducedElementType = ZONETYPE_TRIANGLE;
780              break;              break;
781    
782          case Rec4_Contact:          case Finley_Rec4_Contact:
783          case Hex8Face_Contact:          case Finley_Hex8Face_Contact:
784          case Hex8Face:          case Finley_Hex8Face:
785          case Rec4:          case Finley_Rec4:
786              ret.elementSize = ret.reducedElementSize = 4;              ret.elementSize = ret.reducedElementSize = 4;
787              ret.elementType = ret.reducedElementType = ZONETYPE_QUAD;              ret.elementType = ret.reducedElementType = ZONETYPE_QUAD;
788              break;              break;
789    
790          case Rec9:          case Finley_Rec9:
791          case Rec9Macro:          case Finley_Rec9Macro:
792              ret.useQuadNodes = true;              ret.useQuadNodes = true;
793              ret.quadDim = 2;              ret.quadDim = 2;
794              ret.multiCellIndices = rec9indices;              ret.multiCellIndices = rec9indices;
795              ret.elementFactor = 4;              ret.elementFactor = 4;
796              // fall through              // fall through
797          case Rec9_Contact:          case Finley_Rec9_Contact:
798              ret.elementSize = ret.reducedElementSize = 4;              ret.elementSize = ret.reducedElementSize = 4;
799              ret.elementType = ret.reducedElementType = ZONETYPE_QUAD;              ret.elementType = ret.reducedElementType = ZONETYPE_QUAD;
800              break;              break;
801    
802          case Tet4:          case Finley_Tet4:
803              ret.elementSize = ret.reducedElementSize = 4;              ret.elementSize = ret.reducedElementSize = 4;
804              ret.elementType = ret.reducedElementType = ZONETYPE_TET;              ret.elementType = ret.reducedElementType = ZONETYPE_TET;
805              break;              break;
806    
807          case Tri6:          case Finley_Tri6:
808          case Tri6Macro:          case Finley_Tri6Macro:
809              ret.useQuadNodes = true;              ret.useQuadNodes = true;
810              ret.quadDim = 2;              ret.quadDim = 2;
811              ret.multiCellIndices = tri6indices;              ret.multiCellIndices = tri6indices;
812              ret.elementFactor = 4;              ret.elementFactor = 4;
813              // fall through              // fall through
814          case Tri6_Contact:          case Finley_Tri6_Contact:
815          case Tet10Face_Contact://untested          case Finley_Tet10Face_Contact://untested
816          case Tet10Face://untested          case Finley_Tet10Face://untested
817              //VTK_QUADRATIC_TRIANGLE              //VTK_QUADRATIC_TRIANGLE
818              ret.elementSize = ret.reducedElementSize = 3;              ret.elementSize = ret.reducedElementSize = 3;
819              ret.elementType = ret.reducedElementType = ZONETYPE_TRIANGLE;              ret.elementType = ret.reducedElementType = ZONETYPE_TRIANGLE;
820              break;              break;
821    
822          case Rec8:          case Finley_Rec8:
823              ret.multiCellIndices = rec8indices;              ret.multiCellIndices = rec8indices;
824              ret.elementFactor = 6;              ret.elementFactor = 6;
825              // fall through              // fall through
826          case Hex20Face:          case Finley_Hex20Face:
827          case Rec8_Contact:          case Finley_Rec8_Contact:
828          case Hex20Face_Contact:          case Finley_Hex20Face_Contact:
829              //VTK_QUADRATIC_QUAD              //VTK_QUADRATIC_QUAD
830              ret.elementSize = 3;              ret.elementSize = 3;
831              ret.elementType = ZONETYPE_TRIANGLE;              ret.elementType = ZONETYPE_TRIANGLE;
# Line 833  FinleyElementInfo FinleyElements::getFin Line 833  FinleyElementInfo FinleyElements::getFin
833              ret.reducedElementType = ZONETYPE_QUAD;              ret.reducedElementType = ZONETYPE_QUAD;
834              break;              break;
835    
836          case Tet10:          case Finley_Tet10:
837          case Tet10Macro:          case Finley_Tet10Macro:
838              //VTK_QUADRATIC_TETRA              //VTK_QUADRATIC_TETRA
839              ret.useQuadNodes = true;              ret.useQuadNodes = true;
840              ret.quadDim = 3;              ret.quadDim = 3;
# Line 844  FinleyElementInfo FinleyElements::getFin Line 844  FinleyElementInfo FinleyElements::getFin
844              ret.elementType = ret.reducedElementType = ZONETYPE_TET;              ret.elementType = ret.reducedElementType = ZONETYPE_TET;
845              break;              break;
846    
847          case Hex20:          case Finley_Hex20:
848              //VTK_QUADRATIC_HEXAHEDRON              //VTK_QUADRATIC_HEXAHEDRON
849              ret.multiCellIndices = hex20indices;              ret.multiCellIndices = hex20indices;
850              ret.elementFactor = 36;              ret.elementFactor = 36;
# Line 854  FinleyElementInfo FinleyElements::getFin Line 854  FinleyElementInfo FinleyElements::getFin
854              ret.reducedElementType = ZONETYPE_HEX;              ret.reducedElementType = ZONETYPE_HEX;
855              break;              break;
856    
857          case Hex27:          case Finley_Hex27:
858          case Hex27Macro:          case Finley_Hex27Macro:
859              ret.useQuadNodes = true;              ret.useQuadNodes = true;
860              ret.quadDim = 3;              ret.quadDim = 3;
861              ret.multiCellIndices = hex27indices;              ret.multiCellIndices = hex27indices;
862              ret.elementFactor = 8;              ret.elementFactor = 8;
863              // fall through              // fall through
864          case Hex8:          case Finley_Hex8:
865              ret.elementSize = ret.reducedElementSize = 8;              ret.elementSize = ret.reducedElementSize = 8;
866              ret.elementType = ret.reducedElementType = ZONETYPE_HEX;              ret.elementType = ret.reducedElementType = ZONETYPE_HEX;
867              break;              break;
# Line 990  QuadMaskInfo FinleyElements::buildQuadMa Line 990  QuadMaskInfo FinleyElements::buildQuadMa
990      if (numQNodes == 0)      if (numQNodes == 0)
991          return qmi;          return qmi;
992    
993      if (finleyTypeId == Line3Macro) {      if (finleyTypeId == Finley_Line3Macro) {
994          for (int i=0; i<elementFactor; i++) {          for (int i=0; i<elementFactor; i++) {
995              const float bounds[] = { 0.25, 0.75 };              const float bounds[] = { 0.25, 0.75 };
996              IntVec m(numQNodes, 0);              IntVec m(numQNodes, 0);
# Line 1007  QuadMaskInfo FinleyElements::buildQuadMa Line 1007  QuadMaskInfo FinleyElements::buildQuadMa
1007              else              else
1008                  qmi.factor.push_back(hits);                  qmi.factor.push_back(hits);
1009          }          }
1010      } else if ((finleyTypeId == Tri6) || (finleyTypeId == Tri6Macro)) {      } else if ((finleyTypeId == Finley_Tri6) || (finleyTypeId == Finley_Tri6Macro)) {
1011          for (int i=0; i<elementFactor; i++) {          for (int i=0; i<elementFactor; i++) {
1012              const float bounds[][2] = { { 0., 0. }, { 1., 0. },              const float bounds[][2] = { { 0., 0. }, { 1., 0. },
1013                                          { 0., 1. }, { .5, 0. },                                          { 0., 1. }, { .5, 0. },
# Line 1035  QuadMaskInfo FinleyElements::buildQuadMa Line 1035  QuadMaskInfo FinleyElements::buildQuadMa
1035              }              }
1036              qmi.mask.push_back(m);              qmi.mask.push_back(m);
1037          }          }
1038      } else if ((finleyTypeId == Tet10) || (finleyTypeId == Tet10Macro)) {      } else if ((finleyTypeId == Finley_Tet10) || (finleyTypeId == Finley_Tet10Macro)) {
1039          for (int i=0; i<elementFactor; i++) {          for (int i=0; i<elementFactor; i++) {
1040              const float bounds[][3] = {              const float bounds[][3] = {
1041                  { 0., 0., 0. },                  { 0., 0., 0. },
# Line 1073  QuadMaskInfo FinleyElements::buildQuadMa Line 1073  QuadMaskInfo FinleyElements::buildQuadMa
1073              }              }
1074              qmi.mask.push_back(m);              qmi.mask.push_back(m);
1075          }          }
1076      } else if ((finleyTypeId == Rec9) || (finleyTypeId == Rec9Macro)) {      } else if ((finleyTypeId == Finley_Rec9) || (finleyTypeId == Finley_Rec9Macro)) {
1077          for (int i=0; i<elementFactor; i++) {          for (int i=0; i<elementFactor; i++) {
1078              const float bounds[][2] = { { 0.25, 0.25 }, { 0.75, 0.25 },              const float bounds[][2] = { { 0.25, 0.25 }, { 0.75, 0.25 },
1079                                          { 0.25, 0.75 }, { 0.75, 0.75 } };                                          { 0.25, 0.75 }, { 0.75, 0.75 } };
# Line 1092  QuadMaskInfo FinleyElements::buildQuadMa Line 1092  QuadMaskInfo FinleyElements::buildQuadMa
1092              else              else
1093                  qmi.factor.push_back(hits);                  qmi.factor.push_back(hits);
1094          }          }
1095      } else if ((finleyTypeId == Hex27) || (finleyTypeId == Hex27Macro) ){      } else if ((finleyTypeId == Finley_Hex27) || (finleyTypeId == Finley_Hex27Macro) ){
1096          for (int i=0; i<elementFactor; i++) {          for (int i=0; i<elementFactor; i++) {
1097              const float bounds[][3] = {              const float bounds[][3] = {
1098                  { 0.25, 0.25, 0.25 }, { 0.75, 0.25, 0.25 },                  { 0.25, 0.25, 0.25 }, { 0.75, 0.25, 0.25 },

Legend:
Removed from v.3246  
changed lines
  Added in v.3247

  ViewVC Help
Powered by ViewVC 1.1.26