Beispiel #1
0
void ElTawil2D::getGradient(double &gx, double &gy, double x, double y)
{
// check if the point is on the surface
    double drift =  getDrift(x, y);
    double loc   =  forceLocation(drift);
    double capx = capXdim;
    double capy = capYdim;

    if(loc != 0)
    {
     	opserr << "ERROR - ElTawil2D::getGradient(double &gx, double &gy, double x, double y)\n";
        opserr << "Force point not on yield surface, drift = " << drift << " loc = " << loc <<"\n";
        // opserr << "\a";
        gx = 1.0;
        gy = 1.0;
    }
    else
    {
		double a = 10.277;//3.043;//4.29293; //by compatibility, check err in gradient
		// double yt = 0.95;

		if(y > ytPos)
		{
		 	gx = 2*a*x/capx;
			gy = 1;
		}
		else if(y < ytNeg)
		{
		 	gx = 2*a*x/capx;
			gy = -1; //-1*y/capy; <-- why did i write this?// -1 ?
		}
		else
		{
			// double xVal = x*capx;
			double yVal = fabs(y*capy);  //!!
			// double yVal = y*capy;           //!!

			gx = 1/xBal;
			if(x < 0)
				gx = -1*gx;

			if(y < 0)
				gy = -1*(1/pow( fabs(yNegCap), ty))*ty*(pow(yVal,ty-1));
			else
				gy = (1/pow(yPosCap, cz))*cz*(pow(yVal,cz-1));
		}
	}

	// opserr << "gx = " << gx << ", gy = " << gy << ", capy = " << capy << "\n";
	// opserr << "\a";
}
Beispiel #2
0
void Hajjar2D::getGradient(double &gx, double &gy, double xi, double yi)
{
// check if the point is on the surface
    double drift =  getDrift(xi, yi);
    //!! why is capXdim not here??
    
    /*if(drift < -error)
    {
        opserr << "ERROR - Hajjar2D::getGradient(double &gx, double &gy, double x, double y)\n";
        opserr << "Point inside the yield surface\n";
		opserr << " fx = " << xi << ", fy = " << yi  << " drift = " << drift << "\n";
        opserr << "\a";
    }
    else if(drift > error)
    {
        opserr << "ERROR - Hajjar2D::getGradient(double &gx, double &gy, double x, double y)\n";
        opserr << "Point outside the yield surface\n";
		opserr << " fx = " << xi << ", fy = " << yi  << " drift = " << drift << "\n";
        opserr << "\a";
    }*/
    if(forceLocation(drift)!=0)
    {
     	opserr << "ERROR - Hajjar2D::getGradient(double &gx, double &gy, double x, double y)\n";
        opserr << "Force point not on the yield surface\n";
		opserr << " fx = " << xi << ", fy = " << yi  << " drift = " << drift << "\n";
        opserr << "\a";
    }
    else
    {
		double x = xi;
		double y = yi /*- centroidY*/;

    	gx = 2*c1*x + 2*c3*pow(y, 2)*(x);
        gy = 2*c2*y + 2*c3*pow(x, 2)*(y);
    }

}