Ice Sheet System Model  4.18
Code documentation
Functions
adjointstressbalance_core.cpp File Reference

compute inverse method adjoint state More...

#include "./cores.h"
#include "../toolkits/toolkits.h"
#include "../classes/classes.h"
#include "../shared/shared.h"
#include "../modules/modules.h"
#include "../solutionsequences/solutionsequences.h"

Go to the source code of this file.

Functions

void adjointstressbalance_core (FemModel *femmodel)
 

Detailed Description

compute inverse method adjoint state

Definition in file adjointstressbalance_core.cpp.

Function Documentation

◆ adjointstressbalance_core()

void adjointstressbalance_core ( FemModel femmodel)

Definition at line 12 of file adjointstressbalance_core.cpp.

12  {
13 
14  /*parameters: */
15  bool isFS,isSSA,isHO;
16  bool save_results;
17  bool conserve_loads = true;
18  int fe_FS;
19 
20  /*retrieve parameters:*/
26 
27  /*Compute velocities*/
28  if(VerboseSolution()) _printf0_(" computing velocities\n");
30 
31  bool is_schur_cg_solver = false;
32  #ifdef _HAVE_PETSC_
33  int solver_type;
34  PetscOptionsDetermineSolverType(&solver_type);
35 
36  if(solver_type==FSSolverEnum) is_schur_cg_solver = true;
37  #endif
38 
39  if(isFS){
40  if (fe_FS==LATaylorHoodEnum || fe_FS==LACrouzeixRaviartEnum)
42  else if(is_schur_cg_solver)
44  else
45  solutionsequence_nonlinear(femmodel,conserve_loads);
46  }
47  else{
48  solutionsequence_nonlinear(femmodel,conserve_loads);
49  }
50 
51  /*Call SurfaceAreax, because some it might be needed by PVector*/
52  SurfaceAreax(NULL,femmodel);
53 
54  /*Compute adjoint*/
55  if(VerboseSolution()) _printf0_(" computing adjoint\n");
58 
59  /*Save results*/
60  if(save_results || true){
61  if(VerboseSolution()) _printf0_(" saving results\n");
62  if(isFS){
63  if(fe_FS==LATaylorHoodEnum || fe_FS==LACrouzeixRaviartEnum){
64  int outputs[2] = {AdjointxEnum,AdjointyEnum};
65  femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],2);
66  }
67  else{
68  if(!isSSA && !isHO){
69  int outputs[3] = {AdjointxEnum,AdjointyEnum,AdjointpEnum};
70  femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],3);
71  }
72  else{
73  int outputs[2] = {AdjointxEnum,AdjointyEnum};
74  femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],2);
75  }
76  }
77  }
78  else{
79  int outputs[2] = {AdjointxEnum,AdjointyEnum};
80  femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],2);
81  }
82  }
83 }
SaveResultsEnum
@ SaveResultsEnum
Definition: EnumDefinitions.h:302
_printf0_
#define _printf0_(StreamArgs)
Definition: Print.h:29
PetscOptionsDetermineSolverType
void PetscOptionsDetermineSolverType(int *psolver_type)
Definition: PetscOptionsDetermineSolverType.cpp:20
StressbalanceAnalysisEnum
@ StressbalanceAnalysisEnum
Definition: EnumDefinitions.h:1285
FlowequationIsSSAEnum
@ FlowequationIsSSAEnum
Definition: EnumDefinitions.h:142
FemModel::parameters
Parameters * parameters
Definition: FemModel.h:46
solutionsequence_schurcg
void solutionsequence_schurcg(FemModel *femmodel)
Definition: solutionsequence_schurcg.cpp:834
FemModel::results
Results * results
Definition: FemModel.h:48
FSSolverEnum
@ FSSolverEnum
Definition: EnumDefinitions.h:1061
FlowequationFeFSEnum
@ FlowequationFeFSEnum
Definition: EnumDefinitions.h:137
solutionsequence_nonlinear
void solutionsequence_nonlinear(FemModel *femmodel, bool conserve_loads)
Definition: solutionsequence_nonlinear.cpp:11
AdjointpEnum
@ AdjointpEnum
Definition: EnumDefinitions.h:465
solutionsequence_la
void solutionsequence_la(FemModel *femmodel)
Definition: solutionsequence_la.cpp:10
LATaylorHoodEnum
@ LATaylorHoodEnum
Definition: EnumDefinitions.h:1139
SurfaceAreax
void SurfaceAreax(IssmDouble *pS, FemModel *femmodel)
Definition: SurfaceAreax.cpp:11
AdjointHorizAnalysisEnum
@ AdjointHorizAnalysisEnum
Definition: EnumDefinitions.h:972
AdjointyEnum
@ AdjointyEnum
Definition: EnumDefinitions.h:467
AdjointxEnum
@ AdjointxEnum
Definition: EnumDefinitions.h:466
LACrouzeixRaviartEnum
@ LACrouzeixRaviartEnum
Definition: EnumDefinitions.h:1138
FlowequationIsFSEnum
@ FlowequationIsFSEnum
Definition: EnumDefinitions.h:138
VerboseSolution
bool VerboseSolution(void)
Definition: Verbosity.cpp:24
FemModel::RequestedOutputsx
void RequestedOutputsx(Results **presults, char **requested_outputs, int numoutputs, bool save_results=true)
Definition: FemModel.cpp:2267
FemModel::SetCurrentConfiguration
void SetCurrentConfiguration(int configuration_type)
Definition: FemModel.cpp:634
Parameters::FindParam
void FindParam(bool *pinteger, int enum_type)
Definition: Parameters.cpp:262
solutionsequence_adjoint_linear
void solutionsequence_adjoint_linear(FemModel *femmodel)
Definition: solutionsequence_adjoint_linear.cpp:10
FlowequationIsHOEnum
@ FlowequationIsHOEnum
Definition: EnumDefinitions.h:139
femmodel
FemModel * femmodel
Definition: esmfbinders.cpp:16