/[escript]/branches/domexper/finley/src/Mesh_saveVTK.c
ViewVC logotype

Diff of /branches/domexper/finley/src/Mesh_saveVTK.c

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 88  void create_MPIInfo(MPI_Info& info) Line 88  void create_MPIInfo(MPI_Info& info)
88    
89  /* Returns one if the node given by coords and idx is within the quadrant  /* Returns one if the node given by coords and idx is within the quadrant
90   * indexed by q and if the element type is Rec9 or Hex27, zero otherwise */   * indexed by q and if the element type is Rec9 or Hex27, zero otherwise */
91  int nodeInQuadrant(const double *coords, ElementTypeId type, int idx, int q)  int nodeInQuadrant(const double *coords, Finley_ElementTypeId type, int idx, int q)
92  {  {
93  #define INSIDE_1D(_X_,_C_,_R_) ( ABS((_X_)-(_C_)) <= (_R_) )  #define INSIDE_1D(_X_,_C_,_R_) ( ABS((_X_)-(_C_)) <= (_R_) )
94  #define INSIDE_2D(_X_,_Y_,_CX_,_CY_,_R_) ( INSIDE_1D(_X_,_CX_,_R_) && INSIDE_1D(_Y_,_CY_,_R_))  #define INSIDE_2D(_X_,_Y_,_CX_,_CY_,_R_) ( INSIDE_1D(_X_,_CX_,_R_) && INSIDE_1D(_Y_,_CY_,_R_))
95  #define INSIDE_3D(_X_,_Y_,_Z_,_CX_,_CY_,_CZ_,_R_) ( INSIDE_1D(_X_,_CX_,_R_) && INSIDE_1D(_Y_,_CY_,_R_) && INSIDE_1D(_Z_,_CZ_,_R_) )  #define INSIDE_3D(_X_,_Y_,_Z_,_CX_,_CY_,_CZ_,_R_) ( INSIDE_1D(_X_,_CX_,_R_) && INSIDE_1D(_Y_,_CY_,_R_) && INSIDE_1D(_Z_,_CZ_,_R_) )
96    
97      int ret;      int ret;
98      if ( type == Line3Macro ) {      if ( type == Finley_Line3Macro ) {
99          if (q==0)          if (q==0)
100              ret = INSIDE_1D(coords[idx],0.25,0.25);              ret = INSIDE_1D(coords[idx],0.25,0.25);
101          else if (q==1)          else if (q==1)
102              ret = INSIDE_1D(coords[idx],0.75,0.25);              ret = INSIDE_1D(coords[idx],0.75,0.25);
103          else          else
104              ret=1;              ret=1;
105      } else if ( (type == Rec9) || (type == Rec9Macro) ) {      } else if ( (type == Finley_Rec9) || (type == Finley_Rec9Macro) ) {
106          if (q==0)          if (q==0)
107              ret = INSIDE_2D(coords[2*idx], coords[2*idx+1], 0.25, 0.25, 0.25);              ret = INSIDE_2D(coords[2*idx], coords[2*idx+1], 0.25, 0.25, 0.25);
108          else if (q==1)          else if (q==1)
# Line 113  int nodeInQuadrant(const double *coords, Line 113  int nodeInQuadrant(const double *coords,
113              ret = INSIDE_2D(coords[2*idx], coords[2*idx+1], 0.75, 0.75, 0.25);              ret = INSIDE_2D(coords[2*idx], coords[2*idx+1], 0.75, 0.75, 0.25);
114          else          else
115              ret = 0;              ret = 0;
116      } else if ((type == Hex27) || (type == Hex27Macro) ){      } else if ((type == Finley_Hex27) || (type == Finley_Hex27Macro) ){
117          if (q==0)          if (q==0)
118              ret = INSIDE_3D(coords[3*idx], coords[3*idx+1], coords[3*idx+2],              ret = INSIDE_3D(coords[3*idx], coords[3*idx+1], coords[3*idx+2],
119                      0.25, 0.25, 0.25, 0.25);                      0.25, 0.25, 0.25, 0.25);
# Line 177  void Finley_Mesh_saveVTK(const char *fil Line 177  void Finley_Mesh_saveVTK(const char *fil
177      int mpi_size, i, j, l;      int mpi_size, i, j, l;
178      int cellType=0, nodeType=FINLEY_NODES, elementType=FINLEY_UNKNOWN;      int cellType=0, nodeType=FINLEY_NODES, elementType=FINLEY_UNKNOWN;
179      Finley_ElementFile *elements = NULL;      Finley_ElementFile *elements = NULL;
180      ElementTypeId typeId = NoRef;      Finley_ElementTypeId typeId = Finley_NoRef;
181    
182      const char *vtkHeader = \      const char *vtkHeader = \
183        "<?xml version=\"1.0\"?>\n" \        "<?xml version=\"1.0\"?>\n" \
# Line 395  void Finley_Mesh_saveVTK(const char *fil Line 395  void Finley_Mesh_saveVTK(const char *fil
395                  typeId = elements->referenceElementSet->referenceElement->Type->TypeId;                  typeId = elements->referenceElementSet->referenceElement->Type->TypeId;
396              }              }
397              switch (typeId) {              switch (typeId) {
398                  case Point1:                  case Finley_Point1:
399                  case Line2Face:                  case Finley_Line2Face:
400                  case Line3Face:                  case Finley_Line3Face:
401                  case Point1_Contact:                  case Finley_Point1_Contact:
402                  case Line2Face_Contact:                  case Finley_Line2Face_Contact:
403                  case Line3Face_Contact:                  case Finley_Line3Face_Contact:
404                      cellType = VTK_VERTEX;                      cellType = VTK_VERTEX;
405                      numVTKNodesPerElement = 1;                      numVTKNodesPerElement = 1;
406                  break;                  break;
407    
408                  case Line2:                  case Finley_Line2:
409                  case Tri3Face:                  case Finley_Tri3Face:
410                  case Rec4Face:                  case Finley_Rec4Face:
411                  case Line2_Contact:                  case Finley_Line2_Contact:
412                  case Tri3_Contact:                  case Finley_Tri3_Contact:
413                  case Tri3Face_Contact:                  case Finley_Tri3Face_Contact:
414                  case Rec4Face_Contact:                  case Finley_Rec4Face_Contact:
415                      cellType = VTK_LINE;                      cellType = VTK_LINE;
416                      numVTKNodesPerElement = 2;                      numVTKNodesPerElement = 2;
417                  break;                  break;
418    
419          case Line3Macro:                  case Finley_Line3Macro:
420                      cellType = VTK_LINE;                      cellType = VTK_LINE;
421                      numCellFactor = 2;                      numCellFactor = 2;
422                      numVTKNodesPerElement = 2;                      numVTKNodesPerElement = 2;
423                  break;                  break;
424    
425                  case Tri3:                  case Finley_Tri3:
426                  case Tet4Face:                  case Finley_Tet4Face:
427                  case Tet4Face_Contact:                  case Finley_Tet4Face_Contact:
428                      cellType = VTK_TRIANGLE;                      cellType = VTK_TRIANGLE;
429                      numVTKNodesPerElement = 3;                      numVTKNodesPerElement = 3;
430                  break;                  break;
431    
432                  case Rec4:                  case Finley_Rec4:
433                  case Hex8Face:                  case Finley_Hex8Face:
434                  case Rec4_Contact:                  case Finley_Rec4_Contact:
435                  case Hex8Face_Contact:                  case Finley_Hex8Face_Contact:
436                      cellType = VTK_QUAD;                      cellType = VTK_QUAD;
437                      numVTKNodesPerElement = 4;                      numVTKNodesPerElement = 4;
438                  break;                  break;
439    
440                  case Rec9Macro:                  case Finley_Rec9Macro:
441          case Rec9:                  case Finley_Rec9:
442                      numCellFactor = 4;                      numCellFactor = 4;
443                      cellType = VTK_QUAD;                      cellType = VTK_QUAD;
444                      numVTKNodesPerElement = 4;                      numVTKNodesPerElement = 4;
445                  break;                  break;
446    
447                  case Tet4:                  case Finley_Tet4:
448                      cellType = VTK_TETRA;                      cellType = VTK_TETRA;
449                      numVTKNodesPerElement = 4;                      numVTKNodesPerElement = 4;
450                  break;                  break;
451    
452                  case Hex8:                  case Finley_Hex8:
453                      cellType = VTK_HEXAHEDRON;                      cellType = VTK_HEXAHEDRON;
454                      numVTKNodesPerElement = 8;                      numVTKNodesPerElement = 8;
455                  break;                  break;
456    
457                  case Line3:                  case Finley_Line3:
458                  case Tri6Face:                  case Finley_Tri6Face:
459                  case Rec8Face:                  case Finley_Rec8Face:
460                  case Line3_Contact:                  case Finley_Line3_Contact:
461                  case Tri6Face_Contact:                  case Finley_Tri6Face_Contact:
462                  case Rec8Face_Contact:                  case Finley_Rec8Face_Contact:
463                      cellType = VTK_QUADRATIC_EDGE;                      cellType = VTK_QUADRATIC_EDGE;
464                      numVTKNodesPerElement = 3;                      numVTKNodesPerElement = 3;
465                  break;                  break;
466    
467                  case Tri6:                  case Finley_Tri6:
468          case Tri6Macro:                      case Finley_Tri6Macro:
469                  case Tet10Face:                  case Finley_Tet10Face:
470                  case Tri6_Contact:                  case Finley_Tri6_Contact:
471                  case Tet10Face_Contact:                  case Finley_Tet10Face_Contact:
472                      cellType = VTK_QUADRATIC_TRIANGLE;                      cellType = VTK_QUADRATIC_TRIANGLE;
473                      numVTKNodesPerElement = 6;                      numVTKNodesPerElement = 6;
474                  break;                  break;
475    
476    
477                  case Rec8:                  case Finley_Rec8:
478                  case Hex20Face:                  case Finley_Hex20Face:
479                  case Rec8_Contact:                  case Finley_Rec8_Contact:
480                  case Hex20Face_Contact:                  case Finley_Hex20Face_Contact:
481                      cellType = VTK_QUADRATIC_QUAD;                      cellType = VTK_QUADRATIC_QUAD;
482                      numVTKNodesPerElement = 8;                      numVTKNodesPerElement = 8;
483                  break;                  break;
484    
485          case Tet10Macro:                  case Finley_Tet10Macro:
486                  case Tet10:                  case Finley_Tet10:
487                      cellType = VTK_QUADRATIC_TETRA;                      cellType = VTK_QUADRATIC_TETRA;
488                      numVTKNodesPerElement = 10;                      numVTKNodesPerElement = 10;
489                  break;                  break;
490    
491                  case Hex20:                  case Finley_Hex20:
492                      cellType = VTK_QUADRATIC_HEXAHEDRON;                      cellType = VTK_QUADRATIC_HEXAHEDRON;
493                      numVTKNodesPerElement = 20;                      numVTKNodesPerElement = 20;
494                  break;                  break;
495    
496          case Hex27Macro:                  case Finley_Hex27Macro:
497                  case Hex27:                  case Finley_Hex27:
498                      numCellFactor = 8;                      numCellFactor = 8;
499                      cellType = VTK_HEXAHEDRON;                      cellType = VTK_HEXAHEDRON;
500                      numVTKNodesPerElement = 8;                      numVTKNodesPerElement = 8;
# Line 530  void Finley_Mesh_saveVTK(const char *fil Line 530  void Finley_Mesh_saveVTK(const char *fil
530          const index_t *nodeIndex;          const index_t *nodeIndex;
531          if (FINLEY_REDUCED_NODES == nodeType) {          if (FINLEY_REDUCED_NODES == nodeType) {
532              nodeIndex = elements->referenceElementSet->referenceElement->Type->linearNodes;              nodeIndex = elements->referenceElementSet->referenceElement->Type->linearNodes;
533          } else if (Line3Macro == typeId) {          } else if (Finley_Line3Macro == typeId) {
534               nodeIndex = VTK_LINE3_INDEX;               nodeIndex = VTK_LINE3_INDEX;
535          } else if ( (Rec9 == typeId) || (Rec9Macro == typeId) ) {          } else if ( (Finley_Rec9 == typeId) || (Finley_Rec9Macro == typeId) ) {
536              nodeIndex = VTK_REC9_INDEX;              nodeIndex = VTK_REC9_INDEX;
537          } else if (Hex20 == typeId) {          } else if (Finley_Hex20 == typeId) {
538              nodeIndex = VTK_HEX20_INDEX;              nodeIndex = VTK_HEX20_INDEX;
539          } else if ( (Hex27 == typeId) || (Hex27Macro == typeId) ){          } else if ( (Finley_Hex27 == typeId) || (Finley_Hex27Macro == typeId) ){
540              nodeIndex = VTK_HEX27_INDEX;              nodeIndex = VTK_HEX27_INDEX;
541          } else if (numVTKNodesPerElement  !=  elements->referenceElementSet->referenceElement->Type->numNodes) {          } else if (numVTKNodesPerElement  !=  elements->referenceElementSet->referenceElement->Type->numNodes) {
542              nodeIndex = elements->referenceElementSet->referenceElement->Type->relevantGeoNodes;              nodeIndex = elements->referenceElementSet->referenceElement->Type->relevantGeoNodes;

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

  ViewVC Help
Powered by ViewVC 1.1.26