sandbox/fanshuo/TEST/mui.h

    Properties and functions for non newtonian flows

    /*For Bingham*/
    double tauy = 0.0;
    double mu = 0.1;
    
    /*For cohesive Bagnold*/
    double I0 = 0.3 [0];
    double mu0 = 0.1 [0];
    double deltamu = 0.26 [0];
    double dg = 0.4 [1];
    double rho = 1.0;
    double tauc = 0.0 ;
    
    /* For turbulent viscous */
    double kappa = 0.4;
    double rugo = 0.01;
    double ll = 0.0;
    
    /* up to now constante slope, to be changed */
    double slope = 0.25;
    
    
    double shear(Point point, scalar s, scalar h, int layer, int layercoef){
    
      double shear=0;
      if (layercoef>0&&layercoef<(nl-1)){ 
        shear = (s[0,0,layer+1]-s[0,0,layer-1])/(h[0,0,layer]+0.5*(h[0,0,layer+1]+h[0,0,layer-1]));
      }
      else if(layercoef==0){
      	 shear = (s[0,0,layer+1]-s[0,0,layer])/(0.5*(h[0,0,layer]+h[0,0,layer+1]));
      }
      else if(layercoef==nl-1){
      	shear = (s[0,0,layer]-s[0,0,layer-1])/(0.5*(h[0,0,layer]+h[0,0,layer-1]));
      }
      
      else if(layercoef==-1){
        shear = 2.*s[0,0,0]/h[0,0,0];
      }
       
      //return fabs(shear);
      return sqrt(sq(shear));
    }
    
    /*
    Functions reserved for dry  Bagnold flow
    */
    double pressionHydro(Point point, scalar h,int layer){
    
    	double H = 0.;
    	double zc = 0.;
        for (int l = 0; l < layer; l++) {
    		H+=h[0,0,l];
    	}
    	zc = H + 0.5*h[0,0,layer];
    	return rho*G*cos(slope)*(eta[]-zb[]-zc);
    }
    
    
    double nombreInertie(Point point, scalar s, scalar h, int layer){
    
      double ans;
      ans = dg*shear(point,s,h,layer,layer)/sqrt(pressionHydro(point,h,layer)/rho);
      return ans;
    
    }
    
    double coeffFrotte(Point point, scalar s, scalar h, int layer){
    
      double _rapport;
      _rapport = I0/nombreInertie(point, s, h, layer);
      return mu0 + deltamu/(_rapport + 1);
    
    }
    
    double Nuturbulent(Point point, scalar s, scalar h, int layer){
    
      double nu_eq = 0.0;
      double _y = 0.0;
    
        for (int l = 0; l < layer; l++) {
    		_y+=h[0,0,l];
    	}
    	_y = _y + 0.5*h[0,0,layer];
    
    	ll = kappa*(_y+rugo)*sqrt(1-(_y));
    	nu_eq = shear(point,s,h,layer,layer)*ll*ll;
      return nu_eq;
    }
    
    double Nueq(Point point, scalar s, scalar h, int layer){
    
      double ans=0;
    #if BAGNOLDDRY
      	ans =  coeffFrotte(point,s,h,layer)*pressionHydro(point,h,layer)/shear(point,s,h,layer,layer);
    #elif BINGHAM
      	ans = mu + tauy/shear(point,s,h,layer,layer);
      
    #elif TURBULENT
            ans = Nuturbulent(point,  s, h, layer);
    #else 
      	ans = D;
    #endif
    
      return ans;
    }

    Régularisation for nu_{eq}

    void regularization(Point point, scalar s, scalar h, double nueq[])
    {
    	int nlc = nl, l;
    
    	for(l=0 ; l<nl;l++){
     		if (shear(point,s,h,l,l) <=1e-3) {
     			nlc = l-1;
     		break;
    		}
    	}
    
      for( l=0 ; l<nl;l++){
      	if ( l<=nlc ) nueq[l] = Nueq(point,s,h,l);
    	  else nueq[l] = nueq[l-1];
        //nueq[l] = Nueq(point,s,h,l);
    	}
    }
    
    //to do: add other properties for non newtonian flows