Changeset 10995
- Timestamp:
- 11/30/11 16:24:37 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified issm/trunk-jpl/src/c/Container/Elements.cpp ¶
r10990 r10995 170 170 Patch *patch = NULL; 171 171 int *resultsenums = NULL; 172 int *resultssize = NULL;173 int *resultsstep = NULL;172 int *resultssizes = NULL; 173 int *resultssteps = NULL; 174 174 double *resultstimes = NULL; 175 175 double *vector_serial= NULL; … … 187 187 188 188 if(!results_as_patches){ 189 /*No patch here, we prepare vectors*/ 190 191 /*OK, see what the first element of this partition has in stock (this is common to all partitions)*/ 192 Element* element=(Element*)this->GetObjectByOffset(0); 193 element->ListResultsInfo(&resultsenums,&resultssize,&resultstimes,&resultsstep,&numberofresults); 189 190 /*see what the first element of this partition has in stock (this is common to all partitions)*/ 191 if(my_rank==0){ 192 if(this->Size()==0) _error_("Cannot write results because first partition has no element. Maybe too many cpus were requested"); 193 Element* element=(Element*)this->GetObjectByOffset(0); 194 element->ListResultsInfo(&resultsenums,&resultssizes,&resultstimes,&resultssteps,&numberofresults); 195 } 196 MPI_Bcast(&numberofresults,1,MPI_DOUBLE,0,MPI_COMM_WORLD); 197 if(my_rank!=0){ 198 resultsenums=(int*)xmalloc(numberofresults*sizeof(int)); 199 resultssizes=(int*)xmalloc(numberofresults*sizeof(int)); 200 resultstimes=(double*)xmalloc(numberofresults*sizeof(double)); 201 resultssteps=(int*)xmalloc(numberofresults*sizeof(int)); 202 } 203 MPI_Bcast(resultsenums,numberofresults,MPI_INT,0,MPI_COMM_WORLD); 204 MPI_Bcast(resultssizes,numberofresults,MPI_INT,0,MPI_COMM_WORLD); 205 MPI_Bcast(resultstimes,numberofresults,MPI_DOUBLE,0,MPI_COMM_WORLD); 206 MPI_Bcast(resultssteps,numberofresults,MPI_INT,0,MPI_COMM_WORLD); 194 207 195 208 /*Loop over all results and get nodal vector*/ … … 197 210 198 211 /*Get vector for result number i*/ 199 if(resultssize [i]==P1Enum) vectorsize=numberofvertices;200 else if(resultssize [i]==P0Enum) vectorsize=numberofelements;201 else _error_("Unkown result size: %s",EnumToStringx(resultssize [i]));212 if(resultssizes[i]==P1Enum) vectorsize=numberofvertices; 213 else if(resultssizes[i]==P0Enum) vectorsize=numberofelements; 214 else _error_("Unkown result size: %s",EnumToStringx(resultssizes[i])); 202 215 vector=NewVec(vectorsize); 203 216 204 217 for(int j=0;j<this->Size();j++){ 205 218 Element* element=(Element*)this->GetObjectByOffset(j); 206 element->GetVectorFromResults(vector,i,resultssize [i]);219 element->GetVectorFromResults(vector,i,resultssizes[i]); 207 220 } 208 221 VecAssemblyBegin(vector); … … 213 226 if(my_rank==0){ 214 227 /*No need to add this vector for all cpus*/ 215 results->AddObject(new DoubleVecExternalResult(results->Size()+1,resultsenums[i],vector_serial,vectorsize,resultsstep [i],resultstimes[i]));228 results->AddObject(new DoubleVecExternalResult(results->Size()+1,resultsenums[i],vector_serial,vectorsize,resultssteps[i],resultstimes[i])); 216 229 } 217 230 … … 240 253 /*Free ressources:*/ 241 254 xfree((void**)&resultsenums); 242 xfree((void**)&resultssize );255 xfree((void**)&resultssizes); 243 256 xfree((void**)&resultstimes); 244 xfree((void**)&resultsstep );257 xfree((void**)&resultssteps); 245 258 delete patch; 246 259 }
Note:
See TracChangeset
for help on using the changeset viewer.