Changeset 9874
- Timestamp:
- 09/21/11 16:43:20 (13 years ago)
- Location:
- issm/trunk/src/c
- Files:
-
- 14 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/c/Container/Elements.cpp
r9622 r9874 171 171 void Elements::ToResults(Results* results,Parameters* parameters,int step, double time){ 172 172 173 Patch* patch=NULL; 173 Patch *patch = NULL; 174 int *resultsenums = NULL; 175 double *vector_serial= NULL; 176 Vec vector = NULL; 174 177 bool io_gather; 178 bool results_on_vertices; 179 int numberofvertices; 180 int numberofresults; 175 181 176 182 /*Recover parameters: */ 177 183 parameters->FindParam(&io_gather,SettingsIoGatherEnum); 178 179 /*create patch object out of all results in this dataset: */ 180 patch=this->ResultsToPatch(); 181 182 /*Gather onto master cpu 0, if needed: */ 184 parameters->FindParam(&results_on_vertices,SettingsResultsOnVerticesEnum); 185 parameters->FindParam(&numberofvertices,MeshNumberofverticesEnum); 186 187 if(results_on_vertices){ 188 /*No patch here, we prepare vectors*/ 189 190 /*OK, see what the first element of this partition has in stock (this is common to all partitions)*/ 191 Element* element=(Element*)this->GetObjectByOffset(0); 192 element->ListResultsEnums(&resultsenums,&numberofresults); 193 194 /*Loop over all results and get nodal vector*/ 195 for(int i=0;i<numberofresults;i++){ 196 197 /*Get vector for result number i*/ 198 vector=NewVec(numberofvertices); 199 for(int j=0;j<this->Size();j++){ 200 Element* element=(Element*)this->GetObjectByOffset(j); 201 element->GetVectorFromResults(vector,resultsenums[i]); 202 } 203 VecAssemblyBegin(vector); 204 VecAssemblyEnd(vector); 205 206 /*Serialize and add to results*/ 207 VecToMPISerial(&vector_serial,vector); 208 results->AddObject(new DoubleVecExternalResult(results->Size()+1,resultsenums[i],vector_serial,numberofvertices,step,time)); 209 210 /*clean up*/ 211 VecFree(&vector); 212 xfree((void**)&vector_serial); 213 } 214 215 } 216 else{ 217 /*create patch object out of all results in this dataset: */ 218 patch=this->ResultsToPatch(); 219 220 /*Gather onto master cpu 0, if needed: */ 183 221 #ifdef _PARALLEL_ 184 if(io_gather)patch->Gather();222 if(io_gather)patch->Gather(); 185 223 #endif 186 224 187 /*create result object and add to results dataset:*/ 188 if (patch->maxvertices && patch->maxnodes){ 189 results->AddObject(new IntExternalResult(results->Size()+1,PatchVerticesEnum,patch->maxvertices,step,time)); 190 results->AddObject(new IntExternalResult(results->Size()+1,PatchNodesEnum, patch->maxnodes,step,time)); 191 results->AddObject(new DoubleMatExternalResult(results->Size()+1,PatchEnum,patch->values,patch->numrows,patch->numcols,step,time)); 225 /*create result object and add to results dataset:*/ 226 if (patch->maxvertices && patch->maxnodes){ 227 results->AddObject(new IntExternalResult(results->Size()+1,PatchVerticesEnum,patch->maxvertices,step,time)); 228 results->AddObject(new IntExternalResult(results->Size()+1,PatchNodesEnum, patch->maxnodes,step,time)); 229 results->AddObject(new DoubleMatExternalResult(results->Size()+1,PatchEnum,patch->values,patch->numrows,patch->numcols,step,time)); 230 } 192 231 } 193 232 194 233 /*Free ressources:*/ 234 xfree((void**)&resultsenums); 195 235 delete patch; 196 236 } -
issm/trunk/src/c/modules/ModelProcessorx/CreateParameters.cpp
r9851 r9874 69 69 parameters->AddObject(iomodel->CopyConstantObject(SettingsWaitonlockEnum)); 70 70 parameters->AddObject(iomodel->CopyConstantObject(MeshNumberofelementsEnum)); 71 parameters->AddObject(iomodel->CopyConstantObject(MeshNumberofverticesEnum)); 71 72 parameters->AddObject(iomodel->CopyConstantObject(SettingsIoGatherEnum)); 73 parameters->AddObject(iomodel->CopyConstantObject(SettingsResultsOnVerticesEnum)); 72 74 parameters->AddObject(iomodel->CopyConstantObject(GroundinglineMigrationEnum)); 73 75 parameters->AddObject(iomodel->CopyConstantObject(TransientIsdiagnosticEnum)); -
issm/trunk/src/c/modules/OutputResultsx/OutputResultsx.cpp
r9650 r9874 18 18 #ifdef _SERIAL_ 19 19 void OutputResultsx(mxArray** pdataref, Elements* elements, Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,Results** presults, int step, double time){ 20 #else 20 #else 21 21 void OutputResultsx( Elements* elements, Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,Results** presults, int step, double time){ 22 22 #endif -
issm/trunk/src/c/objects/ElementResults/ElementResult.h
r5529 r9874 22 22 virtual int NumberOfNodalValues(void)=0; 23 23 virtual void PatchFill(int row, Patch* patch)=0; 24 virtual int EnumType()=0; 24 25 25 26 }; -
issm/trunk/src/c/objects/ElementResults/PentaVertexElementResult.cpp
r9777 r9874 194 194 } 195 195 /*}}}*/ 196 /*FUNCTION PentaVertexElementResult::GetVectorFromResults{{{1*/ 197 void PentaVertexElementResult::GetVectorFromResults(Vec vector,int* doflist){ 198 199 const int numvertices=6; 200 VecSetValues(vector,numvertices,doflist,(const double*)this->values,INSERT_VALUES); 201 202 } /*}}}*/ -
issm/trunk/src/c/objects/ElementResults/PentaVertexElementResult.h
r9777 r9874 50 50 /*PentaVertexElementResult management: {{{1*/ 51 51 int EnumType(); 52 void GetVectorFromResults(Vec vector,int* doflist); 52 53 /*}}}*/ 53 54 -
issm/trunk/src/c/objects/ElementResults/TriaVertexElementResult.cpp
r9777 r9874 183 183 } 184 184 /*}}}*/ 185 /*FUNCTION TriaVertexElementResult::GetVectorFromResults{{{1*/ 186 void TriaVertexElementResult::GetVectorFromResults(Vec vector,int* doflist){ 187 188 const int numvertices=3; 189 VecSetValues(vector,numvertices,doflist,(const double*)this->values,INSERT_VALUES); 190 191 } /*}}}*/ -
issm/trunk/src/c/objects/ElementResults/TriaVertexElementResult.h
r9777 r9874 49 49 /*TriaVertexElementResult management: {{{1*/ 50 50 int EnumType(); 51 void GetVectorFromResults(Vec vector,int* doflist); 51 52 /*}}}*/ 52 53 -
issm/trunk/src/c/objects/Elements/Element.h
r9817 r9874 47 47 virtual void PatchSize(int* pnumrows, int* pnumvertices,int* pnumnodes)=0; 48 48 virtual void PatchFill(int* pcount, Patch* patch)=0; 49 virtual void ListResultsEnums(int** results_enums,int* num_results)=0; 49 50 virtual void DeleteResults(void)=0; 50 51 virtual void Update(int index, IoModel* iomodel,int analysis_counter,int analysis_type)=0; … … 57 58 58 59 virtual void InputScale(int enum_type,double scale_factor)=0; 59 virtual void GetVectorFromInputs(Vec vector,int NameEnum)=0; 60 virtual void GetVectorFromInputs(Vec vector, int name_enum)=0; 61 virtual void GetVectorFromResults(Vec vector,int name_enum)=0; 60 62 virtual void InputArtificialNoise(int enum_type,double min,double max)=0; 61 63 virtual bool InputConvergence(double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums)=0; -
issm/trunk/src/c/objects/Elements/Penta.cpp
r9817 r9874 1126 1126 } 1127 1127 /*}}}*/ 1128 /*FUNCTION Penta::GetVectorFromResults{{{1*/ 1129 void Penta::GetVectorFromResults(Vec vector,int result_enum){ 1130 1131 bool found=false; 1132 int doflist1[NUMVERTICES]; 1133 1134 /*Prepare index list*/ 1135 this->GetSidList(&doflist1[0]); 1136 1137 /*Get result)*/ 1138 for(int i=0;i<this->results->Size();i++){ 1139 ElementResult* elementresult=(ElementResult*)this->results->GetObjectByOffset(i); 1140 if(elementresult->EnumType()!=result_enum) continue; 1141 if(elementresult->Enum() !=PentaVertexElementResultEnum) _error_("Result %s found but is not of class PentaVertexElementResultEnum"); 1142 1143 found=true; 1144 PentaVertexElementResult* result=(PentaVertexElementResult*)elementresult; 1145 result->GetVectorFromResults(vector,&doflist1[0]); 1146 } 1147 } 1148 /*}}}*/ 1128 1149 /*FUNCTION Penta::GetZcoord {{{1*/ 1129 1150 double Penta::GetZcoord(GaussPenta* gauss){ … … 2001 2022 } 2002 2023 /*}}}*/ 2024 /*FUNCTION Penta::ListResultsEnums{{{*/ 2025 void Penta::ListResultsEnums(int** in_results_enums,int* in_num_results){ 2026 2027 /*Intermediaries*/ 2028 int i; 2029 int numberofresults = 0; 2030 int *resultsenums =NULL; 2031 2032 /*Checks*/ 2033 _assert_(in_num_results); 2034 2035 /*Count number of results*/ 2036 for(i=0;i<this->results->Size();i++){ 2037 ElementResult* elementresult=(ElementResult*)this->results->GetObjectByOffset(i); 2038 numberofresults++; 2039 } 2040 2041 /*Allocate output*/ 2042 resultsenums=(int*)xmalloc(numberofresults*sizeof(int)); 2043 2044 /*populate enums*/ 2045 for(i=0;i<this->results->Size();i++){ 2046 ElementResult* elementresult=(ElementResult*)this->results->GetObjectByOffset(i); 2047 resultsenums[i]=elementresult->EnumType(); 2048 } 2049 2050 /*Assign output pointers:*/ 2051 *in_num_results=numberofresults; 2052 *in_results_enums=resultsenums; 2053 2054 }/*}}}*/ 2003 2055 /*FUNCTION Penta::MigrateGroundingLine{{{1*/ 2004 2056 void Penta::MigrateGroundingLine(void){ -
issm/trunk/src/c/objects/Elements/Penta.h
r9817 r9874 91 91 double GetZcoord(GaussPenta* gauss); 92 92 void GetVectorFromInputs(Vec vector,int NameEnum); 93 void GetVectorFromResults(Vec vector,int name_enum); 93 94 94 95 int Sid(); … … 107 108 void ShelfSync(); 108 109 void RequestedOutput(int output_enum,int step,double time); 110 void ListResultsEnums(int** results_enums,int* num_results); 109 111 void MigrateGroundingLine(); 110 112 void PatchFill(int* pcount, Patch* patch); -
issm/trunk/src/c/objects/Elements/Tria.cpp
r9843 r9874 1305 1305 /*We found the enum. Use its values to fill into the vector, using the vertices ids: */ 1306 1306 input->GetVectorFromInputs(vector,&doflist1[0]); 1307 } 1308 /*}}}*/ 1309 /*FUNCTION Tria::GetVectorFromResults{{{1*/ 1310 void Tria::GetVectorFromResults(Vec vector,int result_enum){ 1311 1312 bool found=false; 1313 int doflist1[NUMVERTICES]; 1314 1315 /*Prepare index list*/ 1316 this->GetSidList(&doflist1[0]); 1317 1318 /*Get result)*/ 1319 for(int i=0;i<this->results->Size();i++){ 1320 ElementResult* elementresult=(ElementResult*)this->results->GetObjectByOffset(i); 1321 if(elementresult->EnumType()!=result_enum) continue; 1322 if(elementresult->Enum() !=TriaVertexElementResultEnum) _error_("Result %s found but is not of class TriaVertexElementResultEnum"); 1323 1324 found=true; 1325 TriaVertexElementResult* result=(TriaVertexElementResult*)elementresult; 1326 result->GetVectorFromResults(vector,&doflist1[0]); 1327 } 1307 1328 } 1308 1329 /*}}}*/ … … 1926 1947 } 1927 1948 /*}}}*/ 1949 /*FUNCTION Tria::ListResultsEnums{{{*/ 1950 void Tria::ListResultsEnums(int** in_results_enums,int* in_num_results){ 1951 1952 /*Intermediaries*/ 1953 int i; 1954 int numberofresults = 0; 1955 int *resultsenums =NULL; 1956 1957 /*Checks*/ 1958 _assert_(in_num_results); 1959 1960 /*Count number of results*/ 1961 for(i=0;i<this->results->Size();i++){ 1962 ElementResult* elementresult=(ElementResult*)this->results->GetObjectByOffset(i); 1963 numberofresults++; 1964 } 1965 1966 /*Allocate output*/ 1967 resultsenums=(int*)xmalloc(numberofresults*sizeof(int)); 1968 1969 /*populate enums*/ 1970 for(i=0;i<this->results->Size();i++){ 1971 ElementResult* elementresult=(ElementResult*)this->results->GetObjectByOffset(i); 1972 resultsenums[i]=elementresult->EnumType(); 1973 } 1974 1975 /*Assign output pointers:*/ 1976 *in_num_results=numberofresults; 1977 *in_results_enums=resultsenums; 1978 1979 }/*}}}*/ 1928 1980 /*FUNCTION Tria::MigrateGroundingLine{{{1*/ 1929 1981 void Tria::MigrateGroundingLine(void){ -
issm/trunk/src/c/objects/Elements/Tria.h
r9817 r9874 90 90 bool IsOnWater(); 91 91 void GetSolutionFromInputs(Vec solution); 92 void GetVectorFromInputs(Vec vector,int NameEnum); 92 void GetVectorFromInputs(Vec vector, int name_enum); 93 void GetVectorFromResults(Vec vector,int name_enum); 93 94 94 95 void InputArtificialNoise(int enum_type,double min, double max); … … 110 111 111 112 void RequestedOutput(int output_enum,int step,double time); 113 void ListResultsEnums(int** results_enums,int* num_results); 112 114 void PatchFill(int* pcount, Patch* patch); 113 115 void PatchSize(int* pnumrows, int* pnumvertices,int* pnumnodes); -
issm/trunk/src/c/objects/ExternalResults/DoubleVecExternalResult.cpp
r9777 r9874 26 26 } 27 27 /*}}}*/ 28 /*FUNCTION DoubleVecExternalResult::DoubleVecExternalResult(int enum_type,IssmDoubleVec values,int M ){{{1*/28 /*FUNCTION DoubleVecExternalResult::DoubleVecExternalResult(int enum_type,IssmDoubleVec values,int M,int in_step,double in_time){{{1*/ 29 29 DoubleVecExternalResult::DoubleVecExternalResult(int in_id, int in_enum_type,double* in_values, int in_M,int in_step,double in_time){ 30 30
Note:
See TracChangeset
for help on using the changeset viewer.