Example #1
0
File: win.c Project: CoryXie/nix-os
int
geter(Win *w, char *buf, int *nb)
{
	Rune r;
	int n;

	r = getec(w);
	buf[0] = r;
	n = 1;
	if(r < Runeself)
		goto Return;
	while(!fullrune(buf, n))
		buf[n++] = getec(w);
	chartorune(&r, buf);
    Return:
	*nb = n;
	return r;
}
Example #2
0
File: win.c Project: CoryXie/nix-os
int
geten(Win *w)
{
	int n, c;

	n = 0;
	while('0'<=(c=getec(w)) && c<='9')
		n = n*10+(c-'0');
	if(c != ' ')
		 fprint(2, "event number syntax");
	return n;
}
Example #3
0
File: win.c Project: CoryXie/nix-os
void
wevent(Win *w, Event *e)
{
	int i, nb;

	e->c1 = getec(w);
	e->c2 = getec(w);
	e->q0 = geten(w);
	e->q1 = geten(w);
	e->flag = geten(w);
	e->nr = geten(w);
	if(e->nr > EVENTSIZE)
		  fprint(2, "wevent: event string too long");
	e->nb = 0;
	for(i=0; i<e->nr; i++){
		e->r[i] = geter(w, e->b+e->nb, &nb);
		e->nb += nb;
	}
	e->r[e->nr] = 0;
	e->b[e->nb] = 0;
	if(getec(w) != '\n')
		 fprint(2, "wevent: event syntax 2");
}
Example #4
0
//================================================================================
const tensor& DM04_PF::Dm_Dkin2(const stresstensor &Stre, 
                          const straintensor &Stra, 
                          const MaterialParameter &MaterialParameter_in) const
{
    const double oneOver3 = 1.0/3.0;
    const double rt23 = sqrt(2.0/3.0);
    
    tensor I2("I", 2, def_dim_2);    

    double e0 = gete0(MaterialParameter_in);
    double e_r = gete_r(MaterialParameter_in);
    double lambda_c = getlambda_c(MaterialParameter_in);
    double xi = getxi(MaterialParameter_in);
    double Pat = getPat(MaterialParameter_in);
    //double m = getm(MaterialParameter_in);
    double M_cal = getM_cal(MaterialParameter_in);
    double cc = getcc(MaterialParameter_in);
    double A0 = getA0(MaterialParameter_in);
    double nd = getnd(MaterialParameter_in);    

    stresstensor alpha = getalpha(MaterialParameter_in);
    stresstensor z = getz(MaterialParameter_in);

    stresstensor n;
    stresstensor alpha_d;
    stresstensor alpha_d_alpha;
    double g = 0.0;
    double ec = e_r;
    double stateParameter = 0.0;
    double expnd = 1.0;
    //double ad = 0.0;
    double D0 = 0.0;
    stresstensor s_bar;
    double norm_s = 0.0;
    double epsilon_v = 0.0;
    double e = e0;
    double J3D;
    double cos3theta = 0.0;
    double z_n = 0.0;
    double alpha_n = 0.0;
    double s_n = 0.0;

    double p = Stre.p_hydrostatic();
    stresstensor s = Stre.deviator();
            
    s_bar = s - (alpha *p);
    norm_s = sqrt( (s_bar("ij")*s_bar("ij")).trace() );
    if (p > 0.0 && norm_s > 0.0)
        n = s_bar * (1.0/norm_s);
       
    J3D = n.Jinvariant3();
    cos3theta = -3.0*sqrt(6.0) *J3D;
    
    if (cos3theta > 1.0) 
      cos3theta = 1.0;

    if (cos3theta < -1.0) 
      cos3theta = -1.0;
    
    g = getg(cc, cos3theta);

    if ( (p/Pat) >= 0.0 )
      ec = getec(e_r, lambda_c, xi, Pat, p);
    
    epsilon_v = Stra.Iinvariant1();
    e = e0 + (1.0 + e0) *epsilon_v;
    
    stateParameter = e - ec;    
    expnd = exp(nd*stateParameter);
    
    alpha_n = (alpha("ij")*n("ij")).trace();
    s_n = (s("ij")*n("ij")).trace();

    // way 1
    //ad = g*M_cal*expnd - m;
    //D0 = rt23 * ad - alpha_n;

    // way 2
    D0 = rt23*g*M_cal*expnd - s_n /p;

    tensor dD_dz(2, def_dim_2, 0.0);

    // dD_dz:
    if (z_n > 0.0)
      dD_dz = n *A0;

    // dm_da:
    tensor tensor1 = I2("ij")*dD_dz("mn");
      tensor1.null_indices();
    
    PlasticFlow::PF_tensorR4 = tensor1 *(-D0*oneOver3);   
    
    return PlasticFlow::PF_tensorR4;
}
Example #5
0
//================================================================================
const tensor& DM04_PF::Dm_Dkin(const stresstensor &Stre, 
                          const straintensor &Stra, 
                          const MaterialParameter &MaterialParameter_in) const
{
    const double oneOver3 = 1.0/3.0;
    const double rt23 = sqrt(2.0/3.0);

    tensor I2("I", 2, def_dim_2);    
    tensor I4 = I2("ij")*I2("kl");
    tensor I4s = ( I4.transpose0110() + I4.transpose0111() ) *0.5;

    double e0 = gete0(MaterialParameter_in);
    double e_r = gete_r(MaterialParameter_in);
    double lambda_c = getlambda_c(MaterialParameter_in);
    double xi = getxi(MaterialParameter_in);
    double Pat = getPat(MaterialParameter_in);
    //double m = getm(MaterialParameter_in);
    double M_cal = getM_cal(MaterialParameter_in);
    double cc = getcc(MaterialParameter_in);
    double A0 = getA0(MaterialParameter_in);
    double nd = getnd(MaterialParameter_in);    

    stresstensor alpha = getalpha(MaterialParameter_in);
    stresstensor z = getz(MaterialParameter_in);

    stresstensor n;
    stresstensor alpha_d;
    stresstensor alpha_d_alpha;
    double g = 0.0;
    double ec = e_r;
    double stateParameter = 0.0;
    double expnd = 1.0;
    //double ad = 0.0;
    double A_d = 0.0;
    double B = 1.0;
    double C = 0.0;
    double D0 = 0.0;
    stresstensor s_bar;
    double norm_s = 0.0;
    double epsilon_v = 0.0;
    double e = e0;
    double J3D;
    double cos3theta = 0.0;
    double z_n = 0.0;
    double alpha_n = 0.0;
    double s_n = 0.0;

    double p = Stre.p_hydrostatic();
    stresstensor s = Stre.deviator();
            
    s_bar = s - (alpha *p);
    norm_s = sqrt( (s_bar("ij")*s_bar("ij")).trace() );
    if (p > 0.0 && norm_s > 0.0)
        n = s_bar * (1.0/norm_s);
       
    J3D = n.Jinvariant3();
    cos3theta = -3.0*sqrt(6.0) *J3D;
    
    if (cos3theta > 1.0) 
      cos3theta = 1.0;

    if (cos3theta < -1.0) 
      cos3theta = -1.0;
    
    g = getg(cc, cos3theta);

    if ( (p/Pat) >= 0.0 )
      ec = getec(e_r, lambda_c, xi, Pat, p);
    
    epsilon_v = Stra.Iinvariant1();
    e = e0 + (1.0 + e0) *epsilon_v;
    
    stateParameter = e - ec;    
    expnd = exp(nd*stateParameter);
    
    alpha_n = (alpha("ij")*n("ij")).trace();
    s_n = (s("ij")*n("ij")).trace();

    // way 1
    //ad = g*M_cal*expnd - m;
    //D0 = rt23 * ad - alpha_n;

    // way 2
    D0 = rt23*g*M_cal*expnd - s_n /p;

    z_n = (z("ij")*n("ij")).trace();
    if (z_n < 0.0) 
      z_n = 0.0;
    A_d = A0 * (1.0 + z_n);

    B = 1.0 + 1.5 *((1.0-cc)/cc) *g *cos3theta;
    C = 3.0 *sqrt(1.5) *((1.0-cc)/cc) *g;
    
    tensor n_n = n("ik")*n("kj");
      n_n.null_indices();

    tensor nt_nt = n("ij")*n("kl");
      nt_nt.null_indices();

    tensor alpha_I = alpha("ij")*I2("kl");
      alpha_I.null_indices();

    tensor n_I = n("ij")*I2("kl");
      n_I.null_indices();

    // dn_dalpha:
    tensor dn_da = nt_nt - I4s;
    dn_da = dn_da *(p/norm_s);

    // dcos3theta_dalpha:
    tensor dcos3theta_da = dn_da("ijmn")*n_n("ji");
      dcos3theta_da.null_indices();
    dcos3theta_da = dcos3theta_da *(-3.0*sqrt(6.0));

    // dg_da:
    tensor dg_da = dcos3theta_da *(g*g*(1.0-cc)/(2.0*cc));

    // dB_da:
    tensor dB_da = (dg_da*cos3theta + dcos3theta_da*g) *(1.5*(1.0-cc)/cc);

    // dC_ds:
    tensor dC_da = dg_da *(3.0*sqrt(1.5)*(1.0-cc)/cc);

    // dR_da:
    tensor tensor1 = n("ij")*dB_da("mn");
      tensor1.null_indices();
    tensor tensor2 = n_n - I2 *oneOver3;
    tensor tensor3 = tensor2("ij")*dC_da("mn");
      tensor3.null_indices();
    tensor tensor4 = n("kj")*dn_da("ikmn");
      tensor4.null_indices();
    tensor4.transpose1100(); 
    tensor dR_da = dn_da *B + tensor1 + tensor4 *(2.0*C) + tensor3;

    // dad_da:
    tensor dad_da = dg_da *(M_cal*expnd);

    // dD_da:
    
    // way 1
    //tensor tensor5 = alpha("pq")*dn_da("pqmn");
    //  tensor5.null_indices();
    //tensor dD_da = (dad_da *rt23 - n - tensor5) *(-A_d);
    
    // way 2
    tensor tensor5 = s("pq")*dn_da("pqmn");
      tensor5.null_indices();
    tensor dD_da = (dad_da *rt23 - tensor5 *(1.0/p)) *(-A_d);

    if (z_n > 0.0) {
      tensor tensor6 = z("pq")*dn_da("pqmn");
        tensor6.null_indices();
      dD_da += tensor6 *(-A0*D0);
    }

    // dm_da:
    tensor tensor7 = I2("ij")*dD_da("mn");
      tensor7.null_indices();
    
    PlasticFlow::PF_tensorR4 = dR_da + tensor7 *oneOver3;   
    
    return PlasticFlow::PF_tensorR4;
}
Example #6
0
//================================================================================
const straintensor& DM04_PF::PlasticFlowTensor(const stresstensor& Stre, 
                                               const straintensor& Stra, 
                                               const MaterialParameter &MaterialParameter_in) const
{
    const double oneOver3 = 1.0/3.0;
    const double rt23 = sqrt(2.0/3.0);    
    tensor I2("I", 2, def_dim_2);

    double e0 = gete0(MaterialParameter_in);
    double e_r = gete_r(MaterialParameter_in);
    double lambda_c = getlambda_c(MaterialParameter_in);
    double xi = getxi(MaterialParameter_in);
    double Pat = getPat(MaterialParameter_in);
    //double m = getm(MaterialParameter_in);
    double M_cal = getM_cal(MaterialParameter_in);
    double cc = getcc(MaterialParameter_in);
    double A0 = getA0(MaterialParameter_in);
    double nd = getnd(MaterialParameter_in);    

    stresstensor alpha = getalpha(MaterialParameter_in);
    stresstensor z = getz(MaterialParameter_in);

    stresstensor n;
    stresstensor alpha_d;
    stresstensor alpha_d_alpha;
    double g = 0.0;
    double ec = e_r;
    double stateParameter = 0.0;
    double expnd = 1.0;
    //double ad = 0.0;
    double A_d = 0.0;
    double B = 1.0;
    double C = 0.0;
    double D = 0.0;
    double D0 = 0.0;
    stresstensor s_bar;
    double norm_s = 0.0;
    double epsilon_v = 0.0;
    double e = e0;
    double J3D;
    double cos3theta = 0.0;
    double z_n = 0.0;
    double alpha_n = 0.0;
    double s_n = 0.0;

    double p = Stre.p_hydrostatic();
    stresstensor s = Stre.deviator();
            
    s_bar = s - (alpha *p);
    norm_s = sqrt( (s_bar("ij")*s_bar("ij")).trace() );
    if (p > 0.0 && norm_s > 0.0)
      n = s_bar * (1.0/norm_s);
       
    J3D = n.Jinvariant3();
    cos3theta = -3.0*sqrt(6.0) *J3D;

    if (p <= 0.0)
      cos3theta = 1.0;
    
    if (cos3theta > 1.0) 
      cos3theta = 1.0;

    if (cos3theta < -1.0) 
      cos3theta = -1.0;
    
    g = getg(cc, cos3theta);

    if ( (p/Pat) >= 0.0 )
      ec = getec(e_r, lambda_c, xi, Pat, p);
    
    epsilon_v = Stra.Iinvariant1();
    e = e0 + (1.0 + e0) *epsilon_v;
    
    stateParameter = e - ec;    
    expnd = exp(nd*stateParameter);
    
    alpha_n = (alpha("ij")*n("ij")).trace();
    s_n = (s("ij")*n("ij")).trace();

    // way 1
    //ad = g*M_cal*expnd - m;
    //D0 = rt23 *ad - alpha_n;

    // way 2, better use this when "p" is small
    D0 = rt23*g*M_cal*expnd - s_n /p;

    z_n = (z("ij")*n("ij")).trace();
    if (z_n < 0.0) 
      z_n = 0.0;
    A_d = A0 * (1.0 + z_n);

    D = D0 *(-A_d);

    B = 1.0 + 1.5 *((1.0-cc)/cc) *g *cos3theta;
    C = 3.0 *sqrt(1.5) *((1.0-cc)/cc) *g;
    
    stresstensor n_n = n("ik")*n("kj");
      n_n.null_indices();

    // note different 'positive-negative' since we assume extension (dilation) positive 
    // which is different from the Ref.
    DM04_PF::DM04m = n *B + n_n *C + I2 *((D-C)*oneOver3);
                           
    return DM04_PF::DM04m;
}
Example #7
0
const straintensor& SANISAND_alpha_Eij::Hij(const PlasticFlow& plastic_flow, const stresstensor& Stre, 
                                            const straintensor& Stra, const MaterialParameter& material_parameter)
{
//    const double rt23 = sqrt(2.0/3.0);    

//    stresstensor a_a_in;
//    double a_in = 0.0;

    double e0 = gete0(material_parameter);
    double e_r = gete_r(material_parameter);
    double lambda = getlambda(material_parameter);
    double xi = getxi(material_parameter);
    double Pat = getPat(material_parameter);
    double alpha_cc = getalpha_cc(material_parameter);
    double c = getc(material_parameter);
    double nb = getnb(material_parameter);
    double h0 = geth0(material_parameter);
    double ch = getch(material_parameter);
    double G0 = getG0(material_parameter);        
    double m = getm(material_parameter);
    stresstensor alpha = getalpha(material_parameter);

    stresstensor n;
    stresstensor s_bar;
    double norm_s = 0.0;
    double r_ef = 0.0;
    double cos3theta = 0.0;
    double g = 0.0;
    double ec = e_r;
    double e = e0;
    double psi = 0.0;
    double alpha_b_c = 0.0;
    stresstensor alpha_b_tensor;
    stresstensor b_ref;
    stresstensor temp_tensor;
    double lower = 0.0;
    double h = G0*h0;

    double p = Stre.p_hydrostatic();
    stresstensor s = Stre.deviator();

    s_bar = s - (alpha *p);
    norm_s = sqrt( (s_bar("ij")*s_bar("ij")).trace() );
    if (p > 0.0 && norm_s > 0.0)
    {
      n = s_bar * (1.0/norm_s);
      r_ef = rt32 * norm_s / p;
      cos3theta = -3.0 * sqrt(6.0) * n.Jinvariant3();
    }   

    if (p <= 0.0)
      cos3theta = 1.0;

    if (cos3theta > 1.0) 
      cos3theta = 1.0;

    if (cos3theta < -1.0) 
      cos3theta = -1.0;
    
    g = getg(c, cos3theta);

    if ( p >= 0.0 )
      ec = getec(e_r, lambda, xi, Pat, p);

    e = e0 + (1.0 + e0) * Stra.Iinvariant1();
    psi = e - ec;    
    alpha_b_c = alpha_cc * exp(-nb*psi);
    alpha_b_tensor = n * (rt23 * g * alpha_b_c);
    b_ref = n * rt23 * alpha_b_c * (1.0+c);
//    b_ref = n * rt23 * alpha_cc * (1.0+c);

    // Method 1
    temp_tensor = b_ref - (alpha_b_tensor - alpha);

    //// Method 2, better to use this when "p" is small 
    //temp_tensor = b_ref - (alpha_b_tensor - s*(1.0/p));

    lower = rt32*(temp_tensor("ij")*n("ij")).trace();
    if ( lower>0 ) 
      h = G0 * h0 * (1-ch*e) * sqrt(Pat/p) / (lower*lower);
//      h = G0 * h0 * (1-ch*e) * sqrt(Pat/p);
//      h = h0;

    // Method 1
    temp_tensor = alpha_b_tensor - alpha; 
    
    // Method 2
    //temp_tensor = alpha_b_tensor+n*m - s*(1.0/p); 

    TensorEvolution::TensorEvolutionHij = temp_tensor * (h*r_ef);
     
    return TensorEvolution::TensorEvolutionHij;
}