Ice Sheet System Model  4.18
Code documentation
ControlInputSetGradientx.cpp
Go to the documentation of this file.
1 
6 #include "../../shared/shared.h"
7 #include "../../toolkits/toolkits.h"
8 
9 void ControlInputSetGradientx(Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,IssmDouble* gradient){
10 
11  bool isautodiff;
12  parameters->FindParam(&isautodiff,AutodiffIsautodiffEnum);
13  if(isautodiff){
14  /*Intermediaries*/
15  int num_controls;
16  int *control_type = NULL;
17  int* M_all = NULL;
18  int* N_all = NULL;
19 
20  /*Retrieve some parameters*/
21  parameters->FindParam(&num_controls,InversionNumControlParametersEnum);
22  parameters->FindParam(&control_type,NULL,InversionControlParametersEnum);
23  parameters->FindParam(&M_all,NULL,ControlInputSizeMEnum);
24  parameters->FindParam(&N_all,NULL,ControlInputSizeNEnum);
25 
26  int offset = 0;
27  for(int i=0;i<num_controls;i++){
28  for(int j=0;j<elements->Size();j++){
29  Element* element=(Element*)elements->GetObjectByOffset(j);
30  element->ControlInputSetGradient(gradient,control_type[i],i,offset,N_all[i],M_all[i]);
31  }
32  offset+=M_all[i]*N_all[i];
33  }
34 
35  /*Clean up and return*/
36  xDelete<int>(control_type);
37  }
38  else{
39  int num_controls;
40  int *control_type = NULL;
41 
42  /*Retrieve some parameters*/
43  parameters->FindParam(&num_controls,InversionNumControlParametersEnum);
44  parameters->FindParam(&control_type,NULL,InversionControlParametersEnum);
45 
46  int offset = 0;
47  for(int i=0;i<num_controls;i++){
48  for(int j=0;j<elements->Size();j++){
49  Element* element=(Element*)elements->GetObjectByOffset(j);
50  element->ControlInputSetGradient(gradient,control_type[i],i);
51  }
52  }
53 
54  /*Clean up and return*/
55  xDelete<int>(control_type);
56  }
57 
58 }
59 void ControlInputSetGradientx(Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,Vector<IssmDouble>* gradient){
60 
61  /*Serialize gradient*/
62  IssmDouble* serial_gradient=NULL;
63  serial_gradient=gradient->ToMPISerial();
64 
65  ControlInputSetGradientx(elements,nodes,vertices, loads, materials, parameters,serial_gradient);
66 
67  /*Clean up and return*/
68  xDelete<IssmDouble>(serial_gradient);
69 }
DataSet::Size
int Size()
Definition: DataSet.cpp:399
Vertices
Declaration of Vertices class.
Definition: Vertices.h:15
ControlInputSetGradientx
void ControlInputSetGradientx(Elements *elements, Nodes *nodes, Vertices *vertices, Loads *loads, Materials *materials, Parameters *parameters, IssmDouble *gradient)
Definition: ControlInputSetGradientx.cpp:9
IssmDouble
double IssmDouble
Definition: types.h:37
Nodes
Declaration of Nodes class.
Definition: Nodes.h:19
InversionNumControlParametersEnum
@ InversionNumControlParametersEnum
Definition: EnumDefinitions.h:223
InversionControlParametersEnum
@ InversionControlParametersEnum
Definition: EnumDefinitions.h:209
Parameters
Declaration of Parameters class.
Definition: Parameters.h:18
ControlInputSetGradientx.h
Elements
Declaration of Elements class.
Definition: Elements.h:17
ControlInputSizeMEnum
@ ControlInputSizeMEnum
Definition: EnumDefinitions.h:105
Element
Definition: Element.h:41
Element::ControlInputSetGradient
virtual void ControlInputSetGradient(IssmDouble *gradient, int enum_type, int control_index, int offset, int N, int M)=0
Materials
Declaration of Materials class.
Definition: Materials.h:16
AutodiffIsautodiffEnum
@ AutodiffIsautodiffEnum
Definition: EnumDefinitions.h:50
Loads
Declaration of Loads class.
Definition: Loads.h:16
DataSet::GetObjectByOffset
Object * GetObjectByOffset(int offset)
Definition: DataSet.cpp:334
Parameters::FindParam
void FindParam(bool *pinteger, int enum_type)
Definition: Parameters.cpp:262
Vector::ToMPISerial
doubletype * ToMPISerial(void)
Definition: Vector.h:277
ControlInputSizeNEnum
@ ControlInputSizeNEnum
Definition: EnumDefinitions.h:106
Vector< IssmDouble >