Changeset 26294


Ignore:
Timestamp:
05/28/21 14:44:26 (4 years ago)
Author:
tsantos
Message:

CHG: updated viscosity computation for MLHO: now we have 4 expressions obtained by numerical integration (it is more consistent).

Location:
issm/trunk-jpl/src/c
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp

    r26293 r26294  
    28822882
    28832883        /*Intermediaries*/
    2884         IssmDouble  viscosity,Jdet,thickness,n;
     2884        IssmDouble  viscosity[4],Jdet,thickness,n;
    28852885        IssmDouble *xyz_list = NULL;
    28862886        int      domaintype;
     
    29172917        Input* vx_input       = element->GetInput(VxEnum);        _assert_(vx_input); //vertically integrated vx
    29182918        Input* vy_input       = element->GetInput(VyEnum);        _assert_(vy_input); //vertically integrated vy
    2919         Input* vxshear_input  = element->GetInput(VxShearEnum);   _assert_(vxshear_input);
    2920         Input* vyshear_input  = element->GetInput(VyShearEnum);   _assert_(vyshear_input);
     2919        Input* vxbase_input   = element->GetInput(VxBaseEnum);    _assert_(vxbase_input);
     2920        Input* vybase_input   = element->GetInput(VyBaseEnum);    _assert_(vybase_input);
     2921        Input* vxshear_input  = element->GetInput(VxShearEnum);   _assert_(vxshear_input); //shear vx at the surface
     2922        Input* vyshear_input  = element->GetInput(VyShearEnum);   _assert_(vyshear_input); //shear vy at the surface
    29212923        Input* n_input                   = element->GetInput(MaterialsRheologyNEnum); _assert_(n_input);
    29222924
     
    29342936                n_input->GetInputValue(&n,gauss);
    29352937                int dim=2;//itapopo
    2936                 element->material->ViscosityMLHO(&viscosity,dim,xyz_list,gauss,vx_input,vy_input,vxshear_input,vyshear_input,thickness_input);
    2937                 //viscosity=10e13;//itapopo
     2938                element->material->ViscosityMLHO(&viscosity[0],dim,xyz_list,gauss,vxbase_input,vybase_input,vxshear_input,vyshear_input,thickness_input,n_input);
    29382939
    29392940                for(int i=0;i<numnodes;i++){//shape functions on tria element
    29402941                        for(int j=0;j<numnodes;j++){
    2941                                 Ke->values[(4*i+0)*2*2*numnodes+4*j+0] += gauss->weight*Jdet*viscosity*thickness*(
     2942                                Ke->values[(4*i+0)*2*2*numnodes+4*j+0] += gauss->weight*Jdet*viscosity[0]*thickness*(
    29422943                                                        4.*dbasis[0*numnodes+j]*dbasis[0*numnodes+i] + dbasis[1*numnodes+j]*dbasis[1*numnodes+i]
    29432944                                                        );//K11
    2944                                 Ke->values[(4*i+0)*2*2*numnodes+4*j+1] += gauss->weight*Jdet*viscosity*thickness*(
     2945                                Ke->values[(4*i+0)*2*2*numnodes+4*j+1] += gauss->weight*Jdet*viscosity[1]*thickness*(
    29452946                                                        4.*dbasis[0*numnodes+j]*dbasis[0*numnodes+i] + dbasis[1*numnodes+j]*dbasis[1*numnodes+i]
    29462947                                                        )*(n+1)/(n+2);//K12
    2947                                 Ke->values[(4*i+0)*2*2*numnodes+4*j+2] += gauss->weight*Jdet*viscosity*thickness*(
     2948                                Ke->values[(4*i+0)*2*2*numnodes+4*j+2] += gauss->weight*Jdet*viscosity[0]*thickness*(
    29482949                                                        2.*dbasis[1*numnodes+j]*dbasis[0*numnodes+i] + dbasis[0*numnodes+j]*dbasis[1*numnodes+i]
    29492950                                                        );//K13
    2950                                 Ke->values[ (4*i+0)*2*2*numnodes+4*j+3] += gauss->weight*Jdet*viscosity*thickness*(
     2951                                Ke->values[ (4*i+0)*2*2*numnodes+4*j+3] += gauss->weight*Jdet*viscosity[1]*thickness*(
    29512952                     2.*dbasis[1*numnodes+j]*dbasis[0*numnodes+i] + dbasis[0*numnodes+j]*dbasis[1*numnodes+i]
    29522953                     )*(n+1)/(n+2);//K14
    29532954                               
    2954                                 Ke->values[(4*i+1)*2*2*numnodes+4*j+0] += gauss->weight*Jdet*viscosity*thickness*(
     2955                                Ke->values[(4*i+1)*2*2*numnodes+4*j+0] += gauss->weight*Jdet*viscosity[1]*thickness*(
    29552956                                                        4.*dbasis[0*numnodes+j]*dbasis[0*numnodes+i] + dbasis[1*numnodes+j]*dbasis[1*numnodes+i]
    29562957                                                        )*(n+1)/(n+2);//K21
    2957                                 Ke->values[(4*i+1)*2*2*numnodes+4*j+1] += gauss->weight*Jdet*viscosity*thickness*(
     2958                                Ke->values[(4*i+1)*2*2*numnodes+4*j+1] += gauss->weight*Jdet*viscosity[2]*thickness*(
    29582959                                                        4.*dbasis[0*numnodes+j]*dbasis[0*numnodes+i] + dbasis[1*numnodes+j]*dbasis[1*numnodes+i]
    29592960                                                        )*2*pow(n+1,2)/((2*n+3)*(n+2))
    29602961                                                        +
    2961                                                         gauss->weight*Jdet*viscosity*basis[j]*basis[i]*pow(n+1,2)/(thickness*(2*n+1))
     2962                                                        gauss->weight*Jdet*viscosity[3]*basis[j]*basis[i]*pow(n+1,2)/(thickness*(2*n+1))
    29622963                                                        ;//K22
    2963                                 Ke->values[(4*i+1)*2*2*numnodes+4*j+2] += gauss->weight*Jdet*viscosity*thickness*(
     2964                                Ke->values[(4*i+1)*2*2*numnodes+4*j+2] += gauss->weight*Jdet*viscosity[1]*thickness*(
    29642965                                                        2.*dbasis[1*numnodes+j]*dbasis[0*numnodes+i] + dbasis[0*numnodes+j]*dbasis[1*numnodes+i]
    29652966                                                        )*(n+1)/(n+2);//K23
    2966                                 Ke->values[(4*i+1)*2*2*numnodes+4*j+3] += gauss->weight*Jdet*viscosity*thickness*(
     2967                                Ke->values[(4*i+1)*2*2*numnodes+4*j+3] += gauss->weight*Jdet*viscosity[2]*thickness*(
    29672968                                                        2.*dbasis[1*numnodes+j]*dbasis[0*numnodes+i] + dbasis[0*numnodes+j]*dbasis[1*numnodes+i]
    29682969                                                        )*2*pow(n+1,2)/((2*n+3)*(n+2));//K24
    29692970                               
    2970                                 Ke->values[(4*i+2)*2*2*numnodes+4*j+0] += gauss->weight*Jdet*viscosity*thickness*(
     2971                                Ke->values[(4*i+2)*2*2*numnodes+4*j+0] += gauss->weight*Jdet*viscosity[0]*thickness*(
    29712972                                                        2.*dbasis[0*numnodes+j]*dbasis[1*numnodes+i] + dbasis[1*numnodes+j]*dbasis[0*numnodes+i]
    29722973                                                        );//K31
    2973                                 Ke->values[(4*i+2)*2*2*numnodes+4*j+1] += gauss->weight*Jdet*viscosity*thickness*(
     2974                                Ke->values[(4*i+2)*2*2*numnodes+4*j+1] += gauss->weight*Jdet*viscosity[1]*thickness*(
    29742975                                                        2.*dbasis[0*numnodes+j]*dbasis[1*numnodes+i] + dbasis[1*numnodes+j]*dbasis[0*numnodes+i]
    29752976                                                        )*(n+1)/(n+2);//K32
    2976                                 Ke->values[(4*i+2)*2*2*numnodes+4*j+2] += gauss->weight*Jdet*viscosity*thickness*(
     2977                                Ke->values[(4*i+2)*2*2*numnodes+4*j+2] += gauss->weight*Jdet*viscosity[0]*thickness*(
    29772978                                                        4.*dbasis[1*numnodes+j]*dbasis[1*numnodes+i] + dbasis[0*numnodes+j]*dbasis[0*numnodes+i]
    29782979                                                        );//K33
    2979                                 Ke->values[(4*i+2)*2*2*numnodes+4*j+3] += gauss->weight*Jdet*viscosity*thickness*(
     2980                                Ke->values[(4*i+2)*2*2*numnodes+4*j+3] += gauss->weight*Jdet*viscosity[1]*thickness*(
    29802981                                                        4.*dbasis[1*numnodes+j]*dbasis[1*numnodes+i] + dbasis[0*numnodes+j]*dbasis[0*numnodes+i]
    29812982                                                        )*(n+1)/(n+2);//K34
    29822983
    2983                                 Ke->values[(4*i+3)*2*2*numnodes+4*j+0] += gauss->weight*Jdet*viscosity*thickness*(
     2984                                Ke->values[(4*i+3)*2*2*numnodes+4*j+0] += gauss->weight*Jdet*viscosity[1]*thickness*(
    29842985                     2.*dbasis[0*numnodes+j]*dbasis[1*numnodes+i] + dbasis[1*numnodes+j]*dbasis[0*numnodes+i]
    29852986                     )*(n+1)/(n+2);//K41
    2986                                 Ke->values[(4*i+3)*2*2*numnodes+4*j+1] += gauss->weight*Jdet*viscosity*thickness*(
     2987                                Ke->values[(4*i+3)*2*2*numnodes+4*j+1] += gauss->weight*Jdet*viscosity[2]*thickness*(
    29872988                     2.*dbasis[0*numnodes+j]*dbasis[1*numnodes+i] + dbasis[1*numnodes+j]*dbasis[0*numnodes+i]
    29882989                     )*2*pow(n+1,2)/((2*n+3)*(n+2));//K42
    2989                                 Ke->values[(4*i+3)*2*2*numnodes+4*j+2] += gauss->weight*Jdet*viscosity*thickness*(
     2990                                Ke->values[(4*i+3)*2*2*numnodes+4*j+2] += gauss->weight*Jdet*viscosity[1]*thickness*(
    29902991                                                        4.*dbasis[1*numnodes+j]*dbasis[1*numnodes+i] + dbasis[0*numnodes+j]*dbasis[0*numnodes+i]
    29912992                                                        )*(n+1)/(n+2);//K43
    2992                                 Ke->values[(4*i+3)*2*2*numnodes+4*j+3] += gauss->weight*Jdet*viscosity*thickness*(
     2993                                Ke->values[(4*i+3)*2*2*numnodes+4*j+3] += gauss->weight*Jdet*viscosity[2]*thickness*(
    29932994                                                        4.*dbasis[1*numnodes+j]*dbasis[1*numnodes+i] + dbasis[0*numnodes+j]*dbasis[0*numnodes+i]
    29942995                                                        )*2*pow(n+1,2)/((2*n+3)*(n+2))
    29952996                                                        +
    2996                                                         gauss->weight*Jdet*viscosity*basis[j]*basis[i]*pow(n+1,2)/(thickness*(2*n+1))
     2997                                                        gauss->weight*Jdet*viscosity[3]*basis[j]*basis[i]*pow(n+1,2)/(thickness*(2*n+1))
    29972998                                                        ;//K44
    29982999                        }
  • TabularUnified issm/trunk-jpl/src/c/classes/Elements/Element.cpp

    r26292 r26294  
    42124212
    42134213}/*}}}*/
    4214 void       Element::StrainRateMLHO(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vxshear_input,Input* vyshear_input,Input* thickness_input){/*{{{*/
    4215         /*Compute the 2d Blatter/MLHO Strain Rate (5 components):
     4214void       Element::StrainRateMLHO(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input* vxbase_input,Input* vybase_input,Input* vxshear_input,Input* vyshear_input,Input* thickness_input,Input* n_input,IssmDouble zeta){/*{{{*/
     4215        /*Compute the 2d Blatter/MLHO Strain Rate (5 components) for a given vertical coordinate (zeta):
    42164216         *
    42174217         * epsilon=[exx eyy exy exz eyz]
     
    42214221         *
    42224222         * the contribution of vz is neglected
     4223         *
     4224         * zeta = (surface - z)/thickness
     4225         * i.e., zeta=0 <=> ice surface
     4226         * i.e., zeta=1 <=> ice base
    42234227         */
    42244228
    42254229        /*Intermediaries*/
    4226         IssmDouble dvx[2]; // [dvx/dx, dvx/dy]
    4227         IssmDouble dvy[2]; // [dvy/dx, dvy/dy]
    4228         IssmDouble vxshear,vyshear,thickness;
     4230        IssmDouble dvxb[2];  // [dvx/dx, dvx/dy] at the base
     4231        IssmDouble dvyb[2];  // [dvy/dx, dvy/dy] at the base
     4232        IssmDouble dvxsh[2]; // [dvx/dx, dvx/dy] at the surface (only the shear)
     4233        IssmDouble dvysh[2]; // [dvy/dx, dvy/dy] at the surface (only the shear)
     4234        IssmDouble vxsh,vysh; // shear vx and shear at the surface
     4235        IssmDouble thickness,n;
    42294236
    42304237        /*Check that both inputs have been found*/
    4231         if (!vx_input || !vy_input || !vxshear_input || !vyshear_input || !thickness_input){
    4232                 _error_("Input missing. Here are the input pointers we have for vx: " << vx_input << ", vy: " << vy_input << ", vxshear: " << vxshear_input << ", vyshear: " << vyshear_input << ", thickness: " << thickness_input << "\n");
     4238        if (!vxbase_input || !vybase_input || !vxshear_input || !vyshear_input || !thickness_input || !n_input){
     4239                _error_("Input missing. Here are the input pointers we have for vxb: " << vxbase_input << ", vyb: " << vybase_input << ", vxshear: " << vxshear_input << ", vyshear: " << vyshear_input << ", thickness: " << thickness_input << ", n: " << n_input<< "\n");
    42334240        }
    42344241
    42354242        /*Get strain rate assuming that epsilon has been allocated*/
    4236         vx_input->GetInputDerivativeValue(&dvx[0],xyz_list,gauss);
    4237         vy_input->GetInputDerivativeValue(&dvy[0],xyz_list,gauss);
     4243        vxbase_input->GetInputDerivativeValue(&dvxb[0],xyz_list,gauss);
     4244        vybase_input->GetInputDerivativeValue(&dvyb[0],xyz_list,gauss);
     4245        vxshear_input->GetInputDerivativeValue(&dvxsh[0],xyz_list,gauss);
     4246        vyshear_input->GetInputDerivativeValue(&dvysh[0],xyz_list,gauss);
    42384247        thickness_input->GetInputValue(&thickness,gauss); _assert_(thickness>0);
    4239    vxshear_input->GetInputValue(&vxshear,gauss);
    4240    vyshear_input->GetInputValue(&vyshear,gauss);
    4241        
    4242         epsilon[0] = dvx[0];
    4243         epsilon[1] = dvy[1];
    4244         epsilon[2] = 0.5*(dvx[1] + dvy[0]);
    4245         epsilon[3] = 0.5*vxshear/thickness;
    4246         epsilon[4] = 0.5*vyshear/thickness;
     4248   vxshear_input->GetInputValue(&vxsh,gauss);
     4249   vyshear_input->GetInputValue(&vysh,gauss);
     4250   n_input->GetInputValue(&n,gauss);
     4251
     4252        epsilon[0] = dvxb[0] + dvxsh[0]*( 1 - pow(zeta,n+1) );
     4253        epsilon[1] = dvyb[1] + dvysh[1]*( 1 - pow(zeta,n+1) );
     4254        epsilon[2] = 0.5*( dvxb[1] + dvxsh[1]*( 1 - pow(zeta,n+1) ) + dvyb[0] + dvysh[0]*( 1 - pow(zeta,n+1) ) );
     4255        epsilon[3] = 0.5*(vxsh/thickness)*(n+1)*pow(zeta,n);
     4256        epsilon[4] = 0.5*(vysh/thickness)*(n+1)*pow(zeta,n);
    42474257
    42484258}/*}}}*/
  • TabularUnified issm/trunk-jpl/src/c/classes/Elements/Element.h

    r26292 r26294  
    181181                void               StrainRateHO(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input);
    182182                void               StrainRateHO2dvertical(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input);
    183                 void               StrainRateMLHO(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vxshear_input,Input* vyshear_input,Input* thickness_input);
     183                void               StrainRateMLHO(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vxshear_input,Input* vyshear_input,Input* thickness_input,Input* n_input,IssmDouble zeta);
    184184                void               StrainRateSSA(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input);
    185185                void               StrainRateSSA1d(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input);
  • TabularUnified issm/trunk-jpl/src/c/classes/Materials/Material.h

    r26292 r26294  
    5151                virtual void       ViscosityFS(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input)=0;
    5252                virtual void       ViscosityHO(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input)=0;
    53                 virtual void       ViscosityMLHO(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vxshear_input,Input* vyshear_input,Input* thickness_input)=0;
     53                virtual void       ViscosityMLHO(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vxshear_input,Input* vyshear_input,Input* thickness_input,Input* n_input)=0;
    5454                virtual void       ViscosityL1L2(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* surf)=0;
    5555                virtual void       ViscositySSA(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input)=0;
  • TabularUnified issm/trunk-jpl/src/c/classes/Materials/Matestar.cpp

    r26292 r26294  
    567567        *pviscosity=GetViscosityGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],eps_eff,isdepthaveraged,gauss);
    568568}/*}}}*/
    569 void  Matestar::ViscosityMLHO(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vxshear_input,Input* vyshear_input,Input* thickness_input){/*{{{*/
     569void  Matestar::ViscosityMLHO(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vxshear_input,Input* vyshear_input,Input* thickness_input,Input* n_input){/*{{{*/
    570570        _error_("not implemented yet");
    571571}/*}}}*/
  • TabularUnified issm/trunk-jpl/src/c/classes/Materials/Matestar.h

    r26292 r26294  
    7676                void       ViscosityFS(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input);
    7777                void       ViscosityHO(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input);
    78                 void       ViscosityMLHO(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vxshear_input,Input* vyshear_input,Input* thickness_input);
     78                void       ViscosityMLHO(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vxshear_input,Input* vyshear_input,Input* thickness_input,Input* n_input);
    7979                void       ViscosityL1L2(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* surf);
    8080                void       ViscositySSA(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input);
  • TabularUnified issm/trunk-jpl/src/c/classes/Materials/Matice.cpp

    r26292 r26294  
    736736        *pviscosity=viscosity;
    737737}/*}}}*/
    738 void  Matice::ViscosityMLHO(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vxshear_input,Input* vyshear_input,Input* thickness_input){/*{{{*/
     738void  Matice::ViscosityMLHO(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vxbase_input,Input* vybase_input,Input* vxshear_input,Input* vyshear_input,Input* thickness_input,Input* n_input){/*{{{*/
    739739
    740740        /*Intermediaries*/
    741         IssmDouble viscosity;
    742         IssmDouble thickness;
    743741        IssmDouble epsilon[5];  /* epsilon=[exx,eyy,exy,exz,eyz]; */
    744         IssmDouble eps_eff;
    745 
    746         /* eps_eff^2 = exx^2 + eyy^2 + exy^2 + exz^2 + eyz^2 + exx*eyy */
    747         element->StrainRateMLHO(&epsilon[0],xyz_list,gauss,vx_input,vy_input,vxshear_input,vyshear_input,thickness_input);
    748         eps_eff = sqrt(epsilon[0]*epsilon[0] + epsilon[1]*epsilon[1] + epsilon[2]*epsilon[2] +  epsilon[3]*epsilon[3] + epsilon[4]*epsilon[4] + epsilon[0]*epsilon[1]);
    749 
    750         /*Get viscosity*/
    751         this->GetViscosityBar(&viscosity,eps_eff,gauss);
     742        IssmDouble epsilon_eff;
     743        IssmDouble zeta,H,n;
     744        IssmDouble f[4],F[4];
     745        IssmDouble mubar[4];
     746        IssmDouble mu;
     747        int order=5;
     748
     749        for(int i=0;i<4;++i) mubar[i]=0;
     750
     751        GaussSeg* gauss_seg=new GaussSeg(order);
     752        //IssmDouble eps_eff_averaged=0;
     753        while(gauss_seg->next()){
     754               
     755                /*Compute zeta for gauss_seg point (0=surface, 1=base)*/
     756                zeta=0.5*(gauss_seg->coord1+1);
     757
     758                /* eps_eff^2 = exx^2 + eyy^2 + exy^2 + exz^2 + eyz^2 + exx*eyy (for a given zeta)*/
     759                element->StrainRateMLHO(&epsilon[0],xyz_list,gauss,
     760                                                vxbase_input,vybase_input,vxshear_input,vyshear_input,thickness_input,n_input,zeta);
     761                epsilon_eff=sqrt(epsilon[0]*epsilon[0] + epsilon[1]*epsilon[1] + epsilon[2]*epsilon[2]
     762                                                  +  epsilon[3]*epsilon[3] + epsilon[4]*epsilon[4] + epsilon[0]*epsilon[1]);
     763
     764                /*Get viscosity at zeta - FIXME for now Bbar*/
     765                this->GetViscosityBar(&mu,epsilon_eff,gauss);
     766
     767                thickness_input->GetInputValue(&H, gauss);
     768      n_input->GetInputValue(&n,gauss);
     769
     770                /*Compute fi and Fi at zeta*/
     771                f[0]=1;
     772                f[1]=(1-pow(zeta,n+1));
     773                f[2]=(1-pow(zeta,n+1))*(1-pow(zeta,n+1));
     774                f[3]=((n+1)/H)*pow(zeta,n) * ((n+1)/H)*pow(zeta,n);
     775       
     776                F[0]=H;
     777                F[1]=H*(n+1)/(n+2);
     778                F[2]=2*H*(n+1)*(n+1)/( (2*n+3)*(n+2) );
     779                F[3]=(n+1)*(n+1)/( H*(2*n+1) );
     780
     781                /*Sum the viscosity*/
     782                mubar[0]+=(H/(2*F[0]))*gauss_seg->weight*mu*f[0];
     783                mubar[1]+=(H/(2*F[1]))*gauss_seg->weight*mu*f[1];
     784                mubar[2]+=(H/(2*F[2]))*gauss_seg->weight*mu*f[2];
     785                mubar[3]+=(H/(2*F[3]))*gauss_seg->weight*mu*f[3];
     786
     787        }//while
    752788
    753789        /*Assign output pointer*/
    754    *pviscosity=viscosity;
     790        pviscosity[0]=mubar[0];
     791        pviscosity[1]=mubar[1];
     792        pviscosity[2]=mubar[2];
     793        pviscosity[3]=mubar[3];
     794
     795        /*Clean up*/
     796        delete gauss_seg;
    755797}/*}}}*/
    756798void  Matice::ViscosityL1L2(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* surface_input){/*{{{*/
  • TabularUnified issm/trunk-jpl/src/c/classes/Materials/Matice.h

    r26292 r26294  
    7878                void       ViscosityFS(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input);
    7979                void       ViscosityHO(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input);
    80                 void       ViscosityMLHO(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vxshear_input,Input* vyshear_input,Input* thickness_input);
     80                void       ViscosityMLHO(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vxshear_input,Input* vyshear_input,Input* thickness_input,Input* n_input);
    8181                void       ViscosityL1L2(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* surf);
    8282                void       ViscositySSA(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input);
  • TabularUnified issm/trunk-jpl/src/c/classes/Materials/Matlitho.h

    r26292 r26294  
    7272                void       ViscosityFS(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input){_error_("not supported");};
    7373                void       ViscosityHO(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){_error_("not supported");};
    74                 void       ViscosityMLHO(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vxshear_input,Input* vyshear_input,Input* thickness_input){_error_("not supported");};
     74                void       ViscosityMLHO(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vxshear_input,Input* vyshear_input,Input* thickness_input,Input* n_input){_error_("not supported");};
    7575                void       ViscosityL1L2(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* surf){_error_("not supported");};
    7676                void       ViscositySSA(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){_error_("not supported");};
Note: See TracChangeset for help on using the changeset viewer.