source: issm/oecreview/Archive/18296-19100/ISSM-18568-18569.diff

Last change on this file was 19102, checked in by Mathieu Morlighem, 10 years ago

NEW: added 18296-19100

File size: 2.7 KB
RevLine 
[19102]1Index: ../trunk-jpl/src/c/analyses/AdjointBalancethickness2Analysis.cpp
2===================================================================
3--- ../trunk-jpl/src/c/analyses/AdjointBalancethickness2Analysis.cpp (revision 18568)
4+++ ../trunk-jpl/src/c/analyses/AdjointBalancethickness2Analysis.cpp (revision 18569)
5@@ -136,7 +136,8 @@
6
7 /*Deal with second term*/
8 switch(control_type){
9- case BalancethicknessOmegaEnum: GradientJOmega(element,gradient,control_index); break;
10+ case BalancethicknessOmegaEnum: GradientJOmega(element,gradient,control_index); break;
11+ case BalancethicknessThickeningRateEnum: GradientJdHdt( element,gradient,control_index); break;
12 default: _error_("control type not supported yet: " << EnumToStringx(control_type));
13 }
14
15@@ -191,6 +192,30 @@
16 xDelete<int>(vertexpidlist);
17 delete gauss;
18 }/*}}}*/
19+void AdjointBalancethickness2Analysis::GradientJdHdt(Element* element,Vector<IssmDouble>* gradient,int control_index){/*{{{*/
20+
21+ /*Fetch number of vertices for this finite element*/
22+ int numvertices = element->GetNumberOfVertices();
23+
24+ /*Initialize some vectors*/
25+ IssmDouble* ge = xNewZeroInit<IssmDouble>(numvertices);
26+ IssmDouble* lambda = xNew<IssmDouble>(numvertices);
27+ int* vertexpidlist = xNew<int>(numvertices);
28+
29+ /*Retrieve all inputs we will be needing: */
30+ element->GradientIndexing(&vertexpidlist[0],control_index);
31+ element->GetInputListOnVertices(lambda,AdjointEnum);
32+ for(int i=0;i<numvertices;i++){
33+ ge[i]= - lambda[i];
34+ _assert_(!xIsNan<IssmDouble>(ge[i]));
35+ }
36+ gradient->SetValues(numvertices,vertexpidlist,ge,INS_VAL);
37+
38+ /*Clean up and return*/
39+ xDelete<IssmDouble>(ge);
40+ xDelete<IssmDouble>(lambda);
41+ xDelete<int>(vertexpidlist);
42+}/*}}}*/
43 void AdjointBalancethickness2Analysis::InputUpdateFromSolution(IssmDouble* solution,Element* element){/*{{{*/
44 element->InputUpdateFromSolutionOneDof(solution,AdjointEnum);
45 }/*}}}*/
46Index: ../trunk-jpl/src/c/analyses/AdjointBalancethickness2Analysis.h
47===================================================================
48--- ../trunk-jpl/src/c/analyses/AdjointBalancethickness2Analysis.h (revision 18568)
49+++ ../trunk-jpl/src/c/analyses/AdjointBalancethickness2Analysis.h (revision 18569)
50@@ -28,6 +28,7 @@
51 void GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element);
52 void GradientJ(Vector<IssmDouble>* gradient,Element* element,int control_type,int control_index);
53 void GradientJOmega(Element* element,Vector<IssmDouble>* gradient,int control_index);
54+ void GradientJdHdt(Element* element,Vector<IssmDouble>* gradient,int control_index);
55 void InputUpdateFromSolution(IssmDouble* solution,Element* element);
56 void UpdateConstraints(FemModel* femmodel);
57 };
Note: See TracBrowser for help on using the repository browser.