Changeset 3751 for issm/trunk/src/c/parallel/objectivefunctionC.cpp
- Timestamp:
- 05/15/10 19:36:18 (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/c/parallel/objectivefunctionC.cpp
r3717 r3751 5 5 #include "../modules.h" 6 6 #include "./parallel.h" 7 #include "../EnumDefinitions/EnumDefinitions.h" 7 8 8 9 #ifdef HAVE_CONFIG_H … … 25 26 double* param_g=NULL; 26 27 double* grad_g=NULL; 27 ParameterInputs* inputs=NULL;28 28 int numberofdofspernode; 29 29 int n; … … 35 35 double cm_min; 36 36 double cm_max; 37 char* control_type=NULL;37 int control_type; 38 38 double* param_g_copy=NULL; 39 39 int analysis_type; … … 43 43 Vec u_g_full=NULL; 44 44 double* u_g_double=NULL; 45 double* vx=NULL; 46 double* vy=NULL; 47 double* vz=NULL; 45 48 int numberofnodes; 46 49 … … 59 62 param_g=optargs->param_g; 60 63 grad_g=optargs->grad_g; 61 inputs=optargs->inputs;62 64 n=optargs->n; 63 65 64 66 gsize=femmodel->nodesets->GetGSize(); 65 67 femmodel->parameters->FindParam(&optscal,NULL,NULL,OptScalEnum); 66 femmodel->parameters->FindParam(&control_type,ControlTypeEnum);67 68 femmodel->parameters->FindParam(&fit,NULL,NULL,FitEnum); 68 69 femmodel->parameters->FindParam(&cm_min,CmMinEnum); … … 87 88 88 89 /*Add new parameter to inputs: */ 89 inputs->Add(control_type,param_g_copy,1,numberofnodes);90 femmodel->UpdateInputsFromVector(param_g_copy,control_type,VertexEnum); 90 91 91 92 /*Run diagnostic with updated parameters.*/ 92 93 if(!control_steady){ 93 diagnostic_core_nonlinear(&u_g,NULL,NULL,NULL,femmodel, inputs,DiagnosticAnalysisEnum,sub_analysis_type);94 VecToMPISerial(&u_g_double,u_g); VecFree(&u_g);95 inputs->Add("velocity",u_g_double,numberofdofspernode,numberofnodes);94 diagnostic_core_nonlinear(&u_g,NULL,NULL,NULL,femmodel,DiagnosticAnalysisEnum,sub_analysis_type); 95 femmodel->UpdateInputsFromSolution(u_g,DiagnosticAnalysisEnum,sub_analysis_type); 96 VecFree(&u_g); 96 97 } 97 98 else{ 98 99 //We need a 3D velocity!! (vz is required for the next thermal run) 99 100 diagnostic_results=new DataSet(ResultsEnum); 100 diagnostic_core(diagnostic_results,model , inputs);101 diagnostic_core(diagnostic_results,model); 101 102 102 103 //extract u_g and add it to input (3d velocity needed by thermal_core) 103 104 diagnostic_results->FindResult(&u_g,"u_g"); 104 inputs->Add("velocity",u_g,3,numberofnodes); 105 106 SplitSolutionVector(u_g,numberofnodes,3,&vx,&vy,&vz); 107 femmodel->UpdateInputsFromVector(vx,VxEnum,VertexEnum); 108 femmodel->UpdateInputsFromVector(vy,VxEnum,VertexEnum); 109 femmodel->UpdateInputsFromVector(vz,VxEnum,VertexEnum); 110 105 111 delete diagnostic_results; 106 112 } 107 113 108 114 /*Compute misfit for this velocity field.*/ 109 inputs->Add("fit",fit[n]);110 CostFunctionx( &J, femmodel->elements,femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials, femmodel->parameters, inputs,analysis_type,sub_analysis_type);115 femmodel->UpdateInputsFromConstant(fit[n],FitEnum); 116 CostFunctionx( &J, femmodel->elements,femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials, femmodel->parameters,analysis_type,sub_analysis_type); 111 117 112 118 /*Free ressources:*/ 113 119 xfree((void**)&fit); 114 120 xfree((void**)&optscal); 115 xfree((void**)&control_type);116 121 xfree((void**)¶m_g_copy); 117 xfree((void**)&u_g_double);118 122 xfree((void**)&dofset); 123 xfree((void**)&vx); 124 xfree((void**)&vy); 125 xfree((void**)&vz); 119 126 120 127 return J;
Note:
See TracChangeset
for help on using the changeset viewer.