Changeset 4382
- Timestamp:
- 07/01/10 10:00:07 (15 years ago)
- Location:
- issm/trunk/src/c
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/c/modules/ModelProcessorx/Control/UpdateElementsControl.cpp
r4365 r4382 29 29 IoModelFetchData(&iomodel->vy_obs,NULL,NULL,iomodel_handle,"vy_obs"); 30 30 IoModelFetchData(&iomodel->weights,NULL,NULL,iomodel_handle,"weights"); 31 IoModelFetchData(& control_parameter,NULL,NULL,iomodel_handle,iomodel->control_type);31 IoModelFetchData(&iomodel->control_parameter,NULL,NULL,iomodel_handle,iomodel->control_type); //copy the control parameter in iomodel 32 32 33 33 /*Update elements: */ … … 47 47 xfree((void**)&iomodel->vy_obs); 48 48 xfree((void**)&iomodel->weights); 49 xfree((void**)& control_parameter);49 xfree((void**)&iomodel->control_parameter); 50 50 } -
issm/trunk/src/c/objects/Elements/Penta.cpp
r4381 r4382 1582 1582 } 1583 1583 /*}}}*/ 1584 /*FUNCTION Penta::Update (IoModel* iomodel,int analysis_counter,int analysis_type){{{1*/1584 /*FUNCTION Penta::Update {{{1*/ 1585 1585 void Penta::Update(int index,IoModel* iomodel,int analysis_counter,int analysis_type){ 1586 1586 … … 1632 1632 this->inputs->AddInput(new IntInput(DragTypeEnum,iomodel->drag_type)); 1633 1633 1634 } 1635 if (iomodel->rheology_B) { 1636 for(i=0;i<6;i++)nodeinputs[i]=iomodel->rheology_B[penta_vertex_ids[i]-1]; 1637 this->inputs->AddInput(new PentaVertexInput(RheologyBEnum,nodeinputs)); 1638 } 1639 if (iomodel->control_parameter) { 1640 for(i=0;i<6;i++)nodeinputs[i]=iomodel->control_parameter[penta_vertex_ids[i]-1]; 1641 this->inputs->AddInput(new PentaVertexInput(ControlParameterEnum,nodeinputs)); 1634 1642 } 1635 1643 if (iomodel->melting_rate) { -
issm/trunk/src/c/objects/Elements/Tria.cpp
r4375 r4382 992 992 if (analysis_type==DiagnosticHorizAnalysisEnum) 993 993 GetSolutionFromInputsDiagnosticHoriz(solution); 994 else if (analysis_type==AdjointAnalysisEnum) 995 GetSolutionFromInputsAdjoint(solution); 994 996 else 995 ISSMERROR(" %s%i%s\n","analysis: ",analysis_type," not supported yet");997 ISSMERROR("analysis: %s not supported yet",EnumAsString(analysis_type)); 996 998 997 999 } … … 2237 2239 this->inputs->AddInput(new TriaVertexInput(RheologyBEnum,nodeinputs)); 2238 2240 } 2241 if (iomodel->control_parameter) { 2242 for(i=0;i<3;i++)nodeinputs[i]=iomodel->control_parameter[tria_vertex_ids[i]-1]; 2243 this->inputs->AddInput(new TriaVertexInput(ControlParameterEnum,nodeinputs)); 2244 } 2239 2245 if (iomodel->melting_rate) { 2240 2246 for(i=0;i<3;i++)nodeinputs[i]=iomodel->melting_rate[tria_vertex_ids[i]-1]/iomodel->yts; … … 5174 5180 } 5175 5181 /*}}}*/ 5182 /*FUNCTION Tria::GetSolutionFromInputsAdjoint(Vec solution){{{1*/ 5183 void Tria::GetSolutionFromInputsAdjoint(Vec solution){ 5184 5185 int i; 5186 5187 const int numvertices=3; 5188 const int numdofpervertex=2; 5189 const int numdof=numdofpervertex*numvertices; 5190 double gauss[numvertices][numvertices]={{1,0,0},{0,1,0},{0,0,1}}; 5191 5192 int doflist[numdof]; 5193 double values[numdof]; 5194 double lambdax; 5195 double lambday; 5196 5197 int dummy; 5198 5199 /*Get dof list: */ 5200 GetDofList(&doflist[0],&dummy); 5201 5202 /*Ok, we have lambdax and lambday in values, fill in lambdax and lambday arrays: */ 5203 /*P1 element only for now*/ 5204 for(i=0;i<numvertices;i++){ 5205 5206 /*Recover lambdax and lambday*/ 5207 inputs->GetParameterValue(&lambdax,&gauss[i][0],VxEnum); 5208 inputs->GetParameterValue(&lambday,&gauss[i][0],VyEnum); 5209 values[i*numdofpervertex+0]=lambdax; 5210 values[i*numdofpervertex+1]=lambday; 5211 } 5212 5213 /*Add value to global vector*/ 5214 VecSetValues(solution,numdof,doflist,(const double*)values,INSERT_VALUES); 5215 5216 } 5217 /*}}}*/ 5176 5218 /*FUNCTION Tria::GradjDragStokes {{{1*/ 5177 5219 void Tria::GradjDragStokes(Vec gradient){ -
issm/trunk/src/c/objects/Elements/Tria.h
r4375 r4382 151 151 void GetParameterValue(double* pp, double* plist, double* gauss_l1l2l3); 152 152 void GetSolutionFromInputsDiagnosticHoriz(Vec solution); 153 void GetSolutionFromInputsAdjoint(Vec solution); 153 154 void GradjDragStokes(Vec gradient); 154 155 void InputUpdateFromSolutionAdjoint( double* solution); -
issm/trunk/src/c/objects/IoModel.cpp
r4002 r4382 104 104 105 105 xfree((void**)&this->control_type); 106 xfree((void**)&this->control_parameter); 106 107 107 108 /*exterior data: */ … … 230 231 this->qmu_analysis=0; 231 232 this->control_analysis=0; 233 this->control_parameter=NULL; 232 234 this->solverstring=NULL; 233 235 this->numberofresponses=0; -
issm/trunk/src/c/objects/IoModel.h
r4002 r4382 124 124 /*control methods: */ 125 125 char* control_type; 126 double* control_parameter; 126 127 127 128 /*solution parameters: */
Note:
See TracChangeset
for help on using the changeset viewer.