 |
Ice Sheet System Model
4.18
Code documentation
|
Go to the documentation of this file.
6 #include "../toolkits/toolkits.h"
7 #include "../classes/classes.h"
8 #include "../shared/shared.h"
9 #include "../modules/modules.h"
10 #include "../solutionsequences/solutionsequences.h"
25 int num_controls,nsize,nsteps;
27 bool isFS,dakota_analysis;
28 int *control_type = NULL;
34 void (*solutioncore)(
FemModel*) = NULL;
35 void (*adjointcore)(
FemModel*) = NULL;
68 optpars.
nsize = nsize;
85 for(
long i=0;i<nsize;i++){
86 if(X0[i]>XU[i]) X0[i]=XU[i];
87 if(X0[i]<XL[i]) X0[i]=XL[i];
89 xDelete<IssmDouble>(XU);
90 xDelete<IssmDouble>(XL);
101 for(
int i=0;i<nsteps;i++) J_passive[i]=reCast<IssmPDouble>(J[i]);
103 xDelete<IssmPDouble>(J_passive);
110 xDelete<int>(control_type);
111 xDelete<int>(maxiter);
112 xDelete<IssmDouble>(cm_jump);
113 xDelete<IssmDouble>(J);
114 xDelete<IssmDouble>(X0);
122 int solution_type,analysis_type,num_responses;
123 bool conserve_loads =
true;
126 int nsize = usr->
nsize;
138 for(
long i=0;i<nsize;i++){
139 if(X[i]>XU[i]) X[i]=XU[i];
140 if(X[i]<XL[i]) X[i]=XL[i];
147 switch(solution_type){
155 bool is_schur_cg_solver =
false;
159 if(solver_type==
FSSolverEnum) is_schur_cg_solver =
true;
162 if(is_schur_cg_solver){
187 _printf0_(
"f(x) = "<<setw(12)<<setprecision(7)<<J<<
" | ");
188 for(
int i=0;i<num_responses;i++)
_printf0_(
" "<<setw(12)<<setprecision(7)<<Jlist[i]);
192 xDelete<IssmDouble>(XU);
193 xDelete<IssmDouble>(XL);
194 xDelete<IssmDouble>(Jlist);
204 void (*adjointcore)(
FemModel*)=NULL;
205 int solution_type,analysis_type,num_responses,num_controls,numvertices;
206 bool conserve_loads =
true;
213 int nsize = usr->
nsize;
228 for(
long i=0;i<nsize;i++){
229 if(X[i]>XU[i]) X[i]=XU[i];
230 if(X[i]<XL[i]) X[i]=XL[i];
247 IssmDouble scalar = scalar_list[0]/norm_list[0];
248 for(
int i=1;i<num_controls;i++) scalar=
min(scalar,scalar_list[i]/norm_list[i]);
251 for(
int i=0;i<num_controls;i++){
252 for(
int j=0;j<numvertices;j++){
253 G[i*numvertices+j] = scalar*G[i*numvertices+j];
257 for(
long i=0;i<nsize;i++){
258 if(X[i]>=XU[i]) G[i]=0.;
259 if(X[i]<=XL[i]) G[i]=0.;
267 _printf0_(
"f(x) = "<<setw(12)<<setprecision(7)<<J<<
" | ");
268 for(
int i=0;i<num_responses;i++)
_printf0_(
" "<<setw(12)<<setprecision(7)<<Jlist[i]);
272 xDelete<IssmDouble>(XU);
273 xDelete<IssmDouble>(XL);
274 xDelete<IssmDouble>(norm_list);
275 xDelete<IssmDouble>(scalar_list);
276 xDelete<IssmDouble>(Jlist);
@ BalancethicknessAnalysisEnum
@ Balancethickness2SolutionEnum
@ InversionNumControlParametersEnum
#define _printf0_(StreamArgs)
void PetscOptionsDetermineSolverType(int *psolver_type)
@ StressbalanceAnalysisEnum
IssmDouble FormFunction(IssmDouble *X, void *usr)
int AddObject(Object *object)
@ InversionControlParametersEnum
void AdjointCorePointerFromSolutionEnum(void(**padjointcore)(FemModel *), int solutiontype)
@ Balancethickness2AnalysisEnum
@ BalancethicknessSoftSolutionEnum
void CorePointerFromSolutionEnum(void(**psolutioncore)(FemModel *), Parameters *parameters, int solutiontype)
void solutionsequence_schurcg(FemModel *femmodel)
void CostFunctionx(IssmDouble *pJ, IssmDouble **pJlist, int *pn)
int NumberOfVertices(void)
@ BalancethicknessSolutionEnum
void OutputControlsx(Results **presults)
void solutionsequence_linear(FemModel *femmodel)
void steadystate_core(FemModel *femmodel)
@ InversionMaxiterPerStepEnum
void solutionsequence_nonlinear(FemModel *femmodel, bool conserve_loads)
void BrentSearch(IssmDouble **pJ, OptPars optpars, IssmDouble *X0, IssmDouble(*f)(IssmDouble *, void *), IssmDouble(*g)(IssmDouble **, IssmDouble *, void *), void *usr)
void control_core(FemModel *femmodel)
void SetParam(bool boolean, int enum_type)
const char * EnumToStringx(int enum_in)
@ StressbalanceSolutionEnum
void Gradjx(Vector< IssmDouble > **pgradient, IssmDouble **pnorm_list, Elements *elements, Nodes *nodes, Vertices *vertices, Loads *loads, Materials *materials, Parameters *parameters)
@ InversionStepThresholdEnum
@ InversionGradientScalingEnum
#define _error_(StreamArgs)
IssmDouble min(IssmDouble a, IssmDouble b)
@ InversionNumCostFunctionsEnum
void SetCurrentConfiguration(int configuration_type)
void FindParam(bool *pinteger, int enum_type)
IssmDouble FormFunctionGradient(IssmDouble **pG, IssmDouble *X, void *usr)
@ SteadystateSolutionEnum
doubletype * ToMPISerial(void)
void stressbalance_core(FemModel *femmodel)
bool VerboseControl(void)