 |
Ice Sheet System Model
4.18
Code documentation
|
#include <AdjointBalancethicknessAnalysis.h>
|
void | CreateConstraints (Constraints *constraints, IoModel *iomodel) |
|
void | CreateLoads (Loads *loads, IoModel *iomodel) |
|
void | CreateNodes (Nodes *nodes, IoModel *iomodel, bool isamr=false) |
|
int | DofsPerNode (int **doflist, int domaintype, int approximation) |
|
void | UpdateElements (Elements *elements, Inputs2 *inputs2, IoModel *iomodel, int analysis_counter, int analysis_type) |
|
void | UpdateParameters (Parameters *parameters, IoModel *iomodel, int solution_enum, int analysis_enum) |
|
void | Core (FemModel *femmodel) |
|
ElementVector * | CreateDVector (Element *element) |
|
ElementMatrix * | CreateJacobianMatrix (Element *element) |
|
ElementMatrix * | CreateKMatrix (Element *element) |
|
ElementVector * | CreatePVector (Element *element) |
|
void | GetSolutionFromInputs (Vector< IssmDouble > *solution, Element *element) |
|
void | GradientJ (Vector< IssmDouble > *gradient, Element *element, int control_type, int control_index) |
|
void | GradientJDirichlet (Element *element, Vector< IssmDouble > *gradient, int control_index) |
|
void | GradientJDhDt (Element *element, Vector< IssmDouble > *gradient, int control_index) |
|
void | GradientJVx (Element *element, Vector< IssmDouble > *gradient, int control_index) |
|
void | GradientJVy (Element *element, Vector< IssmDouble > *gradient, int control_index) |
|
void | InputUpdateFromSolution (IssmDouble *solution, Element *element) |
|
void | UpdateConstraints (FemModel *femmodel) |
|
virtual | ~Analysis () |
|
◆ CreateConstraints()
void AdjointBalancethicknessAnalysis::CreateConstraints |
( |
Constraints * |
constraints, |
|
|
IoModel * |
iomodel |
|
) |
| |
|
virtual |
◆ CreateLoads()
void AdjointBalancethicknessAnalysis::CreateLoads |
( |
Loads * |
loads, |
|
|
IoModel * |
iomodel |
|
) |
| |
|
virtual |
◆ CreateNodes()
void AdjointBalancethicknessAnalysis::CreateNodes |
( |
Nodes * |
nodes, |
|
|
IoModel * |
iomodel, |
|
|
bool |
isamr = false |
|
) |
| |
|
virtual |
◆ DofsPerNode()
int AdjointBalancethicknessAnalysis::DofsPerNode |
( |
int ** |
doflist, |
|
|
int |
domaintype, |
|
|
int |
approximation |
|
) |
| |
|
virtual |
◆ UpdateElements()
void AdjointBalancethicknessAnalysis::UpdateElements |
( |
Elements * |
elements, |
|
|
Inputs2 * |
inputs2, |
|
|
IoModel * |
iomodel, |
|
|
int |
analysis_counter, |
|
|
int |
analysis_type |
|
) |
| |
|
virtual |
◆ UpdateParameters()
void AdjointBalancethicknessAnalysis::UpdateParameters |
( |
Parameters * |
parameters, |
|
|
IoModel * |
iomodel, |
|
|
int |
solution_enum, |
|
|
int |
analysis_enum |
|
) |
| |
|
virtual |
◆ Core()
void AdjointBalancethicknessAnalysis::Core |
( |
FemModel * |
femmodel | ) |
|
|
virtual |
◆ CreateDVector()
◆ CreateJacobianMatrix()
◆ CreateKMatrix()
◆ CreatePVector()
Implements Analysis.
Definition at line 49 of file AdjointBalancethicknessAnalysis.cpp.
59 basalelement = element;
62 if(!element->
IsOnBase())
return NULL;
73 int *responses = NULL;
81 IssmDouble* basis = xNew<IssmDouble>(numnodes);
82 IssmDouble* dbasis = xNew<IssmDouble>(2*numnodes);
96 for(
int ig=gauss->
begin();ig<gauss->end();ig++){
108 for(
int resp=0;resp<num_responses;resp++){
111 switch(responses[resp]){
113 for(i=0;i<numnodes;i++) pe->
values[i]+=(thicknessobs-thickness)*weight*Jdet*gauss->
weight*basis[i];
116 for(i=0;i<numnodes;i++) pe->
values[i]+= - weight*dH[0]*dbasis[0*numnodes+i]*Jdet*gauss->
weight;
117 for(i=0;i<numnodes;i++) pe->
values[i]+= - weight*dH[1]*dbasis[1*numnodes+i]*Jdet*gauss->
weight;
122 vel = sqrt(vx*vx+vy*vy);
125 for(i=0;i<numnodes;i++) pe->
values[i]+= - weight*(dH[0]*vx+dH[1]*vy)*(dbasis[0*numnodes+i]*vx+dbasis[1*numnodes+i]*vy)*Jdet*gauss->
weight;
130 vel = sqrt(vx*vx+vy*vy);
133 for(i=0;i<numnodes;i++) pe->
values[i]+= - weight*(dH[0]*(-vy)+dH[1]*vx)*(dbasis[0*numnodes+i]*(-vy)+dbasis[1*numnodes+i]*vx)*Jdet*gauss->
weight;
137 for(i=0;i<numnodes;i++) pe->
values[i]+= - weight*2*thickness*Jdet*gauss->
weight*basis[i];
147 xDelete<int>(responses);
148 xDelete<IssmDouble>(xyz_list);
149 xDelete<IssmDouble>(basis);
150 xDelete<IssmDouble>(dbasis);
◆ GetSolutionFromInputs()
◆ GradientJ()
void AdjointBalancethicknessAnalysis::GradientJ |
( |
Vector< IssmDouble > * |
gradient, |
|
|
Element * |
element, |
|
|
int |
control_type, |
|
|
int |
control_index |
|
) |
| |
|
virtual |
Implements Analysis.
Definition at line 158 of file AdjointBalancethicknessAnalysis.cpp.
171 int *responses = NULL;
172 int num_responses,resp;
177 if(control_type!=
VxEnum &&
185 for(resp=0;resp<num_responses;resp++)
switch(responses[resp]){
195 switch(control_type){
204 xDelete<int>(responses);
◆ GradientJDirichlet()
void AdjointBalancethicknessAnalysis::GradientJDirichlet |
( |
Element * |
element, |
|
|
Vector< IssmDouble > * |
gradient, |
|
|
int |
control_index |
|
) |
| |
Definition at line 207 of file AdjointBalancethicknessAnalysis.cpp.
213 IssmDouble* ge = xNewZeroInit<IssmDouble>(numvertices);
214 IssmDouble* lambda = xNew<IssmDouble>(numvertices);
215 int* vertexpidlist = xNew<int>(numvertices);
229 for(
int i=0;i<numvertices;i++){
230 for(
int j=0;j<numvertices;j++){
234 _assert_(!xIsNan<IssmDouble>(ge[i]));
239 xDelete<IssmDouble>(ge);
240 xDelete<IssmDouble>(lambda);
241 xDelete<int>(vertexpidlist);
◆ GradientJDhDt()
void AdjointBalancethicknessAnalysis::GradientJDhDt |
( |
Element * |
element, |
|
|
Vector< IssmDouble > * |
gradient, |
|
|
int |
control_index |
|
) |
| |
Definition at line 244 of file AdjointBalancethicknessAnalysis.cpp.
250 IssmDouble* ge = xNewZeroInit<IssmDouble>(numvertices);
251 IssmDouble* lambda = xNew<IssmDouble>(numvertices);
252 int* vertexpidlist = xNew<int>(numvertices);
257 for(
int i=0;i<numvertices;i++){
259 _assert_(!xIsNan<IssmDouble>(ge[i]));
264 xDelete<IssmDouble>(ge);
265 xDelete<IssmDouble>(lambda);
266 xDelete<int>(vertexpidlist);
◆ GradientJVx()
void AdjointBalancethicknessAnalysis::GradientJVx |
( |
Element * |
element, |
|
|
Vector< IssmDouble > * |
gradient, |
|
|
int |
control_index |
|
) |
| |
Definition at line 268 of file AdjointBalancethicknessAnalysis.cpp.
278 IssmDouble* basis = xNew<IssmDouble>(numvertices);
279 IssmDouble* ge = xNewZeroInit<IssmDouble>(numvertices);
280 int* vertexpidlist = xNew<int>(numvertices);
290 for(
int ig=gauss->
begin();ig<gauss->end();ig++){
301 for(
int i=0;i<numvertices;i++){
302 ge[i]+=thickness*Dlambda[0]*Jdet*gauss->
weight*basis[i];
303 _assert_(!xIsNan<IssmDouble>(ge[i]));
309 xDelete<IssmDouble>(xyz_list);
310 xDelete<IssmDouble>(basis);
311 xDelete<IssmDouble>(ge);
312 xDelete<int>(vertexpidlist);
◆ GradientJVy()
void AdjointBalancethicknessAnalysis::GradientJVy |
( |
Element * |
element, |
|
|
Vector< IssmDouble > * |
gradient, |
|
|
int |
control_index |
|
) |
| |
Definition at line 315 of file AdjointBalancethicknessAnalysis.cpp.
325 IssmDouble* basis = xNew<IssmDouble>(numvertices);
326 IssmDouble* ge = xNewZeroInit<IssmDouble>(numvertices);
327 int* vertexpidlist = xNew<int>(numvertices);
337 for(
int ig=gauss->
begin();ig<gauss->end();ig++){
348 for(
int i=0;i<numvertices;i++){
349 ge[i]+=thickness*Dlambda[1]*Jdet*gauss->
weight*basis[i];
350 _assert_(!xIsNan<IssmDouble>(ge[i]));
356 xDelete<IssmDouble>(xyz_list);
357 xDelete<IssmDouble>(basis);
358 xDelete<IssmDouble>(ge);
359 xDelete<int>(vertexpidlist);
◆ InputUpdateFromSolution()
void AdjointBalancethicknessAnalysis::InputUpdateFromSolution |
( |
IssmDouble * |
solution, |
|
|
Element * |
element |
|
) |
| |
|
virtual |
◆ UpdateConstraints()
void AdjointBalancethicknessAnalysis::UpdateConstraints |
( |
FemModel * |
femmodel | ) |
|
|
virtual |
The documentation for this class was generated from the following files:
@ InversionThicknessObsEnum
virtual int GetNumberOfNodes(void)=0
void FindParam(bool *pvalue, int paramenum)
@ BalancethicknessThickeningRateEnum
@ InversionCostFunctionsCoefficientsEnum
virtual Element * SpawnBasalElement(void)=0
void GradientJDhDt(Element *element, Vector< IssmDouble > *gradient, int control_index)
void GradientJVx(Element *element, Vector< IssmDouble > *gradient, int control_index)
virtual Input2 * GetInput2(int inputenum)=0
void DeleteMaterials(void)
virtual void NodalFunctions(IssmDouble *basis, Gauss *gauss)=0
virtual DatasetInput2 * GetDatasetInput2(int inputenum)
virtual void NodalFunctionsP1(IssmDouble *basis, Gauss *gauss)=0
ElementVector * NewElementVector(int approximation_enum=NoneApproximationEnum)
void SetValues(int ssize, int *list, doubletype *values, InsMode mode)
virtual Gauss * NewGauss(void)=0
@ InversionCostFunctionsEnum
virtual void InputUpdateFromSolutionOneDof(IssmDouble *solution, int inputenum)=0
const char * EnumToStringx(int enum_in)
@ ThicknessAlongGradientEnum
void GetVerticesCoordinates(IssmDouble **xyz_list)
void GradientJDirichlet(Element *element, Vector< IssmDouble > *gradient, int control_index)
#define _error_(StreamArgs)
virtual int begin(void)=0
@ InversionNumCostFunctionsEnum
virtual void JacobianDeterminant(IssmDouble *Jdet, IssmDouble *xyz_list, Gauss *gauss)=0
virtual void GaussPoint(int ig)=0
ElementMatrix * CreateKMatrix(Element *element)
@ ThicknessAbsGradientEnum
virtual int GetNumberOfVertices(void)=0
void GetInputListOnVertices(IssmDouble *pvalue, int enumtype)
void GradientIndexing(int *indexing, int control_index)
virtual void InputUpdateFromSolutionOneDofCollapsed(IssmDouble *solution, int inputenum)=0
@ BalancethicknessSpcthicknessEnum
void GradientJVy(Element *element, Vector< IssmDouble > *gradient, int control_index)
virtual void NodalFunctionsDerivatives(IssmDouble *dbasis, IssmDouble *xyz_list, Gauss *gauss)=0
@ ThicknessAcrossGradientEnum