Changeset 1184
- Timestamp:
- 06/30/09 13:08:18 (16 years ago)
- Location:
- issm/trunk/src
- Files:
-
- 32 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/c/DataSet/DataSet.cpp
r962 r1184 1243 1243 1244 1244 1245 void DataSet::Du(Vec du_g,double* u_g, double* u_g_obs,void* inputs,int analysis_type,int sub_analysis_type){1245 void DataSet::Du(Vec du_g,double* u_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, u_g_obs,inputs,analysis_type,sub_analysis_type);1256 element->Du(du_g,u_g,inputs,analysis_type,sub_analysis_type); 1257 1257 } 1258 1258 } … … 1279 1279 } 1280 1280 1281 void DataSet::Misfit(double* pJ, double* u_g, double* u_g_obs,void* inputs,int analysis_type,int sub_analysis_type){1281 void DataSet::Misfit(double* pJ, double* u_g,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, u_g_obs,inputs,analysis_type,sub_analysis_type);1293 J+=element->Misfit(u_g,inputs,analysis_type,sub_analysis_type); 1294 1294 1295 1295 } -
issm/trunk/src/c/DataSet/DataSet.h
r848 r1184 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, double* u_g_obs,void* inputs,int analysis_type,int sub_analysis_type);75 void Du(Vec du_g,double* u_g,void* inputs,int analysis_type,int sub_analysis_type); 76 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, double* u_g_obs,void* inputs,int analysis_type,int sub_analysis_type);77 void Misfit(double* pJ, double* u_g,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
r465 r1184 14 14 15 15 void Dux( Vec* pdu_g, DataSet* elements,DataSet* nodes, DataSet* loads, DataSet* materials, 16 double* u_g, double* u_g_obs,ParameterInputs* inputs,int analysis_type,int sub_analysis_type){16 double* u_g,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, u_g_obs,inputs,analysis_type,sub_analysis_type);35 elements->Du(du_g, u_g,inputs,analysis_type,sub_analysis_type); 36 36 37 37 /*Assemble vector: */ -
issm/trunk/src/c/Dux/Dux.h
r465 r1184 10 10 /* local prototypes: */ 11 11 void Dux( Vec* pdu_g, DataSet* elements,DataSet* nodes, DataSet* loads, DataSet* materials, 12 double* u_g, double* u_g_obs,ParameterInputs* inputs,int analysis_type,int sub_analysis_type);12 double* u_g,ParameterInputs* inputs,int analysis_type,int sub_analysis_type); 13 13 14 14 #endif /* _DUX_H */ -
issm/trunk/src/c/Misfitx/Misfitx.cpp
r465 r1184 14 14 15 15 void Misfitx( double* pJ, DataSet* elements,DataSet* nodes, DataSet* loads, DataSet* materials, 16 double* u_g, double* u_g_obs,ParameterInputs* inputs,int analysis_type,int sub_analysis_type){16 double* u_g, 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, u_g_obs,inputs,analysis_type,sub_analysis_type);26 elements->Misfit(&J, u_g,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
r465 r1184 10 10 /* local prototypes: */ 11 11 void Misfitx( double* pJ, DataSet* elements,DataSet* nodes, DataSet* loads, DataSet* materials, 12 double* u_g, double* u_g_obs, ParameterInputs* inputs,int analysis_type,int sub_analysis_type);12 double* u_g, ParameterInputs* inputs,int analysis_type,int sub_analysis_type); 13 13 14 14 #endif /* _MISFITX_H */ -
issm/trunk/src/c/objects/Beam.cpp
r1104 r1184 566 566 #undef __FUNCT__ 567 567 #define __FUNCT__ "Beam::Du" 568 void Beam::Du(_p_Vec*, double*, double*,void*, int,int){568 void Beam::Du(_p_Vec*, double*, void*, int,int){ 569 569 throw ErrorException(__FUNCT__," not supported yet!"); 570 570 } … … 586 586 #undef __FUNCT__ 587 587 #define __FUNCT__ "Beam::Misfit" 588 double Beam::Misfit(double*, double*,void*, int,int ){588 double Beam::Misfit(double*, void*, int,int ){ 589 589 throw ErrorException(__FUNCT__," not supported yet!"); 590 590 } -
issm/trunk/src/c/objects/Beam.h
r1104 r1184 79 79 void GetBedList(double*); 80 80 void GetThicknessList(double* thickness_list); 81 void Du(_p_Vec*, double*, double*,void*, int,int);81 void Du(_p_Vec*, double*, void*, int,int); 82 82 void Gradj(_p_Vec*, double*, double*, void*, int, int,char*); 83 83 void GradjDrag(_p_Vec*, double*, double*, void*, int,int ); 84 84 void GradjB(_p_Vec*, double*, double*, void*, int,int ); 85 double Misfit(double*, double*,void*, int,int );85 double Misfit(double*, 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
r803 r1184 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, double* u_g_obs,void* inputs,int analysis_type,int sub_analysis_type)=0;36 virtual void Du(Vec du_g,double* u_g,void* inputs,int analysis_type,int sub_analysis_type)=0; 37 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 38 virtual void GradjDrag(Vec grad_g,double* u_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type)=0; 39 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,double* u_g_obs,void* inputs,int analysis_type,int sub_analysis_type)=0;41 40 virtual double Misfit(double* u_g,void* inputs,int analysis_type,int sub_analysis_type)=0; 41 virtual void ComputePressure(Vec p_g)=0; 42 42 43 43 int Enum(); -
issm/trunk/src/c/objects/OptArgs.h
r758 r1184 16 16 mxArray* inputs; 17 17 mxArray* param_g; 18 mxArray* u_g_obs;19 18 mxArray* grad_g; 20 19 mxArray* n; … … 32 31 FemModel* femmodel; 33 32 double* param_g; 34 double* u_g_obs;35 33 double* grad_g; 36 34 ParameterInputs* inputs; -
issm/trunk/src/c/objects/Penta.cpp
r1104 r1184 1176 1176 #undef __FUNCT__ 1177 1177 #define __FUNCT__ "Penta::Du" 1178 void Penta::Du(Vec du_g,double* u_g, double* u_g_obs,void* inputs,int analysis_type,int sub_analysis_type){1178 void Penta::Du(Vec du_g,double* u_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, u_g_obs,inputs,analysis_type,sub_analysis_type);1194 tria->Du(du_g,u_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, u_g_obs,inputs,analysis_type,sub_analysis_type);1201 tria->Du(du_g,u_g,inputs,analysis_type,sub_analysis_type); 1202 1202 delete tria; 1203 1203 return; … … 1246 1246 #undef __FUNCT__ 1247 1247 #define __FUNCT__ "Penta::Misfit" 1248 double Penta::Misfit(double* velocity, double* obs_velocity,void* inputs,int analysis_type,int sub_analysis_type){1248 double Penta::Misfit(double* velocity,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, obs_velocity,inputs,analysis_type,sub_analysis_type);1264 J=tria->Misfit( velocity,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, obs_velocity,inputs,analysis_type,sub_analysis_type);1271 J=tria->Misfit( velocity,inputs,analysis_type,sub_analysis_type); 1272 1272 delete tria; 1273 1273 return J; -
issm/trunk/src/c/objects/Penta.h
r1104 r1184 86 86 void GetNodes(void** nodes); 87 87 int GetOnBed(); 88 void Du(Vec du_g,double* u_g, double* u_g_obs,void* inputs,int analysis_type,int sub_analysis_type);88 void Du(Vec du_g,double* u_g,void* inputs,int analysis_type,int sub_analysis_type); 89 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 90 void GradjDrag(Vec grad_g,double* u_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type); 91 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,double* u_g_obs,void* inputs,int analysis_type,int sub_analysis_type);92 double Misfit(double* u_g,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
r803 r1184 450 450 #undef __FUNCT__ 451 451 #define __FUNCT__ "Sing::Du" 452 void Sing::Du(_p_Vec*, double*, double*,void*, int,int){452 void Sing::Du(_p_Vec*, double*, void*, int,int){ 453 453 throw ErrorException(__FUNCT__," not supported yet!"); 454 454 } … … 470 470 #undef __FUNCT__ 471 471 #define __FUNCT__ "Sing::Misfit" 472 double Sing::Misfit(double*, double*,void*, int,int){472 double Sing::Misfit(double*, void*, int,int){ 473 473 throw ErrorException(__FUNCT__," not supported yet!"); 474 474 } -
issm/trunk/src/c/objects/Sing.h
r803 r1184 74 74 void GetBedList(double*); 75 75 void GetThicknessList(double* thickness_list); 76 void Du(_p_Vec*, double*, double*,void*, int,int);76 void Du(_p_Vec*, double*, void*, int,int); 77 77 void Gradj(_p_Vec*, double*, double*, void*, int, int,char*); 78 78 void GradjDrag(_p_Vec*, double*, double*, void*, int,int); 79 79 void GradjB(_p_Vec*, double*, double*, void*, int,int); 80 double Misfit(double*, double*,void*, int,int);80 double Misfit(double*, void*, int,int); 81 81 82 82 -
issm/trunk/src/c/objects/Tria.cpp
r1104 r1184 2007 2007 #undef __FUNCT__ 2008 2008 #define __FUNCT__ "Tria::Du" 2009 void Tria::Du(Vec du_g,double* velocity, double* obs_velocity,void* vinputs,int analysis_type,int sub_analysis_type){2009 void Tria::Du(Vec du_g,double* velocity,void* vinputs,int analysis_type,int sub_analysis_type){ 2010 2010 2011 2011 int i; … … 2018 2018 int doflist[numdof]; 2019 2019 int numberofdofspernode; 2020 int dofs2[2]={0,1}; 2020 2021 2021 2022 /* grid data: */ 2023 double vxvy_list[numgrids][2]; 2022 2024 double vx_list[numgrids]; 2023 2025 double vy_list[numgrids]; 2026 double obs_vxvy_list[numgrids][2]; 2024 2027 double obs_vx_list[numgrids]; 2025 2028 double obs_vy_list[numgrids]; … … 2074 2077 /* Recover input data: */ 2075 2078 if(!inputs->Recover("fit",&fit)) throw ErrorException(__FUNCT__," missing fit input parameter"); 2079 if(!inputs->Recover("velocity_obs",&obs_vxvy_list[0][0],2,dofs2,numgrids,(void**)nodes)){ 2080 throw ErrorException(__FUNCT__,"missing velocity_obs input parameter"); 2081 } 2082 2083 for(i=0;i<numgrids;i++){ 2084 obs_vx_list[i]=obs_vxvy_list[i][0]; 2085 obs_vy_list[i]=obs_vxvy_list[i][1]; 2086 } 2076 2087 2077 2088 /*Initialize velocities: */ … … 2079 2090 vx_list[i]=velocity[doflist[i*numberofdofspernode+0]]; 2080 2091 vy_list[i]=velocity[doflist[i*numberofdofspernode+1]]; 2081 obs_vx_list[i]=obs_velocity[doflist[i*numberofdofspernode+0]];2082 obs_vy_list[i]=obs_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]]; 2083 2094 } 2084 2095 … … 2561 2572 #undef __FUNCT__ 2562 2573 #define __FUNCT__ "Tria::Misfit" 2563 double Tria::Misfit(double* velocity, double* obs_velocity,void* vinputs,int analysis_type,int sub_analysis_type){2574 double Tria::Misfit(double* velocity,void* vinputs,int analysis_type,int sub_analysis_type){ 2564 2575 2565 2576 int i; … … 2572 2583 const int numdof=2*numgrids; 2573 2584 const int NDOF2=2; 2585 int dofs2[2]={0,1}; 2574 2586 double xyz_list[numgrids][3]; 2575 2587 int doflist[numdof]; … … 2577 2589 2578 2590 /* grid data: */ 2591 double vxvy_list[numgrids][2]; 2579 2592 double vx_list[numgrids]; 2580 2593 double vy_list[numgrids]; 2594 double obs_vxvy_list[numgrids][2]; 2581 2595 double obs_vx_list[numgrids]; 2582 2596 double obs_vy_list[numgrids]; … … 2617 2631 /* Recover input data: */ 2618 2632 if(!inputs->Recover("fit",&fit)) throw ErrorException(__FUNCT__," missing fit input parameter"); 2633 if(!inputs->Recover("velocity_obs",&obs_vxvy_list[0][0],2,dofs2,numgrids,(void**)nodes)){ 2634 throw ErrorException(__FUNCT__,"missing velocity_obs input parameter"); 2635 } 2636 2637 for(i=0;i<numgrids;i++){ 2638 obs_vx_list[i]=obs_vxvy_list[i][0]; 2639 obs_vy_list[i]=obs_vxvy_list[i][1]; 2640 } 2619 2641 2620 2642 /*Initialize velocities: */ … … 2622 2644 vx_list[i]=velocity[doflist[i*numberofdofspernode+0]]; 2623 2645 vy_list[i]=velocity[doflist[i*numberofdofspernode+1]]; 2624 obs_vx_list[i]=obs_velocity[doflist[i*numberofdofspernode+0]];2625 obs_vy_list[i]=obs_velocity[doflist[i*numberofdofspernode+1]];2626 2646 } 2627 2647 -
issm/trunk/src/c/objects/Tria.h
r1104 r1184 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, double* u_g_obs,void* inputs,int analysis_type,int sub_analysis_type);95 void Du(Vec du_g,double* u_g,void* inputs,int analysis_type,int sub_analysis_type); 96 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 97 void GradjDrag(Vec grad_g,double* u_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type); 98 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,double* u_g_obs,void* inputs,int analysis_type,int sub_analysis_type);99 double Misfit(double* u_g,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
r1046 r1184 15 15 #endif 16 16 17 Vec GradJCompute(ParameterInputs* inputs,FemModel* femmodel ,double* u_g_obs){17 Vec GradJCompute(ParameterInputs* inputs,FemModel* femmodel){ 18 18 19 19 … … 54 54 55 55 _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, u_g_obs,inputs,analysis_type,sub_analysis_type);56 Dux( &du_g, femmodel->elements,femmodel->nodes,femmodel->loads,femmodel->materials,u_g_double,inputs,analysis_type,sub_analysis_type); 57 57 58 58 _printf_("%s\n"," reduce adjoint load from g-set to f-set:"); -
issm/trunk/src/c/parallel/control.cpp
r1120 r1184 36 36 /*Intermediary: */ 37 37 double* u_g_initial=NULL; 38 double* u_g_obs=NULL; 38 39 Param* param=NULL; 39 40 … … 72 73 _printf_("initialize inputs:\n"); 73 74 femmodels[0].parameters->FindParam((void*)&u_g_initial,"u_g"); 75 femmodels[0].parameters->FindParam((void*)&u_g_obs,"u_g_obs"); 74 76 femmodels[0].parameters->FindParam((void*)&numberofnodes,"numberofnodes"); 75 77 76 78 inputs=new ParameterInputs; 77 79 inputs->Add("velocity",u_g_initial,3,numberofnodes); 80 inputs->Add("velocity_obs",u_g_obs,2,numberofnodes); 78 81 79 82 /*erase velocities: */ 80 83 param=(Param*)femmodels[0].parameters->FindParamObject("u_g"); 84 femmodels[0].parameters->DeleteObject((Object*)param); 85 86 param=(Param*)femmodels[0].parameters->FindParamObject("u_g_obs"); 81 87 femmodels[0].parameters->DeleteObject((Object*)param); 82 88 -
issm/trunk/src/c/parallel/control_core.cpp
r1120 r1184 26 26 double* fit=NULL; 27 27 double* optscal=NULL; 28 double* u_g_obs=NULL;29 28 int gsize; 30 29 double* maxiter=NULL; … … 77 76 fem_dh->parameters->FindParam((void*)&maxcontrolconstraint,"maxcontrolconstraint"); 78 77 fem_dh->parameters->FindParam((void*)¶m_g,"param_g"); 79 fem_dh->parameters->FindParam((void*)&u_g_obs,"u_g_obs");80 78 fem_dh->parameters->FindParam((void*)&analysis_type,"analysis_type"); 81 79 fem_dh->parameters->FindParam((void*)&sub_analysis_type,"sub_analysis_type"); … … 88 86 /*erase useless parameters: */ 89 87 param=(Param*)fem_dh->parameters->FindParamObject("param_g"); 90 fem_dh->parameters->DeleteObject((Object*)param);91 92 param=(Param*)fem_dh->parameters->FindParamObject("u_g_obs");93 88 fem_dh->parameters->DeleteObject((Object*)param); 94 89 … … 107 102 108 103 _printf_("%s\n"," computing gradJ..."); 109 grad_g=GradJCompute(inputs,fem_dh ,u_g_obs);104 grad_g=GradJCompute(inputs,fem_dh); 110 105 _printf_("%s\n"," done."); 111 106 … … 118 113 119 114 _printf_("%s\n"," optimizing along gradient direction..."); 120 optargs.femmodel=fem_dh; optargs.param_g=param_g; optargs. u_g_obs=u_g_obs; optargs.grad_g=grad_g_double; optargs.inputs=inputs;optargs.n=n;115 optargs.femmodel=fem_dh; optargs.param_g=param_g; optargs.grad_g=grad_g_double; optargs.inputs=inputs;optargs.n=n; 121 116 optpars.xmin=0; optpars.xmax=1; optpars.tolerance=tolx; optpars.maxiter=(int)maxiter[n]; 122 117 BrentSearch(&search_scalar,J+n,&optpars,&objectivefunctionC,&optargs); -
issm/trunk/src/c/parallel/objectivefunctionC.cpp
r1046 r1184 25 25 FemModel* femmodel=NULL; 26 26 double* param_g=NULL; 27 double* u_g_obs=NULL;28 27 double* grad_g=NULL; 29 28 ParameterInputs* inputs=NULL; … … 48 47 femmodel=optargs->femmodel; 49 48 param_g=optargs->param_g; 50 u_g_obs=optargs->u_g_obs;51 49 grad_g=optargs->grad_g; 52 50 inputs=optargs->inputs; … … 83 81 inputs->Add("fit",fit[n]); 84 82 Misfitx( &J, femmodel->elements,femmodel->nodes, femmodel->loads, femmodel->materials, 85 u_g_double, u_g_obs,inputs,analysis_type,sub_analysis_type);83 u_g_double,inputs,analysis_type,sub_analysis_type); 86 84 87 85 /*Free ressources:*/ -
issm/trunk/src/c/parallel/parallel.h
r1037 r1184 9 9 #include "../io/io.h" 10 10 11 Vec GradJCompute(ParameterInputs* inputs,FemModel* femmodel ,double* u_g_obs);11 Vec GradJCompute(ParameterInputs* inputs,FemModel* femmodel); 12 12 13 13 void diagnostic_core(DataSet* results,FemModel* fems, ParameterInputs* inputs); -
issm/trunk/src/c/shared/Numerics/OptFunc.cpp
r758 r1184 23 23 double J; 24 24 25 mxArray* inputs[ 9];25 mxArray* inputs[8]; 26 26 mxArray* psearch_scalar=NULL; 27 27 mxArray* mxJ=NULL; 28 29 28 30 29 psearch_scalar=mxCreateDoubleScalar(scalar); … … 33 32 inputs[2]=optargs->inputs; 34 33 inputs[3]=optargs->param_g; 35 inputs[4]=optargs->u_g_obs; 36 inputs[5]=optargs->grad_g; 37 inputs[6]=optargs->n; 38 inputs[7]=optargs->analysis_type; 39 inputs[8]=optargs->sub_analysis_type; 34 inputs[4]=optargs->grad_g; 35 inputs[5]=optargs->n; 36 inputs[6]=optargs->analysis_type; 37 inputs[7]=optargs->sub_analysis_type; 40 38 41 mexCallMATLAB( 1, &mxJ, 9, (mxArray**)inputs, optargs->function_name);39 mexCallMATLAB( 1, &mxJ, 8, (mxArray**)inputs, optargs->function_name); 42 40 43 41 /*extract misfit from mxArray*/ -
issm/trunk/src/m/solutions/cielo/GradJCompute.m
r1128 r1184 1 function [u_g grad_g]=GradJCompute(m,inputs, u_g_obs,analysis_type,sub_analysis_type);1 function [u_g grad_g]=GradJCompute(m,inputs,analysis_type,sub_analysis_type); 2 2 3 3 %Recover solution for this stiffness and right hand side: … … 7 7 %Buid Du, difference between observed velocity and model velocity. 8 8 displaystring(m.parameters.debug,'%s',' computing Du...'); 9 [Du_g]=Du(m.elements,m.nodes,m.loads,m.materials,m.parameters, u_g, u_g_obs,inputs,analysis_type,sub_analysis_type);9 [Du_g]=Du(m.elements,m.nodes,m.loads,m.materials,m.parameters, u_g,inputs,analysis_type,sub_analysis_type); 10 10 11 11 %Reduce adjoint load from g-set to f-set -
issm/trunk/src/m/solutions/cielo/control.m
r1039 r1184 33 33 inputs=inputlist; 34 34 inputs=add(inputs,'velocity',models.dh.parameters.u_g,'doublevec',3,models.dh.parameters.numberofnodes); 35 inputs=add(inputs,'velocity_obs',models.dh.parameters.u_g_obs,'doublevec',2,models.dh.parameters.numberofnodes); 35 36 36 37 %compute solution -
issm/trunk/src/m/solutions/cielo/control_core.m
r1128 r1184 16 16 isstokes=m_dh.parameters.isstokes; 17 17 18 %initialize control parameters, gradients and observations 19 u_g_obs=m_dh.parameters.u_g_obs; 18 %initialize control parameters 20 19 param_g=models.dh.parameters.param_g; 21 20 … … 38 37 39 38 displaystring(debug,'\n%s',[' computing gradJ...']); 40 [u_g c(n).grad_g]=GradJCompute(m_dh,inputs, u_g_obs,'diagnostic','horiz');39 [u_g c(n).grad_g]=GradJCompute(m_dh,inputs,'diagnostic','horiz'); 41 40 inputs=add(inputs,'velocity',u_g,'doublevec',2,m_dh.parameters.numberofnodes); 42 41 … … 54 53 55 54 displaystring(debug,'\n%s',[' optimizing along gradient direction...']); 56 [search_scalar c(n).J]=ControlOptimization('objectivefunctionC',0,1,options,m_dh,inputs,param_g, u_g_obs,c(n).grad_g,n,'diagnostic','horiz');55 [search_scalar c(n).J]=ControlOptimization('objectivefunctionC',0,1,options,m_dh,inputs,param_g,c(n).grad_g,n,'diagnostic','horiz'); 57 56 58 57 displaystring(debug,'\n%s',[' updating parameter using optimized search scalar...']); -
issm/trunk/src/m/solutions/cielo/objectivefunctionC.m
r1046 r1184 1 function J =objectivefunctionC(search_scalar,m,inputs,p_g, u_g_obs,grad_g,n,analysis_type,sub_analysis_type);1 function J =objectivefunctionC(search_scalar,m,inputs,p_g,grad_g,n,analysis_type,sub_analysis_type); 2 2 3 3 %recover some parameters … … 16 16 17 17 %Compute misfit for this velocity field. 18 J=Misfit(m.elements,m.nodes,m.loads,m.materials,m.parameters, u_g, u_g_obs,inputs,analysis_type,sub_analysis_type);18 J=Misfit(m.elements,m.nodes,m.loads,m.materials,m.parameters, u_g,inputs,analysis_type,sub_analysis_type); -
issm/trunk/src/mex/ControlOptimization/ControlOptimization.cpp
r759 r1184 26 26 mxArray* m=NULL; 27 27 mxArray* pg=NULL; 28 mxArray* u_g_obs=NULL;29 28 mxArray* grad_g=NULL; 30 29 mxArray* n=NULL; … … 47 46 optargs.param_g=PG; 48 47 optargs.inputs=INPUTS; 49 optargs.u_g_obs=VELOBS;50 48 optargs.grad_g=GRADIENT; 51 49 optargs.n=STEP; … … 74 72 { 75 73 _printf_("\n"); 76 _printf_(" usage: [search_scalar J] = %s(function_name,xmin,xmax,options,m,inputs,p_g, u_g_obs,grad_g,step,analysis_type,sub_analysis_type)\n",__FUNCT__);74 _printf_(" usage: [search_scalar J] = %s(function_name,xmin,xmax,options,m,inputs,p_g,grad_g,step,analysis_type,sub_analysis_type)\n",__FUNCT__); 77 75 _printf_("\n"); 78 76 } -
issm/trunk/src/mex/ControlOptimization/ControlOptimization.h
r465 r1184 24 24 #define INPUTS (mxArray*)prhs[5] 25 25 #define PG (mxArray*)prhs[6] 26 #define VELOBS (mxArray*)prhs[7] 27 #define GRADIENT (mxArray*)prhs[8] 28 #define STEP (mxArray*)prhs[9] 29 #define ANALYSIS (mxArray*)prhs[10] 30 #define SUBANALYSIS (mxArray*)prhs[11] 26 #define GRADIENT (mxArray*)prhs[7] 27 #define STEP (mxArray*)prhs[8] 28 #define ANALYSIS (mxArray*)prhs[9] 29 #define SUBANALYSIS (mxArray*)prhs[10] 31 30 32 31 /* serial output macros: */ … … 38 37 #define NLHS 2 39 38 #undef NRHS 40 #define NRHS 1 239 #define NRHS 11 41 40 42 41 -
issm/trunk/src/mex/Du/Du.cpp
r465 r1184 16 16 DataSet* materials=NULL; 17 17 double* u_g=NULL; 18 double* u_g_obs=NULL;19 18 ParameterInputs* inputs=NULL; 20 19 char* analysis_type_string=NULL; … … 39 38 FetchData((void**)&materials,NULL,NULL,MATERIALS,"DataSet",NULL); 40 39 FetchData((void**)&u_g,NULL,NULL,UG,"Vector","Vec"); 41 FetchData((void**)&u_g_obs,NULL,NULL,UGOBS,"Vector","Vec");42 40 FetchData((void**)&analysis_type_string,NULL,NULL,ANALYSIS,"String",NULL); 43 41 analysis_type=AnalysisTypeAsEnum(analysis_type_string); … … 50 48 51 49 /*!Call core code: */ 52 Dux(&du_g, elements,nodes,loads,materials,u_g, u_g_obs,inputs,analysis_type,sub_analysis_type);50 Dux(&du_g, elements,nodes,loads,materials,u_g,inputs,analysis_type,sub_analysis_type); 53 51 54 52 /*write output : */ … … 61 59 delete materials; 62 60 xfree((void**)&u_g); 63 xfree((void**)&u_g_obs);64 61 VecFree(&du_g); 65 62 delete inputs; … … 74 71 { 75 72 _printf_("\n"); 76 _printf_(" usage: [du_g] = %s( elements, nodes,loads, materials, parameters, u_g, u_g_obs,inputs);\n",__FUNCT__);73 _printf_(" usage: [du_g] = %s(lements, nodes,loads, materials, parameters, u_g,inputs);\n",__FUNCT__); 77 74 _printf_("\n"); 78 75 } -
issm/trunk/src/mex/Du/Du.h
r465 r1184 23 23 #define PARAMETERS (mxArray*)prhs[4] 24 24 #define UG (mxArray*)prhs[5] 25 #define UGOBS (mxArray*)prhs[6] 26 #define INPUTS (mxArray*)prhs[7] 27 #define ANALYSIS (mxArray*)prhs[8] 28 #define SUBANALYSIS (mxArray*)prhs[9] 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
r465 r1184 16 16 DataSet* materials=NULL; 17 17 double* u_g=NULL; 18 double* u_g_obs=NULL;19 18 ParameterInputs* inputs=NULL; 20 19 char* analysis_type_string=NULL; … … 38 37 FetchData((void**)&materials,NULL,NULL,MATERIALS,"DataSet",NULL); 39 38 FetchData((void**)&u_g,NULL,NULL,UG,"Vector","Vec"); 40 FetchData((void**)&u_g_obs,NULL,NULL,UGOBS,"Vector","Vec");41 39 FetchData((void**)&analysis_type_string,NULL,NULL,ANALYSIS,"String",NULL); 42 40 analysis_type=AnalysisTypeAsEnum(analysis_type_string); … … 49 47 50 48 /*!Call core code: */ 51 Misfitx(&J, elements,nodes,loads,materials,u_g, u_g_obs,inputs,analysis_type,sub_analysis_type);49 Misfitx(&J, elements,nodes,loads,materials,u_g,inputs,analysis_type,sub_analysis_type); 52 50 53 51 /*write output : */ … … 60 58 delete materials; 61 59 xfree((void**)&u_g); 62 xfree((void**)&u_g_obs);63 60 delete inputs; 64 61 xfree((void**)&analysis_type_string); … … 72 69 { 73 70 _printf_("\n"); 74 _printf_(" usage: [J] = %s(elements, nodes,loads, materials, parameters, u_g, u_g_obs,inputs);\n",__FUNCT__);71 _printf_(" usage: [J] = %s(elements, nodes,loads, materials, parameters, u_g,inputs);\n",__FUNCT__); 75 72 _printf_("\n"); 76 73 } -
issm/trunk/src/mex/Misfit/Misfit.h
r465 r1184 23 23 #define PARAMETERS (mxArray*)prhs[4] 24 24 #define UG (mxArray*)prhs[5] 25 #define UGOBS (mxArray*)prhs[6] 26 #define INPUTS (mxArray*)prhs[7] 27 #define ANALYSIS (mxArray*)prhs[8] 28 #define SUBANALYSIS (mxArray*)prhs[9] 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
Note:
See TracChangeset
for help on using the changeset viewer.