Changeset 2112
- Timestamp:
- 09/04/09 16:58:25 (16 years ago)
- Location:
- issm/trunk/src
- Files:
-
- 29 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/c/MassFluxx/MassFluxx.cpp
r2110 r2112 14 14 15 15 void MassFluxx(double* pmass_flux, DataSet* elements,DataSet* nodes,DataSet* loads,DataSet* materials, 16 double* segments,int num_segments,double* vx,double* vy,double* vz){16 double* segments,int num_segments,double* ug){ 17 17 18 18 int i,j; … … 40 40 if (element->GetId()==element_id){ 41 41 /*We found the element which owns this segment, use it to compute the mass flux: */ 42 mass_flux+=element->MassFlux(segments+5*i+0, vx,vy,vz);42 mass_flux+=element->MassFlux(segments+5*i+0,ug); 43 43 } 44 44 } … … 46 46 47 47 #ifdef _PARALLEL_ 48 49 all_mass_flux=mass_flux;48 MPI_Allreduce ( (void*)&mass_flux,(void*)&all_mass_flux,1,MPI_DOUBLE,MPI_SUM,MPI_COMM_WORLD); 49 mass_flux=all_mass_flux; 50 50 #endif 51 51 -
issm/trunk/src/c/MassFluxx/MassFluxx.h
r2110 r2112 10 10 11 11 /* local prototypes: */ 12 void MassFluxx(double* pmass_flux, DataSet* elements,DataSet* nodes,DataSet* loads,DataSet* materials,double* segments,int num_segments,double* vx,double* vy,double* vz);12 void MassFluxx(double* pmass_flux, DataSet* elements,DataSet* nodes,DataSet* loads,DataSet* materials,double* segments,int num_segments,double* ug); 13 13 14 14 -
issm/trunk/src/c/ModelProcessorx/CreateDataSets.cpp
r2110 r2112 89 89 throw ErrorException(__FUNCT__,exprintf("%s%i%s%i%s"," analysis_type: ",iomodel->analysis_type," sub_analysis_type: ",iomodel->sub_analysis_type," not supported yet!")); 90 90 } 91 92 91 CreateParametersQmu(pparameters,iomodel,iomodel_handle); 93 92 -
issm/trunk/src/c/ModelProcessorx/Qmu/CreateParametersQmu.cpp
r2110 r2112 52 52 mxArray* pfield2=NULL; 53 53 #endif 54 54 55 55 /*recover parameters : */ 56 56 parameters=*pparameters; … … 100 100 /*Deal with variables for qmu iomodeling: */ 101 101 variabledescriptors=(char**)xmalloc(iomodel->numberofvariables*sizeof(char*)); 102 102 103 103 104 /*Fetch descriptors: logic varies if we are running parallel or serial. In parallel, qmumarshall … … 229 230 230 231 #ifdef _PARALLEL_ 231 /*Use the element partitioning vector from the iomodel to down select qmu_mass_flux_segments to only segments that are relevant 232 * to this cpu: */ 233 my_num_qmu_mass_flux_segments=0; 234 for(j=0;j<num_qmu_mass_flux_segments;j++){ 235 if ( (*(qmu_mass_flux_segments+5*j+4)) == iomodel->epart[my_rank])my_qmu_mass_flux_segments++; 236 } 237 if(my_num_qmu_mass_flux_segments){ 238 my_qmu_mass_flux_segments=(double*)xcalloc(5*my_num_qmu_mass_flux_segments,sizeof(double)); 239 second_count=0; 232 233 /*Only if partitioning exist do we care about the segments: */ 234 if(iomodel->epart){ 235 236 /*Use the element partitioning vector from the iomodel to down select qmu_mass_flux_segments to only segments that are relevant 237 * to this cpu: */ 238 my_num_qmu_mass_flux_segments=0; 240 239 for(j=0;j<num_qmu_mass_flux_segments;j++){ 241 if (*(qmu_mass_flux_segments+5*j+4)==iomodel->epart[my_rank]){ 242 for(k=0;k<5;k++)*(my_qmu_mass_flux_segments+5*second_count+k)=*(qmu_mass_flux_segments+5*j+k); 243 second_count++; 240 if ( iomodel->epart[(int)(*(qmu_mass_flux_segments+5*j+4))-1] == my_rank)my_num_qmu_mass_flux_segments++; 241 } 242 243 244 if(my_num_qmu_mass_flux_segments){ 245 my_qmu_mass_flux_segments=(double*)xcalloc(5*my_num_qmu_mass_flux_segments,sizeof(double)); 246 second_count=0; 247 for(j=0;j<num_qmu_mass_flux_segments;j++){ 248 if (iomodel->epart[(int)*(qmu_mass_flux_segments+5*j+4)-1]==my_rank){ 249 for(k=0;k<5;k++)*(my_qmu_mass_flux_segments+5*second_count+k)=*(qmu_mass_flux_segments+5*j+k); 250 second_count++; 251 } 244 252 } 245 253 } 254 255 count++; 256 param= new Param(count,"qmu_mass_flux_segments",DOUBLEMAT); 257 param->SetDoubleMat(my_qmu_mass_flux_segments,my_num_qmu_mass_flux_segments,5); 258 parameters->AddObject(param); 259 246 260 } 247 248 count++; 249 param= new Param(count,"qmu_mass_flux_segments",DOUBLEMAT); 250 param->SetDoubleMat(my_qmu_mass_flux_segments,my_num_qmu_mass_flux_segments,5); 251 parameters->AddObject(param); 261 252 262 #else 253 263 … … 263 273 } 264 274 } 265 266 275 267 276 /*Free data: */ … … 289 298 } 290 299 291 292 300 /*Assign output pointer: */ 293 301 *pparameters=parameters; -
issm/trunk/src/c/Qmux/DakotaResponses.cpp
r1881 r2112 11 11 #include "../DataSet/DataSet.h" 12 12 #include "../shared/shared.h" 13 #include "../EnumDefinitions/EnumDefinitions.h" 14 #include "../MassFluxx/MassFluxx.h" 13 15 14 16 #undef __FUNCT__ 15 17 #define __FUNCT__ "DakotaResponses" 16 void DakotaResponses(double* responses,char** responses_descriptors,int numresponses,Model* model,DataSet* results, int analysis_type,int sub_analysis_type){18 void DakotaResponses(double* responses,char** responses_descriptors,int numresponses,Model* model,DataSet* results,DataSet* processed_results,int analysis_type,int sub_analysis_type){ 17 19 18 20 int i,j; … … 25 27 model->FindParam(&numberofnodes,"numberofnodes"); 26 28 29 27 30 for(i=0;i<numresponses;i++){ 28 31 29 32 response_descriptor=responses_descriptors[i]; 30 33 31 //'min_vx' 'max_vx' 'max_abs_vx' 'min_vy' 'max_vy' 'max_abs_vy' 'min_vel' 'max_vel '34 //'min_vx' 'max_vx' 'max_abs_vx' 'min_vy' 'max_vy' 'max_abs_vy' 'min_vel' 'max_vel, mass_flux' 32 35 33 36 if(strcmp(response_descriptor,"min_vel")==0){ … … 35 38 double min_vel=0; 36 39 37 found= results->FindResult((void*)&vel,"vel");40 found=processed_results->FindResult((void*)&vel,"vel"); 38 41 if(!found)throw ErrorException(__FUNCT__," could not find vel to compute min_vel"); 39 42 … … 44 47 45 48 if(my_rank==0)responses[i]=min_vel; 49 50 /*Free ressources:*/ 51 xfree((void**)&vel); 52 46 53 47 54 } … … 50 57 double max_vel=0; 51 58 52 found= results->FindResult((void*)&vel,"vel");59 found=processed_results->FindResult((void*)&vel,"vel"); 53 60 if(!found)throw ErrorException(__FUNCT__," could not find vel to compute max_vel"); 54 61 … … 58 65 } 59 66 if(my_rank==0)responses[i]=max_vel; 67 68 /*Free ressources:*/ 69 xfree((void**)&vel); 70 60 71 } 61 72 else if(strcmp(response_descriptor,"min_vx")==0){ … … 63 74 double min_vx=0; 64 75 65 found= results->FindResult((void*)&vx,"vx");76 found=processed_results->FindResult((void*)&vx,"vx"); 66 77 if(!found)throw ErrorException(__FUNCT__," could not find vx to compute min_vx"); 67 78 … … 71 82 } 72 83 if(my_rank==0)responses[i]=min_vx; 84 85 /*Free ressources:*/ 86 xfree((void**)&vx); 87 73 88 } 74 89 else if(strcmp(response_descriptor,"max_vx")==0){ … … 76 91 double max_vx=0; 77 92 78 found= results->FindResult((void*)&vx,"vx");93 found=processed_results->FindResult((void*)&vx,"vx"); 79 94 if(!found)throw ErrorException(__FUNCT__," could not find vx to compute max_vx"); 80 95 … … 84 99 } 85 100 if(my_rank==0)responses[i]=max_vx; 101 102 /*Free ressources:*/ 103 xfree((void**)&vx); 104 86 105 } 87 106 else if(strcmp(response_descriptor,"max_abs_vx")==0){ … … 89 108 double max_abs_vx=0; 90 109 91 found= results->FindResult((void*)&vx,"vx");110 found=processed_results->FindResult((void*)&vx,"vx"); 92 111 if(!found)throw ErrorException(__FUNCT__," could not find vx to compute max_abs_vx"); 93 112 … … 97 116 } 98 117 if(my_rank==0)responses[i]=max_abs_vx; 118 119 /*Free ressources:*/ 120 xfree((void**)&vx); 121 99 122 } 100 123 else if(strcmp(response_descriptor,"min_vy")==0){ … … 102 125 double min_vy=0; 103 126 104 found= results->FindResult((void*)&vy,"vy");127 found=processed_results->FindResult((void*)&vy,"vy"); 105 128 if(!found)throw ErrorException(__FUNCT__," could not find vy to compute min_vy"); 106 129 … … 110 133 } 111 134 if(my_rank==0)responses[i]=min_vy; 135 136 /*Free ressources:*/ 137 xfree((void**)&vy); 138 112 139 } 113 140 else if(strcmp(response_descriptor,"max_vy")==0){ … … 115 142 double max_vy=0; 116 143 117 found= results->FindResult((void*)&vy,"vy");144 found=processed_results->FindResult((void*)&vy,"vy"); 118 145 if(!found)throw ErrorException(__FUNCT__," could not find vy to compute max_vy"); 119 146 … … 123 150 } 124 151 if(my_rank==0)responses[i]=max_vy; 152 153 /*Free ressources:*/ 154 xfree((void**)&vy); 155 125 156 } 126 157 else if(strcmp(response_descriptor,"max_abs_vy")==0){ … … 128 159 double max_abs_vy=0; 129 160 130 found= results->FindResult((void*)&vy,"vy");161 found=processed_results->FindResult((void*)&vy,"vy"); 131 162 if(!found)throw ErrorException(__FUNCT__," could not find vy to compute max_abs_vy"); 132 163 … … 136 167 } 137 168 if(my_rank==0)responses[i]=max_abs_vy; 169 170 /*Free ressources:*/ 171 xfree((void**)&vy); 172 138 173 } 139 174 else if(strcmp(response_descriptor,"min_vz")==0){ … … 141 176 double min_vz=0; 142 177 143 found= results->FindResult((void*)&vz,"vz");178 found=processed_results->FindResult((void*)&vz,"vz"); 144 179 if(!found)throw ErrorException(__FUNCT__," could not find vz to compute min_vz"); 145 180 … … 149 184 } 150 185 if(my_rank==0)responses[i]=min_vz; 186 187 /*Free ressources:*/ 188 xfree((void**)&vz); 189 151 190 } 152 191 else if(strcmp(response_descriptor,"max_vz")==0){ … … 154 193 double max_vz=0; 155 194 156 found= results->FindResult((void*)&vz,"vz");195 found=processed_results->FindResult((void*)&vz,"vz"); 157 196 if(!found)throw ErrorException(__FUNCT__," could not find vz to compute max_vz"); 158 197 … … 162 201 } 163 202 if(my_rank==0)responses[i]=max_vz; 203 204 /*Free ressources:*/ 205 xfree((void**)&vz); 206 164 207 } 165 208 else if(strcmp(response_descriptor,"max_abs_vz")==0){ … … 167 210 double max_abs_vz=0; 168 211 169 found= results->FindResult((void*)&vz,"vz");212 found=processed_results->FindResult((void*)&vz,"vz"); 170 213 if(!found)throw ErrorException(__FUNCT__," could not find vz to compute max_abs_vz"); 171 214 … … 175 218 } 176 219 if(my_rank==0)responses[i]=max_abs_vz; 220 221 /*Free ressources:*/ 222 xfree((void**)&vz); 223 224 } 225 else if(strcmp(response_descriptor,"mass_flux")==0){ 226 227 int isstokes,ismacayealpattyn,ishutter; 228 Vec ug=NULL; 229 double* ug_serial=NULL; 230 double mass_flux=0; 231 double* segments=NULL; 232 int num_segments; 233 DataSet* elements=NULL; 234 DataSet* nodes=NULL; 235 DataSet* materials=NULL; 236 DataSet* parameters=NULL; 237 FemModel* femmodel=NULL; 238 Param* param=NULL; 239 240 /*retrieve velocities: */ 241 found=results->FindResult(&ug,"u_g"); 242 if(!found)throw ErrorException(__FUNCT__," could not find velocity to compute mass_flux"); 243 VecToMPISerial(&ug_serial,ug); 244 245 /*retrieve active fem model: */ 246 model->FindParam(&isstokes,"isstokes"); 247 model->FindParam(&ismacayealpattyn,"ismacayealpattyn"); 248 model->FindParam(&ishutter,"ishutter"); 249 250 if(isstokes){ 251 femmodel=model->GetFormulation(DiagnosticAnalysisEnum(),StokesAnalysisEnum()); 252 } 253 if(ismacayealpattyn){ 254 femmodel=model->GetFormulation(DiagnosticAnalysisEnum(),HorizAnalysisEnum()); 255 } 256 if(ishutter){ 257 femmodel=model->GetFormulation(DiagnosticAnalysisEnum(),HutterAnalysisEnum()); 258 } 259 260 /*retrieve qmu_mass_flux_segments: */ 261 param=(Param*)femmodel->parameters->FindParamObject("qmu_mass_flux_segments"); 262 if(!param)throw ErrorException(__FUNCT__," could not find qmu_mass_flux_segments to compute mass_flux"); 263 264 param->GetParameterValue((void*)&segments); 265 num_segments=param->GetM(); 266 267 /*call mass flux module: */ 268 MassFluxx(&mass_flux,femmodel->elements,femmodel->nodes,femmodel->loads,femmodel->materials,segments,num_segments,ug_serial); 269 270 if(my_rank==0)responses[i]=mass_flux; 271 272 if(my_rank==0)printf("mass_flux %g\n",mass_flux); 273 274 /*Free ressources:*/ 275 VecFree(&ug); 276 xfree((void**)&ug_serial); 277 xfree((void**)&segments); 177 278 } 178 279 else{ -
issm/trunk/src/c/Qmux/Qmux.h
r2048 r2112 16 16 void Qmux(Model* model,ParameterInputs* inputs,int analysis_type,int sub_analysis_type); 17 17 void SpawnCoreParallel(double* responses, int numresponses, double* variables, char** variables_descriptors,int numvariables, Model* model,ParameterInputs* inputs,int analysis_type,int sub_analysis_type,int counter); 18 void DakotaResponses(double* responses,char** responses_descriptors,int numresponses,Model* model, DataSet* results, int analysis_type,int sub_analysis_type);18 void DakotaResponses(double* responses,char** responses_descriptors,int numresponses,Model* model, DataSet* results,DataSet* processed_results,int analysis_type,int sub_analysis_type); 19 19 #endif 20 20 -
issm/trunk/src/c/Qmux/SpawnCoreParallel.cpp
r1904 r2112 42 42 /*output from core solutions: */ 43 43 DataSet* results=NULL; 44 DataSet* processed_results=NULL; 44 45 45 46 char** responses_descriptors=NULL; … … 110 111 #endif 111 112 113 /*broadcast response descriptors: */ 114 MPI_Bcast(&numresponses,1,MPI_INT,0,MPI_COMM_WORLD); 115 if(my_rank!=0){ 116 responses_descriptors=(char**)xmalloc(numresponses*sizeof(char*)); 117 } 118 for(i=0;i<numresponses;i++){ 119 if(my_rank==0){ 120 string=responses_descriptors[i]; 121 string_length=(strlen(string)+1)*sizeof(char); 122 } 123 MPI_Bcast(&string_length,1,MPI_INT,0,MPI_COMM_WORLD); 124 if(my_rank!=0)string=(char*)xmalloc(string_length); 125 MPI_Bcast(string,string_length,MPI_CHAR,0,MPI_COMM_WORLD); 126 if(my_rank!=0)responses_descriptors[i]=string; 127 } 128 129 #ifdef _ISSM_DEBUG_ 130 for(i=0;i<numresponses;i++){ 131 PetscSynchronizedPrintf(MPI_COMM_WORLD,"variable descriptor %i: %s value: %g\n",i,responses_descriptors[i],responses[i]); 132 PetscSynchronizedFlush(MPI_COMM_WORLD); 133 } 134 #endif 135 136 112 137 _printf_("qmu iteration: %i\n",counter); 113 138 … … 150 175 /*Now process the outputs, before computing the dakota responses: */ 151 176 if(debug)_printf_("process results:\n"); 152 ProcessResults(&results,model,analysis_type); 153 154 177 ProcessResults(&processed_results,results,model,analysis_type); 178 155 179 /*compute responses on cpu 0: dummy for now! */ 156 180 if(debug)_printf_("compute dakota responses:\n"); 157 DakotaResponses(responses,responses_descriptors,numresponses,model,results, analysis_type,sub_analysis_type);181 DakotaResponses(responses,responses_descriptors,numresponses,model,results,processed_results,analysis_type,sub_analysis_type); 158 182 159 183 /*Free ressources:*/ 160 184 delete results; 185 delete processed_results; 161 186 162 187 //variables only on cpu != 0 -
issm/trunk/src/c/objects/Beam.cpp
r2110 r2112 667 667 #undef __FUNCT__ 668 668 #define __FUNCT__ "Beam::MassFlux" 669 double Beam::MassFlux( double* segment,double* vx,double* vy,double* vz){670 throw ErrorException(__FUNCT__," not supported yet!"); 671 } 669 double Beam::MassFlux( double* segment,double* ug){ 670 throw ErrorException(__FUNCT__," not supported yet!"); 671 } -
issm/trunk/src/c/objects/Beam.h
r2110 r2112 87 87 void GetParameterValue(double* pvalue, double* value_list,double gauss_coord); 88 88 void GetJacobianDeterminant(double* pJdet,double* z_list, double gauss_coord); 89 double MassFlux(double* segment,double* vx,double* vy,double* vz);89 double MassFlux(double* segment,double* ug); 90 90 91 91 }; -
issm/trunk/src/c/objects/Element.h
r2110 r2112 40 40 virtual double Misfit(void* inputs,int analysis_type,int sub_analysis_type)=0; 41 41 virtual void ComputePressure(Vec p_g)=0; 42 virtual double MassFlux(double* segment,double* vx,double* vy,double* vz)=0;42 virtual double MassFlux(double* segment,double* ug)=0; 43 43 44 44 int Enum(); -
issm/trunk/src/c/objects/Param.cpp
r2110 r2112 130 130 131 131 case DOUBLEMAT: 132 /*printf(" double matrix. size: %i,%i\n",M,N);132 printf(" double matrix. size: %i,%i\n",M,N); 133 133 for(i=0;i<M;i++){ 134 134 for(j=0;j<N;j++){ … … 136 136 } 137 137 printf("\n"); 138 } */138 } 139 139 break; 140 140 -
issm/trunk/src/c/objects/Penta.cpp
r2110 r2112 4032 4032 #undef __FUNCT__ 4033 4033 #define __FUNCT__ "Penta::MassFlux" 4034 double Penta::MassFlux( double* segment,double* vx,double* vy,double* vz){4034 double Penta::MassFlux( double* segment,double* ug){ 4035 4035 throw ErrorException(__FUNCT__," not supported yet!"); 4036 4036 } -
issm/trunk/src/c/objects/Penta.h
r2110 r2112 142 142 void CreatePVectorMelting( Vec pg, void* vinputs,int analysis_type,int sub_analysis_type); 143 143 void GetPhi(double* phi, double* epsilon, double viscosity); 144 double MassFlux(double* segment,double* vx,double* vy,double* vz);144 double MassFlux(double* segment,double* ug); 145 145 146 146 -
issm/trunk/src/c/objects/Sing.cpp
r2110 r2112 505 505 #undef __FUNCT__ 506 506 #define __FUNCT__ "Sing::MassFlux" 507 double Sing::MassFlux( double* segment,double* vx,double* vy,double* vz){508 throw ErrorException(__FUNCT__," not supported yet!"); 509 } 507 double Sing::MassFlux( double* segment,double* ug){ 508 throw ErrorException(__FUNCT__," not supported yet!"); 509 } -
issm/trunk/src/c/objects/Sing.h
r2110 r2112 79 79 void GradjB(_p_Vec*, void*, int,int); 80 80 double Misfit(void*,int,int); 81 double MassFlux(double* segment,double* vx,double* vy,double* vz);81 double MassFlux(double* segment,double* ug); 82 82 83 83 -
issm/trunk/src/c/objects/Tria.cpp
r2110 r2112 3711 3711 #undef __FUNCT__ 3712 3712 #define __FUNCT__ "Tria::MassFlux" 3713 double Tria::MassFlux( double* segment,double* vx,double* vy,double* vz){3713 double Tria::MassFlux( double* segment,double* ug){ 3714 3714 3715 3715 int i; 3716 3716 3717 3717 const int numgrids=3; 3718 const int numdofs=2; 3719 int numberofdofspernode; 3718 3720 double mass_flux=0; 3719 int doflist[ 3];3721 int doflist[numgrids*numdofs]; 3720 3722 double vx_list[3]; 3721 3723 double vy_list[3]; … … 3743 3745 3744 3746 /*recover velocity at three element nodes: */ 3745 this->GetDofList 1(&doflist[0]);3747 this->GetDofList(&doflist[0],&numberofdofspernode); 3746 3748 for(i=0;i<3;i++){ 3747 vx_list[i]= vx[doflist[i]];3748 vy_list[i]= vy[doflist[i]];3749 vx_list[i]=ug[doflist[numberofdofspernode*i+0]]; 3750 vy_list[i]=ug[doflist[numberofdofspernode*i+1]]; 3749 3751 } 3750 3752 … … 3775 3777 (1.0/3.0*(h1-h2)*(vy1-vy2)+1.0/2.0*h2*(vy1-vy2)+1.0/2.0*(h1-h2)*vy2+h2*vy2)*normal[1] 3776 3778 ); 3777 3778 3779 return mass_flux; 3779 3780 } -
issm/trunk/src/c/objects/Tria.h
r2110 r2112 122 122 void CreateKMatrixPrognostic(Mat Kgg,void* vinputs,int analysis_type,int sub_analysis_type); 123 123 void CreatePVectorPrognostic(Vec pg,void* vinputs,int analysis_type,int sub_analysis_type); 124 double MassFlux(double* segment,double* vx,double* vy,double* vz);124 double MassFlux(double* segment,double* ug); 125 125 double GetArea(void); 126 126 double GetAreaCoordinate(double x, double y, int which_one); -
issm/trunk/src/c/parallel/ControlTemporaryResults.cpp
r1881 r2112 19 19 /*output: */ 20 20 DataSet* temporary_results=NULL; 21 DataSet* results=NULL; 21 22 Result* result=NULL; 22 23 char* outputfilename=NULL; … … 69 70 70 71 //process results 71 ProcessResults(& temporary_results,model,ControlAnalysisEnum());72 ProcessResults(&results,temporary_results,model,ControlAnalysisEnum()); 72 73 73 74 //Write results on disk 74 OutputResults(temporary_results,outputfilename); 75 OutputResults(results,outputfilename); 76 77 78 /*Free ressources:*/ 79 delete temporary_results; 80 delete results; 81 xfree((void**)&outputfilename); 82 VecFree(&u_g); 83 xfree((void**)&control_type); 84 xfree((void**)¶m_g_copy); 85 xfree((void**)&J_copy); 75 86 } -
issm/trunk/src/c/parallel/ProcessResults.cpp
r1964 r2112 21 21 #include "../shared/shared.h" 22 22 23 void ProcessResults(DataSet** p results,Model* model,int analysis_type){23 void ProcessResults(DataSet** pnewresults, DataSet* results,Model* model,int analysis_type){ 24 24 25 25 int i,n; … … 27 27 Result* newresult=NULL; 28 28 29 /*input: */30 DataSet* results=NULL;31 32 29 /*output: */ 33 30 DataSet* newresults=NULL; … … 95 92 96 93 int numberofnodes; 97 98 /*recover input results: */99 results=*presults;100 94 101 95 /*Initialize new results: */ … … 409 403 } 410 404 411 /*Delete results: */412 delete results;413 414 415 405 /*Assign output pointers:*/ 416 *p results=newresults;406 *pnewresults=newresults; 417 407 } -
issm/trunk/src/c/parallel/diagnostic.cpp
r2048 r2112 32 32 /*Results: */ 33 33 DataSet* results=NULL; 34 DataSet* processed_results=NULL; 34 35 Result* result=NULL; 35 36 … … 123 124 124 125 _printf_("process results:\n"); 125 ProcessResults(& results,model,DiagnosticAnalysisEnum());126 ProcessResults(&processed_results,results,model,DiagnosticAnalysisEnum()); 126 127 } 127 128 else{ … … 135 136 136 137 _printf_("process results:\n"); 137 ProcessResults(& results,model,ControlAnalysisEnum());138 ProcessResults(&processed_results,results,model,ControlAnalysisEnum()); 138 139 } 139 140 … … 168 169 delete model; 169 170 delete results; 171 delete processed_results; 170 172 delete inputs; 171 173 -
issm/trunk/src/c/parallel/parallel.h
r2000 r2112 52 52 void CreateFemModel(FemModel* femmodel,ConstDataHandle MODEL,int analysis_type,int sub_analysis_type); 53 53 //int BatchDebug(Mat* Kgg,Vec* pg,FemModel* femmodel,char* filename); 54 void ProcessResults(DataSet** p results,Model* model,int analysis_type);54 void ProcessResults(DataSet** pnewresults, DataSet* results,Model* model,int analysis_type); 55 55 56 56 #endif -
issm/trunk/src/c/parallel/prognostic.cpp
r1887 r2112 40 40 /*Results: */ 41 41 DataSet* results=NULL; 42 DataSet* processedresults=NULL; 42 43 Result* result=NULL; 43 44 … … 123 124 124 125 _printf_("process results:\n"); 125 ProcessResults(& results,model,PrognosticAnalysisEnum());126 ProcessResults(&processedresults,results,model,PrognosticAnalysisEnum()); 126 127 127 128 _printf_("write results to disk:\n"); 128 OutputResults( results,outputfilename);129 OutputResults(processedresults,outputfilename); 129 130 130 131 _printf_("write lock file:\n"); … … 138 139 /*end module: */ 139 140 MODULEEND(); 140 141 142 /*Free ressources:*/ 143 delete processedresults; 144 delete results; 145 delete model; 146 delete inputs; 147 141 148 return 0; //unix success return; 142 149 } -
issm/trunk/src/c/parallel/steadystate.cpp
r2048 r2112 35 35 /*Results: */ 36 36 DataSet* results=NULL; 37 DataSet* processed_results=NULL; 37 38 Result* result=NULL; 38 39 … … 142 143 143 144 _printf_("process results:\n"); 144 ProcessResults(& results,model,SteadystateAnalysisEnum());145 ProcessResults(&processed_results,results,model,SteadystateAnalysisEnum()); 145 146 } 146 147 else{ … … 154 155 155 156 _printf_("process results:\n"); 156 ProcessResults(& results,model,ControlAnalysisEnum());157 ProcessResults(&processed_results,results,model,ControlAnalysisEnum()); 157 158 } 158 159 … … 188 189 delete model; 189 190 delete results; 191 delete processed_results; 190 192 delete inputs; 191 193 -
issm/trunk/src/c/parallel/thermal.cpp
r2048 r2112 36 36 /*Results: */ 37 37 DataSet* results=NULL; 38 DataSet* processed_results=NULL; 38 39 Result* result=NULL; 39 40 … … 104 105 105 106 _printf_("process results:\n"); 106 ProcessResults(& results,model,ThermalAnalysisEnum());107 ProcessResults(&processed_results,results,model,ThermalAnalysisEnum()); 107 108 108 109 _printf_("write results to disk:\n"); 109 OutputResults( results,outputfilename);110 OutputResults(processed_results,outputfilename); 110 111 } 111 112 else{ … … 136 137 delete model; 137 138 delete results; 139 delete processed_results; 138 140 delete inputs; 139 141 -
issm/trunk/src/c/parallel/transient.cpp
r2048 r2112 32 32 /*Results: */ 33 33 DataSet* results=NULL; 34 DataSet* processed_results=NULL; 34 35 Result* result=NULL; 35 36 … … 130 131 131 132 _printf_("process results:\n"); 132 ProcessResults(& results,model,TransientAnalysisEnum());133 ProcessResults(&processed_results,results,model,TransientAnalysisEnum()); 133 134 134 135 _printf_("write results to disk:\n"); … … 151 152 /*Free ressources:*/ 152 153 delete results; 154 delete processed_results; 153 155 delete model; 154 156 delete inputs; -
issm/trunk/src/m/solutions/cielo/SpawnCore.m
r1299 r2112 54 54 55 55 %process results 56 results=processresults(models,results);56 processedresults=processresults(models,results); 57 57 58 58 %now process the results to get response function values … … 60 60 for i=1:numel(responsedescriptors), 61 61 descriptor=responsedescriptors{i}; 62 responses(i)=qmuresponse(models,results, descriptor);62 responses(i)=qmuresponse(models,results,processedresults,descriptor); 63 63 end -
issm/trunk/src/m/solutions/dakota/qmuresponse.m
r2110 r2112 1 function response=qmuresponse(models,results, descriptor)1 function response=qmuresponse(models,results,processedresults,descriptor) 2 2 %QMURESPONSE - compute response function from model results. 3 3 4 4 if strcmpi(descriptor,'max_vel'), 5 response=max( results.vel);5 response=max(processedresults.vel); 6 6 elseif strcmpi(descriptor,'min_vel'), 7 response=min( results.vel);7 response=min(processedresults.vel); 8 8 elseif strcmpi(descriptor,'max_vx'), 9 response=max( results.vx);9 response=max(processedresults.vx); 10 10 elseif strcmpi(descriptor,'min_vx'), 11 response=min( results.vx);11 response=min(processedresults.vx); 12 12 elseif strcmpi(descriptor,'max_vy'), 13 response=max( results.vy);13 response=max(processedresults.vy); 14 14 elseif strcmpi(descriptor,'min_vy'), 15 response=min( results.vy);15 response=min(processedresults.vy); 16 16 elseif strcmpi(descriptor,'mass_flux'), 17 17 %call mass flux module. … … 23 23 isstokes=m_ds.parameters.isstokes; 24 24 if ishutter, 25 response=MassFlux(m_dhu.elements,m_dhu.nodes,m_dhu.loads,m_dhu.materials,m_dhu.parameters,results );25 response=MassFlux(m_dhu.elements,m_dhu.nodes,m_dhu.loads,m_dhu.materials,m_dhu.parameters,results.u_g); 26 26 elseif ismacayealpattyn, 27 response=MassFlux(m_dh.elements,m_dh.nodes,m_dh.loads,m_dh.materials,m_dh.parameters,results );27 response=MassFlux(m_dh.elements,m_dh.nodes,m_dh.loads,m_dh.materials,m_dh.parameters,results.u_g); 28 28 elseif isstokes, 29 response=MassFlux(m_ds.elements,m_ds.nodes,m_ds.loads,m_ds.materials,m_ds.parameters,results );29 response=MassFlux(m_ds.elements,m_ds.nodes,m_ds.loads,m_ds.materials,m_ds.parameters,results.u_g); 30 30 else 31 31 error('qmuresponse error message: unsupported analysis type for mass_flux computation!'); -
issm/trunk/src/mex/MassFlux/MassFlux.cpp
r2110 r2112 17 17 double* segments=NULL; 18 18 int num_segments; 19 double* vx=NULL; 20 double* vy=NULL; 21 double* vz=NULL; 19 double* ug=NULL; 22 20 mxArray* pfield=NULL; 23 21 … … 41 39 42 40 /*results: */ 43 FetchData((void**)&vx,NULL,NULL,mxGetField(RESULTS,0,"vx"),"Matrix","Mat"); 44 FetchData((void**)&vy,NULL,NULL,mxGetField(RESULTS,0,"vy"),"Matrix","Mat"); 45 pfield=mxGetField(RESULTS,0,"vz"); 46 if(pfield)FetchData((void**)&vz,NULL,NULL,pfield,"Matrix","Mat"); 41 FetchData((void**)&ug,NULL,NULL,UG,"Matrix","Mat"); 47 42 48 43 /*!Compute mass flux along the profile: */ 49 MassFluxx(&mass_flux, elements,nodes,loads,materials,segments,num_segments, vx,vy,vz);44 MassFluxx(&mass_flux, elements,nodes,loads,materials,segments,num_segments,ug); 50 45 51 46 /*write output datasets: */ … … 57 52 delete loads; 58 53 delete materials; 59 xfree((void**)&vx); 60 xfree((void**)&vy); 61 xfree((void**)&vz); 54 xfree((void**)&ug); 62 55 63 56 /*end module: */ -
issm/trunk/src/mex/MassFlux/MassFlux.h
r2110 r2112 22 22 #define MATERIALS (mxArray*)prhs[3] 23 23 #define PARAMETERS (mxArray*)prhs[4] 24 #define RESULTS(mxArray*)prhs[5]24 #define UG (mxArray*)prhs[5] 25 25 26 26 /* serial output macros: */
Note:
See TracChangeset
for help on using the changeset viewer.