Ice Sheet System Model  4.18
Code documentation
Mergesolutionfromftogx.cpp
Go to the documentation of this file.
1 
5 #include "../../shared/io/io.h"
7 
8 void Mergesolutionfromftogx( Vector<IssmDouble>** pug, Vector<IssmDouble>* uf, Vector<IssmDouble>* ys, Nodes* nodes, Parameters* parameters, bool flag_ys0){
9 
10  /*Display message*/
11  if(VerboseModule()) _printf0_(" Merging solution vector from fset to gset\n");
12 
13  /*first, get gsize, fsize and ssize: */
14  int gsize=nodes->NumberOfDofs(GsetEnum);
15  int gsize_local=nodes->NumberOfDofsLocal(GsetEnum);
16  int fsize=nodes->NumberOfDofs(FsetEnum);
17  int ssize=nodes->NumberOfDofs(SsetEnum);
18 
19  /*serialize uf and ys: those two vectors will be indexed by the nodes, who are the only ones
20  *that know which values should be plugged into ug and where: */
21  if(ssize) if(flag_ys0) ys->Set(0.0);
22 
23  /*Get local vectors ys and uf*/
24  int *indices_ys = NULL;
25  IssmDouble *local_ys = NULL;
26  ys->GetLocalVector(&local_ys,&indices_ys);
27  int *indices_uf = NULL;
28  IssmDouble *local_uf = NULL;
29  uf->GetLocalVector(&local_uf,&indices_uf);
30 
31  /*initialize ug: */
32  Vector<IssmDouble>* ug=new Vector<IssmDouble>(gsize_local,gsize);
33 
34  /*Let nodes figure it out*/
35  for(int i=0;i<nodes->Size();i++){
36  Node* node=(Node*)nodes->GetObjectByOffset(i);
37  node->VecMerge(ug,local_uf,indices_uf,local_ys,indices_ys);
38  }
39 
40  /*Assemble vector: */
41  ug->Assemble();
42 
43  /*Cleanup and assign output pointer*/
44  xDelete<int>(indices_uf);
45  xDelete<int>(indices_ys);
46  xDelete<IssmDouble>(local_uf);
47  xDelete<IssmDouble>(local_ys);
48  *pug=ug;
49 }
DataSet::Size
int Size()
Definition: DataSet.cpp:399
Mergesolutionfromftogx
void Mergesolutionfromftogx(Vector< IssmDouble > **pug, Vector< IssmDouble > *uf, Vector< IssmDouble > *ys, Nodes *nodes, Parameters *parameters, bool flag_ys0)
Definition: Mergesolutionfromftogx.cpp:8
IssmDouble
double IssmDouble
Definition: types.h:37
Nodes
Declaration of Nodes class.
Definition: Nodes.h:19
_printf0_
#define _printf0_(StreamArgs)
Definition: Print.h:29
Parameters
Declaration of Parameters class.
Definition: Parameters.h:18
Mergesolutionfromftogx.h
merge solution back from f set into g set
Vector::GetLocalVector
void GetLocalVector(doubletype **pvector, int **pindices)
Definition: Vector.h:219
SsetEnum
@ SsetEnum
Definition: EnumDefinitions.h:1282
VerboseModule
bool VerboseModule(void)
Definition: Verbosity.cpp:23
Nodes::NumberOfDofsLocal
int NumberOfDofsLocal(int setenum)
Definition: Nodes.cpp:326
GsetEnum
@ GsetEnum
Definition: EnumDefinitions.h:1093
Vector::Assemble
void Assemble(void)
Definition: Vector.h:142
Node
Definition: Node.h:23
DataSet::GetObjectByOffset
Object * GetObjectByOffset(int offset)
Definition: DataSet.cpp:334
Node::VecMerge
void VecMerge(Vector< IssmDouble > *ug, IssmDouble *local_uf, int *indices_uf, IssmDouble *local_ys, int *indices_ys)
Definition: Node.cpp:828
FsetEnum
@ FsetEnum
Definition: EnumDefinitions.h:1075
Nodes::NumberOfDofs
int NumberOfDofs(int setenum)
Definition: Nodes.cpp:314
Vector< IssmDouble >
Vector::Set
void Set(doubletype value)
Definition: Vector.h:245