Ice Sheet System Model  4.18
Code documentation
Functions
Mergesolutionfromftogx.h File Reference

merge solution back from f set into g set More...

#include "../../classes/classes.h"

Go to the source code of this file.

Functions

void Mergesolutionfromftogx (Vector< IssmDouble > **pug, Vector< IssmDouble > *uf, Vector< IssmDouble > *ys, Nodes *nodes, Parameters *parameters, bool flag_ys0=false)
 

Detailed Description

merge solution back from f set into g set

Definition in file Mergesolutionfromftogx.h.

Function Documentation

◆ Mergesolutionfromftogx()

void Mergesolutionfromftogx ( Vector< IssmDouble > **  pug,
Vector< IssmDouble > *  uf,
Vector< IssmDouble > *  ys,
Nodes nodes,
Parameters parameters,
bool  flag_ys0 = false 
)

Definition at line 8 of file Mergesolutionfromftogx.cpp.

8  {
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
IssmDouble
double IssmDouble
Definition: types.h:37
_printf0_
#define _printf0_(StreamArgs)
Definition: Print.h:29
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