Changeset 1185
- Timestamp:
- 06/30/09 13:49:49 (16 years ago)
- Location:
- issm/trunk/src
- Files:
-
- 27 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/c/DataSet/DataSet.cpp
r1184 r1185 1243 1243 1244 1244 1245 void DataSet::Du(Vec du_g, double* u_g,void* inputs,int analysis_type,int sub_analysis_type){1245 void DataSet::Du(Vec du_g,void* inputs,int analysis_type,int sub_analysis_type){ 1246 1246 1247 1247 … … 1254 1254 1255 1255 element=(Element*)(*object); 1256 element->Du(du_g, u_g,inputs,analysis_type,sub_analysis_type);1257 } 1258 } 1259 1260 1261 } 1262 1263 void DataSet::Gradj(Vec grad_g,double* u_g,double*lambda_g,void* inputs,int analysis_type,int sub_analysis_type,char* control_type){1256 element->Du(du_g,inputs,analysis_type,sub_analysis_type); 1257 } 1258 } 1259 1260 1261 } 1262 1263 void DataSet::Gradj(Vec grad_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type,char* control_type){ 1264 1264 1265 1265 … … 1272 1272 1273 1273 element=(Element*)(*object); 1274 element->Gradj(grad_g, u_g,lambda_g,inputs,analysis_type,sub_analysis_type,control_type);1274 element->Gradj(grad_g,lambda_g,inputs,analysis_type,sub_analysis_type,control_type); 1275 1275 } 1276 1276 } … … 1279 1279 } 1280 1280 1281 void DataSet::Misfit(double* pJ, double* u_g,void* inputs,int analysis_type,int sub_analysis_type){1281 void DataSet::Misfit(double* pJ,void* inputs,int analysis_type,int sub_analysis_type){ 1282 1282 1283 1283 double J=0;; … … 1291 1291 1292 1292 element=(Element*)(*object); 1293 J+=element->Misfit( u_g,inputs,analysis_type,sub_analysis_type);1293 J+=element->Misfit(inputs,analysis_type,sub_analysis_type); 1294 1294 1295 1295 } -
issm/trunk/src/c/DataSet/DataSet.h
r1184 r1185 73 73 void MeltingConstraints(int* pnum_unstable_constraints,void* inputs,int analysis_type,int sub_analysis_type); 74 74 DataSet* Copy(void); 75 void Du(Vec du_g, double* u_g,void* inputs,int analysis_type,int sub_analysis_type);76 void Gradj(Vec grad_g,double* u_g,double*lambda_g,void* inputs,int analysis_type,int sub_analysis_type,char* control_type);77 void Misfit(double* pJ, double* u_g,void* inputs,int analysis_type,int sub_analysis_type);75 void Du(Vec du_g,void* inputs,int analysis_type,int sub_analysis_type); 76 void Gradj(Vec grad_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type,char* control_type); 77 void Misfit(double* pJ, void* inputs,int analysis_type,int sub_analysis_type); 78 78 void FieldDepthAverageAtBase(Vec field,double* field_serial,char* fieldname); 79 79 int DeleteObject(Object* object); -
issm/trunk/src/c/Dux/Dux.cpp
r1184 r1185 14 14 15 15 void Dux( Vec* pdu_g, DataSet* elements,DataSet* nodes, DataSet* loads, DataSet* materials, 16 double* u_g,ParameterInputs* inputs,int analysis_type,int sub_analysis_type){16 ParameterInputs* inputs,int analysis_type,int sub_analysis_type){ 17 17 18 18 int i; … … 33 33 34 34 /*Compute velocity difference: */ 35 elements->Du(du_g, u_g,inputs,analysis_type,sub_analysis_type);35 elements->Du(du_g,inputs,analysis_type,sub_analysis_type); 36 36 37 37 /*Assemble vector: */ -
issm/trunk/src/c/Dux/Dux.h
r1184 r1185 10 10 /* local prototypes: */ 11 11 void Dux( Vec* pdu_g, DataSet* elements,DataSet* nodes, DataSet* loads, DataSet* materials, 12 double* u_g,ParameterInputs* inputs,int analysis_type,int sub_analysis_type);12 ParameterInputs* inputs,int analysis_type,int sub_analysis_type); 13 13 14 14 #endif /* _DUX_H */ -
issm/trunk/src/c/Gradjx/Gradjx.cpp
r1046 r1185 14 14 15 15 void Gradjx( Vec* pgrad_g, int numberofnodes, DataSet* elements,DataSet* nodes, DataSet* loads, DataSet* materials, 16 double* u_g, double*lambda_g, ParameterInputs* inputs,int analysis_type,int sub_analysis_type,char* control_type){16 double* lambda_g, ParameterInputs* inputs,int analysis_type,int sub_analysis_type,char* control_type){ 17 17 18 18 /*output: */ … … 26 26 27 27 /*Compute gradients: */ 28 elements->Gradj(grad_g, u_g,lambda_g,inputs,analysis_type,sub_analysis_type,control_type);28 elements->Gradj(grad_g,lambda_g,inputs,analysis_type,sub_analysis_type,control_type); 29 29 30 30 /*Assemble vector: */ -
issm/trunk/src/c/Gradjx/Gradjx.h
r1046 r1185 10 10 /* local prototypes: */ 11 11 void Gradjx( Vec* pgrad_g, int numberofnodes, DataSet* elements,DataSet* nodes, DataSet* loads, DataSet* materials, 12 double* u_g,double* lambda_g, ParameterInputs* inputs,int analysis_type,int sub_analysis_type,char* control_type);12 double* lambda_g, ParameterInputs* inputs,int analysis_type,int sub_analysis_type,char* control_type); 13 13 14 14 #endif /* _GRADJX_H */ -
issm/trunk/src/c/Misfitx/Misfitx.cpp
r1184 r1185 14 14 15 15 void Misfitx( double* pJ, DataSet* elements,DataSet* nodes, DataSet* loads, DataSet* materials, 16 double* u_g,ParameterInputs* inputs,int analysis_type,int sub_analysis_type){16 ParameterInputs* inputs,int analysis_type,int sub_analysis_type){ 17 17 18 18 /*output: */ … … 24 24 25 25 /*Compute gradients: */ 26 elements->Misfit(&J, u_g,inputs,analysis_type,sub_analysis_type);26 elements->Misfit(&J,inputs,analysis_type,sub_analysis_type); 27 27 28 28 /*Sum all J from all cpus of the cluster:*/ -
issm/trunk/src/c/Misfitx/Misfitx.h
r1184 r1185 10 10 /* local prototypes: */ 11 11 void Misfitx( double* pJ, DataSet* elements,DataSet* nodes, DataSet* loads, DataSet* materials, 12 double* u_g,ParameterInputs* inputs,int analysis_type,int sub_analysis_type);12 ParameterInputs* inputs,int analysis_type,int sub_analysis_type); 13 13 14 14 #endif /* _MISFITX_H */ -
issm/trunk/src/c/objects/Beam.cpp
r1184 r1185 566 566 #undef __FUNCT__ 567 567 #define __FUNCT__ "Beam::Du" 568 void Beam::Du(_p_Vec*, double*, void*,int,int){568 void Beam::Du(_p_Vec*,void*,int,int){ 569 569 throw ErrorException(__FUNCT__," not supported yet!"); 570 570 } 571 571 #undef __FUNCT__ 572 572 #define __FUNCT__ "Beam::Gradj" 573 void Beam::Gradj(_p_Vec*, double*, double*,void*, int, int,char*){573 void Beam::Gradj(_p_Vec*, double*, void*, int, int,char*){ 574 574 throw ErrorException(__FUNCT__," not supported yet!"); 575 575 } 576 576 #undef __FUNCT__ 577 577 #define __FUNCT__ "Beam::GradjDrag" 578 void Beam::GradjDrag(_p_Vec*, double*, double*,void*, int,int ){578 void Beam::GradjDrag(_p_Vec*, double*, void*, int,int ){ 579 579 throw ErrorException(__FUNCT__," not supported yet!"); 580 580 } 581 581 #undef __FUNCT__ 582 582 #define __FUNCT__ "Beam::GradjB" 583 void Beam::GradjB(_p_Vec*, double*, double*,void*, int, int){583 void Beam::GradjB(_p_Vec*, double*, void*, int, int){ 584 584 throw ErrorException(__FUNCT__," not supported yet!"); 585 585 } 586 586 #undef __FUNCT__ 587 587 #define __FUNCT__ "Beam::Misfit" 588 double Beam::Misfit( double*, void*,int,int ){588 double Beam::Misfit(void*,int,int ){ 589 589 throw ErrorException(__FUNCT__," not supported yet!"); 590 590 } -
issm/trunk/src/c/objects/Beam.h
r1184 r1185 79 79 void GetBedList(double*); 80 80 void GetThicknessList(double* thickness_list); 81 void Du(_p_Vec*, double*,void*, int,int);82 void Gradj(_p_Vec*, double*, double*,void*, int, int,char*);83 void GradjDrag(_p_Vec*, double*, double*,void*, int,int );84 void GradjB(_p_Vec*, double*, double*,void*, int,int );85 double Misfit( double*, void*,int,int );81 void Du(_p_Vec*,void*, int,int); 82 void Gradj(_p_Vec*, double*, void*, int, int,char*); 83 void GradjDrag(_p_Vec*, double*, void*, int,int ); 84 void GradjB(_p_Vec*, double*, void*, int,int ); 85 double Misfit(void*,int,int ); 86 86 void GetNodalFunctions(double* l1l2, double gauss_coord); 87 87 void GetParameterValue(double* pvalue, double* value_list,double gauss_coord); -
issm/trunk/src/c/objects/Element.h
r1184 r1185 34 34 virtual void GetThicknessList(double* thickness_list)=0; 35 35 virtual void GetBedList(double* bed_list)=0; 36 virtual void Du(Vec du_g, double* u_g,void* inputs,int analysis_type,int sub_analysis_type)=0;37 virtual void Gradj(Vec grad_g,double* u_g,double*lambda_g,void* inputs,int analysis_type,int sub_analysis_type,char* control_type)=0;38 virtual void GradjDrag(Vec grad_g,double* u_g,double*lambda_g,void* inputs,int analysis_type,int sub_analysis_type)=0;39 virtual void GradjB(Vec grad_g,double* u_g,double*lambda_g,void* inputs,int analysis_type,int sub_analysis_type)=0;40 virtual double Misfit( double* u_g,void* inputs,int analysis_type,int sub_analysis_type)=0;36 virtual void Du(Vec du_g,void* inputs,int analysis_type,int sub_analysis_type)=0; 37 virtual void Gradj(Vec grad_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type,char* control_type)=0; 38 virtual void GradjDrag(Vec grad_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type)=0; 39 virtual void GradjB(Vec grad_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type)=0; 40 virtual double Misfit(void* inputs,int analysis_type,int sub_analysis_type)=0; 41 41 virtual void ComputePressure(Vec p_g)=0; 42 42 -
issm/trunk/src/c/objects/Penta.cpp
r1184 r1185 1176 1176 #undef __FUNCT__ 1177 1177 #define __FUNCT__ "Penta::Du" 1178 void Penta::Du(Vec du_g, double* u_g,void* inputs,int analysis_type,int sub_analysis_type){1178 void Penta::Du(Vec du_g,void* inputs,int analysis_type,int sub_analysis_type){ 1179 1179 1180 1180 int i; … … 1192 1192 * and compute Du*/ 1193 1193 tria=(Tria*)SpawnTria(0,1,2); //grids 0, 1 and 2 make the new tria (lower face). 1194 tria->Du(du_g, u_g,inputs,analysis_type,sub_analysis_type);1194 tria->Du(du_g,inputs,analysis_type,sub_analysis_type); 1195 1195 delete tria; 1196 1196 return; … … 1199 1199 1200 1200 tria=(Tria*)SpawnTria(3,4,5); //grids 3, 4 and 5 make the new tria (upper face). 1201 tria->Du(du_g, u_g,inputs,analysis_type,sub_analysis_type);1201 tria->Du(du_g,inputs,analysis_type,sub_analysis_type); 1202 1202 delete tria; 1203 1203 return; … … 1207 1207 #undef __FUNCT__ 1208 1208 #define __FUNCT__ "Penta::Gradj" 1209 void Penta::Gradj(Vec grad_g,double* velocity,double*adjoint,void* inputs,int analysis_type,int sub_analysis_type,char* control_type){1209 void Penta::Gradj(Vec grad_g,double* adjoint,void* inputs,int analysis_type,int sub_analysis_type,char* control_type){ 1210 1210 1211 1211 if (strcmp(control_type,"drag")==0){ 1212 GradjDrag( grad_g, velocity,adjoint,inputs,analysis_type,sub_analysis_type);1212 GradjDrag( grad_g,adjoint,inputs,analysis_type,sub_analysis_type); 1213 1213 } 1214 1214 else if (strcmp(control_type,"B")==0){ 1215 GradjB( grad_g, velocity,adjoint, inputs,analysis_type,sub_analysis_type);1215 GradjB( grad_g,adjoint, inputs,analysis_type,sub_analysis_type); 1216 1216 } 1217 1217 else throw ErrorException(__FUNCT__,exprintf("%s%s","control type not supported yet: ",control_type)); … … 1220 1220 #undef __FUNCT__ 1221 1221 #define __FUNCT__ "Penta::GradjDrag" 1222 void Penta::GradjDrag(Vec grad_g,double* u_g,double*lambda_g,void* inputs,int analysis_type,int sub_analysis_type){1222 void Penta::GradjDrag(Vec grad_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type){ 1223 1223 1224 1224 … … 1232 1232 1233 1233 tria=(Tria*)SpawnTria(0,1,2); //grids 0, 1 and 2 make the new tria. 1234 tria->GradjDrag( grad_g, u_g,lambda_g,inputs,analysis_type,sub_analysis_type);1234 tria->GradjDrag( grad_g,lambda_g,inputs,analysis_type,sub_analysis_type); 1235 1235 delete tria; 1236 1236 return; … … 1240 1240 #undef __FUNCT__ 1241 1241 #define __FUNCT__ "Penta::GradjB" 1242 void Penta::GradjB(Vec grad_g,double* u_g,double*lambda_g,void* inputs,int analysis_type,int sub_analysis_type){1242 void Penta::GradjB(Vec grad_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type){ 1243 1243 throw ErrorException(__FUNCT__," not supported yet!"); 1244 1244 } … … 1246 1246 #undef __FUNCT__ 1247 1247 #define __FUNCT__ "Penta::Misfit" 1248 double Penta::Misfit( double* velocity,void* inputs,int analysis_type,int sub_analysis_type){1248 double Penta::Misfit(void* inputs,int analysis_type,int sub_analysis_type){ 1249 1249 1250 1250 double J; … … 1262 1262 * and compute Misfit*/ 1263 1263 tria=(Tria*)SpawnTria(0,1,2); //grids 0, 1 and 2 make the new tria (lower face). 1264 J=tria->Misfit( velocity,inputs,analysis_type,sub_analysis_type);1264 J=tria->Misfit(inputs,analysis_type,sub_analysis_type); 1265 1265 delete tria; 1266 1266 return J; … … 1269 1269 1270 1270 tria=(Tria*)SpawnTria(3,4,5); //grids 3, 4 and 5 make the new tria (upper face). 1271 J=tria->Misfit( velocity,inputs,analysis_type,sub_analysis_type);1271 J=tria->Misfit(inputs,analysis_type,sub_analysis_type); 1272 1272 delete tria; 1273 1273 return J; -
issm/trunk/src/c/objects/Penta.h
r1184 r1185 86 86 void GetNodes(void** nodes); 87 87 int GetOnBed(); 88 void Du(Vec du_g, double* u_g,void* inputs,int analysis_type,int sub_analysis_type);89 void Gradj(Vec grad_g,double* u_g,double*lambda_g,void* inputs,int analysis_type,int sub_analysis_type,char* control_type);90 void GradjDrag(Vec grad_g,double* u_g,double*lambda_g,void* inputs,int analysis_type,int sub_analysis_type);91 void GradjB(Vec grad_g,double* u_g,double*lambda_g,void* inputs,int analysis_type,int sub_analysis_type);92 double Misfit( double* u_g,void* inputs,int analysis_type,int sub_analysis_type);88 void Du(Vec du_g,void* inputs,int analysis_type,int sub_analysis_type); 89 void Gradj(Vec grad_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type,char* control_type); 90 void GradjDrag(Vec grad_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type); 91 void GradjB(Vec grad_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type); 92 double Misfit(void* inputs,int analysis_type,int sub_analysis_type); 93 93 94 94 void GetThicknessList(double* thickness_list); -
issm/trunk/src/c/objects/Sing.cpp
r1184 r1185 450 450 #undef __FUNCT__ 451 451 #define __FUNCT__ "Sing::Du" 452 void Sing::Du(_p_Vec*, double*, void*,int,int){452 void Sing::Du(_p_Vec*,void*,int,int){ 453 453 throw ErrorException(__FUNCT__," not supported yet!"); 454 454 } 455 455 #undef __FUNCT__ 456 456 #define __FUNCT__ "Sing::Gradj" 457 void Sing::Gradj(_p_Vec*, double*, double*,void*, int, int ,char*){457 void Sing::Gradj(_p_Vec*, double*, void*, int, int ,char*){ 458 458 throw ErrorException(__FUNCT__," not supported yet!"); 459 459 } 460 460 #undef __FUNCT__ 461 461 #define __FUNCT__ "Sing::GradjDrag" 462 void Sing::GradjDrag(_p_Vec*, double*, double*,void*, int,int){462 void Sing::GradjDrag(_p_Vec*, double*, void*, int,int){ 463 463 throw ErrorException(__FUNCT__," not supported yet!"); 464 464 } 465 465 #undef __FUNCT__ 466 466 #define __FUNCT__ "Sing::GradjB" 467 void Sing::GradjB(_p_Vec*, double*, double*,void*, int,int){467 void Sing::GradjB(_p_Vec*, double*, void*, int,int){ 468 468 throw ErrorException(__FUNCT__," not supported yet!"); 469 469 } 470 470 #undef __FUNCT__ 471 471 #define __FUNCT__ "Sing::Misfit" 472 double Sing::Misfit( double*,void*, int,int){472 double Sing::Misfit(void*, int,int){ 473 473 throw ErrorException(__FUNCT__," not supported yet!"); 474 474 } -
issm/trunk/src/c/objects/Sing.h
r1184 r1185 74 74 void GetBedList(double*); 75 75 void GetThicknessList(double* thickness_list); 76 void Du(_p_Vec*, double*, void*,int,int);77 void Gradj(_p_Vec*, double*, double*,void*, int, int,char*);78 void GradjDrag(_p_Vec*, double*, double*,void*, int,int);79 void GradjB(_p_Vec*, double*, double*,void*, int,int);80 double Misfit( double*, void*,int,int);76 void Du(_p_Vec*,void*,int,int); 77 void Gradj(_p_Vec*, double*, void*, int, int,char*); 78 void GradjDrag(_p_Vec*, double*, void*, int,int); 79 void GradjB(_p_Vec*, double*, void*, int,int); 80 double Misfit(void*,int,int); 81 81 82 82 -
issm/trunk/src/c/objects/Tria.cpp
r1184 r1185 2007 2007 #undef __FUNCT__ 2008 2008 #define __FUNCT__ "Tria::Du" 2009 void Tria::Du(Vec du_g, double* velocity,void* vinputs,int analysis_type,int sub_analysis_type){2009 void Tria::Du(Vec du_g,void* vinputs,int analysis_type,int sub_analysis_type){ 2010 2010 2011 2011 int i; … … 2080 2080 throw ErrorException(__FUNCT__,"missing velocity_obs input parameter"); 2081 2081 } 2082 if(!inputs->Recover("velocity",&vxvy_list[0][0],2,dofs2,numgrids,(void**)nodes)){ 2083 throw ErrorException(__FUNCT__,"missing velocity input parameter"); 2084 } 2082 2085 2083 2086 for(i=0;i<numgrids;i++){ 2084 2087 obs_vx_list[i]=obs_vxvy_list[i][0]; 2085 2088 obs_vy_list[i]=obs_vxvy_list[i][1]; 2086 } 2087 2088 /*Initialize velocities: */ 2089 for(i=0;i<numgrids;i++){ 2090 vx_list[i]=velocity[doflist[i*numberofdofspernode+0]]; 2091 vy_list[i]=velocity[doflist[i*numberofdofspernode+1]]; 2092 //obs_vx_list[i]=obs_velocity[doflist[i*numberofdofspernode+0]]; 2093 //obs_vy_list[i]=obs_velocity[doflist[i*numberofdofspernode+1]]; 2089 vx_list[i]=vxvy_list[i][0]; 2090 vy_list[i]=vxvy_list[i][1]; 2094 2091 } 2095 2092 … … 2220 2217 #undef __FUNCT__ 2221 2218 #define __FUNCT__ "Tria::Gradj" 2222 void Tria::Gradj(Vec grad_g,double* velocity,double*adjoint,void* inputs,int analysis_type,int sub_analysis_type,char* control_type){2219 void Tria::Gradj(Vec grad_g,double* adjoint,void* inputs,int analysis_type,int sub_analysis_type,char* control_type){ 2223 2220 2224 2221 if (strcmp(control_type,"drag")==0){ 2225 GradjDrag( grad_g, velocity,adjoint,inputs,analysis_type,sub_analysis_type);2222 GradjDrag( grad_g,adjoint,inputs,analysis_type,sub_analysis_type); 2226 2223 } 2227 2224 else if (strcmp(control_type,"B")==0){ 2228 GradjB( grad_g, velocity, adjoint,inputs,analysis_type,sub_analysis_type);2225 GradjB( grad_g,adjoint,inputs,analysis_type,sub_analysis_type); 2229 2226 } 2230 2227 else throw ErrorException(__FUNCT__,exprintf("%s%s","control type not supported yet: ",control_type)); … … 2233 2230 #undef __FUNCT__ 2234 2231 #define __FUNCT__ "Tria::GradjDrag" 2235 void Tria::GradjDrag(Vec grad_g,double* velocity,double*adjoint,void* vinputs,int analysis_type,int sub_analysis_type){2232 void Tria::GradjDrag(Vec grad_g,double* adjoint,void* vinputs,int analysis_type,int sub_analysis_type){ 2236 2233 2237 2234 … … 2253 2250 double adjx_list[numgrids]; 2254 2251 double adjy_list[numgrids]; 2252 double adjxadjy_list[numgrids][2]; 2255 2253 2256 2254 double drag; 2257 int dofs[1]={0}; 2255 int dofs1[1]={0}; 2256 int dofs2[2]={0,1}; 2258 2257 2259 2258 /* gaussian points: */ … … 2281 2280 double alpha_complement; 2282 2281 2283 2284 2282 /*element vector at the gaussian points: */ 2285 2283 double grade_g[numgrids]; … … 2309 2307 2310 2308 /* recover input parameters: */ 2311 inputs->Recover("drag",&k[0],1,dofs,numgrids,(void**)nodes); 2312 inputs->Recover("bed",&b[0],1,dofs,numgrids,(void**)nodes); 2313 inputs->Recover("thickness",&h[0],1,dofs,numgrids,(void**)nodes); 2309 inputs->Recover("drag",&k[0],1,dofs1,numgrids,(void**)nodes); 2310 inputs->Recover("bed",&b[0],1,dofs1,numgrids,(void**)nodes); 2311 inputs->Recover("thickness",&h[0],1,dofs1,numgrids,(void**)nodes); 2312 if(!inputs->Recover("velocity",&vxvy_list[0][0],2,dofs2,numgrids,(void**)nodes)){ 2313 throw ErrorException(__FUNCT__,"missing velocity input parameter"); 2314 } 2315 2316 for(i=0;i<numgrids;i++){ 2317 vx_list[i]=vxvy_list[i][0]; 2318 vy_list[i]=vxvy_list[i][1]; 2319 } 2314 2320 2315 2321 /*Initialize parameter lists: */ 2316 2322 for(i=0;i<numgrids;i++){ 2317 vx_list[i]=velocity[doflist[i*numberofdofspernode+0]];2318 vy_list[i]=velocity[doflist[i*numberofdofspernode+1]];2319 vxvy_list[i][0]=vx_list[i];2320 vxvy_list[i][1]=vy_list[i];2323 //vx_list[i]=velocity[doflist[i*numberofdofspernode+0]]; 2324 //vy_list[i]=velocity[doflist[i*numberofdofspernode+1]]; 2325 //vxvy_list[i][0]=vx_list[i]; 2326 //vxvy_list[i][1]=vy_list[i]; 2321 2327 adjx_list[i]=adjoint[doflist[i*numberofdofspernode+0]]; 2322 2328 adjy_list[i]=adjoint[doflist[i*numberofdofspernode+1]]; … … 2429 2435 #undef __FUNCT__ 2430 2436 #define __FUNCT__ "Tria::GradjB" 2431 void Tria::GradjB(Vec grad_g,double* velocity,double*adjoint,void* vinputs,int analysis_type,int sub_analysis_type){2437 void Tria::GradjB(Vec grad_g,double* adjoint,void* vinputs,int analysis_type,int sub_analysis_type){ 2432 2438 2433 2439 int i; … … 2449 2455 double adjx_list[numgrids]; 2450 2456 double adjy_list[numgrids]; 2457 double adjxadjy_list[numgrids][2]; 2458 2459 int dofs1[1]={0}; 2460 int dofs2[2]={0,1}; 2451 2461 2452 2462 /* gaussian points: */ … … 2471 2481 /* strain rate: */ 2472 2482 double epsilon[3]; /* epsilon=[exx,eyy,exy];*/ 2473 2474 2483 2475 2484 /* parameters: */ … … 2499 2508 /* recover input parameters: */ 2500 2509 inputs->Recover("thickness",&h[0],1,dofs,numgrids,(void**)nodes); 2510 if(!inputs->Recover("velocity",&vxvy_list[0][0],2,dofs2,numgrids,(void**)nodes)){ 2511 throw ErrorException(__FUNCT__,"missing velocity input parameter"); 2512 } 2513 2514 for(i=0;i<numgrids;i++){ 2515 vx_list[i]=vxvy_list[i][0]; 2516 vy_list[i]=vxvy_list[i][1]; 2517 } 2501 2518 2502 2519 /*Initialize parameter lists: */ 2503 2520 for(i=0;i<numgrids;i++){ 2504 vx_list[i]=velocity[doflist[i*numberofdofspernode+0]];2505 vy_list[i]=velocity[doflist[i*numberofdofspernode+1]];2506 vxvy_list[i][0]=vx_list[i];2507 vxvy_list[i][1]=vy_list[i];2521 //vx_list[i]=velocity[doflist[i*numberofdofspernode+0]]; 2522 //vy_list[i]=velocity[doflist[i*numberofdofspernode+1]]; 2523 //vxvy_list[i][0]=vx_list[i]; 2524 //vxvy_list[i][1]=vy_list[i]; 2508 2525 adjx_list[i]=adjoint[doflist[i*numberofdofspernode+0]]; 2509 2526 adjy_list[i]=adjoint[doflist[i*numberofdofspernode+1]]; … … 2572 2589 #undef __FUNCT__ 2573 2590 #define __FUNCT__ "Tria::Misfit" 2574 double Tria::Misfit( double* velocity,void* vinputs,int analysis_type,int sub_analysis_type){2591 double Tria::Misfit(void* vinputs,int analysis_type,int sub_analysis_type){ 2575 2592 2576 2593 int i; … … 2634 2651 throw ErrorException(__FUNCT__,"missing velocity_obs input parameter"); 2635 2652 } 2636 2653 if(!inputs->Recover("velocity",&vxvy_list[0][0],2,dofs2,numgrids,(void**)nodes)){ 2654 throw ErrorException(__FUNCT__,"missing velocity input parameter"); 2655 } 2656 2657 /*Initialize velocities: */ 2637 2658 for(i=0;i<numgrids;i++){ 2638 2659 obs_vx_list[i]=obs_vxvy_list[i][0]; 2639 2660 obs_vy_list[i]=obs_vxvy_list[i][1]; 2640 } 2641 2642 /*Initialize velocities: */ 2643 for(i=0;i<numgrids;i++){ 2644 vx_list[i]=velocity[doflist[i*numberofdofspernode+0]]; 2645 vy_list[i]=velocity[doflist[i*numberofdofspernode+1]]; 2646 } 2647 2661 vx_list[i]=vxvy_list[i][0]; 2662 vy_list[i]=vxvy_list[i][1]; 2663 } 2664 2648 2665 /*Compute Misfit at the 3 nodes (integration of the linearized function)*/ 2649 2666 if(fit==0){ -
issm/trunk/src/c/objects/Tria.h
r1184 r1185 93 93 void GetJacobianInvert(double* Jinv, double* xyz_list,double* gauss_l1l2l3); 94 94 void GetJacobian(double* J, double* xyz_list,double* gauss_l1l2l3); 95 void Du(Vec du_g, double* u_g,void* inputs,int analysis_type,int sub_analysis_type);96 void Gradj(Vec grad_g,double* u_g,double*lambda_g,void* inputs,int analysis_type,int sub_analysis_type,char* control_type);97 void GradjDrag(Vec grad_g,double* u_g,double*lambda_g,void* inputs,int analysis_type,int sub_analysis_type);98 void GradjB(Vec grad_g,double* u_g,double*lambda_g,void* inputs,int analysis_type,int sub_analysis_type);99 double Misfit( double* u_g,void* inputs,int analysis_type,int sub_analysis_type);95 void Du(Vec du_g,void* inputs,int analysis_type,int sub_analysis_type); 96 void Gradj(Vec grad_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type,char* control_type); 97 void GradjDrag(Vec grad_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type); 98 void GradjB(Vec grad_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type); 99 double Misfit(void* inputs,int analysis_type,int sub_analysis_type); 100 100 101 101 void CreatePVectorDiagnosticHoriz(Vec pg,void* inputs,int analysis_type,int sub_analysis_type); -
issm/trunk/src/c/parallel/GradJCompute.cpp
r1184 r1185 52 52 diagnostic_core_nonlinear(&u_g,&K_ff0,&K_fs0,femmodel,inputs,analysis_type,sub_analysis_type); 53 53 VecToMPISerial(&u_g_double,u_g); VecFree(&u_g); 54 inputs->Add("velocity",u_g_double,2,numberofnodes); 54 55 55 56 _printf_("%s\n"," buid Du, difference between observed velocity and model velocity:"); 56 Dux( &du_g, femmodel->elements,femmodel->nodes,femmodel->loads,femmodel->materials, u_g_double,inputs,analysis_type,sub_analysis_type);57 Dux( &du_g, femmodel->elements,femmodel->nodes,femmodel->loads,femmodel->materials,inputs,analysis_type,sub_analysis_type); 57 58 58 59 _printf_("%s\n"," reduce adjoint load from g-set to f-set:"); … … 72 73 73 74 Gradjx( &grad_g, numberofnodes,femmodel->elements,femmodel->nodes, femmodel->loads, femmodel->materials, 74 u_g_double,lambda_g_double, inputs,analysis_type,sub_analysis_type,control_type);75 lambda_g_double, inputs,analysis_type,sub_analysis_type,control_type); 75 76 76 77 /*Free ressources:*/ -
issm/trunk/src/c/parallel/objectivefunctionC.cpp
r1184 r1185 77 77 diagnostic_core_nonlinear(&u_g,NULL,NULL,femmodel,inputs,analysis_type,sub_analysis_type); 78 78 VecToMPISerial(&u_g_double,u_g); VecFree(&u_g); 79 inputs->Add("velocity",u_g_double,2,numberofnodes); 79 80 80 81 //Compute misfit for this velocity field. 81 82 inputs->Add("fit",fit[n]); 82 83 Misfitx( &J, femmodel->elements,femmodel->nodes, femmodel->loads, femmodel->materials, 83 u_g_double,inputs,analysis_type,sub_analysis_type);84 inputs,analysis_type,sub_analysis_type); 84 85 85 86 /*Free ressources:*/ -
issm/trunk/src/m/solutions/cielo/GradJCompute.m
r1184 r1185 4 4 displaystring(m.parameters.debug,'%s',' computing velocities...'); 5 5 [u_g K_ff0 K_fs0 ]=diagnostic_core_nonlinear(m,inputs,analysis_type,sub_analysis_type); 6 inputs=add(inputs,'velocity',u_g,'doublevec',2,m.parameters.numberofnodes); 6 7 7 8 %Buid Du, difference between observed velocity and model velocity. 8 9 displaystring(m.parameters.debug,'%s',' computing Du...'); 9 [Du_g]=Du(m.elements,m.nodes,m.loads,m.materials,m.parameters, u_g,inputs,analysis_type,sub_analysis_type);10 [Du_g]=Du(m.elements,m.nodes,m.loads,m.materials,m.parameters,inputs,analysis_type,sub_analysis_type); 10 11 11 12 %Reduce adjoint load from g-set to f-set … … 18 19 %Merge back to g set 19 20 lambda_g= Mergesolutionfromftog( lambda_f, m.Gmn, m.ys0, m.nodesets ); 21 inputs=add(inputs,'adjoint',lambda_g,'doublevec',2,m.parameters.numberofnodes); 20 22 21 23 %Compute gradJ 22 grad_g=Gradj(m.elements,m.nodes,m.loads,m.materials,m.parameters, u_g,lambda_g,inputs,analysis_type,sub_analysis_type);24 grad_g=Gradj(m.elements,m.nodes,m.loads,m.materials,m.parameters,lambda_g,inputs,analysis_type,sub_analysis_type); -
issm/trunk/src/m/solutions/cielo/objectivefunctionC.m
r1184 r1185 14 14 %Run diagnostic with updated parameters. 15 15 u_g=diagnostic_core_nonlinear(m,inputs,analysis_type,sub_analysis_type); 16 inputs=add(inputs,'velocity',u_g,'doublevec',2,m.parameters.numberofnodes); 16 17 17 18 %Compute misfit for this velocity field. 18 J=Misfit(m.elements,m.nodes,m.loads,m.materials,m.parameters, u_g,inputs,analysis_type,sub_analysis_type);19 J=Misfit(m.elements,m.nodes,m.loads,m.materials,m.parameters,inputs,analysis_type,sub_analysis_type); -
issm/trunk/src/mex/Du/Du.cpp
r1184 r1185 15 15 DataSet* loads=NULL; 16 16 DataSet* materials=NULL; 17 double* u_g=NULL;18 17 ParameterInputs* inputs=NULL; 19 18 char* analysis_type_string=NULL; … … 37 36 FetchData((void**)&loads,NULL,NULL,LOADS,"DataSet",NULL); 38 37 FetchData((void**)&materials,NULL,NULL,MATERIALS,"DataSet",NULL); 39 FetchData((void**)&u_g,NULL,NULL,UG,"Vector","Vec");40 38 FetchData((void**)&analysis_type_string,NULL,NULL,ANALYSIS,"String",NULL); 41 39 analysis_type=AnalysisTypeAsEnum(analysis_type_string); … … 48 46 49 47 /*!Call core code: */ 50 Dux(&du_g, elements,nodes,loads,materials, u_g,inputs,analysis_type,sub_analysis_type);48 Dux(&du_g, elements,nodes,loads,materials,inputs,analysis_type,sub_analysis_type); 51 49 52 50 /*write output : */ … … 58 56 delete loads; 59 57 delete materials; 60 xfree((void**)&u_g);61 58 VecFree(&du_g); 62 59 delete inputs; … … 71 68 { 72 69 _printf_("\n"); 73 _printf_(" usage: [du_g] = %s(lements, nodes,loads, materials, parameters, u_g,inputs);\n",__FUNCT__);70 _printf_(" usage: [du_g] = %s(lements, nodes,loads, materials, parameters,inputs);\n",__FUNCT__); 74 71 _printf_("\n"); 75 72 } -
issm/trunk/src/mex/Du/Du.h
r1184 r1185 22 22 #define MATERIALS (mxArray*)prhs[3] 23 23 #define PARAMETERS (mxArray*)prhs[4] 24 #define UG (mxArray*)prhs[5] 25 #define INPUTS (mxArray*)prhs[6] 26 #define ANALYSIS (mxArray*)prhs[7] 27 #define SUBANALYSIS (mxArray*)prhs[8] 24 #define INPUTS (mxArray*)prhs[5] 25 #define ANALYSIS (mxArray*)prhs[6] 26 #define SUBANALYSIS (mxArray*)prhs[7] 28 27 29 28 /* serial output macros: */ … … 34 33 #define NLHS 1 35 34 #undef NRHS 36 #define NRHS 935 #define NRHS 8 37 36 38 37 -
issm/trunk/src/mex/Gradj/Gradj.cpp
r1046 r1185 16 16 DataSet* materials=NULL; 17 17 char* control_type=NULL; 18 double* u_g=NULL;19 18 double* lambda_g=NULL; 20 19 ParameterInputs* inputs=NULL; … … 42 41 FetchData((void**)&numberofnodes,NULL,NULL,mxGetField(PARAMETERS,0,"numberofnodes"),"Integer",NULL); 43 42 FetchData((void**)&control_type,NULL,NULL,mxGetField(PARAMETERS,0,"control_type"),"String",NULL); 44 FetchData((void**)&u_g,NULL,NULL,UG,"Vector","Vec");45 43 FetchData((void**)&lambda_g,NULL,NULL,LAMBDAG,"Vector","Vec"); 46 44 FetchData((void**)&analysis_type_string,NULL,NULL,ANALYSIS,"String",NULL); … … 54 52 55 53 /*!Call core code: */ 56 Gradjx(&grad_g,numberofnodes,elements,nodes,loads,materials, u_g,lambda_g,inputs,analysis_type,sub_analysis_type,control_type);54 Gradjx(&grad_g,numberofnodes,elements,nodes,loads,materials,lambda_g,inputs,analysis_type,sub_analysis_type,control_type); 57 55 58 56 /*write output : */ … … 64 62 delete loads; 65 63 delete materials; 66 xfree((void**)&u_g);67 64 xfree((void**)&lambda_g); 68 65 xfree((void**)&control_type); … … 79 76 { 80 77 _printf_("\n"); 81 _printf_(" usage: [grad_g] = %s(elements, nodes,loads, materials, parameters, u_g,lambda_g,inputs);\n",__FUNCT__);78 _printf_(" usage: [grad_g] = %s(elements, nodes,loads, materials, parameters, lambda_g,inputs);\n",__FUNCT__); 82 79 _printf_("\n"); 83 80 } -
issm/trunk/src/mex/Gradj/Gradj.h
r465 r1185 22 22 #define MATERIALS (mxArray*)prhs[3] 23 23 #define PARAMETERS (mxArray*)prhs[4] 24 #define UG (mxArray*)prhs[5] 25 #define LAMBDAG (mxArray*)prhs[6] 26 #define INPUTS (mxArray*)prhs[7] 27 #define ANALYSIS (mxArray*)prhs[8] 28 #define SUBANALYSIS (mxArray*)prhs[9] 24 #define LAMBDAG (mxArray*)prhs[5] 25 #define INPUTS (mxArray*)prhs[6] 26 #define ANALYSIS (mxArray*)prhs[7] 27 #define SUBANALYSIS (mxArray*)prhs[8] 29 28 30 29 /* serial output macros: */ … … 35 34 #define NLHS 1 36 35 #undef NRHS 37 #define NRHS 1036 #define NRHS 9 38 37 39 38 -
issm/trunk/src/mex/Misfit/Misfit.cpp
r1184 r1185 15 15 DataSet* loads=NULL; 16 16 DataSet* materials=NULL; 17 double* u_g=NULL;18 17 ParameterInputs* inputs=NULL; 19 18 char* analysis_type_string=NULL; … … 36 35 FetchData((void**)&loads,NULL,NULL,LOADS,"DataSet",NULL); 37 36 FetchData((void**)&materials,NULL,NULL,MATERIALS,"DataSet",NULL); 38 FetchData((void**)&u_g,NULL,NULL,UG,"Vector","Vec");39 37 FetchData((void**)&analysis_type_string,NULL,NULL,ANALYSIS,"String",NULL); 40 38 analysis_type=AnalysisTypeAsEnum(analysis_type_string); … … 47 45 48 46 /*!Call core code: */ 49 Misfitx(&J, elements,nodes,loads,materials, u_g,inputs,analysis_type,sub_analysis_type);47 Misfitx(&J, elements,nodes,loads,materials,inputs,analysis_type,sub_analysis_type); 50 48 51 49 /*write output : */ … … 57 55 delete loads; 58 56 delete materials; 59 xfree((void**)&u_g);60 57 delete inputs; 61 58 xfree((void**)&analysis_type_string); … … 69 66 { 70 67 _printf_("\n"); 71 _printf_(" usage: [J] = %s(elements, nodes,loads, materials, parameters, u_g,inputs);\n",__FUNCT__);68 _printf_(" usage: [J] = %s(elements, nodes,loads, materials, parameters, inputs);\n",__FUNCT__); 72 69 _printf_("\n"); 73 70 } -
issm/trunk/src/mex/Misfit/Misfit.h
r1184 r1185 22 22 #define MATERIALS (mxArray*)prhs[3] 23 23 #define PARAMETERS (mxArray*)prhs[4] 24 #define UG (mxArray*)prhs[5] 25 #define INPUTS (mxArray*)prhs[6] 26 #define ANALYSIS (mxArray*)prhs[7] 27 #define SUBANALYSIS (mxArray*)prhs[8] 24 #define INPUTS (mxArray*)prhs[5] 25 #define ANALYSIS (mxArray*)prhs[6] 26 #define SUBANALYSIS (mxArray*)prhs[7] 28 27 29 28 /* serial output macros: */ … … 34 33 #define NLHS 1 35 34 #undef NRHS 36 #define NRHS 935 #define NRHS 8 37 36 38 37
Note:
See TracChangeset
for help on using the changeset viewer.