Ice Sheet System Model  4.18
Code documentation
Matlitho.cpp
Go to the documentation of this file.
1 
5 #ifdef HAVE_CONFIG_H
6  #include <config.h>
7 #else
8 #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
9 #endif
10 
11 #include "../classes.h"
12 #include "../../shared/shared.h"
13 
14 /*Matlitho constructors and destructor*/
16  this->numlayers=0;
17  this->radius=NULL;
18  this->viscosity=NULL;
19  this->lame_lambda=NULL;
20  this->lame_mu=NULL;
21  this->burgers_viscosity=NULL;
22  this->burgers_mu=NULL;
23  this->density=NULL;
24  this->isburgers=NULL;
25  this->issolid=NULL;
26  return;
27 }
28 /*}}}*/
29 Matlitho::Matlitho(int matlitho_mid, IoModel* iomodel){/*{{{*/
30 
31  IssmDouble* isburgersd=NULL;
32  IssmDouble* issolidd=NULL;
33 
34  this->mid=matlitho_mid;
35  iomodel->FindConstant(&this->numlayers,"md.materials.numlayers");
36 
37  this->radius=xNew<IssmDouble>(this->numlayers+1);
38  xMemCpy<IssmDouble>(this->radius, iomodel->Data("md.materials.radius"),this->numlayers+1);
39 
40  this->viscosity=xNew<IssmDouble>(this->numlayers);
41  xMemCpy<IssmDouble>(this->viscosity, iomodel->Data("md.materials.viscosity"),this->numlayers);
42 
43  this->lame_lambda=xNew<IssmDouble>(this->numlayers);
44  xMemCpy<IssmDouble>(this->lame_lambda, iomodel->Data("md.materials.lame_lambda"),this->numlayers);
45 
46  this->lame_mu=xNew<IssmDouble>(this->numlayers);
47  xMemCpy<IssmDouble>(this->lame_mu, iomodel->Data("md.materials.lame_mu"),this->numlayers);
48 
49  this->burgers_viscosity=xNew<IssmDouble>(this->numlayers);
50  xMemCpy<IssmDouble>(this->burgers_viscosity, iomodel->Data("md.materials.burgers_viscosity"),this->numlayers);
51 
52  this->burgers_mu=xNew<IssmDouble>(this->numlayers);
53  xMemCpy<IssmDouble>(this->burgers_mu, iomodel->Data("md.materials.burgers_mu"),this->numlayers);
54 
55  this->density=xNew<IssmDouble>(this->numlayers);
56  xMemCpy<IssmDouble>(this->density, iomodel->Data("md.materials.density"),this->numlayers);
57 
58  this->isburgers=xNew<IssmDouble>(this->numlayers);
59  xMemCpy<IssmDouble>(this->isburgers, iomodel->Data("md.materials.isburgers"),this->numlayers);
60 
61  this->issolid=xNew<IssmDouble>(this->numlayers);
62  xMemCpy<IssmDouble>(this->issolid, iomodel->Data("md.materials.issolid"),this->numlayers);
63 
64  /*isburgersd= xNew<IssmDouble>(this->numlayers);
65  this->isburgers=xNew<bool>(this->numlayers);
66  xMemCpy<IssmDouble>(isburgersd, iomodel->Data("md.materials.isburgers"),this->numlayers);
67  for (int i=0;i<this->numlayers;i++)this->isburgers[i]=reCast<bool,IssmDouble>(isburgersd[i]);
68 
69  issolidd= xNew<IssmDouble>(this->numlayers);
70  this->issolid=xNew<bool>(this->numlayers);
71  xMemCpy<IssmDouble>(issolidd, iomodel->Data("md.materials.issolid"),this->numlayers);
72  for (int i=0;i<this->numlayers;i++)this->issolid[i]=reCast<bool,IssmDouble>(issolidd[i]);*/
73 
74  /*free ressources: */
75  xDelete<IssmDouble>(isburgersd);
76  xDelete<IssmDouble>(issolidd);
77 }
78 /*}}}*/
80 
81  xDelete<IssmDouble>(radius);
82  xDelete<IssmDouble>(viscosity);
83  xDelete<IssmDouble>(lame_lambda);
84  xDelete<IssmDouble>(lame_mu);
85  xDelete<IssmDouble>(burgers_viscosity);
86  xDelete<IssmDouble>(burgers_mu);
87  xDelete<IssmDouble>(density);
88  xDelete<IssmDouble>(isburgers);
89  xDelete<IssmDouble>(issolid);
90 
91  return;
92 }
93 /*}}}*/
94 void Matlitho::SetMid(int matlitho_mid){/*{{{*/
95  this->mid=matlitho_mid;
96 }
97 /*}}}*/
98 
99 /*Object virtual functions definitions:*/
101 
102  /*Output*/
103  Matlitho* matlitho;
104 
105  /*Initialize output*/
106  matlitho=new Matlitho(*this);
107 
108  /*copy fields: */
109  matlitho->mid=this->mid;
110  matlitho->numlayers=this->numlayers;
111  if(matlitho->numlayers){
112  matlitho->radius=xNew<IssmDouble>(this->numlayers+1); xMemCpy<IssmDouble>(matlitho->radius, this->radius,this->numlayers+1);
113  matlitho->viscosity=xNew<IssmDouble>(this->numlayers); xMemCpy<IssmDouble>(matlitho->viscosity, this->viscosity,this->numlayers);
114  matlitho->lame_lambda=xNew<IssmDouble>(this->numlayers); xMemCpy<IssmDouble>(matlitho->lame_lambda, this->lame_lambda,this->numlayers);
115  matlitho->lame_mu=xNew<IssmDouble>(this->numlayers); xMemCpy<IssmDouble>(matlitho->lame_mu, this->lame_mu,this->numlayers);
116  matlitho->burgers_viscosity=xNew<IssmDouble>(this->numlayers); xMemCpy<IssmDouble>(matlitho->burgers_viscosity, this->burgers_viscosity,this->numlayers);
117  matlitho->burgers_mu=xNew<IssmDouble>(this->numlayers); xMemCpy<IssmDouble>(matlitho->burgers_mu, this->burgers_mu,this->numlayers);
118  matlitho->density=xNew<IssmDouble>(this->numlayers); xMemCpy<IssmDouble>(matlitho->density, this->density,this->numlayers);
119  matlitho->isburgers=xNew<IssmDouble>(this->numlayers); xMemCpy<IssmDouble>(matlitho->isburgers, this->isburgers,this->numlayers);
120  matlitho->issolid=xNew<IssmDouble>(this->numlayers); xMemCpy<IssmDouble>(matlitho->issolid, this->issolid,this->numlayers);
121  /*matlitho->isburgers=xNew<bool>(this->numlayers); for(int i=0;i<this->numlayers;i++)matlitho->isburgers[i]=this->isburgers[i];
122  matlitho->issolid=xNew<bool>(this->numlayers); for(int i=0;i<this->numlayers;i++)matlitho->issolid[i]=this->issolid[i];*/
123  }
124 
125  return matlitho;
126 }
127 /*}}}*/
128 void Matlitho::DeepEcho(void){/*{{{*/
129 
130  this->Echo();
131 }
132 /*}}}*/
133 void Matlitho::Echo(void){/*{{{*/
134 
135  _printf_("Matlitho:\n");
136  _printf_(" mid: " << mid << "\n");
137  _printf_(" numlayers: " << numlayers << "\n");
138  _printf_("layer radius viscosity lame_lambda lame_mu burgers_viscosity burgers_mu density isburgers issolid\n");
139  for (int i=0;i<numlayers;i++){
140  _printf_(i << " " << radius[i] << " " << viscosity[i] << " " << lame_lambda[i] << " " << lame_mu[i] << " " << burgers_viscosity[i] << " " << burgers_mu[i] << " " << density[i] << " " << isburgers[i] << " " << issolid[i]);
141  }
142  return;
143 }
144 /*}}}*/
145 int Matlitho::Id(void){ return mid; }/*{{{*/
146 /*}}}*/
147 void Matlitho::Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction){ /*{{{*/
148 
150 
152  if(numlayers) {
162  }
163  else{
164  radius=NULL;
165  viscosity=NULL;
166  lame_lambda=NULL;
167  lame_mu=NULL;
168  burgers_viscosity=NULL;
169  burgers_mu=NULL;
170  density=NULL;
171  isburgers=NULL;
172  issolid=NULL;
173  }
174 
175 }
176 /*}}}*/
177 int Matlitho::ObjectEnum(void){/*{{{*/
178 
179  return MatlithoEnum;
180 
181 }
182 /*}}}*/
183 
184 /*Matlitho management: */
185 void Matlitho::Configure(Elements* elementsin){/*{{{*/
186  /*don't do anything, we don't have a hook to an element! As there is only
187  * one Matlitho object!*/
188 }
189 /*}}}*/
190 void Matlitho::ResetHooks(){/*{{{*/
191  /*don't do anything, we don't have a hook to an element! As there is only
192  * one Matlitho object!*/
193  return;
194 }
195 /*}}}*/
Matlitho::viscosity
IssmDouble * viscosity
Definition: Matlitho.h:20
Matlitho::Matlitho
Matlitho()
Definition: Matlitho.cpp:15
Matlitho::Echo
void Echo()
Definition: Matlitho.cpp:133
IssmDouble
double IssmDouble
Definition: types.h:37
_printf_
#define _printf_(StreamArgs)
Definition: Print.h:22
MARSHALLING_ENUM
#define MARSHALLING_ENUM(EN)
Definition: Marshalling.h:14
Elements
Declaration of Elements class.
Definition: Elements.h:17
Matlitho::issolid
IssmDouble * issolid
Definition: Matlitho.h:27
Matlitho::numlayers
int numlayers
Definition: Matlitho.h:18
Matlitho::Marshall
void Marshall(char **pmarshalled_data, int *pmarshalled_data_size, int marshall_direction)
Definition: Matlitho.cpp:147
MARSHALLING_DYNAMIC
#define MARSHALLING_DYNAMIC(FIELD, TYPE, SIZE)
Definition: Marshalling.h:61
Object
Definition: Object.h:13
Matlitho::DeepEcho
void DeepEcho()
Definition: Matlitho.cpp:128
Matlitho::SetMid
void SetMid(int matlitho_mid)
Definition: Matlitho.cpp:94
Matlitho::copy
Object * copy()
Definition: Matlitho.cpp:100
IoModel::FindConstant
void FindConstant(bool *pvalue, const char *constant_name)
Definition: IoModel.cpp:2362
Matlitho::ObjectEnum
int ObjectEnum()
Definition: Matlitho.cpp:177
MARSHALLING
#define MARSHALLING(FIELD)
Definition: Marshalling.h:29
Matlitho::lame_lambda
IssmDouble * lame_lambda
Definition: Matlitho.h:21
Matlitho::density
IssmDouble * density
Definition: Matlitho.h:25
Matlitho::isburgers
IssmDouble * isburgers
Definition: Matlitho.h:26
MatlithoEnum
@ MatlithoEnum
Definition: EnumDefinitions.h:1170
IoModel::Data
IssmDouble * Data(const char *data_name)
Definition: IoModel.cpp:437
Matlitho::Configure
void Configure(Elements *elements)
Definition: Matlitho.cpp:185
Matlitho
Definition: Matlitho.h:14
Matlitho::burgers_viscosity
IssmDouble * burgers_viscosity
Definition: Matlitho.h:23
Matlitho::radius
IssmDouble * radius
Definition: Matlitho.h:19
Matlitho::lame_mu
IssmDouble * lame_mu
Definition: Matlitho.h:22
IoModel
Definition: IoModel.h:48
Matlitho::~Matlitho
~Matlitho()
Definition: Matlitho.cpp:79
Matlitho::Id
int Id()
Definition: Matlitho.cpp:145
Matlitho::burgers_mu
IssmDouble * burgers_mu
Definition: Matlitho.h:24
Matlitho::mid
int mid
Definition: Matlitho.h:17
Matlitho::ResetHooks
void ResetHooks()
Definition: Matlitho.cpp:190