Ice Sheet System Model  4.18
Code documentation
Public Member Functions | Data Fields
IssmSeqVec< doubletype > Class Template Reference

#include <IssmSeqVec.h>

Public Member Functions

 IssmSeqVec ()
 
 IssmSeqVec (int pM)
 
 IssmSeqVec (int pm, int pM)
 
 IssmSeqVec (int pM, bool fromlocalsize)
 
 IssmSeqVec (doubletype *buffer, int pM)
 
 ~IssmSeqVec ()
 
void Echo (void)
 
void Assemble (void)
 
void SetValues (int ssize, int *list, doubletype *values, InsMode mode)
 
void SetValue (int dof, doubletype value, InsMode mode)
 
void GetValue (doubletype *pvalue, int dof)
 
void GetSize (int *pM)
 
void GetLocalSize (int *pM)
 
void GetLocalVector (doubletype **pvector, int **pindices)
 
IssmSeqVec< doubletype > * Duplicate (void)
 
void Set (doubletype value)
 
void AXPY (IssmAbsVec< doubletype > *Xin, doubletype a)
 
void AYPX (IssmAbsVec< doubletype > *Xin, doubletype a)
 
doubletype * ToMPISerial (void)
 
doubletype * ToMPISerial0 (void)
 
void Shift (doubletype shift)
 
void Copy (IssmAbsVec< doubletype > *toin)
 
doubletype Norm (NormMode mode)
 
void Scale (doubletype scale_factor)
 
doubletype Dot (IssmAbsVec< doubletype > *inputin)
 
void PointwiseDivide (IssmAbsVec< doubletype > *xin, IssmAbsVec< doubletype > *yin)
 

Data Fields

doubletype * vector
 
int M
 

Detailed Description

template<class doubletype>
class IssmSeqVec< doubletype >

Definition at line 31 of file IssmSeqVec.h.

Constructor & Destructor Documentation

◆ IssmSeqVec() [1/5]

template<class doubletype >
IssmSeqVec< doubletype >::IssmSeqVec ( )
inline

Definition at line 39 of file IssmSeqVec.h.

39  {/*{{{*/
40 
41  this->M=0;
42  this->vector=NULL;
43  }

◆ IssmSeqVec() [2/5]

template<class doubletype >
IssmSeqVec< doubletype >::IssmSeqVec ( int  pM)
inline

Definition at line 45 of file IssmSeqVec.h.

45  {/*{{{*/
46 
47  this->M=pM;
48  this->vector=NULL;
49  if(this->M) this->vector=xNewZeroInit<doubletype>(pM);
50  }

◆ IssmSeqVec() [3/5]

template<class doubletype >
IssmSeqVec< doubletype >::IssmSeqVec ( int  pm,
int  pM 
)
inline

Definition at line 52 of file IssmSeqVec.h.

52  {/*{{{*/
53 
54  this->M=pM;
55  this->vector=NULL;
56  if(this->M) this->vector=xNewZeroInit<doubletype>(pM);
57  }

◆ IssmSeqVec() [4/5]

template<class doubletype >
IssmSeqVec< doubletype >::IssmSeqVec ( int  pM,
bool  fromlocalsize 
)
inline

Definition at line 59 of file IssmSeqVec.h.

59  {/*{{{*/
60 
61  this->M=pM;
62  this->vector=NULL;
63  if(this->M) this->vector=xNewZeroInit<doubletype>(pM);
64  }

◆ IssmSeqVec() [5/5]

template<class doubletype >
IssmSeqVec< doubletype >::IssmSeqVec ( doubletype *  buffer,
int  pM 
)
inline

Definition at line 66 of file IssmSeqVec.h.

66  {/*{{{*/
67 
68  this->M=pM;
69  this->vector=NULL;
70  if(this->M){
71  this->vector=xNew<doubletype>(pM);
72  xMemCpy<doubletype>(this->vector,buffer,pM);
73  }
74  }

◆ ~IssmSeqVec()

template<class doubletype >
IssmSeqVec< doubletype >::~IssmSeqVec ( )
inline

Definition at line 76 of file IssmSeqVec.h.

76  {/*{{{*/
77  if(this->M)xDelete<doubletype>(this->vector);
78  M=0;
79  }

Member Function Documentation

◆ Echo()

template<class doubletype >
void IssmSeqVec< doubletype >::Echo ( void  )
inline

Definition at line 83 of file IssmSeqVec.h.

83  {/*{{{*/
84 
85  int i;
86  _printf_("IssmSeqVec size " << this->M << "\n");
87  for(i=0;i<M;i++){
88  _printf_(vector[i] << "\n ");
89  }
90  }

◆ Assemble()

template<class doubletype >
void IssmSeqVec< doubletype >::Assemble ( void  )
inline

Definition at line 92 of file IssmSeqVec.h.

92  {/*{{{*/
93 
94  /*do nothing*/
95 
96  }

◆ SetValues()

template<class doubletype >
void IssmSeqVec< doubletype >::SetValues ( int  ssize,
int *  list,
doubletype *  values,
InsMode  mode 
)
inline

Definition at line 98 of file IssmSeqVec.h.

98  {/*{{{*/
99 
100  int i;
101  switch(mode){
102  case ADD_VAL:
103  for(i=0;i<ssize;i++) this->vector[list[i]]+=values[i];
104  break;
105  case INS_VAL:
106  for(i=0;i<ssize;i++) this->vector[list[i]]=values[i];
107  break;
108  default:
109  _error_("unknown insert mode!");
110  break;
111  }
112 
113  }

◆ SetValue()

template<class doubletype >
void IssmSeqVec< doubletype >::SetValue ( int  dof,
doubletype  value,
InsMode  mode 
)
inline

Definition at line 115 of file IssmSeqVec.h.

115  {/*{{{*/
116 
117  switch(mode){
118  case ADD_VAL:
119  this->vector[dof]+=value;
120  break;
121  case INS_VAL:
122  this->vector[dof]=value;
123  break;
124  default:
125  _error_("unknown insert mode!");
126  break;
127  }
128  }

◆ GetValue()

template<class doubletype >
void IssmSeqVec< doubletype >::GetValue ( doubletype *  pvalue,
int  dof 
)
inline

Definition at line 130 of file IssmSeqVec.h.

130  {/*{{{*/
131 
132  *pvalue=this->vector[dof];
133 
134  }

◆ GetSize()

template<class doubletype >
void IssmSeqVec< doubletype >::GetSize ( int *  pM)
inline

Definition at line 136 of file IssmSeqVec.h.

136  {/*{{{*/
137 
138  *pM=this->M;
139 
140  }

◆ GetLocalSize()

template<class doubletype >
void IssmSeqVec< doubletype >::GetLocalSize ( int *  pM)
inline

Definition at line 142 of file IssmSeqVec.h.

142  {/*{{{*/
143  *pM=this->M;
144  }/*}}}*/

◆ GetLocalVector()

template<class doubletype >
void IssmSeqVec< doubletype >::GetLocalVector ( doubletype **  pvector,
int **  pindices 
)
inline

Definition at line 145 of file IssmSeqVec.h.

145  {/*{{{*/
146 
147  /*First, check that vector size is not 0*/
148  int vector_size;
149  this->GetSize(&vector_size);
150  if(vector_size==0){
151  *pvector=NULL;
152  *pindices=NULL;
153  return;
154  }
155 
156  /*Build indices*/
157  int* indices=xNew<int>(vector_size);
158  for(int i=0;i<vector_size;i++) indices[i]=i;
159 
160  /*Get vector*/
161  doubletype* values =xNew<doubletype>(vector_size);
162  xMemCpy<doubletype>(values,this->vector,vector_size);
163 
164  *pvector = values;
165  *pindices = indices;
166  } /*}}}*/

◆ Duplicate()

template<class doubletype >
IssmSeqVec<doubletype>* IssmSeqVec< doubletype >::Duplicate ( void  )
inline

Definition at line 167 of file IssmSeqVec.h.

167  {/*{{{*/
168 
169  return new IssmSeqVec<doubletype>(this->vector,this->M);
170 
171  }

◆ Set()

template<class doubletype >
void IssmSeqVec< doubletype >::Set ( doubletype  value)
inline

Definition at line 173 of file IssmSeqVec.h.

173  {/*{{{*/
174 
175  for(int i=0;i<this->M;i++)this->vector[i]=value;
176 
177  }

◆ AXPY()

template<class doubletype >
void IssmSeqVec< doubletype >::AXPY ( IssmAbsVec< doubletype > *  Xin,
doubletype  a 
)
inline

Definition at line 179 of file IssmSeqVec.h.

179  {/*{{{*/
180 
181  int i;
182 
183  /*Assume X is of the correct type, and downcast: */
184  IssmSeqVec* X=NULL;
185 
186  X=(IssmSeqVec<doubletype>*)Xin;
187 
188  /*y=a*x+y where this->vector is y*/
189  for(i=0;i<this->M;i++)this->vector[i]=a*X->vector[i]+this->vector[i];
190 
191  }

◆ AYPX()

template<class doubletype >
void IssmSeqVec< doubletype >::AYPX ( IssmAbsVec< doubletype > *  Xin,
doubletype  a 
)
inline

Definition at line 193 of file IssmSeqVec.h.

193  {/*{{{*/
194 
195  int i;
196 
197  /*Assume X is of the correct type, and downcast: */
198  IssmSeqVec* X=NULL;
199 
200  X=(IssmSeqVec<doubletype>*)Xin;
201 
202  /*y=x+a*y where this->vector is y*/
203  for(i=0;i<this->M;i++)this->vector[i]=X->vector[i]+a*this->vector[i];
204 
205  }

◆ ToMPISerial()

template<class doubletype >
doubletype* IssmSeqVec< doubletype >::ToMPISerial ( void  )
inline

Definition at line 207 of file IssmSeqVec.h.

207  {/*{{{*/
208 
209  doubletype* buffer=NULL;
210 
211  if(this->M){
212  buffer=xNew<doubletype>(this->M);
213  xMemCpy<doubletype>(buffer,this->vector,this->M);
214  }
215  return buffer;
216 
217  }

◆ ToMPISerial0()

template<class doubletype >
doubletype* IssmSeqVec< doubletype >::ToMPISerial0 ( void  )
inline

Definition at line 219 of file IssmSeqVec.h.

219  {/*{{{*/
220 
221  return this->ToMPISerial();
222 
223  }

◆ Shift()

template<class doubletype >
void IssmSeqVec< doubletype >::Shift ( doubletype  shift)
inline

Definition at line 225 of file IssmSeqVec.h.

225  {/*{{{*/
226 
227  for(int i=0;i<this->M;i++)this->vector[i]+=shift;
228 
229  }

◆ Copy()

template<class doubletype >
void IssmSeqVec< doubletype >::Copy ( IssmAbsVec< doubletype > *  toin)
inline

Definition at line 231 of file IssmSeqVec.h.

231  {/*{{{*/
232 
233  int i;
234 
235  /*Assume toin is of the correct type, and downcast: */
236  IssmSeqVec* to=NULL;
237 
238  to=(IssmSeqVec<doubletype>*)toin;
239 
240  to->M=this->M;
241  for(i=0;i<this->M;i++)to->vector[i]=this->vector[i];
242 
243  }

◆ Norm()

template<class doubletype >
doubletype IssmSeqVec< doubletype >::Norm ( NormMode  mode)
inline

Definition at line 245 of file IssmSeqVec.h.

245  {/*{{{*/
246 
247  doubletype norm;
248  int i;
249 
250  switch(mode){
251  case NORM_INF:
252  norm=0.; for(i=0;i<this->M;i++)norm=max(norm,fabs(this->vector[i]));
253  //norm=0.; for(i=0;i<this->M;i++)norm=max(norm,this->vector[i]);
254  return norm;
255  break;
256  case NORM_TWO:
257  norm=0.;
258  for(i=0;i<this->M;i++)norm+=this->vector[i]*this->vector[i];
259  return sqrt(norm);
260  break;
261  default:
262  _error_("unknown norm !");
263  break;
264  }
265  }

◆ Scale()

template<class doubletype >
void IssmSeqVec< doubletype >::Scale ( doubletype  scale_factor)
inline

Definition at line 267 of file IssmSeqVec.h.

267  {/*{{{*/
268 
269  int i;
270  for(i=0;i<this->M;i++)this->vector[i]=scale_factor*this->vector[i];
271 
272  }

◆ Dot()

template<class doubletype >
doubletype IssmSeqVec< doubletype >::Dot ( IssmAbsVec< doubletype > *  inputin)
inline

Definition at line 274 of file IssmSeqVec.h.

274  {/*{{{*/
275 
276  int i;
277 
278  /*Assume inputin is of the correct type, and downcast: */
279  IssmSeqVec* input=NULL;
280 
281  input=(IssmSeqVec<doubletype>*)inputin;
282 
283  doubletype dot=0;
284  for(i=0;i<this->M;i++)dot+=this->vector[i]*input->vector[i];
285  return dot;
286 
287  }

◆ PointwiseDivide()

template<class doubletype >
void IssmSeqVec< doubletype >::PointwiseDivide ( IssmAbsVec< doubletype > *  xin,
IssmAbsVec< doubletype > *  yin 
)
inline

Definition at line 289 of file IssmSeqVec.h.

289  {/*{{{*/
290 
291  int i;
292 
293  /*Assume xin and yin are of the correct type, and downcast: */
294  IssmSeqVec* x=NULL;
295  IssmSeqVec* y=NULL;
296 
297  x=(IssmSeqVec<doubletype>*)xin;
298  y=(IssmSeqVec<doubletype>*)yin;
299 
300  /*pointwise w=x/y where this->vector is w: */
301  for(i=0;i<this->M;i++)this->vector[i]=x->vector[i]/y->vector[i];
302  }

Field Documentation

◆ vector

template<class doubletype >
doubletype* IssmSeqVec< doubletype >::vector

Definition at line 35 of file IssmSeqVec.h.

◆ M

template<class doubletype >
int IssmSeqVec< doubletype >::M

Definition at line 36 of file IssmSeqVec.h.


The documentation for this class was generated from the following files:
IssmSeqVec::ToMPISerial
doubletype * ToMPISerial(void)
Definition: IssmSeqVec.h:207
_printf_
#define _printf_(StreamArgs)
Definition: Print.h:22
ADD_VAL
@ ADD_VAL
Definition: toolkitsenums.h:14
NORM_INF
@ NORM_INF
Definition: toolkitsenums.h:15
IssmSeqVec
Definition: IssmSeqVec.h:31
IssmSeqVec::vector
doubletype * vector
Definition: IssmSeqVec.h:35
NORM_TWO
@ NORM_TWO
Definition: toolkitsenums.h:15
INS_VAL
@ INS_VAL
Definition: toolkitsenums.h:14
IssmSeqVec::M
int M
Definition: IssmSeqVec.h:36
IssmSeqVec::GetSize
void GetSize(int *pM)
Definition: IssmSeqVec.h:136
_error_
#define _error_(StreamArgs)
Definition: exceptions.h:49
max
IssmDouble max(IssmDouble a, IssmDouble b)
Definition: extrema.cpp:24