Changeset 23643
- Timestamp:
- 01/17/19 15:04:23 (6 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h
r23242 r23643 719 719 } 720 720 721 /*Serialize vector*/ 722 IssmPDouble* serialvalues = this->value->ToMPISerial(); 723 this->value->GetSize(&rows); 721 /*Serialize vector on cpu0*/ 722 IssmPDouble* serialvalues = this->value->ToMPISerial0(); 724 723 725 724 if(IssmComm::GetRank()==0){ 725 this->value->GetSize(&rows); 726 726 727 /*First write name: */ 727 728 length=(strlen(this->result_name)+1)*sizeof(char); … … 770 771 } 771 772 772 /*Serialize vector*/ 773 serialvalues = this->value->ToMPISerial(); 774 this->value->GetSize(&rows); 775 776 pserialvalues=xNew<IssmPDouble>(rows); 777 for(i=0;i<rows;i++)pserialvalues[i]=reCast<IssmPDouble>(serialvalues[i]); 773 /*Serialize vector only on cpu0*/ 774 serialvalues = this->value->ToMPISerial0(); 778 775 779 776 if(IssmComm::GetRank()==0){ 777 778 /*Make it passive*/ 779 this->value->GetSize(&rows); 780 pserialvalues=xNew<IssmPDouble>(rows); 781 for(i=0;i<rows;i++)pserialvalues[i]=reCast<IssmPDouble>(serialvalues[i]); 782 780 783 /*First write name: */ 781 784 length=(strlen(this->result_name)+1)*sizeof(char); … … 794 797 fwrite(&cols,sizeof(int),1,fid); 795 798 fwrite(pserialvalues,cols*rows*sizeof(IssmPDouble),1,fid); 799 800 /*Clean up*/ 801 xDelete<IssmPDouble>(pserialvalues); 796 802 } 797 803 798 804 /*Clean up*/ 799 xDelete<IssmPDouble>(pserialvalues);800 805 xDelete<IssmDouble>(serialvalues); 801 802 806 } 803 807 /*}}}*/ -
issm/trunk-jpl/src/c/toolkits/issm/IssmAbsVec.h
r23604 r23643 43 43 virtual void AYPX(IssmAbsVec* X, doubletype a)=0; 44 44 virtual doubletype* ToMPISerial(void)=0; 45 virtual doubletype* ToMPISerial0(void)=0; 45 46 virtual void Shift(doubletype shift)=0; 46 47 virtual void Copy(IssmAbsVec* to)=0; -
issm/trunk-jpl/src/c/toolkits/issm/IssmMpiVec.h
r23605 r23643 460 460 /*return: */ 461 461 return buffer; 462 463 } 464 /*}}}*/ 465 doubletype* ToMPISerial0(void){/*{{{*/ 466 467 /*FIXME: Should not broadcast to every cpu*/ 468 return this->ToMPISerial(); 462 469 463 470 } -
issm/trunk-jpl/src/c/toolkits/issm/IssmSeqVec.h
r23606 r23643 218 218 } 219 219 /*}}}*/ 220 doubletype* ToMPISerial0(void){/*{{{*/ 221 222 return this->ToMPISerial(); 223 224 } 225 /*}}}*/ 220 226 void Shift(doubletype shift){/*{{{*/ 221 227 -
issm/trunk-jpl/src/c/toolkits/issm/IssmVec.h
r23604 r23643 183 183 } 184 184 /*}}}*/ 185 doubletype* ToMPISerial0(void){/*{{{*/ 186 return vector->ToMPISerial0(); 187 } 188 /*}}}*/ 185 189 void Shift(doubletype shift){/*{{{*/ 186 190 vector->Shift(shift); -
issm/trunk-jpl/src/c/toolkits/objects/Vector.h
r23604 r23643 291 291 } 292 292 /*}}}*/ 293 doubletype* ToMPISerial0(void){/*{{{*/ 294 295 doubletype* vec_serial=NULL; 296 297 _assert_(this); 298 if(type==PetscVecType){ 299 #ifdef _HAVE_PETSC_ 300 vec_serial=this->pvector->ToMPISerial0(); 301 #endif 302 } 303 else vec_serial=this->ivector->ToMPISerial0(); 304 305 return vec_serial; 306 307 } 308 /*}}}*/ 293 309 void Shift(doubletype shift){_assert_(this);/*{{{*/ 294 310 -
issm/trunk-jpl/src/c/toolkits/petsc/objects/PetscVec.cpp
r23610 r23643 191 191 192 192 IssmDouble* vec_serial=NULL; 193 VecToMPISerial(&vec_serial, this->vector,IssmComm::GetComm()); 193 VecToMPISerial(&vec_serial, this->vector,IssmComm::GetComm(),true); 194 return vec_serial; 195 196 } 197 /*}}}*/ 198 IssmDouble* PetscVec::ToMPISerial0(void){/*{{{*/ 199 200 IssmDouble* vec_serial=NULL; 201 VecToMPISerial(&vec_serial, this->vector,IssmComm::GetComm(),false); 194 202 return vec_serial; 195 203 -
issm/trunk-jpl/src/c/toolkits/petsc/objects/PetscVec.h
r23604 r23643 51 51 void AYPX(PetscVec* X, IssmDouble a); 52 52 IssmDouble* ToMPISerial(void); 53 IssmDouble* ToMPISerial0(void); 53 54 void Shift(IssmDouble shift); 54 55 void Copy(PetscVec* to); -
issm/trunk-jpl/src/c/toolkits/petsc/patches/VecToMPISerial.cpp
r16102 r23643 12 12 #include "../../../shared/shared.h" 13 13 14 int VecToMPISerial(double** pgathered_vector, Vec vector,ISSM_MPI_Comm comm ){14 int VecToMPISerial(double** pgathered_vector, Vec vector,ISSM_MPI_Comm comm,bool broadcast){ 15 15 16 16 int i; … … 45 45 46 46 /*Allocate gathered vector on all nodes .*/ 47 gathered_vector=xNew<double>(vector_size); 47 if(broadcast || my_rank==0){ 48 gathered_vector=xNew<double>(vector_size); 49 } 48 50 49 51 /*Allocate local vectors*/ … … 83 85 } 84 86 85 /*Now, broadcast gathered_vector from node 0 to other nodes: */ 86 ISSM_MPI_Bcast(gathered_vector,vector_size,ISSM_MPI_PDOUBLE,0,comm); 87 if(broadcast){ 88 /*Now, broadcast gathered_vector from node 0 to other nodes: */ 89 ISSM_MPI_Bcast(gathered_vector,vector_size,ISSM_MPI_PDOUBLE,0,comm); 90 } 87 91 88 92 /*Assign output pointers: */ -
issm/trunk-jpl/src/c/toolkits/petsc/patches/petscpatches.h
r23602 r23643 22 22 Mat NewMat(int M,int N,int connectivity,int numberofdofspernode, ISSM_MPI_Comm comm); 23 23 24 int VecToMPISerial(double** pgathered_vector, Vec vector,ISSM_MPI_Comm comm );24 int VecToMPISerial(double** pgathered_vector, Vec vector,ISSM_MPI_Comm comm,bool broadcast=true); 25 25 void MatFree(Mat* pmat); 26 26 void ISFree(IS* pis);
Note:
See TracChangeset
for help on using the changeset viewer.