Ice Sheet System Model  4.18
Code documentation
Functions
GetVectorFromControlInputsx.h File Reference
#include "../../classes/classes.h"

Go to the source code of this file.

Functions

void GetVectorFromControlInputsx (Vector< IssmDouble > **pvector, Elements *elements, Nodes *nodes, Vertices *vertices, Loads *loads, Materials *materials, Parameters *parameters, const char *data="value")
 
void GetVectorFromControlInputsx (IssmDouble **pvector, int *pN, Elements *elements, Nodes *nodes, Vertices *vertices, Loads *loads, Materials *materials, Parameters *parameters, const char *data="value")
 
void GetPassiveVectorFromControlInputsx (double **pvector, int *pN, Elements *elements, Nodes *nodes, Vertices *vertices, Loads *loads, Materials *materials, Parameters *parameters, const char *data="value")
 

Function Documentation

◆ GetVectorFromControlInputsx() [1/2]

void GetVectorFromControlInputsx ( Vector< IssmDouble > **  pvector,
Elements elements,
Nodes nodes,
Vertices vertices,
Loads loads,
Materials materials,
Parameters parameters,
const char *  data = "value" 
)

Definition at line 9 of file GetVectorFromControlInputsx.cpp.

9  {/*{{{*/
10 
11  bool isautodiff;
12  parameters->FindParam(&isautodiff,AutodiffIsautodiffEnum);
13  if(isautodiff){
14  int* N = NULL;
15  int* M = NULL;
16  int num_controls;
17  int* control_type = NULL;
18  Vector<IssmDouble>* vector=NULL;
19 
20  /*Retrieve some parameters*/
21  parameters->FindParam(&num_controls,InversionNumControlParametersEnum);
22  parameters->FindParam(&control_type,NULL,InversionControlParametersEnum);
23  parameters->FindParam(&N,NULL,ControlInputSizeNEnum);
24  parameters->FindParam(&M,NULL,ControlInputSizeMEnum);
25 
26  /*1. Get vector size*/
27  int size = 0;
28  for(int i=0;i<num_controls;i++) size+=M[i]*N[i];
29 
30  /*2. Allocate vector*/
31  vector=new Vector<IssmDouble>(size);
32 
33  /*3. Populate vector*/
34  int offset = 0;
35  for(int i=0;i<num_controls;i++){
36  for(int j=0;j<elements->Size();j++){
37  Element* element=(Element*)elements->GetObjectByOffset(j);
38  element->GetVectorFromControlInputs(vector,control_type[i],i,data,offset);
39  }
40  offset += M[i]*N[i];
41  }
42 
43  vector->Assemble();
44 
45  /*Assign output pointers:*/
46  xDelete<int>(control_type);
47  xDelete<int>(M);
48  xDelete<int>(N);
49 
50  *pvector=vector;
51  }
52  else{
53  int num_controls;
54  int* control_type = NULL;
55  Vector<IssmDouble>* vector=NULL;
56 
57  /*Retrieve some parameters*/
58  parameters->FindParam(&num_controls,InversionNumControlParametersEnum);
59  parameters->FindParam(&control_type,NULL,InversionControlParametersEnum);
60 
61  /*2. Allocate vector*/
62  vector=new Vector<IssmDouble>(num_controls*vertices->NumberOfVertices());
63 
64  /*3. Populate vector*/
65  int offset = 0;
66  for(int i=0;i<num_controls;i++){
67  for(int j=0;j<elements->Size();j++){
68  Element* element=(Element*)elements->GetObjectByOffset(j);
69  element->GetVectorFromControlInputs(vector,control_type[i],i,data);
70  }
71  }
72  vector->Assemble();
73 
74  /*Assign output pointers:*/
75  xDelete<int>(control_type);
76  *pvector=vector;
77  }
78 
79 }/*}}}*/

◆ GetVectorFromControlInputsx() [2/2]

void GetVectorFromControlInputsx ( IssmDouble **  pvector,
int *  pN,
Elements elements,
Nodes nodes,
Vertices vertices,
Loads loads,
Materials materials,
Parameters parameters,
const char *  data = "value" 
)

Definition at line 80 of file GetVectorFromControlInputsx.cpp.

80  {/*{{{*/
81 
82  /*intermediary: */
83  int N;
84  Vector<IssmDouble>* vec_vector=NULL;
85 
86  /*Get PETSc vector*/
87  GetVectorFromControlInputsx( &vec_vector, elements,nodes, vertices, loads, materials, parameters,data);
88 
89  /*Serialize*/
90  vec_vector->GetSize(&N);
91  IssmDouble* vector=vec_vector->ToMPISerial();
92  delete vec_vector;
93 
94  /*Assign output pointers:*/
95  *pvector=vector;
96  if(pN) *pN=N;
97 }/*}}}*/

◆ GetPassiveVectorFromControlInputsx()

void GetPassiveVectorFromControlInputsx ( double **  pvector,
int *  pN,
Elements elements,
Nodes nodes,
Vertices vertices,
Loads loads,
Materials materials,
Parameters parameters,
const char *  data = "value" 
)

Definition at line 127 of file GetVectorFromControlInputsx.cpp.

127  {/*{{{*/
128 
129  GetVectorFromControlInputsx(pvector,pN,elements,nodes, vertices, loads, materials, parameters,data);
130 }/*}}}*/
DataSet::Size
int Size()
Definition: DataSet.cpp:399
GetVectorFromControlInputsx
void GetVectorFromControlInputsx(Vector< IssmDouble > **pvector, Elements *elements, Nodes *nodes, Vertices *vertices, Loads *loads, Materials *materials, Parameters *parameters, const char *data)
Definition: GetVectorFromControlInputsx.cpp:9
IssmDouble
double IssmDouble
Definition: types.h:37
InversionNumControlParametersEnum
@ InversionNumControlParametersEnum
Definition: EnumDefinitions.h:223
InversionControlParametersEnum
@ InversionControlParametersEnum
Definition: EnumDefinitions.h:209
Vertices::NumberOfVertices
int NumberOfVertices(void)
Definition: Vertices.cpp:255
ControlInputSizeMEnum
@ ControlInputSizeMEnum
Definition: EnumDefinitions.h:105
Vector::GetSize
void GetSize(int *pM)
Definition: Vector.h:185
Element
Definition: Element.h:41
Element::GetVectorFromControlInputs
virtual void GetVectorFromControlInputs(Vector< IssmDouble > *gradient, int control_enum, int control_index, const char *data, int offset)=0
AutodiffIsautodiffEnum
@ AutodiffIsautodiffEnum
Definition: EnumDefinitions.h:50
Vector::Assemble
void Assemble(void)
Definition: Vector.h:142
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 >