Ejemplo n.º 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";
}
Ejemplo n.º 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);
    }

}
Ejemplo n.º 3
0
MasterClockNanos ClockSync::sync(MasterClockNanos masterNow, MasterClockNanos externalNow) {
	if (performResetOnNextSync) {
		masterStart = masterNow;
		externalStart = externalNow;
		baseOffset = externalNow - masterNow;
		offsetSum = 0;
		syncCount = 0;
		drift = 0;
		qDebug() << "ClockSync: reset" << externalNow * 1e-6 << masterNow * 1e-6 << baseOffset * 1e-6 << getDrift();
		performResetOnNextSync = false;
		return masterNow;
	}
	MasterClockNanos masterElapsed = masterNow - masterStart;
	MasterClockNanos externalElapsed = externalNow - externalStart;

	// Use deltas in average offset calculation to avoid overflow
	MasterClockNanos deltaOffset = (externalNow - masterNow) - baseOffset;
	offsetSum += deltaOffset;
	++syncCount;
	MasterClockNanos currentOffset = baseOffset + MasterClockNanos(externalElapsed * drift);
	if (emergencyResetThresholdNanos < qAbs(deltaOffset)) {
		scheduleReset();
	}
	if (periodicResetNanos < masterElapsed) {
		MasterClockNanos newBaseOffset = baseOffset + offsetSum / syncCount;
		drift = (newBaseOffset - currentOffset) / (double)periodicResetNanos;
		masterStart = masterNow;
		externalStart = externalNow;
		baseOffset = currentOffset;
		offsetSum = 0;
		syncCount = 0;
#if 0
		qDebug() << "ClockSync: offset delta" << (newBaseOffset - baseOffset) * 1e-6 << "drift" << getDrift();
#endif
	}
	return externalNow - currentOffset;
}