tensor RMC01YieldSurface::dFods(const EPState *EPS) const { tensor dFoverds( 2, def_dim_2, 0.0); // double p = EPS->getStress().p_hydrostatic(); double q = EPS->getStress().q_deviatoric(); double theta = EPS->getStress().theta(); // double temp_phi = EPS->getScalarVar(1)*3.14159265358979/180.0; // double temp_cohesive = EPS->getScalarVar(2); tensor DpoDs = EPS->getStress().dpoverds(); // dp/ds tensor DqoDs = EPS->getStress().dqoverds(); // dq/ds tensor DthetaoDs = EPS->getStress().dthetaoverds(); // d(theta)/ds // double a1 = -6*sin(temp_phi)/(3.0-sin(temp_phi)); // double a2 = -6*temp_cohesive*cos(temp_phi)/(3.0-sin(temp_phi)); double alfa = EPS->getScalarVar(1); // double k = EPS->getScalarVar(2); double a1 = (3.0*1.7320508076*alfa) / (2.0+1.7320508076*alfa); double e = (3.0-a1)/(3.0+a1); double Frou = g_0(theta, e); double Frou_prime = g_prime(theta, e); double dFoverdp = alfa*(-3.0); // double dFoverdq = Frou; // double dFoverdtheta = q*Frou_prime; double dFoverdq = Frou/1.7320508076; double dFoverdtheta = q*Frou_prime/1.7320508076; dFoverds = DpoDs * dFoverdp + DqoDs * dFoverdq + DthetaoDs * dFoverdtheta; // dF/ds return dFoverds; }
tensor RMC01PotentialSurface::dQods(const EPState *EPS) const { tensor dQoverds( 2, def_dim_2, 0.0); // double p = EPS->getStress().p_hydrostatic(); // p double q = EPS->getStress().q_deviatoric(); // q double theta = EPS->getStress().theta(); // theta // double temp_phi = EPS->getScalarVar(1)*3.14159265358979/180.0; // frictional angle // double temp_cohesive = EPS->getScalarVar(2); // cohesion tensor DpoDs = EPS->getStress().dpoverds(); // dp/ds tensor DqoDs = EPS->getStress().dqoverds(); // dq/ds tensor DthetaoDs = EPS->getStress().dthetaoverds(); // d(theta)/ds double alfa = EPS->getScalarVar(1); // Take alfa & k as internal variables // double k = EPS->getScalarVar(2); // instead of phi & conhesive double a1 = (3.0*1.7320508076*alfa) / (2.0+1.7320508076*alfa); // double a1 = -6*sin(temp_phi)/(3.0-sin(temp_phi)); // double a2 = -6*temp_cohesive*cos(temp_phi)/(3.0-sin(temp_phi)); double e = (3.0-a1)/(3.0+a1); double Frou = g_0(theta, e); // r(theta) double Frou_prime = g_prime(theta, e); // r'(theta) // double dQoverdp = a1; // dQ/dp // double dQoverdq = Frou; // dQ/dq // double dQoverdtheta = q*Frou_prime; // dQ/d(theta) double dQoverdp = alfa*(-3.0); // dQ/dp double dQoverdq = Frou/1.7320508076; // dQ/dq double dQoverdtheta = q*Frou_prime/1.7320508076; // dQ/d(theta) dQoverds = DpoDs * dQoverdp + DqoDs * dQoverdq + DthetaoDs * dQoverdtheta; return dQoverds; }
TEST(CrvFunctionalTest, UnsatCommunication) { crv::tracer().reset(); crv::Encoder encoder; crv::Channel<int> s, t; crv::Thread f(sat_communication_f, s, t); crv::Thread g_prime(sat_communication_g_prime, s, t); EXPECT_TRUE(crv::tracer().errors().empty()); EXPECT_EQ(smt::unsat, encoder.check_deadlock(crv::tracer())); }
tensor RMC01PotentialSurface::d2Qods2( const EPState *EPS ) const { tensor d2Qoverds2( 4, def_dim_4, 0.0); // d2Q/ds2(pqmn) // double p = EPS->getStress().p_hydrostatic(); // p double q = EPS->getStress().q_deviatoric(); // q double theta = EPS->getStress().theta(); // theta // double temp_phi = EPS->getScalarVar(1)*3.14159265358979/180.0; // frictional angle // double temp_cohesive = EPS->getScalarVar(2); // conhesion double alfa = EPS->getScalarVar(1); // double k = EPS->getScalarVar(2); double a1 = (3.0*1.7320508076*alfa) / (2.0+1.7320508076*alfa); tensor DpoDs = EPS->getStress().dpoverds(); // dp/ds tensor DqoDs = EPS->getStress().dqoverds(); // dq/ds tensor DthetaoDs = EPS->getStress().dthetaoverds(); // d(theta)/ds tensor D2poDs2 = EPS->getStress().d2poverds2(); // d2p/ds2 tensor D2qoDs2 = EPS->getStress().d2qoverds2(); // d2q/ds2 tensor D2thetaoDs2 = EPS->getStress().d2thetaoverds2(); // d2(theta)/ds2 // double a1 = -6*sin(temp_phi)/(3.0-sin(temp_phi)); // double a2 = -6*temp_cohesive*cos(temp_phi)/(3.0-sin(temp_phi)); double e = (3.0-a1)/(3.0+a1); double Frou = g_0(theta, e); // r(theta) double Frou_prime = g_prime(theta, e); // r'(theta) double Frou_second = g_second(theta, e); // r"(theta) // double dQoverdp = a1; // dQ/dp // double dQoverdq = Frou; // dQ/dq // double dQoverdtheta = q*Frou_prime; // dQ/d(theta) double dQoverdp = alfa*(-3.0); // dQ/dp double dQoverdq = Frou/1.7320508076; // dQ/dq double dQoverdtheta = q*Frou_prime/1.7320508076; // dQ/d(theta) // double a23 = Frou_prime; // d2Q/dqd(theta) // double a32 = a23; // d2Q/d(theta)dq // double a33 = q * Frou_second; // d2Q/d(theta)2 double a23 = Frou_prime/1.7320508076; // d2Q/dqd(theta) double a32 = a23/1.7320508076; // d2Q/d(theta)dq double a33 = q * Frou_second/1.7320508076; // d2Q/d(theta)2 // d2Qoverds2 = DthetaoDs("mn") * DqoDs("pq") * a23 + // DqoDs("mn") * DthetaoDs("pq") * a32 + // DthetaoDs("mn") * DthetaoDs("pq") * a33 + // D2poDs2("pqmn") * dQoverdp + // D2qoDs2("pqmn") * dQoverdq + // D2thetaoDs2("pqmn") * dQoverdtheta; d2Qoverds2 = DqoDs("pq") * DthetaoDs("mn") * a23 + DthetaoDs("pq") * DqoDs("mn") * a32 + DthetaoDs("pq") * DthetaoDs("mn") * a33 + D2poDs2("pqmn") * dQoverdp + D2qoDs2("pqmn") * dQoverdq + D2thetaoDs2("pqmn") * dQoverdtheta; return d2Qoverds2; }