Ice Sheet System Model  4.18
Code documentation
Masscon.h
Go to the documentation of this file.
1 
5 #ifndef _MASSCON_H_
6 #define _MASSCON_H_
7 
8 /*Headers:*/
9 /*{{{*/
10 #include "./Definition.h"
11 #include "../datastructures/datastructures.h"
12 #include "./Elements/Element.h"
13 #include "./Elements/Elements.h"
14 #include "./FemModel.h"
15 #include "../classes/Params/Parameters.h"
16 /*}}}*/
17 
18 class Masscon: public Object, public Definition{
19 
20  public:
21 
23  char* name;
25  int M;
26 
27  /*Masscon constructors, destructors :*/
28  Masscon(){/*{{{*/
29 
30  this->definitionenum = -1;
31  this->name = NULL;
32  this->levelset=NULL;
33  this->M=0;
34 
35  }
36  /*}}}*/
37  Masscon(char* in_name, int in_definitionenum, IssmDouble* levelsetin, int Min){ /*{{{*/
38 
39  this->definitionenum=in_definitionenum;
40  this->name = xNew<char>(strlen(in_name)+1);
41  xMemCpy<char>(this->name,in_name,strlen(in_name)+1);
42 
43  this->levelset = xNew<IssmDouble>(Min);
44  xMemCpy<IssmDouble>(this->levelset, levelsetin, Min);
45 
46  this->M=Min;
47 
48  }
49  /*}}}*/
50  ~Masscon(){/*{{{*/
51  if(this->name)xDelete(this->name);
52  if(this->levelset)xDelete(this->levelset);
53  }
54  /*}}}*/
55  /*Object virtual function resolutoin: */
56  Object* copy() {/*{{{*/
57  Masscon* mf = new Masscon(this->name,this->definitionenum,this->levelset,this->M);
58  return (Object*) mf;
59  }
60  /*}}}*/
61  void DeepEcho(void){/*{{{*/
62  this->Echo();
63  }
64  /*}}}*/
65  void Echo(void){/*{{{*/
66  _printf_(" Masscon: " << this->name << " " << this->definitionenum << "\n");
67  _printf_(" levelset: " << this->levelset << "\n");
68  _printf_(" M: " << this->M << "\n");
69  }
70  /*}}}*/
71  int Id(void){/*{{{*/
72  return -1;
73  }
74  /*}}}*/
75  void Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction){/*{{{*/
76  _error_("not implemented yet!");
77  }
78  /*}}}*/
79  int ObjectEnum(void){/*{{{*/
80  return MassconEnum;
81  }
82  /*}}}*/
83  /*Definition virtual function resolutoin: */
84  int DefinitionEnum(){/*{{{*/
85 
86  return this->definitionenum;
87  }
88  /*}}}*/
89  char* Name(){/*{{{*/
90 
91  char* name2=xNew<char>(strlen(this->name)+1);
92  xMemCpy(name2,this->name,strlen(this->name)+1);
93 
94  return name2;
95  }
96  /*}}}*/
98 
99  int i;
100  IssmDouble mass_t=0.;
101  IssmDouble all_mass_t=0.;
102 
103 
104  for(i=0;i<femmodel->elements->Size();i++){
106  mass_t+=element->Masscon(this->levelset);
107  }
108 
109  ISSM_MPI_Allreduce ( (void*)&mass_t,(void*)&all_mass_t,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,IssmComm::GetComm());
110  mass_t=all_mass_t;
111 
112  return mass_t;
113  }
114  /*}}}*/
115 };
116 
117 #endif /* _MASSCON_H_ */
DataSet::Size
int Size()
Definition: DataSet.cpp:399
Masscon::Id
int Id(void)
Definition: Masscon.h:71
Masscon::Masscon
Masscon(char *in_name, int in_definitionenum, IssmDouble *levelsetin, int Min)
Definition: Masscon.h:37
IssmDouble
double IssmDouble
Definition: types.h:37
ISSM_MPI_Allreduce
int ISSM_MPI_Allreduce(void *sendbuf, void *recvbuf, int count, ISSM_MPI_Datatype datatype, ISSM_MPI_Op op, ISSM_MPI_Comm comm)
Definition: issmmpi.cpp:116
_printf_
#define _printf_(StreamArgs)
Definition: Print.h:22
Masscon::name
char * name
Definition: Masscon.h:23
Masscon::Name
char * Name()
Definition: Masscon.h:89
ISSM_MPI_SUM
#define ISSM_MPI_SUM
Definition: issmmpi.h:134
IssmComm::GetComm
static ISSM_MPI_Comm GetComm(void)
Definition: IssmComm.cpp:30
Element::Masscon
virtual IssmDouble Masscon(IssmDouble *levelset)=0
Masscon::DeepEcho
void DeepEcho(void)
Definition: Masscon.h:61
Element
Definition: Element.h:41
Elements.h
MassconEnum
@ MassconEnum
Definition: EnumDefinitions.h:1160
ISSM_MPI_DOUBLE
#define ISSM_MPI_DOUBLE
Definition: issmmpi.h:125
Element.h
abstract class for Element object This class is a place holder for the Tria and the Penta elements....
Masscon::ObjectEnum
int ObjectEnum(void)
Definition: Masscon.h:79
Object
Definition: Object.h:13
xDelete
void xDelete(T **&aT_pp)
Definition: MemOps.h:97
Masscon::M
int M
Definition: Masscon.h:25
Masscon::definitionenum
int definitionenum
Definition: Masscon.h:22
Masscon::Marshall
void Marshall(char **pmarshalled_data, int *pmarshalled_data_size, int marshall_direction)
Definition: Masscon.h:75
Masscon::Response
IssmDouble Response(FemModel *femmodel)
Definition: Masscon.h:97
Masscon::Masscon
Masscon()
Definition: Masscon.h:28
Definition
Definition: Definition.h:10
FemModel::elements
Elements * elements
Definition: FemModel.h:44
FemModel
Definition: FemModel.h:31
Masscon::~Masscon
~Masscon()
Definition: Masscon.h:50
Masscon::levelset
IssmDouble * levelset
Definition: Masscon.h:24
Masscon
Definition: Masscon.h:18
_error_
#define _error_(StreamArgs)
Definition: exceptions.h:49
DataSet::GetObjectByOffset
Object * GetObjectByOffset(int offset)
Definition: DataSet.cpp:334
FemModel.h
Masscon::DefinitionEnum
int DefinitionEnum()
Definition: Masscon.h:84
Masscon::Echo
void Echo(void)
Definition: Masscon.h:65
Definition.h
xMemCpy
T * xMemCpy(T *dest, const T *src, unsigned int size)
Definition: MemOps.h:152
bamg::Min
T Min(const T &a, const T &b)
Definition: extrema.h:6
Masscon::copy
Object * copy()
Definition: Masscon.h:56
femmodel
FemModel * femmodel
Definition: esmfbinders.cpp:16