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

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

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

trunk/finley/src/Mesh_read.c revision 3232 by jfenwick, Thu Jan 28 02:03:15 2010 UTC branches/domexper/finley/src/Mesh_read.c revision 3234 by jfenwick, Mon Oct 4 01:46:30 2010 UTC
# Line 26  Line 26 
26    
27  Finley_Mesh* Finley_Mesh_read(char* fname,index_t order, index_t reduced_order,  bool_t optimize)  Finley_Mesh* Finley_Mesh_read(char* fname,index_t order, index_t reduced_order,  bool_t optimize)
28  {  {
29      Paso_MPIInfo *mpi_info = NULL;      Esys_MPIInfo *mpi_info = NULL;
30      dim_t numNodes, numDim, numEle, i0, i1;      dim_t numNodes, numDim, numEle, i0, i1;
31      Finley_Mesh *mesh_p=NULL;      Finley_Mesh *mesh_p=NULL;
32      Finley_ReferenceElementSet *refPoints=NULL, *refContactElements=NULL, *refFaceElements=NULL, *refElements=NULL;      Finley_ReferenceElementSet *refPoints=NULL, *refContactElements=NULL, *refFaceElements=NULL, *refElements=NULL;
# Line 37  Finley_Mesh* Finley_Mesh_read(char* fnam Line 37  Finley_Mesh* Finley_Mesh_read(char* fnam
37      int scan_ret;      int scan_ret;
38    
39      Finley_resetError();      Finley_resetError();
40      mpi_info = Paso_MPIInfo_alloc( MPI_COMM_WORLD );      mpi_info = Esys_MPIInfo_alloc( MPI_COMM_WORLD );
41    
42      if (mpi_info->rank == 0) {      if (mpi_info->rank == 0) {
43          /* get file handle */          /* get file handle */
# Line 45  Finley_Mesh* Finley_Mesh_read(char* fnam Line 45  Finley_Mesh* Finley_Mesh_read(char* fnam
45          if (fileHandle_p==NULL) {          if (fileHandle_p==NULL) {
46              sprintf(error_msg,"Finley_Mesh_read: Opening file %s for reading failed.",fname);              sprintf(error_msg,"Finley_Mesh_read: Opening file %s for reading failed.",fname);
47              Finley_setError(IO_ERROR,error_msg);              Finley_setError(IO_ERROR,error_msg);
48              Paso_MPIInfo_free( mpi_info );              Esys_MPIInfo_free( mpi_info );
49              return NULL;              return NULL;
50          }          }
51    
# Line 59  Finley_Mesh* Finley_Mesh_read(char* fnam Line 59  Finley_Mesh* Finley_Mesh_read(char* fnam
59          FSCANF_CHECK(scan_ret, "Finley_Mesh_read")          FSCANF_CHECK(scan_ret, "Finley_Mesh_read")
60      }      }
61    
62      #ifdef PASO_MPI      #ifdef ESYS_MPI
63          /* MPI Broadcast numDim, numNodes, name if there are multiple MPI procs*/          /* MPI Broadcast numDim, numNodes, name if there are multiple MPI procs*/
64          if (mpi_info->size > 1) {          if (mpi_info->size > 1) {
65              int temp1[3];              int temp1[3];
# Line 129  Finley_Mesh* Finley_Mesh_read(char* fnam Line 129  Finley_Mesh* Finley_Mesh_read(char* fnam
129                      chunkNodes++; /* How many nodes do we actually have in this chunk? It may be smaller than chunkSize. */                      chunkNodes++; /* How many nodes do we actually have in this chunk? It may be smaller than chunkSize. */
130                  }                  }
131                  if (chunkNodes > chunkSize) {                  if (chunkNodes > chunkSize) {
132                      Finley_setError(PASO_MPI_ERROR, "Finley_Mesh_read: error reading chunks of mesh, data too large for message size");                      Finley_setError(ESYS_MPI_ERROR, "Finley_Mesh_read: error reading chunks of mesh, data too large for message size");
133                      return NULL;                      return NULL;
134                  }                  }
135                  #ifdef PASO_MPI                  #ifdef ESYS_MPI
136                      /* Eventually we'll send chunkSize nodes to each CPU numbered 1 ... mpi_info->size-1, here goes one of them */                      /* Eventually we'll send chunkSize nodes to each CPU numbered 1 ... mpi_info->size-1, here goes one of them */
137                      if (nextCPU < mpi_info->size) {                      if (nextCPU < mpi_info->size) {
138                          tempInts[chunkSize*3] = chunkNodes;   /* The message has one more int to send chunkNodes */                          tempInts[chunkSize*3] = chunkNodes;   /* The message has one more int to send chunkNodes */
# Line 146  Finley_Mesh* Finley_Mesh_read(char* fnam Line 146  Finley_Mesh* Finley_Mesh_read(char* fnam
146              } /* Infinite loop */              } /* Infinite loop */
147          }   /* End master */          }   /* End master */
148          else {  /* Worker */          else {  /* Worker */
149              #ifdef PASO_MPI              #ifdef ESYS_MPI
150                  /* Each worker receives two messages */                  /* Each worker receives two messages */
151                  MPI_Status status;                  MPI_Status status;
152                  MPI_Recv(tempInts, chunkSize*3+1, MPI_INT, 0, 81720, mpi_info->comm, &status);                  MPI_Recv(tempInts, chunkSize*3+1, MPI_INT, 0, 81720, mpi_info->comm, &status);
# Line 182  Finley_Mesh* Finley_Mesh_read(char* fnam Line 182  Finley_Mesh* Finley_Mesh_read(char* fnam
182              FSCANF_CHECK(scan_ret, "Finley_Mesh_read")              FSCANF_CHECK(scan_ret, "Finley_Mesh_read")
183              typeID=Finley_ReferenceElement_getTypeId(element_type);              typeID=Finley_ReferenceElement_getTypeId(element_type);
184          }          }
185          #ifdef PASO_MPI          #ifdef ESYS_MPI
186              if (mpi_info->size > 1) {              if (mpi_info->size > 1) {
187                  int temp1[2], mpi_error;                  int temp1[2], mpi_error;
188                  temp1[0] = (int) typeID;                  temp1[0] = (int) typeID;
189                  temp1[1] = numEle;                  temp1[1] = numEle;
190                  mpi_error = MPI_Bcast (temp1, 2, MPI_INT,  0, mpi_info->comm);                  mpi_error = MPI_Bcast (temp1, 2, MPI_INT,  0, mpi_info->comm);
191                  if (mpi_error != MPI_SUCCESS) {                  if (mpi_error != MPI_SUCCESS) {
192                      Finley_setError(PASO_MPI_ERROR, "Finley_Mesh_read: broadcast of Element typeID failed");                      Finley_setError(ESYS_MPI_ERROR, "Finley_Mesh_read: broadcast of Element typeID failed");
193                      return NULL;                      return NULL;
194                  }                  }
195                  typeID = (ElementTypeId) temp1[0];                  typeID = (ElementTypeId) temp1[0];
# Line 234  Finley_Mesh* Finley_Mesh_read(char* fnam Line 234  Finley_Mesh* Finley_Mesh_read(char* fnam
234                      totalEle++;                      totalEle++;
235                      chunkEle++;                      chunkEle++;
236                  }                  }
237                  #ifdef PASO_MPI                  #ifdef ESYS_MPI
238                      /* Eventually we'll send chunk of elements to each CPU except 0 itself, here goes one of them */                      /* Eventually we'll send chunk of elements to each CPU except 0 itself, here goes one of them */
239                      if (nextCPU < mpi_info->size) {                      if (nextCPU < mpi_info->size) {
240                          tempInts[chunkSize*(2+numNodes)] = chunkEle;                          tempInts[chunkSize*(2+numNodes)] = chunkEle;
# Line 247  Finley_Mesh* Finley_Mesh_read(char* fnam Line 247  Finley_Mesh* Finley_Mesh_read(char* fnam
247              } /* Infinite loop */              } /* Infinite loop */
248          }   /* End master */          }   /* End master */
249          else {  /* Worker */          else {  /* Worker */
250              #ifdef PASO_MPI              #ifdef ESYS_MPI
251                  /* Each worker receives one message */                  /* Each worker receives one message */
252                  MPI_Status status;                  MPI_Status status;
253                  MPI_Recv(tempInts, chunkSize*(2+numNodes)+1, MPI_INT, 0, 81722, mpi_info->comm, &status);                  MPI_Recv(tempInts, chunkSize*(2+numNodes)+1, MPI_INT, 0, 81722, mpi_info->comm, &status);
# Line 289  Finley_Mesh* Finley_Mesh_read(char* fnam Line 289  Finley_Mesh* Finley_Mesh_read(char* fnam
289               FSCANF_CHECK(scan_ret, "Finley_Mesh_read")               FSCANF_CHECK(scan_ret, "Finley_Mesh_read")
290               typeID=Finley_ReferenceElement_getTypeId(element_type);               typeID=Finley_ReferenceElement_getTypeId(element_type);
291          }          }
292          #ifdef PASO_MPI          #ifdef ESYS_MPI
293              if (mpi_info->size > 1) {              if (mpi_info->size > 1) {
294                  int temp1[2];                  int temp1[2];
295                  temp1[0] = (int) typeID;                  temp1[0] = (int) typeID;
# Line 337  Finley_Mesh* Finley_Mesh_read(char* fnam Line 337  Finley_Mesh* Finley_Mesh_read(char* fnam
337                      totalEle++;                      totalEle++;
338                      chunkEle++;                      chunkEle++;
339                  }                  }
340                  #ifdef PASO_MPI                  #ifdef ESYS_MPI
341                      /* Eventually we'll send chunk of elements to each CPU except 0 itself, here goes one of them */                      /* Eventually we'll send chunk of elements to each CPU except 0 itself, here goes one of them */
342                      if (nextCPU < mpi_info->size) {                      if (nextCPU < mpi_info->size) {
343                          tempInts[chunkSize*(2+numNodes)] = chunkEle;                          tempInts[chunkSize*(2+numNodes)] = chunkEle;
# Line 350  Finley_Mesh* Finley_Mesh_read(char* fnam Line 350  Finley_Mesh* Finley_Mesh_read(char* fnam
350              } /* Infinite loop */              } /* Infinite loop */
351          }   /* End master */          }   /* End master */
352          else {  /* Worker */          else {  /* Worker */
353              #ifdef PASO_MPI              #ifdef ESYS_MPI
354                  /* Each worker receives one message */                  /* Each worker receives one message */
355                  MPI_Status status;                  MPI_Status status;
356                  MPI_Recv(tempInts, chunkSize*(2+numNodes)+1, MPI_INT, 0, 81723, mpi_info->comm, &status);                  MPI_Recv(tempInts, chunkSize*(2+numNodes)+1, MPI_INT, 0, 81723, mpi_info->comm, &status);
# Line 391  Finley_Mesh* Finley_Mesh_read(char* fnam Line 391  Finley_Mesh* Finley_Mesh_read(char* fnam
391              FSCANF_CHECK(scan_ret, "Finley_Mesh_read")              FSCANF_CHECK(scan_ret, "Finley_Mesh_read")
392              typeID=Finley_ReferenceElement_getTypeId(element_type);              typeID=Finley_ReferenceElement_getTypeId(element_type);
393          }          }
394          #ifdef PASO_MPI          #ifdef ESYS_MPI
395              if (mpi_info->size > 1) {              if (mpi_info->size > 1) {
396                  int temp1[2];                  int temp1[2];
397                  temp1[0] = (int) typeID;                  temp1[0] = (int) typeID;
# Line 437  Finley_Mesh* Finley_Mesh_read(char* fnam Line 437  Finley_Mesh* Finley_Mesh_read(char* fnam
437                      totalEle++;                      totalEle++;
438                      chunkEle++;                      chunkEle++;
439                  }                  }
440                  #ifdef PASO_MPI                  #ifdef ESYS_MPI
441                      /* Eventually we'll send chunk of elements to each CPU except 0 itself, here goes one of them */                      /* Eventually we'll send chunk of elements to each CPU except 0 itself, here goes one of them */
442                      if (nextCPU < mpi_info->size) {                      if (nextCPU < mpi_info->size) {
443                          tempInts[chunkSize*(2+numNodes)] = chunkEle;                          tempInts[chunkSize*(2+numNodes)] = chunkEle;
# Line 450  Finley_Mesh* Finley_Mesh_read(char* fnam Line 450  Finley_Mesh* Finley_Mesh_read(char* fnam
450              } /* Infinite loop */              } /* Infinite loop */
451          }   /* End master */          }   /* End master */
452          else {  /* Worker */          else {  /* Worker */
453              #ifdef PASO_MPI              #ifdef ESYS_MPI
454                  /* Each worker receives one message */                  /* Each worker receives one message */
455                  MPI_Status status;                  MPI_Status status;
456                  MPI_Recv(tempInts, chunkSize*(2+numNodes)+1, MPI_INT, 0, 81724, mpi_info->comm, &status);                  MPI_Recv(tempInts, chunkSize*(2+numNodes)+1, MPI_INT, 0, 81724, mpi_info->comm, &status);
# Line 488  Finley_Mesh* Finley_Mesh_read(char* fnam Line 488  Finley_Mesh* Finley_Mesh_read(char* fnam
488              FSCANF_CHECK(scan_ret, "Finley_Mesh_read")              FSCANF_CHECK(scan_ret, "Finley_Mesh_read")
489              typeID=Finley_ReferenceElement_getTypeId(element_type);              typeID=Finley_ReferenceElement_getTypeId(element_type);
490          }          }
491          #ifdef PASO_MPI          #ifdef ESYS_MPI
492              if (mpi_info->size > 1) {              if (mpi_info->size > 1) {
493                  int temp1[2];                  int temp1[2];
494                  temp1[0] = (int) typeID;                  temp1[0] = (int) typeID;
# Line 535  Finley_Mesh* Finley_Mesh_read(char* fnam Line 535  Finley_Mesh* Finley_Mesh_read(char* fnam
535                      totalEle++;                      totalEle++;
536                      chunkEle++;                      chunkEle++;
537                  }                  }
538                  #ifdef PASO_MPI                  #ifdef ESYS_MPI
539                      /* Eventually we'll send chunk of elements to each CPU except 0 itself, here goes one of them */                      /* Eventually we'll send chunk of elements to each CPU except 0 itself, here goes one of them */
540                      if (nextCPU < mpi_info->size) {                      if (nextCPU < mpi_info->size) {
541                          tempInts[chunkSize*(2+numNodes)] = chunkEle;                          tempInts[chunkSize*(2+numNodes)] = chunkEle;
# Line 548  Finley_Mesh* Finley_Mesh_read(char* fnam Line 548  Finley_Mesh* Finley_Mesh_read(char* fnam
548              } /* Infinite loop */              } /* Infinite loop */
549          }   /* End master */          }   /* End master */
550          else {  /* Worker */          else {  /* Worker */
551              #ifdef PASO_MPI              #ifdef ESYS_MPI
552                  /* Each worker receives one message */                  /* Each worker receives one message */
553                  MPI_Status status;                  MPI_Status status;
554                  MPI_Recv(tempInts, chunkSize*(2+numNodes)+1, MPI_INT, 0, 81725, mpi_info->comm, &status);                  MPI_Recv(tempInts, chunkSize*(2+numNodes)+1, MPI_INT, 0, 81725, mpi_info->comm, &status);
# Line 582  Finley_Mesh* Finley_Mesh_read(char* fnam Line 582  Finley_Mesh* Finley_Mesh_read(char* fnam
582      if (Finley_noError()) {      if (Finley_noError()) {
583          char *remainder=0, *ptr;          char *remainder=0, *ptr;
584          size_t len=0;          size_t len=0;
585          #ifdef PASO_MPI          #ifdef ESYS_MPI
586              int len_i;              int len_i;
587          #endif          #endif
588          int tag_key;          int tag_key;
# Line 645  Finley_Mesh* Finley_Mesh_read(char* fnam Line 645  Finley_Mesh* Finley_Mesh_read(char* fnam
645              len = strlen(remainder);              len = strlen(remainder);
646              TMPMEMREALLOC(remainder,remainder,len+1,char);              TMPMEMREALLOC(remainder,remainder,len+1,char);
647          } /* Master */          } /* Master */
648          #ifdef PASO_MPI          #ifdef ESYS_MPI
649    
650              len_i=(int) len;              len_i=(int) len;
651              MPI_Bcast (&len_i, 1, MPI_INT,  0, mpi_info->comm);              MPI_Bcast (&len_i, 1, MPI_INT,  0, mpi_info->comm);
# Line 656  Finley_Mesh* Finley_Mesh_read(char* fnam Line 656  Finley_Mesh* Finley_Mesh_read(char* fnam
656              }              }
657              if (MPI_Bcast (remainder, len+1, MPI_CHAR,  0, mpi_info->comm) !=              if (MPI_Bcast (remainder, len+1, MPI_CHAR,  0, mpi_info->comm) !=
658                      MPI_SUCCESS)                      MPI_SUCCESS)
659                  Finley_setError(PASO_MPI_ERROR, "Finley_Mesh_read: broadcast of remainder failed");                  Finley_setError(ESYS_MPI_ERROR, "Finley_Mesh_read: broadcast of remainder failed");
660          #endif          #endif
661    
662          if (remainder[0]) {          if (remainder[0]) {
# Line 688  Finley_Mesh* Finley_Mesh_read(char* fnam Line 688  Finley_Mesh* Finley_Mesh_read(char* fnam
688      Finley_ReferenceElementSet_dealloc(refContactElements);      Finley_ReferenceElementSet_dealloc(refContactElements);
689      Finley_ReferenceElementSet_dealloc(refFaceElements);      Finley_ReferenceElementSet_dealloc(refFaceElements);
690      Finley_ReferenceElementSet_dealloc(refElements);      Finley_ReferenceElementSet_dealloc(refElements);
691      Paso_MPIInfo_free( mpi_info );      Esys_MPIInfo_free( mpi_info );
692      return mesh_p;      return mesh_p;
693  }  }
694    

Legend:
Removed from v.3232  
changed lines
  Added in v.3234

  ViewVC Help
Powered by ViewVC 1.1.26