 |
Ice Sheet System Model
4.18
Code documentation
|
#include <AdjointBalancethickness2Analysis.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 | GradientJdHdt (Element *element, Vector< IssmDouble > *gradient, int control_index) |
|
void | GradientJOmega (Element *element, Vector< IssmDouble > *gradient, int control_index) |
|
void | GradientJOmegaGradient (Element *element, Vector< IssmDouble > *gradient, int control_index) |
|
void | GradientJEtaDiff (Element *element, Vector< IssmDouble > *gradient, int control_index) |
|
void | InputUpdateFromSolution (IssmDouble *solution, Element *element) |
|
void | UpdateConstraints (FemModel *femmodel) |
|
virtual | ~Analysis () |
|
◆ CreateConstraints()
void AdjointBalancethickness2Analysis::CreateConstraints |
( |
Constraints * |
constraints, |
|
|
IoModel * |
iomodel |
|
) |
| |
|
virtual |
◆ CreateLoads()
void AdjointBalancethickness2Analysis::CreateLoads |
( |
Loads * |
loads, |
|
|
IoModel * |
iomodel |
|
) |
| |
|
virtual |
◆ CreateNodes()
void AdjointBalancethickness2Analysis::CreateNodes |
( |
Nodes * |
nodes, |
|
|
IoModel * |
iomodel, |
|
|
bool |
isamr = false |
|
) |
| |
|
virtual |
◆ DofsPerNode()
int AdjointBalancethickness2Analysis::DofsPerNode |
( |
int ** |
doflist, |
|
|
int |
domaintype, |
|
|
int |
approximation |
|
) |
| |
|
virtual |
◆ UpdateElements()
void AdjointBalancethickness2Analysis::UpdateElements |
( |
Elements * |
elements, |
|
|
Inputs2 * |
inputs2, |
|
|
IoModel * |
iomodel, |
|
|
int |
analysis_counter, |
|
|
int |
analysis_type |
|
) |
| |
|
virtual |
◆ UpdateParameters()
void AdjointBalancethickness2Analysis::UpdateParameters |
( |
Parameters * |
parameters, |
|
|
IoModel * |
iomodel, |
|
|
int |
solution_enum, |
|
|
int |
analysis_enum |
|
) |
| |
|
virtual |
◆ Core()
void AdjointBalancethickness2Analysis::Core |
( |
FemModel * |
femmodel | ) |
|
|
virtual |
◆ CreateDVector()
◆ CreateJacobianMatrix()
◆ CreateKMatrix()
◆ CreatePVector()
Implements Analysis.
Definition at line 47 of file AdjointBalancethickness2Analysis.cpp.
53 int *responses = NULL;
61 IssmDouble* basis = xNew<IssmDouble>(numnodes);
62 IssmDouble* dbasis = xNew<IssmDouble>(2*numnodes);
76 for(
int ig=gauss->
begin();ig<gauss->end();ig++){
87 for(
int resp=0;resp<num_responses;resp++){
90 switch(responses[resp]){
92 for(i=0;i<numnodes;i++) pe->
values[i]+=(surfaceobs-surface)*weight*Jdet*gauss->
weight*basis[i];
107 xDelete<int>(responses);
108 xDelete<IssmDouble>(xyz_list);
109 xDelete<IssmDouble>(basis);
110 xDelete<IssmDouble>(dbasis);
◆ GetSolutionFromInputs()
void AdjointBalancethickness2Analysis::GetSolutionFromInputs |
( |
Vector< IssmDouble > * |
solution, |
|
|
Element * |
element |
|
) |
| |
|
virtual |
◆ GradientJ()
void AdjointBalancethickness2Analysis::GradientJ |
( |
Vector< IssmDouble > * |
gradient, |
|
|
Element * |
element, |
|
|
int |
control_type, |
|
|
int |
control_index |
|
) |
| |
|
virtual |
Implements Analysis.
Definition at line 118 of file AdjointBalancethickness2Analysis.cpp.
131 int *responses = NULL;
132 int num_responses,resp;
137 for(resp=0;resp<num_responses;resp++)
switch(responses[resp]){
147 switch(control_type){
154 xDelete<int>(responses);
◆ GradientJdHdt()
void AdjointBalancethickness2Analysis::GradientJdHdt |
( |
Element * |
element, |
|
|
Vector< IssmDouble > * |
gradient, |
|
|
int |
control_index |
|
) |
| |
Definition at line 157 of file AdjointBalancethickness2Analysis.cpp.
167 IssmDouble* basis = xNew<IssmDouble>(numvertices);
168 IssmDouble* ge = xNewZeroInit<IssmDouble>(numvertices);
169 int* vertexpidlist = xNew<int>(numvertices);
177 for(
int ig=gauss->
begin();ig<gauss->end();ig++){
186 for(
int i=0;i<numvertices;i++){
187 ge[i]+= -Jdet*gauss->
weight*basis[i]*lambda;
188 _assert_(!xIsNan<IssmDouble>(ge[i]));
194 xDelete<IssmDouble>(ge);
195 xDelete<IssmDouble>(xyz_list);
196 xDelete<IssmDouble>(basis);
197 xDelete<int>(vertexpidlist);
◆ GradientJOmega()
void AdjointBalancethickness2Analysis::GradientJOmega |
( |
Element * |
element, |
|
|
Vector< IssmDouble > * |
gradient, |
|
|
int |
control_index |
|
) |
| |
Definition at line 200 of file AdjointBalancethickness2Analysis.cpp.
204 IssmDouble dlambda[2],ds[2],slopex,slopey,slope,omega,Jdet,velobs;
211 IssmDouble* basis = xNew<IssmDouble>(numvertices);
212 IssmDouble* ge = xNewZeroInit<IssmDouble>(numvertices);
213 int* vertexpidlist = xNew<int>(numvertices);
226 for(
int ig=gauss->
begin();ig<gauss->end();ig++){
239 slope = sqrt(slopex*slopex + slopey*slopey);
243 for(
int i=0;i<numvertices;i++){
244 ge[i]+= - Jdet*gauss->
weight*basis[i]*velobs/slope*(ds[0]*dlambda[0] + ds[1]*dlambda[1]);
245 _assert_(!xIsNan<IssmDouble>(ge[i]));
251 xDelete<IssmDouble>(ge);
252 xDelete<IssmDouble>(xyz_list);
253 xDelete<IssmDouble>(basis);
254 xDelete<int>(vertexpidlist);
◆ GradientJOmegaGradient()
void AdjointBalancethickness2Analysis::GradientJOmegaGradient |
( |
Element * |
element, |
|
|
Vector< IssmDouble > * |
gradient, |
|
|
int |
control_index |
|
) |
| |
Definition at line 257 of file AdjointBalancethickness2Analysis.cpp.
268 IssmDouble* dbasis = xNew<IssmDouble>(2*numvertices);
269 IssmDouble* ge = xNewZeroInit<IssmDouble>(numvertices);
270 int* vertexpidlist = xNew<int>(numvertices);
280 for(
int ig=gauss->
begin();ig<gauss->end();ig++){
291 for(
int i=0;i<numvertices;i++){
292 ge[i]+=-weight*Jdet*gauss->
weight*2*(dk[0]*dk[0] + dk[1]*dk[1])*(dbasis[0*numvertices+i]*dk[0]+dbasis[1*numvertices+i]*dk[1]);
293 _assert_(!xIsNan<IssmDouble>(ge[i]));
299 xDelete<IssmDouble>(xyz_list);
300 xDelete<IssmDouble>(dbasis);
301 xDelete<IssmDouble>(ge);
302 xDelete<int>(vertexpidlist);
◆ GradientJEtaDiff()
void AdjointBalancethickness2Analysis::GradientJEtaDiff |
( |
Element * |
element, |
|
|
Vector< IssmDouble > * |
gradient, |
|
|
int |
control_index |
|
) |
| |
Definition at line 306 of file AdjointBalancethickness2Analysis.cpp.
317 IssmDouble* basis = xNew<IssmDouble>(numvertices);
318 IssmDouble* ge = xNewZeroInit<IssmDouble>(numvertices);
319 int* vertexpidlist = xNew<int>(numvertices);
330 for(
int ig=gauss->
begin();ig<gauss->end();ig++){
342 for(
int i=0;i<numvertices;i++){
343 ge[i]+=-weight*Jdet*gauss->
weight*(omega - omega0)*basis[i];
344 _assert_(!xIsNan<IssmDouble>(ge[i]));
350 xDelete<IssmDouble>(xyz_list);
351 xDelete<IssmDouble>(basis);
352 xDelete<IssmDouble>(ge);
353 xDelete<int>(vertexpidlist);
◆ InputUpdateFromSolution()
void AdjointBalancethickness2Analysis::InputUpdateFromSolution |
( |
IssmDouble * |
solution, |
|
|
Element * |
element |
|
) |
| |
|
virtual |
◆ UpdateConstraints()
void AdjointBalancethickness2Analysis::UpdateConstraints |
( |
FemModel * |
femmodel | ) |
|
|
virtual |
The documentation for this class was generated from the following files:
void GradientJOmegaGradient(Element *element, Vector< IssmDouble > *gradient, int control_index)
virtual int GetNumberOfNodes(void)=0
void FindParam(bool *pvalue, int paramenum)
@ BalancethicknessThickeningRateEnum
@ InversionCostFunctionsCoefficientsEnum
ElementMatrix * CreateKMatrix(Element *element)
void GradientJOmega(Element *element, Vector< IssmDouble > *gradient, int control_index)
virtual void NodalFunctionsP1Derivatives(IssmDouble *dbasis, IssmDouble *xyz_list, Gauss *gauss)=0
virtual Input2 * GetInput2(int inputenum)=0
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)
@ BalancethicknessOmegaEnum
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)
void GetVerticesCoordinates(IssmDouble **xyz_list)
@ InversionSurfaceObsEnum
void GradientJdHdt(Element *element, Vector< IssmDouble > *gradient, int control_index)
#define _error_(StreamArgs)
virtual int begin(void)=0
@ BalancethicknessOmega0Enum
@ InversionNumCostFunctionsEnum
virtual void JacobianDeterminant(IssmDouble *Jdet, IssmDouble *xyz_list, Gauss *gauss)=0
virtual void GaussPoint(int ig)=0
void GradientJEtaDiff(Element *element, Vector< IssmDouble > *gradient, int control_index)
virtual int GetNumberOfVertices(void)=0
void GradientIndexing(int *indexing, int control_index)
virtual void NodalFunctionsDerivatives(IssmDouble *dbasis, IssmDouble *xyz_list, Gauss *gauss)=0