Changeset 10989
- Timestamp:
- 11/30/11 14:50:38 (13 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 19 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/Container/Elements.cpp
r10975 r10989 164 164 /*}}}*/ 165 165 /*FUNCTION Elements::ToResults{{{1*/ 166 void Elements::ToResults(Results* results,Parameters* parameters ,int step, double time){166 void Elements::ToResults(Results* results,Parameters* parameters){ 167 167 168 168 extern int my_rank; … … 170 170 Patch *patch = NULL; 171 171 int *resultsenums = NULL; 172 int *resultssize = NULL; 173 int *resultsstep = NULL; 174 double *resultstimes = NULL; 172 175 double *vector_serial= NULL; 173 176 Vec vector = NULL; 174 177 bool io_gather; 175 178 bool results_as_patches; 176 int numberofvertices ;177 int numberofresults ;179 int numberofvertices,numberofelements; 180 int numberofresults,vectorsize; 178 181 179 182 /*Recover parameters: */ … … 181 184 parameters->FindParam(&results_as_patches,SettingsResultsAsPatchesEnum); 182 185 parameters->FindParam(&numberofvertices,MeshNumberofverticesEnum); 186 parameters->FindParam(&numberofelements,MeshNumberofelementsEnum); 183 187 184 188 if(!results_as_patches){ … … 187 191 /*OK, see what the first element of this partition has in stock (this is common to all partitions)*/ 188 192 Element* element=(Element*)this->GetObjectByOffset(0); 189 element->ListResults Enums(&resultsenums,&numberofresults);193 element->ListResultsInfo(&resultsenums,&resultssize,&resultstimes,&resultsstep,&numberofresults); 190 194 191 195 /*Loop over all results and get nodal vector*/ … … 193 197 194 198 /*Get vector for result number i*/ 195 vector=NewVec(numberofvertices); 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])); 202 vector=NewVec(vectorsize); 203 196 204 for(int j=0;j<this->Size();j++){ 197 205 Element* element=(Element*)this->GetObjectByOffset(j); 198 element->GetVectorFromResults(vector, resultsenums[i]);206 element->GetVectorFromResults(vector,i); 199 207 } 200 208 VecAssemblyBegin(vector); … … 205 213 if(my_rank==0){ 206 214 /*No need to add this vector for all cpus*/ 207 results->AddObject(new DoubleVecExternalResult(results->Size()+1,resultsenums[i],vector_serial, numberofvertices,step,time));215 results->AddObject(new DoubleVecExternalResult(results->Size()+1,resultsenums[i],vector_serial,vectorsize,resultsstep[i],resultstimes[i])); 208 216 } 209 217 … … 224 232 /*create result object and add to results dataset:*/ 225 233 if (patch->maxvertices && patch->maxnodes){ 226 results->AddObject(new IntExternalResult(results->Size()+1,PatchVerticesEnum,patch->maxvertices, step,time));227 results->AddObject(new IntExternalResult(results->Size()+1,PatchNodesEnum, patch->maxnodes, step,time));228 results->AddObject(new DoubleMatExternalResult(results->Size()+1,PatchEnum, patch->values,patch->numrows,patch->numcols,step,time));234 results->AddObject(new IntExternalResult(results->Size()+1,PatchVerticesEnum,patch->maxvertices,1,0)); 235 results->AddObject(new IntExternalResult(results->Size()+1,PatchNodesEnum, patch->maxnodes,1,0)); 236 results->AddObject(new DoubleMatExternalResult(results->Size()+1,PatchEnum, patch->values,patch->numrows,patch->numcols,1,0)); 229 237 } 230 238 } … … 232 240 /*Free ressources:*/ 233 241 xfree((void**)&resultsenums); 242 xfree((void**)&resultssize); 243 xfree((void**)&resultstimes); 244 xfree((void**)&resultsstep); 234 245 delete patch; 235 246 } -
issm/trunk-jpl/src/c/Container/Elements.h
r10522 r10989 30 30 void ProcessResultsUnits(void); 31 31 void SetCurrentConfiguration(Elements* elements,Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters); 32 void ToResults(Results* results,Parameters* parameters ,int step, double time);32 void ToResults(Results* results,Parameters* parameters); 33 33 Patch* ResultsToPatch(void); 34 34 int NumberOfElements(void); -
issm/trunk-jpl/src/c/Container/Results.cpp
r10522 r10989 136 136 137 137 /*Fill each field: */ 138 for(i=0;i< nfields-2;i++){ //do not include the last one used for time138 for(i=0;i<this->Size();i++){ //do not include the last one used for time 139 139 ExternalResult* result=(ExternalResult*)this->GetObjectByOffset(i); 140 140 result->SetMatlabField(dataref); -
issm/trunk-jpl/src/c/modules/OutputResultsx/OutputResultsx.cpp
r10400 r10989 17 17 18 18 #ifdef _SERIAL_ 19 void OutputResultsx(mxArray** pdataref, Elements* elements, Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,Results** presults , int step, double time){19 void OutputResultsx(mxArray** pdataref, Elements* elements, Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,Results** presults){ 20 20 #else 21 void OutputResultsx( Elements* elements, Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,Results** presults , int step, double time){21 void OutputResultsx( Elements* elements, Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,Results** presults){ 22 22 #endif 23 23 … … 54 54 /*We have results inside our elements, loads, etc ... Get them out of there, into the results dataset: */ 55 55 elements->ProcessResultsUnits(); 56 elements->ToResults(results,parameters ,step,time);56 elements->ToResults(results,parameters); 57 57 elements->DeleteResults(); 58 58 -
issm/trunk-jpl/src/c/modules/OutputResultsx/OutputResultsx.h
r9320 r10989 16 16 #ifdef _SERIAL_ 17 17 #include <mex.h> 18 void OutputResultsx(mxArray** pdataref, Elements* elements, Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters, Results** presults ,int step=1,double time=0);18 void OutputResultsx(mxArray** pdataref, Elements* elements, Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters, Results** presults); 19 19 #else 20 void OutputResultsx(Elements* elements, Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters, Results** presults ,int step=1,double time=0);20 void OutputResultsx(Elements* elements, Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters, Results** presults); 21 21 #endif 22 22 -
issm/trunk-jpl/src/c/objects/ElementResults/BoolElementResult.h
r9883 r10989 45 45 /*ElementResult virtual functions definitions: {{{1*/ 46 46 ElementResult* SpawnTriaElementResult(int* indices); 47 double GetTime(void){return time;}; 48 int GetStep(void){return step;}; 47 49 void ProcessUnits(Parameters* parameters); 48 50 int NumberOfNodalValues(void); -
issm/trunk-jpl/src/c/objects/ElementResults/DoubleElementResult.h
r9883 r10989 45 45 /*ElementResult virtual functions definitions: {{{1*/ 46 46 ElementResult* SpawnTriaElementResult(int* indices); 47 double GetTime(void){return time;}; 48 int GetStep(void){return step;}; 47 49 void ProcessUnits(Parameters* parameters); 48 50 int NumberOfNodalValues(void); -
issm/trunk-jpl/src/c/objects/ElementResults/ElementResult.h
r9883 r10989 19 19 20 20 virtual ElementResult* SpawnTriaElementResult(int* indices)=0; 21 virtual double GetTime(void)=0; 22 virtual int GetStep(void)=0; 21 23 virtual void ProcessUnits(Parameters* parameters)=0; 22 24 virtual int NumberOfNodalValues(void)=0; -
issm/trunk-jpl/src/c/objects/ElementResults/PentaVertexElementResult.h
r9883 r10989 44 44 /*ElementResult virtual functions definitions: {{{1*/ 45 45 ElementResult* SpawnTriaElementResult(int* indices); 46 double GetTime(void){return time;}; 47 int GetStep(void){return step;}; 46 48 void ProcessUnits(Parameters* parameters); 47 49 int NumberOfNodalValues(void); -
issm/trunk-jpl/src/c/objects/ElementResults/TriaVertexElementResult.h
r9883 r10989 43 43 /*ElementResult virtual functions definitions: {{{1*/ 44 44 ElementResult* SpawnTriaElementResult(int* indices); 45 double GetTime(void){return time;}; 46 int GetStep(void){return step;}; 45 47 void ProcessUnits(Parameters* parameters); 46 48 int NumberOfNodalValues(void); -
issm/trunk-jpl/src/c/objects/Elements/Element.h
r10703 r10989 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 ListResults Enums(int** results_enums,int* num_results)=0;49 virtual void ListResultsInfo(int** results_enums,int** results_size,double** results_times,int** results_steps,int* num_results)=0; 50 50 virtual void DeleteResults(void)=0; 51 51 virtual void Update(int index, IoModel* iomodel,int analysis_counter,int analysis_type)=0; … … 59 59 virtual void InputScale(int enum_type,double scale_factor)=0; 60 60 virtual void GetVectorFromInputs(Vec vector, int name_enum)=0; 61 virtual void GetVectorFromResults(Vec vector,int name_enum)=0;61 virtual void GetVectorFromResults(Vec vector,int id)=0; 62 62 virtual void InputArtificialNoise(int enum_type,double min,double max)=0; 63 63 virtual bool InputConvergence(double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums)=0; -
issm/trunk-jpl/src/c/objects/Elements/Penta.cpp
r10970 r10989 1139 1139 /*}}}*/ 1140 1140 /*FUNCTION Penta::GetVectorFromResults{{{1*/ 1141 void Penta::GetVectorFromResults(Vec vector,int result_enum){1141 void Penta::GetVectorFromResults(Vec vector,int offset){ 1142 1142 1143 1143 int doflist1[NUMVERTICES]; … … 1146 1146 this->GetSidList(&doflist1[0]); 1147 1147 1148 /*Get result)*/ 1149 for(int i=0;i<this->results->Size();i++){ 1150 ElementResult* elementresult=(ElementResult*)this->results->GetObjectByOffset(i); 1151 if(elementresult->InstanceEnum()!=result_enum) continue; 1152 elementresult->GetVectorFromResults(vector,&doflist1[0],NUMVERTICES); 1153 return; 1154 } 1155 1156 _error_("Result %s not found in element",EnumToStringx(result_enum)); 1148 /*Get result*/ 1149 ElementResult* elementresult=(ElementResult*)this->results->GetObjectByOffset(offset); 1150 elementresult->GetVectorFromResults(vector,&doflist1[0],NUMVERTICES); 1157 1151 } 1158 1152 /*}}}*/ … … 2057 2051 } 2058 2052 /*}}}*/ 2059 /*FUNCTION Penta::ListResults Enums{{{*/2060 void Penta::ListResults Enums(int** in_results_enums,int* in_num_results){2053 /*FUNCTION Penta::ListResultsInfo{{{*/ 2054 void Penta::ListResultsInfo(int** in_resultsenums,int** in_resultssizes,double** in_resultstimes,int** in_resultssteps,int* in_num_results){ 2061 2055 2062 2056 /*Intermediaries*/ … … 2064 2058 int numberofresults = 0; 2065 2059 int *resultsenums = NULL; 2060 int *resultssizes = NULL; 2061 double *resultstimes = NULL; 2062 int *resultssteps = NULL; 2066 2063 2067 2064 /*Checks*/ … … 2078 2075 /*Allocate output*/ 2079 2076 resultsenums=(int*)xmalloc(numberofresults*sizeof(int)); 2077 resultssizes=(int*)xmalloc(numberofresults*sizeof(int)); 2078 resultstimes=(double*)xmalloc(numberofresults*sizeof(double)); 2079 resultssteps=(int*)xmalloc(numberofresults*sizeof(int)); 2080 2080 2081 2081 /*populate enums*/ … … 2083 2083 ElementResult* elementresult=(ElementResult*)this->results->GetObjectByOffset(i); 2084 2084 resultsenums[i]=elementresult->InstanceEnum(); 2085 resultstimes[i]=elementresult->GetTime(); 2086 resultssteps[i]=elementresult->GetStep(); 2087 if(elementresult->ObjectEnum()==PentaVertexElementResultEnum){ 2088 resultssizes[i]=P1Enum; 2089 } 2090 else{ 2091 resultssizes[i]=P0Enum; 2092 } 2085 2093 } 2086 2094 } … … 2088 2096 /*Assign output pointers:*/ 2089 2097 *in_num_results=numberofresults; 2090 *in_results_enums=resultsenums; 2098 *in_resultsenums=resultsenums; 2099 *in_resultssizes=resultssizes; 2100 *in_resultstimes=resultstimes; 2101 *in_resultssteps=resultssteps; 2091 2102 2092 2103 }/*}}}*/ -
issm/trunk-jpl/src/c/objects/Elements/Penta.h
r10703 r10989 92 92 double GetZcoord(GaussPenta* gauss); 93 93 void GetVectorFromInputs(Vec vector,int name_enum); 94 void GetVectorFromResults(Vec vector,int name_enum);94 void GetVectorFromResults(Vec vector,int offset); 95 95 96 96 int Sid(); … … 107 107 void PotentialSheetUngrounding(Vec potential_sheet_ungrounding); 108 108 void RequestedOutput(int output_enum,int step,double time); 109 void ListResults Enums(int** results_enums,int* num_results);109 void ListResultsInfo(int** results_enums,int** results_size,double** results_times,int** results_steps,int* num_results); 110 110 void PatchFill(int* pcount, Patch* patch); 111 111 void PatchSize(int* pnumrows, int* pnumvertices,int* pnumnodes); -
issm/trunk-jpl/src/c/objects/Elements/Tria.cpp
r10970 r10989 1254 1254 /*}}}*/ 1255 1255 /*FUNCTION Tria::GetVectorFromResults{{{1*/ 1256 void Tria::GetVectorFromResults(Vec vector,int result_enum){ 1257 1258 bool found=false; 1256 void Tria::GetVectorFromResults(Vec vector,int offset){ 1257 1259 1258 int doflist1[NUMVERTICES]; 1260 1259 … … 1262 1261 this->GetSidList(&doflist1[0]); 1263 1262 1264 /*Get result)*/ 1265 for(int i=0;i<this->results->Size();i++){ 1266 ElementResult* elementresult=(ElementResult*)this->results->GetObjectByOffset(i); 1267 if(elementresult->InstanceEnum()!=result_enum) continue; 1268 elementresult->GetVectorFromResults(vector,&doflist1[0],NUMVERTICES); 1269 return; 1270 } 1271 1272 _error_("Result %s not found in element",EnumToStringx(result_enum)); 1263 /*Get result*/ 1264 ElementResult* elementresult=(ElementResult*)this->results->GetObjectByOffset(offset); 1265 elementresult->GetVectorFromResults(vector,&doflist1[0],NUMVERTICES); 1273 1266 } 1274 1267 /*}}}*/ … … 1897 1890 } 1898 1891 /*}}}*/ 1899 /*FUNCTION Tria::ListResults Enums{{{*/1900 void Tria::ListResults Enums(int** in_results_enums,int* in_num_results){1892 /*FUNCTION Tria::ListResultsInfo{{{*/ 1893 void Tria::ListResultsInfo(int** in_resultsenums,int** in_resultssizes,double** in_resultstimes,int** in_resultssteps,int* in_num_results){ 1901 1894 1902 1895 /*Intermediaries*/ … … 1904 1897 int numberofresults = 0; 1905 1898 int *resultsenums = NULL; 1899 int *resultssizes = NULL; 1900 double *resultstimes = NULL; 1901 int *resultssteps = NULL; 1906 1902 1907 1903 /*Checks*/ … … 1918 1914 /*Allocate output*/ 1919 1915 resultsenums=(int*)xmalloc(numberofresults*sizeof(int)); 1916 resultssizes=(int*)xmalloc(numberofresults*sizeof(int)); 1917 resultstimes=(double*)xmalloc(numberofresults*sizeof(double)); 1918 resultssteps=(int*)xmalloc(numberofresults*sizeof(int)); 1920 1919 1921 1920 /*populate enums*/ … … 1923 1922 ElementResult* elementresult=(ElementResult*)this->results->GetObjectByOffset(i); 1924 1923 resultsenums[i]=elementresult->InstanceEnum(); 1924 resultstimes[i]=elementresult->GetTime(); 1925 resultssteps[i]=elementresult->GetStep(); 1926 if(elementresult->ObjectEnum()==TriaVertexElementResultEnum){ 1927 resultssizes[i]=P1Enum; 1928 } 1929 else{ 1930 resultssizes[i]=P0Enum; 1931 } 1925 1932 } 1926 1933 } … … 1928 1935 /*Assign output pointers:*/ 1929 1936 *in_num_results=numberofresults; 1930 *in_results_enums=resultsenums; 1937 *in_resultsenums=resultsenums; 1938 *in_resultssizes=resultssizes; 1939 *in_resultstimes=resultstimes; 1940 *in_resultssteps=resultssteps; 1931 1941 1932 1942 }/*}}}*/ -
issm/trunk-jpl/src/c/objects/Elements/Tria.h
r10703 r10989 92 92 void GetSolutionFromInputs(Vec solution); 93 93 void GetVectorFromInputs(Vec vector, int name_enum); 94 void GetVectorFromResults(Vec vector,int name_enum);94 void GetVectorFromResults(Vec vector,int offset); 95 95 void InputArtificialNoise(int enum_type,double min, double max); 96 96 bool InputConvergence(double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums); … … 106 106 void PotentialSheetUngrounding(Vec potential_sheet_ungrounding); 107 107 void RequestedOutput(int output_enum,int step,double time); 108 void ListResults Enums(int** results_enums,int* num_results);108 void ListResultsInfo(int** results_enums,int** results_size,double** results_times,int** results_steps,int* num_results); 109 109 void PatchFill(int* pcount, Patch* patch); 110 110 void PatchSize(int* pnumrows, int* pnumvertices,int* pnumnodes); -
issm/trunk-jpl/src/c/objects/ExternalResults/DoubleVecExternalResult.cpp
r9883 r10989 209 209 void DoubleVecExternalResult::SetMatlabField(mxArray* dataref){ 210 210 211 mxArray * pfield=NULL;212 double * doublemat=NULL;213 char * name=NULL;214 double * doublevec=NULL;211 mxArray *pfield = NULL; 212 double *doublemat = NULL; 213 char *name = NULL; 214 double *doublevec = NULL; 215 215 216 216 /*Make a copy of the value, to be used by matlab: */ … … 230 230 mxSetField( dataref, this->step-1, "time",mxCreateDoubleScalar((double)this->time)); 231 231 mxSetField( dataref, this->step-1, "step",mxCreateDoubleScalar((double)this->step)); 232 233 232 } 234 233 #endif -
issm/trunk-jpl/src/c/solutions/hydrology_core.cpp
r10534 r10989 61 61 /*unload results*/ 62 62 _printf_(VerboseSolution()," saving temporary results\n"); 63 OutputResultsx(femmodel->elements, femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,&femmodel->results ,i+1,time);63 OutputResultsx(femmodel->elements, femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,&femmodel->results); 64 64 65 65 } -
issm/trunk-jpl/src/c/solutions/thermal_core.cpp
r10988 r10989 60 60 InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,TemperatureEnum,i+1,time); 61 61 InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,BasalforcingsMeltingRateEnum,i+1,time); 62 63 /*unload results*/64 _printf_(VerboseSolution()," saving temporary results\n");65 OutputResultsx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,&femmodel->results,i+1,time);66 62 } 67 63 -
issm/trunk-jpl/src/c/solutions/transient_core.cpp
r10650 r10989 141 141 /*unload results*/ 142 142 _printf_(VerboseSolution()," saving temporary results\n"); 143 OutputResultsx(femmodel->elements, femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,&femmodel->results ,step,time);143 OutputResultsx(femmodel->elements, femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,&femmodel->results); 144 144 } 145 145 }
Note:
See TracChangeset
for help on using the changeset viewer.