Changeset 18771
- Timestamp:
- 11/10/14 15:01:21 (10 years ago)
- Location:
- issm/trunk-jpl/src
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/AdjointHorizAnalysis.cpp
r18061 r18771 42 42 case SSAApproximationEnum: 43 43 return CreateKMatrixSSA(element); 44 case L1L2ApproximationEnum: 45 return CreateKMatrixL1L2(element); 44 46 case HOApproximationEnum: 45 47 return CreateKMatrixHO(element); … … 139 141 return Ke; 140 142 }/*}}}*/ 143 ElementMatrix* AdjointHorizAnalysis::CreateKMatrixL1L2(Element* element){/*{{{*/ 144 145 /*Intermediaries*/ 146 bool incomplete_adjoint; 147 148 /*Initialize Jacobian with regular L1L2 (first part of the Gateau derivative)*/ 149 StressbalanceAnalysis* analysis = new StressbalanceAnalysis(); 150 ElementMatrix* Ke=analysis->CreateKMatrix(element); 151 delete analysis; 152 153 /*return*/ 154 element->FindParam(&incomplete_adjoint,InversionIncompleteAdjointEnum); 155 if(!incomplete_adjoint){ 156 _error_("Exact adjoint not supported yet for L1L2 model"); 157 } 158 return Ke; 159 }/*}}}*/ 141 160 ElementMatrix* AdjointHorizAnalysis::CreateKMatrixHO(Element* element){/*{{{*/ 142 161 … … 300 319 case SSAApproximationEnum: 301 320 return CreatePVectorSSA(element); 321 case L1L2ApproximationEnum: 322 return CreatePVectorL1L2(element); 302 323 case HOApproximationEnum: 303 324 return CreatePVectorHO(element); … … 897 918 return pe; 898 919 }/*}}}*/ 920 ElementVector* AdjointHorizAnalysis::CreatePVectorL1L2(Element* element){/*{{{*/ 921 922 /*Same as SSA*/ 923 return this->CreatePVectorSSA(element); 924 }/*}}}*/ 899 925 void AdjointHorizAnalysis::GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element){/*{{{*/ 900 926 _error_("not implemented yet"); … … 946 972 switch(approximation){ 947 973 case SSAApproximationEnum: GradientJDragSSA(element,gradient,control_index); break; 974 case L1L2ApproximationEnum:GradientJDragL1L2(element,gradient,control_index); break; 948 975 case HOApproximationEnum: GradientJDragHO( element,gradient,control_index); break; 949 976 case FSApproximationEnum: GradientJDragFS( element,gradient,control_index); break; … … 955 982 switch(approximation){ 956 983 case SSAApproximationEnum: GradientJBbarSSA(element,gradient,control_index); break; 984 case L1L2ApproximationEnum:GradientJBbarL1L2(element,gradient,control_index); break; 957 985 case HOApproximationEnum: GradientJBbarHO( element,gradient,control_index); break; 958 986 case FSApproximationEnum: GradientJBbarFS( element,gradient,control_index); break; … … 1223 1251 if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;}; 1224 1252 }/*}}}*/ 1253 void AdjointHorizAnalysis::GradientJDragL1L2(Element* element,Vector<IssmDouble>* gradient,int control_index){/*{{{*/ 1254 1255 /*Same as SSA*/ 1256 return this->GradientJDragSSA(element,gradient,control_index); 1257 }/*}}}*/ 1225 1258 void AdjointHorizAnalysis::GradientJDragHO(Element* element,Vector<IssmDouble>* gradient,int control_index){/*{{{*/ 1226 1259 … … 1446 1479 if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;}; 1447 1480 }/*}}}*/ 1481 void AdjointHorizAnalysis::GradientJBbarL1L2(Element* element,Vector<IssmDouble>* gradient,int control_index){/*{{{*/ 1482 1483 /*Same as SSA*/ 1484 return this->GradientJBbarSSA(element,gradient,control_index); 1485 }/*}}}*/ 1448 1486 void AdjointHorizAnalysis::GradientJBbarHO(Element* element,Vector<IssmDouble>* gradient,int control_index){/*{{{*/ 1449 1487 -
issm/trunk-jpl/src/c/analyses/AdjointHorizAnalysis.h
r18057 r18771 26 26 ElementMatrix* CreateKMatrix(Element* element); 27 27 ElementMatrix* CreateKMatrixSSA(Element* element); 28 ElementMatrix* CreateKMatrixL1L2(Element* element); 28 29 ElementMatrix* CreateKMatrixHO(Element* element); 29 30 ElementMatrix* CreateKMatrixFS(Element* element); 30 31 ElementVector* CreatePVector(Element* element); 31 32 ElementVector* CreatePVectorSSA(Element* element); 33 ElementVector* CreatePVectorL1L2(Element* element); 32 34 ElementVector* CreatePVectorHO(Element* element); 33 35 ElementVector* CreatePVectorFS(Element* element); … … 37 39 void GradientJBGradient(Element* element,Vector<IssmDouble>* gradient,int control_index); 38 40 void GradientJDragSSA(Element* element,Vector<IssmDouble>* gradient,int control_index); 41 void GradientJDragL1L2(Element* element,Vector<IssmDouble>* gradient,int control_index); 39 42 void GradientJDragHO(Element* element,Vector<IssmDouble>* gradient,int control_index); 40 43 void GradientJDragFS(Element* element,Vector<IssmDouble>* gradient,int control_index); 41 44 void GradientJBbarSSA(Element* element,Vector<IssmDouble>* gradient,int control_index); 45 void GradientJBbarL1L2(Element* element,Vector<IssmDouble>* gradient,int control_index); 42 46 void GradientJBbarHO(Element* element,Vector<IssmDouble>* gradient,int control_index); 43 47 void GradientJBbarFS(Element* element,Vector<IssmDouble>* gradient,int control_index); -
issm/trunk-jpl/src/m/classes/inversion.m
r18605 r18771 146 146 %Only SSA, HO and FS are supported right now 147 147 if solution==StressbalanceSolutionEnum() 148 if ~(md.flowequation.isSSA || md.flowequation.isHO || md.flowequation.isFS ),148 if ~(md.flowequation.isSSA || md.flowequation.isHO || md.flowequation.isFS || md.flowequation.isL1L2), 149 149 md = checkmessage(md,['inversion can only be performed for SSA, HO or FS ice flow models']); 150 150 end -
issm/trunk-jpl/src/m/classes/inversion.py
r18609 r18771 131 131 #Only SSA, HO and FS are supported right now 132 132 if solution==StressbalanceSolutionEnum(): 133 if not (md.flowequation.isSSA or md.flowequation.isHO or md.flowequation.isFS ):133 if not (md.flowequation.isSSA or md.flowequation.isHO or md.flowequation.isFS or md.flowequation.isL1L2): 134 134 md.checkmessage("'inversion can only be performed for SSA, HO or FS ice flow models"); 135 135
Note:
See TracChangeset
for help on using the changeset viewer.