8 #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
13 #include "../Elements/Element.h"
14 #include "../Elements/Tria.h"
15 #include "../Elements/Penta.h"
16 #include "../Params/Parameters.h"
17 #include "../Vertex.h"
20 #include "../IoModel.h"
21 #include "../../shared/shared.h"
36 iomodel->
FindConstant(&materialtype,
"md.materials.type");
37 this->
Init(matice_mid,index,materialtype);
43 this->
Init(matice_mid,index,materialtype);
57 int matice_eid=index+1;
76 _error_(
"Material type not recognized");
129 _printf_(
" note: helement not printed to avoid recursion.\n");
134 _printf_(
" note: element not printed to avoid recursion.\n");
149 _printf_(
" note: helement not printed to avoid recursion.\n");
154 _printf_(
" note: element not printed to avoid recursion.\n");
161 void Matice::Marshall(
char** pmarshalled_data,
int* pmarshalled_data_size,
int marshall_direction){
169 this->
helement->
Marshall(pmarshalled_data,pmarshalled_data_size,marshall_direction);
245 _error_(
"Cannot get DamageD for non damaged ice");
260 _error_(
"Cannot get DamageD for non damaged ice");
337 viscosity=(1.-D)*B/(2.*E);
343 viscosity = 1.e+14/2.;
349 viscosity=(1.-D)*B/(2.*pow(E,1./n)*pow(eps_eff,(n-1.)/n));
354 if(viscosity<=0)
_error_(
"Negative viscosity");
357 *pviscosity=viscosity;
393 viscosity=(1.-D)*B/(2.*E);
399 viscosity = 1.e+14/2.;
404 viscosity=(1.-D)*B/(2.*pow(E,1./n)*pow(eps_eff,(n-1.)/n));
409 if(viscosity<=0)
_error_(
"Negative viscosity");
412 *pviscosity=viscosity;
449 A=pow(exx,2)+pow(eyy,2)+pow(exy,2)+exx*eyy;
452 viscosity_complement=2.25*pow(10.,17);
457 viscosity_complement=(1-D)/(2*pow(A,e));
461 viscosity_complement=4.5*pow(10.,17);
470 *pviscosity_complement=viscosity_complement;
504 A=pow(exx,2)+pow(eyy,2)+pow(exy,2)+exx*eyy;
507 viscosity_complement=- 2.25*pow(10.,17);
512 viscosity_complement=- B/(2*pow(A,e));
516 viscosity_complement=- 4.5*pow(10.,17);
525 *pviscosity_complement=viscosity_complement;
537 if((epsilon[0]==0) && (epsilon[1]==0) && (epsilon[2]==0) &&
538 (epsilon[3]==0) && (epsilon[4]==0)){
539 mu_prime=0.5*pow(10.,14);
549 eff2 = exx*exx + eyy*eyy + exx*eyy + exy*exy + exz*exz + eyz*eyz;
553 mu_prime=(1.-n)/(2.*n) * mu/eff2;
584 if(eps_eff==0.) dmudB = 0.;
585 else dmudB = (1.-D)/(2.*pow(E,1./n)*pow(eps_eff,(n-1.)/n));
614 if(eps_eff==0.) dmudD = 0.;
615 else dmudD = -B/(2.*pow(E,1./n)*pow(eps_eff,(n-1.)/n));
631 if((epsilon[0]==0) && (epsilon[1]==0) && (epsilon[2]==0)){
632 mu_prime=0.5*pow(10.,14);
639 eff2 = exx*exx + eyy*eyy + exx*eyy + exy*exy ;
643 mu_prime=(1.-n)/(2.*n)*mu/eff2;
697 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);
702 eps_eff = 1./sqrt(2.)*sqrt(epsilon2d[0]*epsilon2d[0] + epsilon2d[1]*epsilon2d[1] + 2.*epsilon2d[2]*epsilon2d[2]);
709 *pviscosity=viscosity;
723 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]);
728 eps_eff = 1./sqrt(2.)*sqrt(2*epsilon2d[0]*epsilon2d[0] + 2*epsilon2d[1]*epsilon2d[1]);
733 _assert_(!xIsNan<IssmDouble>(viscosity));
736 *pviscosity=viscosity;
762 if (!vx_input || !vy_input || !surface_input)
_error_(
"Input missing");
772 eps_b = sqrt(epsilon[0]*epsilon[0] + epsilon[1]*epsilon[1] + epsilon[0]*epsilon[1] + epsilon[2]*epsilon[2]);
774 *pviscosity = 2.5e+17;
783 p = tau_perp *tau_perp;
785 delta = q *q + p*p*p*4./27.;
787 tau_par = pow(0.5*(-q+sqrt(delta)),1./3.) - pow(0.5*(q+sqrt(delta)),1./3.);
790 viscosity = 1./(2.*A*(tau_par*tau_par + tau_perp*tau_perp));
795 *pviscosity = viscosity;
808 eps_eff = sqrt(epsilon2d[0]*epsilon2d[0] + epsilon2d[1]*epsilon2d[1] + epsilon2d[2]*epsilon2d[2] + epsilon2d[0]*epsilon2d[1]);
813 eps_eff = fabs(epsilon1d);
820 *pviscosity=viscosity;