Ice Sheet System Model  4.18
Code documentation
Matestar.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 "./Matestar.h"
12 #include "./Materials.h"
13 #include "../Elements/Element.h"
14 #include "../Elements/Tria.h"
15 #include "../Elements/Penta.h"
16 #include "../Params/Parameters.h"
17 #include "../Vertex.h"
18 #include "../Hook.h"
19 #include "../Node.h"
20 #include "../IoModel.h"
21 #include "../../shared/shared.h"
22 
23 /*Matestar constructors and destructor*/
25  this->helement=NULL;
26  this->element=NULL;
27  return;
28 }
29 /*}}}*/
30 Matestar::Matestar(int matestar_mid,int index, IoModel* iomodel){/*{{{*/
31 
32  /*Intermediaries:*/
33  int matestar_eid;
34 
35  /*Initialize id*/
36  this->mid=matestar_mid;
37 
38  /*Hooks: */
39  matestar_eid=index+1;
40  this->helement=new Hook(&matestar_eid,1);
41  this->element=NULL;
42 
43  return;
44 }
45 /*}}}*/
47  delete helement;
48  return;
49 }
50 /*}}}*/
51 
52 /*Object virtual functions definitions:*/
54 
55  /*Output*/
56  Matestar* matestar=NULL;
57 
58  /*Initialize output*/
59  matestar=new Matestar();
60 
61  /*copy fields: */
62  matestar->mid=this->mid;
63  matestar->helement=(Hook*)this->helement->copy();
64  matestar->element =(Element*)this->helement->delivers();
65 
66  return matestar;
67 }
68 /*}}}*/
69 Material* Matestar::copy2(Element* element_in) {/*{{{*/
70 
71  /*Output*/
72  Matestar* matestar=NULL;
73 
74  /*Initialize output*/
75  matestar=new Matestar();
76 
77  /*copy fields: */
78  matestar->mid=this->mid;
79  matestar->helement=(Hook*)this->helement->copy();
80  matestar->element =element_in;
81 
82  return matestar;
83 }
84 /*}}}*/
85 void Matestar::DeepEcho(void){/*{{{*/
86 
87  _printf_("Matestar:\n");
88  _printf_(" mid: " << mid << "\n");
89  _printf_(" element:\n");
90  helement->Echo();
91 }
92 /*}}}*/
93 void Matestar::Echo(void){/*{{{*/
94 
95  _printf_("Matestar:\n");
96  _printf_(" mid: " << mid << "\n");
97  _printf_(" element:\n");
98  helement->Echo();
99 }
100 /*}}}*/
101 int Matestar::Id(void){ return mid; }/*{{{*/
102 /*}}}*/
103 void Matestar::Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction){ /*{{{*/
104 
105  if(marshall_direction==MARSHALLING_BACKWARD)helement=new Hook();
106 
108  MARSHALLING(mid);
109  this->helement->Marshall(pmarshalled_data,pmarshalled_data_size,marshall_direction);
110  this->element=(Element*)this->helement->delivers();
111 
112 }
113 /*}}}*/
114 int Matestar::ObjectEnum(void){/*{{{*/
115 
116  return MatestarEnum;
117 
118 }
119 /*}}}*/
120 
121 /*Matestar management*/
122 void Matestar::Configure(Elements* elementsin){/*{{{*/
123 
124  /*Take care of hooking up all objects for this element, ie links the objects in the hooks to their respective
125  * datasets, using internal ids and offsets hidden in hooks: */
126  helement->configure((DataSet*)elementsin);
127  this->element = (Element*)helement->delivers();
128 }
129 /*}}}*/
131  /*
132  * A = 1/B^n
133  */
134 
135  IssmDouble B=this->GetB(gauss);
136  IssmDouble n=this->GetN();
137 
138  return pow(B,-n);
139 }
140 /*}}}*/
142  /*
143  * A = 1/B^n
144  */
145 
146  IssmDouble B=this->GetBbar(gauss);
147  IssmDouble n=this->GetN();
148 
149  return pow(B,-n);
150 }
151 /*}}}*/
153 
154  /*Output*/
155  IssmDouble B;
156 
157  Input2* B_input = element->GetInput2(MaterialsRheologyBEnum); _assert_(B_input);
158  B_input->GetInputValue(&B,gauss);
159  return B;
160 }
161 /*}}}*/
163 
164  /*Output*/
165  IssmDouble Bbar;
166 
168  B_input->GetInputValue(&Bbar,gauss);
169  return Bbar;
170 }
171 /*}}}*/
173  _error_("not implemented yet");
174 }
175 /*}}}*/
177 
178  _error_("not implemented yet");
179 }
180 /*}}}*/
182 
183  /*Output*/
184  IssmDouble Ec;
185 
186  Input2* Ec_input = element->GetInput2(MaterialsRheologyEcEnum); _assert_(Ec_input);
187  Ec_input->GetInputValue(&Ec,gauss);
188  return Ec;
189 }
190 /*}}}*/
192 
193  /*Output*/
194  IssmDouble Ecbar;
195 
196  Input2* Ecbar_input = element->GetInput2(MaterialsRheologyEcbarEnum); _assert_(Ecbar_input);
197  Ecbar_input->GetInputValue(&Ecbar,gauss);
198  return Ecbar;
199 }
200 /*}}}*/
202 
203  /*Output*/
204  IssmDouble Es;
205 
206  Input2* Es_input = element->GetInput2(MaterialsRheologyEsEnum); _assert_(Es_input);
207  Es_input->GetInputValue(&Es,gauss);
208  return Es;
209 }
210 /*}}}*/
212 
213  /*Output*/
214  IssmDouble Esbar;
215 
216  Input2* Esbar_input = element->GetInput2(MaterialsRheologyEsbarEnum); _assert_(Esbar_input);
217  Esbar_input->GetInputValue(&Esbar,gauss);
218  return Esbar;
219 }
220 /*}}}*/
222 
223  /*Output*/
224  IssmDouble n=3.0;
225  return n;
226 }
227 /*}}}*/
228 void Matestar::GetViscosity(IssmDouble* pviscosity,IssmDouble eps_eff,Gauss* gauss){/*{{{*/
229  _error_("not implemented yet");
230 }
231 /*}}}*/
232 void Matestar::GetViscosityBar(IssmDouble* pviscosity,IssmDouble eps_eff,Gauss* gauss){/*{{{*/
233  _error_("not implemented yet");
234 }
235 /*}}}*/
236 void Matestar::GetViscosityComplement(IssmDouble* pviscosity_complement, IssmDouble* epsilon,Gauss* gauss){/*{{{*/
237  _error_("not implemented yet");
238 }
239 /*}}}*/
240 void Matestar::GetViscosityDComplement(IssmDouble* pviscosity_complement, IssmDouble* epsilon,Gauss* gauss){/*{{{*/
241  _error_("not implemented yet");
242 }
243 /*}}}*/
244 void Matestar::GetViscosityDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* epsilon,Gauss* gauss){/*{{{*/
245  _error_("not implemented yet");
246 }
247 /*}}}*/
248 IssmDouble Matestar::GetViscosityGeneral(IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz,IssmDouble eps_eff,bool isdepthaveraged,Gauss* gauss){/*{{{*/
249 
250  /*output: */
251  IssmDouble viscosity;
252 
253  /*Intermediaries*/
254  IssmDouble epsprime_norm;
255  IssmDouble lambdas;
256  IssmDouble vmag,dvmag[3];
257  IssmDouble B,Ec,Es,E,n;
258 
259  /*Calculate velocity magnitude and its derivative*/
260  vmag = sqrt(vx*vx+vy*vy+vz*vz);
261  if(vmag<1e-12){
262  dvmag[0]=0;
263  dvmag[1]=0;
264  dvmag[2]=0;
265  }
266  else{
267  dvmag[0]=1./(2*sqrt(vmag))*(2*vx*dvx[0]+2*vy*dvy[0]+2*vz*dvz[0]);
268  dvmag[1]=1./(2*sqrt(vmag))*(2*vx*dvx[1]+2*vy*dvy[1]+2*vz*dvz[1]);
269  dvmag[2]=1./(2*sqrt(vmag))*(2*vx*dvx[2]+2*vy*dvy[2]+2*vz*dvz[2]);
270  }
271 
272  EstarStrainrateQuantities(&epsprime_norm,vx,vy,vz,vmag,dvx,dvy,dvz,&dvmag[0]);
273  lambdas=EstarLambdaS(eps_eff,epsprime_norm);
274 
275  /*Get B and enhancement*/
276  n=GetN(); _assert_(n>0.);
277  if (isdepthaveraged==0.){
278  B=GetB(gauss); _assert_(B>0.);
279  Ec=GetEc(gauss); _assert_(Ec>=0.); Es=GetEs(gauss); _assert_(Es>=0.);
280  }
281  else{
282  B=GetBbar(gauss); _assert_(B>0.);
283  Ec=GetEcbar(gauss); _assert_(Ec>=0.);
284  Es=GetEsbar(gauss); _assert_(Es>=0.);
285  }
286 
287  /*Get total enhancement factor E(lambdas)*/
288  E = Ec + (Es-Ec)*lambdas*lambdas; _assert_(E>0.);
289 
290  /*Compute viscosity*/
291  /*if no strain rate, return maximum viscosity*/
292  if(eps_eff==0.){
293  viscosity = 1.e+14/2.;
294  //viscosity = B;
295  //viscosity=2.5*pow(10.,17);
296  }
297  else{
298  viscosity = B/(2.*pow(E,1./n)*pow(eps_eff,2./n));
299  }
300 
301  /*Checks in debugging mode*/
302  if(viscosity<=0) _error_("Negative viscosity");
303 
304  /*Assign output pointer*/
305  return viscosity;
306 }
307 /*}}}*/
308 IssmDouble Matestar::GetViscosity_BGeneral(IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz,IssmDouble eps_eff,bool isdepthaveraged,Gauss* gauss){/*{{{*/
309 
310  /*Intermediaries*/
311  IssmDouble dmudB;
312  IssmDouble epsprime_norm;
313  IssmDouble lambdas;
314  IssmDouble vmag,dvmag[3];
315  IssmDouble Ec,Es,E;
316 
317  /*Calculate velocity magnitude and its derivative*/
318  vmag = sqrt(vx*vx+vy*vy+vz*vz);
319  if(vmag<1e-12){
320  dvmag[0]=0;
321  dvmag[1]=0;
322  dvmag[2]=0;
323  }
324  else{
325  dvmag[0]=1./(2*sqrt(vmag))*(2*vx*dvx[0]+2*vy*dvy[0]+2*vz*dvz[0]);
326  dvmag[1]=1./(2*sqrt(vmag))*(2*vx*dvx[1]+2*vy*dvy[1]+2*vz*dvz[1]);
327  dvmag[2]=1./(2*sqrt(vmag))*(2*vx*dvx[2]+2*vy*dvy[2]+2*vz*dvz[2]);
328  }
329 
330  EstarStrainrateQuantities(&epsprime_norm,vx,vy,vz,vmag,dvx,dvy,dvz,&dvmag[0]);
331  lambdas=EstarLambdaS(eps_eff,epsprime_norm);
332 
333  /*Get enhancement*/
334  if (isdepthaveraged==0.){
335  Ec=GetEc(gauss); _assert_(Ec>=0.);
336  Es=GetEs(gauss); _assert_(Es>=0.);
337  }
338  else{
339  Ec=GetEcbar(gauss); _assert_(Ec>=0.);
340  Es=GetEsbar(gauss); _assert_(Es>=0.);
341  }
342 
343  /*Get total enhancement factor E(lambdas)*/
344  E = Ec + (Es-Ec)*lambdas*lambdas; _assert_(E>0.);
345 
346  /*Compute dmudB*/
347  if(eps_eff==0.) dmudB = 0.;
348  else dmudB = 1./(2.*pow(E,1./3.)*pow(eps_eff,2./3.));
349 
350  /*Assign output*/
351  return dmudB;
352 
353 }
354 /*}}}*/
355 void Matestar::GetViscosity_B(IssmDouble* pdmudB,IssmDouble eps_eff,Gauss* gauss){/*{{{*/
356  _error_("not implemented yet");
357 }
358 /*}}}*/
359 void Matestar::GetViscosity_D(IssmDouble* pdmudD,IssmDouble eps_eff,Gauss* gauss){/*{{{*/
360  _error_("not implemented yet");
361 }
362 /*}}}*/
364  _error_("not implemented yet");
365 }
366 /*}}}*/
367 bool Matestar::IsDamage(){/*{{{*/
368 
369  _error_("not implemented yet");
370 }
371 /*}}}*/
372 void Matestar::ResetHooks(){/*{{{*/
373 
374  this->element=NULL;
375 
376  /*Get Element type*/
377  this->helement->reset();
378 
379 }
380 /*}}}*/
381 void Matestar::SetCurrentConfiguration(Elements* elementsin,Loads* loadsin,Nodes* nodesin,Vertices* verticesin,Materials* materialsin,Parameters* parametersin){/*{{{*/
382 
383 }
384 /*}}}*/
385 void Matestar::ViscosityFSDerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon,Gauss* gauss){/*{{{*/
386  this->GetViscosityDerivativeEpsSquare(pmu_prime,epsilon,gauss);
387 }/*}}}*/
388 void Matestar::ViscosityHODerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon,Gauss* gauss){/*{{{*/
389  _error_("not implemented yet");
390 }/*}}}*/
392  _error_("not implemented yet");
393 }/*}}}*/
394 
395 void Matestar::ViscosityBFS(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* vz_input,IssmDouble eps_eff){/*{{{*/
396 
397  /*Intermediaries*/
398  IssmDouble vx,vy,vz;
399  IssmDouble dvx[3],dvy[3],dvz[3];
400  bool isdepthaveraged=0.;
401 
402  /*Get velocity derivatives in all directions*/
403  _assert_(dim>1);
404  _assert_(vx_input);
405  vx_input->GetInputValue(&vx,gauss);
406  vx_input->GetInputDerivativeValue(&dvx[0],xyz_list,gauss);
407  _assert_(vy_input);
408  vy_input->GetInputValue(&vy,gauss);
409  vy_input->GetInputDerivativeValue(&dvy[0],xyz_list,gauss);
410  if(dim==3){
411  _assert_(vz_input);
412  vz_input->GetInputValue(&vz,gauss);
413  vz_input->GetInputDerivativeValue(&dvz[0],xyz_list,gauss);
414  }
415  else{
416  vz = 0.;
417  dvz[0] = 0.; dvz[1] = 0.; dvz[2] = 0.;
418  }
419 
420  /*Compute dmudB*/
421  *pdmudB=GetViscosity_BGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],eps_eff,isdepthaveraged,gauss);
422 }
423 /*}}}*/
424 void Matestar::ViscosityBHO(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,IssmDouble eps_eff){/*{{{*/
425 
426  /*Intermediaries*/
427  IssmDouble vx,vy,vz;
428  IssmDouble dvx[3],dvy[3],dvz[3];
429  bool isdepthaveraged=0.;
430 
431  /*Get velocity derivatives in all directions*/
432  _assert_(dim==2 || dim==3);
433  _assert_(vx_input);
434  vx_input->GetInputValue(&vx,gauss);
435  vx_input->GetInputDerivativeValue(&dvx[0],xyz_list,gauss);
436  if(dim==3){
437  _assert_(vy_input);
438  vy_input->GetInputValue(&vy,gauss);
439  vy_input->GetInputDerivativeValue(&dvy[0],xyz_list,gauss);
440  }
441  else{
442  dvx[2] = 0.;
443  vy = 0.;
444  dvy[0] = 0.; dvy[1] = 0.; dvy[2] = 0.;
445  }
446  vz = 0.;
447  dvz[0] = 0.; dvz[1] = 0.; dvz[2] = -dvx[0]-dvy[1];
448 
449  /*Compute viscosity*/
450  *pdmudB=GetViscosity_BGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],eps_eff,isdepthaveraged,gauss);
451 }/*}}}*/
452 void Matestar::ViscosityBSSA(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,IssmDouble eps_eff){/*{{{*/
453  /*Intermediaries*/
454  IssmDouble vx,vy,vz;
455  IssmDouble dvx[3],dvy[3],dvz[3];
456  bool isdepthaveraged=1.;
457 
458  /*Get velocity derivatives in all directions*/
459  _assert_(dim==1 || dim==2);
460  _assert_(vx_input);
461  vx_input->GetInputValue(&vx,gauss);
462  vx_input->GetInputDerivativeValue(&dvx[0],xyz_list,gauss);
463  if(dim==2){
464  _assert_(vy_input);
465  vy_input->GetInputValue(&vy,gauss);
466  vy_input->GetInputDerivativeValue(&dvy[0],xyz_list,gauss);
467  }
468  else{
469  dvx[1] = 0.;
470  dvx[2] = 0.;
471  vy = 0.;
472  dvy[0] = 0.; dvy[1] = 0.; dvy[2] = 0.;
473  }
474  dvx[2] = 0.;
475  dvy[2] = 0.;
476  vz = 0.;
477  dvz[0] = 0.; dvz[1] = 0.; dvz[2] = -dvx[0]-dvy[1];
478 
479  /*Compute viscosity*/
480  *pdmudB=GetViscosity_BGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],eps_eff,isdepthaveraged,gauss);
481 }/*}}}*/
482 void Matestar::ViscosityFS(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* vz_input){/*{{{*/
483 
484  /*Intermediaries*/
485  IssmDouble vx,vy,vz;
486  IssmDouble dvx[3],dvy[3],dvz[3];
487  IssmDouble epsilon3d[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
488  IssmDouble epsilon2d[3]; /* epsilon=[exx,eyy,exy];*/
489  IssmDouble eps_eff,eps0=1.e-27;
490  bool isdepthaveraged=0.;
491 
492  /*Get velocity derivatives in all directions*/
493  _assert_(dim>1);
494  _assert_(vx_input);
495  vx_input->GetInputValue(&vx,gauss);
496  vx_input->GetInputDerivativeValue(&dvx[0],xyz_list,gauss);
497  _assert_(vy_input);
498  vy_input->GetInputValue(&vy,gauss);
499  vy_input->GetInputDerivativeValue(&dvy[0],xyz_list,gauss);
500  if(dim==3){
501  _assert_(vz_input);
502  vz_input->GetInputValue(&vz,gauss);
503  vz_input->GetInputDerivativeValue(&dvz[0],xyz_list,gauss);
504  }
505  else{
506  vz = 0.;
507  dvz[0] = 0.; dvz[1] = 0.; dvz[2] = 0.;
508  }
509 
510  if(dim==3){
511  /* eps_eff^2 = exx^2 + eyy^2 + exy^2 + exz^2 + eyz^2 + exx*eyy */
512  element->StrainRateFS(&epsilon3d[0],xyz_list,gauss,vx_input,vy_input,vz_input);
513  eps_eff = sqrt(epsilon3d[0]*epsilon3d[0] + epsilon3d[1]*epsilon3d[1] + epsilon3d[3]*epsilon3d[3] + epsilon3d[4]*epsilon3d[4] + epsilon3d[5]*epsilon3d[5] + epsilon3d[0]*epsilon3d[1]+eps0*eps0);
514  }
515  else{
516  /* eps_eff^2 = 1/2 ( exx^2 + eyy^2 + 2*exy^2 )*/
517  element->StrainRateSSA(&epsilon2d[0],xyz_list,gauss,vx_input,vy_input);
518  eps_eff = 1./sqrt(2.)*sqrt(epsilon2d[0]*epsilon2d[0] + epsilon2d[1]*epsilon2d[1] + 2.*epsilon2d[2]*epsilon2d[2]);
519  }
520 
521  /*Compute viscosity*/
522  *pviscosity=GetViscosityGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],eps_eff,isdepthaveraged,gauss);
523 }
524 /*}}}*/
525 void Matestar::ViscosityHO(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input){/*{{{*/
526 
527  /*Intermediaries*/
528  IssmDouble vx,vy,vz;
529  IssmDouble dvx[3],dvy[3],dvz[3];
530  IssmDouble epsilon3d[5]; /* epsilon=[exx,eyy,exy,exz,eyz];*/
531  IssmDouble epsilon2d[5]; /* epsilon=[exx,exy];*/
532  IssmDouble eps_eff;
533  bool isdepthaveraged=0.;
534 
535  if(dim==3){
536  /* eps_eff^2 = exx^2 + eyy^2 + exy^2 + exz^2 + eyz^2 + exx*eyy */
537  element->StrainRateHO(&epsilon3d[0],xyz_list,gauss,vx_input,vy_input);
538  eps_eff = sqrt(epsilon3d[0]*epsilon3d[0] + epsilon3d[1]*epsilon3d[1] + epsilon3d[2]*epsilon3d[2] + epsilon3d[3]*epsilon3d[3] + epsilon3d[4]*epsilon3d[4] + epsilon3d[0]*epsilon3d[1]);
539  }
540  else{
541  /* eps_eff^2 = 1/2 (2*exx^2 + 2*exy^2 ) (since eps_zz = - eps_xx)*/
542  element->StrainRateHO2dvertical(&epsilon2d[0],xyz_list,gauss,vx_input,vy_input);
543  eps_eff = 1./sqrt(2.)*sqrt(2*epsilon2d[0]*epsilon2d[0] + 2*epsilon2d[1]*epsilon2d[1]);
544  }
545 
546  /*Get velocity derivatives in all directions*/
547  _assert_(dim==2 || dim==3);
548  _assert_(vx_input);
549  vx_input->GetInputValue(&vx,gauss);
550  vx_input->GetInputDerivativeValue(&dvx[0],xyz_list,gauss);
551  if(dim==3){
552  _assert_(vy_input);
553  vy_input->GetInputValue(&vy,gauss);
554  vy_input->GetInputDerivativeValue(&dvy[0],xyz_list,gauss);
555  }
556  else{
557  dvx[2] = 0.;
558  vy = 0.;
559  dvy[0] = 0.; dvy[1] = 0.; dvy[2] = 0.;
560  }
561  vz = 0.;
562  dvz[0] = 0.; dvz[1] = 0.; dvz[2] = -dvx[0]-dvy[1];
563 
564  /*Compute viscosity*/
565  *pviscosity=GetViscosityGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],eps_eff,isdepthaveraged,gauss);
566 }/*}}}*/
567 void Matestar::ViscosityL1L2(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* surface_input){/*{{{*/
568  _error_("not implemented yet");
569 }/*}}}*/
570 void Matestar::ViscositySSA(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input){/*{{{*/
571 
572  /*Intermediaries*/
573  IssmDouble vx,vy,vz;
574  IssmDouble dvx[3],dvy[3],dvz[3];
575  IssmDouble epsilon2d[3];/* epsilon=[exx,eyy,exy]; */
576  IssmDouble epsilon1d; /* epsilon=[exx]; */
577  IssmDouble eps_eff;
578  bool isdepthaveraged=1.;
579 
580  /*Get velocity derivatives in all directions*/
581  _assert_(dim==1 || dim==2);
582  _assert_(vx_input);
583  vx_input->GetInputValue(&vx,gauss);
584  vx_input->GetInputDerivativeValue(&dvx[0],xyz_list,gauss);
585  if(dim==2){
586  _assert_(vy_input);
587  vy_input->GetInputValue(&vy,gauss);
588  vy_input->GetInputDerivativeValue(&dvy[0],xyz_list,gauss);
589  }
590  else{
591  dvx[1] = 0.;
592  dvx[2] = 0.;
593  vy = 0.;
594  dvy[0] = 0.; dvy[1] = 0.; dvy[2] = 0.;
595  }
596  dvx[2] = 0.;
597  dvy[2] = 0.;
598  vz = 0.;
599  dvz[0] = 0.; dvz[1] = 0.; dvz[2] = -dvx[0]-dvy[1];
600 
601  if(dim==2){
602  /* eps_eff^2 = exx^2 + eyy^2 + exy^2 + exx*eyy*/
603  element->StrainRateSSA(&epsilon2d[0],xyz_list,gauss,vx_input,vy_input);
604  eps_eff = sqrt(epsilon2d[0]*epsilon2d[0] + epsilon2d[1]*epsilon2d[1] + epsilon2d[2]*epsilon2d[2] + epsilon2d[0]*epsilon2d[1]);
605  }
606  else{
607  /* eps_eff^2 = exx^2*/
608  element->StrainRateSSA1d(&epsilon1d,xyz_list,gauss,vx_input);
609  eps_eff = fabs(epsilon1d);
610  }
611 
612  /*Compute viscosity*/
613  *pviscosity=GetViscosityGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],eps_eff,isdepthaveraged,gauss);
614 }/*}}}*/
Vertices
Declaration of Vertices class.
Definition: Vertices.h:15
Matestar::Configure
void Configure(Elements *elements)
Definition: Matestar.cpp:122
EstarLambdaS
IssmDouble EstarLambdaS(IssmDouble epseff, IssmDouble epsprime_norm)
Definition: EstarComponents.cpp:118
_assert_
#define _assert_(ignore)
Definition: exceptions.h:37
IssmDouble
double IssmDouble
Definition: types.h:37
Nodes
Declaration of Nodes class.
Definition: Nodes.h:19
MaterialsRheologyEsbarEnum
@ MaterialsRheologyEsbarEnum
Definition: EnumDefinitions.h:650
Matestar::Id
int Id()
Definition: Matestar.cpp:101
Matestar::ViscositySSADerivativeEpsSquare
void ViscositySSADerivativeEpsSquare(IssmDouble *pmu_prime, IssmDouble *epsilon, Gauss *gauss)
Definition: Matestar.cpp:391
Matestar::GetViscosityGeneral
IssmDouble GetViscosityGeneral(IssmDouble vx, IssmDouble vy, IssmDouble vz, IssmDouble *dvx, IssmDouble *dvy, IssmDouble *dvz, IssmDouble eps_eff, bool isdepthaveraged, Gauss *gauss)
Definition: Matestar.cpp:248
MaterialsRheologyEcEnum
@ MaterialsRheologyEcEnum
Definition: EnumDefinitions.h:647
_printf_
#define _printf_(StreamArgs)
Definition: Print.h:22
Matestar.h
: header file for matice object
Matestar::copy
Object * copy()
Definition: Matestar.cpp:53
Parameters
Declaration of Parameters class.
Definition: Parameters.h:18
Matestar::DeepEcho
void DeepEcho()
Definition: Matestar.cpp:85
MARSHALLING_ENUM
#define MARSHALLING_ENUM(EN)
Definition: Marshalling.h:14
Matestar::GetEcbar
IssmDouble GetEcbar(Gauss *gauss)
Definition: Matestar.cpp:191
Matestar::GetEc
IssmDouble GetEc(Gauss *gauss)
Definition: Matestar.cpp:181
EstarStrainrateQuantities
void EstarStrainrateQuantities(IssmDouble *pepsprime_norm, IssmDouble vx, IssmDouble vy, IssmDouble vz, IssmDouble vmag, IssmDouble *dvx, IssmDouble *dvy, IssmDouble *dvz, IssmDouble *dvmag)
Definition: EstarComponents.cpp:5
Element::StrainRateFS
void StrainRateFS(IssmDouble *epsilon, IssmDouble *xyz_list, Gauss *gauss, Input2 *vx_input, Input2 *vy_input, Input2 *vz_input)
Definition: Element.cpp:4055
Matestar::ViscosityBFS
void ViscosityBFS(IssmDouble *pmudB, int dim, IssmDouble *xyz_list, Gauss *gauss, Input2 *vx_input, Input2 *vy_input, Input2 *vz_input, IssmDouble eps_eff)
Definition: Matestar.cpp:395
Elements
Declaration of Elements class.
Definition: Elements.h:17
Matestar::ObjectEnum
int ObjectEnum()
Definition: Matestar.cpp:114
Matestar
Definition: Matestar.h:24
Material
Definition: Material.h:21
Matestar::Matestar
Matestar()
Definition: Matestar.cpp:24
Matestar::Echo
void Echo()
Definition: Matestar.cpp:93
Matestar::ViscosityBHO
void ViscosityBHO(IssmDouble *pmudB, int dim, IssmDouble *xyz_list, Gauss *gauss, Input2 *vx_input, Input2 *vy_input, IssmDouble eps_eff)
Definition: Matestar.cpp:424
Matestar::GetViscosity2dDerivativeEpsSquare
void GetViscosity2dDerivativeEpsSquare(IssmDouble *pmu_prime, IssmDouble *pepsilon, Gauss *gauss)
Definition: Matestar.cpp:363
Matestar::ViscositySSA
void ViscositySSA(IssmDouble *pviscosity, int dim, IssmDouble *xyz_list, Gauss *gauss, Input2 *vx_input, Input2 *vy_input)
Definition: Matestar.cpp:570
Matestar::GetViscosity
void GetViscosity(IssmDouble *pviscosity, IssmDouble eps_eff, Gauss *gauss)
Definition: Matestar.cpp:228
Hook::reset
void reset(void)
Definition: Hook.cpp:211
Matestar::~Matestar
~Matestar()
Definition: Matestar.cpp:46
Matestar::GetBbar
IssmDouble GetBbar(Gauss *gauss)
Definition: Matestar.cpp:162
Matestar::SetCurrentConfiguration
void SetCurrentConfiguration(Elements *elements, Loads *loads, Nodes *nodes, Vertices *vertices, Materials *materials, Parameters *parameters)
Definition: Matestar.cpp:381
Input2::GetInputDerivativeValue
virtual void GetInputDerivativeValue(IssmDouble *derivativevalues, IssmDouble *xyz_list, Gauss *gauss)
Definition: Input2.h:37
MaterialsRheologyBbarEnum
@ MaterialsRheologyBbarEnum
Definition: EnumDefinitions.h:644
Element::GetInput2
virtual Input2 * GetInput2(int inputenum)=0
Matestar::GetViscosity_B
void GetViscosity_B(IssmDouble *pviscosity, IssmDouble eps_eff, Gauss *gauss)
Definition: Matestar.cpp:355
Element
Definition: Element.h:41
Matestar::mid
int mid
Definition: Matestar.h:27
Matestar::copy2
Material * copy2(Element *element)
Definition: Matestar.cpp:69
Matestar::ViscosityFSDerivativeEpsSquare
void ViscosityFSDerivativeEpsSquare(IssmDouble *pmu_prime, IssmDouble *epsilon, Gauss *gauss)
Definition: Matestar.cpp:385
Object
Definition: Object.h:13
Hook::delivers
Object * delivers(void)
Definition: Hook.cpp:191
Matestar::GetB
IssmDouble GetB(Gauss *gauss)
Definition: Matestar.cpp:152
Materials
Declaration of Materials class.
Definition: Materials.h:16
Matestar::GetEs
IssmDouble GetEs(Gauss *gauss)
Definition: Matestar.cpp:201
MatestarEnum
@ MatestarEnum
Definition: EnumDefinitions.h:1168
Hook
Definition: Hook.h:16
Hook::configure
void configure(DataSet *dataset)
Definition: Hook.cpp:145
Matestar::GetViscosity_D
void GetViscosity_D(IssmDouble *pviscosity, IssmDouble eps_eff, Gauss *gauss)
Definition: Matestar.cpp:359
Matestar::GetViscosity_BGeneral
IssmDouble GetViscosity_BGeneral(IssmDouble vx, IssmDouble vy, IssmDouble vz, IssmDouble *dvx, IssmDouble *dvy, IssmDouble *dvz, IssmDouble eps_eff, bool isdepthaveraged, Gauss *gauss)
Definition: Matestar.cpp:308
Matestar::Marshall
void Marshall(char **pmarshalled_data, int *pmarshalled_data_size, int marshall_direction)
Definition: Matestar.cpp:103
Matestar::GetViscosityBar
void GetViscosityBar(IssmDouble *pviscosity, IssmDouble eps_eff, Gauss *gauss)
Definition: Matestar.cpp:232
Matestar::GetD
IssmDouble GetD(Gauss *gauss)
Definition: Matestar.cpp:172
Matestar::GetDbar
IssmDouble GetDbar(Gauss *gauss)
Definition: Matestar.cpp:176
MARSHALLING
#define MARSHALLING(FIELD)
Definition: Marshalling.h:29
Element::StrainRateSSA1d
void StrainRateSSA1d(IssmDouble *epsilon, IssmDouble *xyz_list, Gauss *gauss, Input2 *vx_input)
Definition: Element.cpp:4157
Matestar::ViscosityBSSA
void ViscosityBSSA(IssmDouble *pmudB, int dim, IssmDouble *xyz_list, Gauss *gauss, Input2 *vx_input, Input2 *vy_input, IssmDouble eps_eff)
Definition: Matestar.cpp:452
MaterialsRheologyEsEnum
@ MaterialsRheologyEsEnum
Definition: EnumDefinitions.h:649
Matestar::GetViscosityDerivativeEpsSquare
void GetViscosityDerivativeEpsSquare(IssmDouble *pmu_prime, IssmDouble *pepsilon, Gauss *gauss)
Definition: Matestar.cpp:244
Hook::copy
Object * copy(void)
Definition: Hook.cpp:61
Input2
Definition: Input2.h:18
MARSHALLING_BACKWARD
@ MARSHALLING_BACKWARD
Definition: Marshalling.h:10
Matestar::GetN
IssmDouble GetN()
Definition: Matestar.cpp:221
Matestar::ResetHooks
void ResetHooks()
Definition: Matestar.cpp:372
Matestar::GetViscosityComplement
void GetViscosityComplement(IssmDouble *pviscosity_complement, IssmDouble *pepsilon, Gauss *gauss)
Definition: Matestar.cpp:236
Loads
Declaration of Loads class.
Definition: Loads.h:16
Element::StrainRateHO
void StrainRateHO(IssmDouble *epsilon, IssmDouble *xyz_list, Gauss *gauss, Input2 *vx_input, Input2 *vy_input)
Definition: Element.cpp:4084
_error_
#define _error_(StreamArgs)
Definition: exceptions.h:49
Matestar::helement
Hook * helement
Definition: Matestar.h:28
MaterialsRheologyBEnum
@ MaterialsRheologyBEnum
Definition: EnumDefinitions.h:643
Matestar::IsDamage
bool IsDamage()
Definition: Matestar.cpp:367
Matestar::ViscosityFS
void ViscosityFS(IssmDouble *pviscosity, int dim, IssmDouble *xyz_list, Gauss *gauss, Input2 *vx_input, Input2 *vy_input, Input2 *vz_input)
Definition: Matestar.cpp:482
Matestar::GetViscosityDComplement
void GetViscosityDComplement(IssmDouble *, IssmDouble *, Gauss *gauss)
Definition: Matestar.cpp:240
Matestar::ViscosityHODerivativeEpsSquare
void ViscosityHODerivativeEpsSquare(IssmDouble *pmu_prime, IssmDouble *epsilon, Gauss *gauss)
Definition: Matestar.cpp:388
Materials.h
Hook::Echo
void Echo(void)
Definition: Hook.cpp:104
Element::StrainRateSSA
void StrainRateSSA(IssmDouble *epsilon, IssmDouble *xyz_list, Gauss *gauss, Input2 *vx_input, Input2 *vy_input)
Definition: Element.cpp:4138
Matestar::GetAbar
IssmDouble GetAbar(Gauss *gauss)
Definition: Matestar.cpp:141
Input2::GetInputValue
virtual void GetInputValue(IssmDouble *pvalue, Gauss *gauss)
Definition: Input2.h:38
IoModel
Definition: IoModel.h:48
MaterialsRheologyEcbarEnum
@ MaterialsRheologyEcbarEnum
Definition: EnumDefinitions.h:648
Matestar::GetA
IssmDouble GetA(Gauss *gauss)
Definition: Matestar.cpp:130
Element::StrainRateHO2dvertical
void StrainRateHO2dvertical(IssmDouble *epsilon, IssmDouble *xyz_list, Gauss *gauss, Input2 *vx_input, Input2 *vy_input)
Definition: Element.cpp:4114
DataSet
Declaration of DataSet class.
Definition: DataSet.h:14
Matestar::element
Element * element
Definition: Matestar.h:29
Matestar::GetEsbar
IssmDouble GetEsbar(Gauss *gauss)
Definition: Matestar.cpp:211
Matestar::ViscosityL1L2
void ViscosityL1L2(IssmDouble *pviscosity, IssmDouble *xyz_list, Gauss *gauss, Input2 *vx_input, Input2 *vy_input, Input2 *surf)
Definition: Matestar.cpp:567
Gauss
Definition: Gauss.h:8
Hook::Marshall
void Marshall(char **pmarshalled_data, int *pmarshalled_data_size, int marshall_direction)
Definition: Hook.cpp:122
Matestar::ViscosityHO
void ViscosityHO(IssmDouble *pviscosity, int dim, IssmDouble *xyz_list, Gauss *gauss, Input2 *vx_input, Input2 *vy_input)
Definition: Matestar.cpp:525