本文整理汇总了C++中AnalysisModel::setDisp方法的典型用法代码示例。如果您正苦于以下问题:C++ AnalysisModel::setDisp方法的具体用法?C++ AnalysisModel::setDisp怎么用?C++ AnalysisModel::setDisp使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类AnalysisModel
的用法示例。
在下文中一共展示了AnalysisModel::setDisp方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: newStep
int PFEMIntegrator::newStep(double deltaT)
{
if (deltaT <= 0.0) {
opserr << "PFEMIntegrator::newStep() - error in variable\n";
opserr << "dT = " << deltaT << endln;
return -2;
}
// get a pointer to the AnalysisModel and Domain
AnalysisModel *theModel = this->getAnalysisModel();
if(theModel == 0) {
opserr << "Analysis model has not been linked - PFEMIntegrator::newStep()\n";
return -1;
}
Domain* theDomain = theModel->getDomainPtr();
if(theDomain == 0) {
opserr<<"WARNING: no domain is set for the model";
opserr<<" -- PFEMIntegrator::newStep()\n";
return -1;
}
// set the constants
c1 = deltaT;
c2 = 1.0;
c3 = 1.0/deltaT;
c4 = deltaT*deltaT;
c5 = deltaT;
c6 = 1.0;
// check if domainchange() is called
if (U == 0) {
opserr << "PFEMIntegrator::newStep() - domainChange() failed or hasn't been called\n";
return -3;
}
// set response at t to be that at t+deltaT of previous step
(*Ut) = *U;
(*Utdot) = *Udot;
(*Utdotdot) = *Udotdot;
// determinte new disps and accels
U->addVector(1.0, *Utdot, deltaT);
Udotdot->Zero();
// set states
theModel->setDisp(*U);
theModel->setAccel(*Udotdot);
// increment the time to t+deltaT and apply the load
double time = theModel->getCurrentDomainTime();
time += deltaT;
if (theModel->updateDomain(time, deltaT) < 0) {
opserr << "PFEMIntegrator::newStep() - failed to update the domain\n";
return -4;
}
return 0;
}
示例2: update
int AlphaOS::update(const Vector &deltaU)
{
updateCount++;
if (updateCount > 1) {
opserr << "WARNING AlphaOS::update() - called more than once -";
opserr << " AlphaOS integration scheme requires a LINEAR solution algorithm\n";
return -1;
}
AnalysisModel *theModel = this->getAnalysisModel();
if (theModel == 0) {
opserr << "WARNING AlphaOS::update() - no AnalysisModel set\n";
return -2;
}
// check domainChanged() has been called, i.e. Ut will not be zero
if (Ut == 0) {
opserr << "WARNING AlphaOS::update() - domainChange() failed or not called\n";
return -3;
}
// check deltaU is of correct size
if (deltaU.Size() != U->Size()) {
opserr << "WARNING AlphaOS::update() - Vectors of incompatible size ";
opserr << " expecting " << U->Size() << " obtained " << deltaU.Size() << "\n";
return -4;
}
// save the predictor displacements
(*Upt) = *U;
// determine the response at t+deltaT
U->addVector(1.0, deltaU, c1);
Udot->addVector(1.0, deltaU, c2);
Udotdot->addVector(0.0, deltaU, c3);
// update the response at the DOFs
theModel->setVel(*Udot);
theModel->setAccel(*Udotdot);
if (theModel->updateDomain() < 0) {
opserr << "AlphaOS::update() - failed to update the domain\n";
return -5;
}
// do not update displacements in elements only at nodes
theModel->setDisp(*U);
return 0;
}
示例3: domainChange
int
CentralDifferenceAlternative::update(const Vector &X)
{
updateCount++;
if (updateCount > 1) {
opserr << "ERROR CentralDifferenceAlternative::update() - called more than once -";
opserr << " Central Difference integraion schemes require a LINEAR solution algorithm\n";
return -1;
}
AnalysisModel *theModel = this->getAnalysisModel();
if (theModel == 0) {
opserr << "ERROR CentralDifferenceAlternative::update() - no AnalysisModel set\n";
return -2;
}
// check domainChanged() has been called, i.e. Ut will not be zero
if (Ut == 0) {
opserr << "WARNING CentralDifferenceAlternative::update() - domainChange() failed or not called\n";
return -2;
}
// check deltaU is of correct size
if (X.Size() != Ut->Size()) {
opserr << "WARNING CentralDifferenceAlternative::update() - Vectors of incompatible size ";
opserr << " expecting " << Ut->Size() << " obtained " << X.Size() << endln;
return -3;
}
// determine the displacement at t+delta t
Utp1->addVector(0.0, X, deltaT * deltaT);
(*Utp1) += *Ut;
Utp1->addVector(1.0, *Udot, deltaT);
// determine the vel at t+ 0.5 * delta t
(*Udot) = *Utp1;
(*Udot) -= *Ut;
(*Udot) *= (1.0/deltaT);
// update the disp & responses at the DOFs
theModel->setDisp(*Utp1);
theModel->setVel(*Udot);
theModel->updateDomain();
return 0;
}
示例4: newStep
int Newmark::newStep(double deltaT)
{
if (beta == 0 || gamma == 0) {
opserr << "Newmark::newStep() - error in variable\n";
opserr << "gamma = " << gamma << " beta = " << beta << endln;
return -1;
}
if (deltaT <= 0.0) {
opserr << "Newmark::newStep() - error in variable\n";
opserr << "dT = " << deltaT << endln;
return -2;
}
// get a pointer to the AnalysisModel
AnalysisModel *theModel = this->getAnalysisModel();
// set the constants
if (displ == true) {
c1 = 1.0;
c2 = gamma/(beta*deltaT);
c3 = 1.0/(beta*deltaT*deltaT);
} else {
c1 = beta*deltaT*deltaT;
c2 = gamma*deltaT;
c3 = 1.0;
}
if (U == 0) {
opserr << "Newmark::newStep() - domainChange() failed or hasn't been called\n";
return -3;
}
// set response at t to be that at t+deltaT of previous step
(*Ut) = *U;
(*Utdot) = *Udot;
(*Utdotdot) = *Udotdot;
if (displ == true) {
// determine new velocities and accelerations at t+deltaT
double a1 = (1.0 - gamma/beta);
double a2 = (deltaT)*(1.0 - 0.5*gamma/beta);
Udot->addVector(a1, *Utdotdot, a2);
double a3 = -1.0/(beta*deltaT);
double a4 = 1.0 - 0.5/beta;
Udotdot->addVector(a4, *Utdot, a3);
// set the trial response quantities
theModel->setVel(*Udot);
theModel->setAccel(*Udotdot);
} else {
// determine new displacements and velocities at t+deltaT
double a1 = (deltaT*deltaT/2.0);
U->addVector(1.0, *Utdot, deltaT);
U->addVector(1.0, *Utdotdot, a1);
Udot->addVector(1.0, *Utdotdot, deltaT);
// set the trial response quantities
theModel->setDisp(*U);
theModel->setVel(*Udot);
}
// increment the time to t+deltaT and apply the load
double time = theModel->getCurrentDomainTime();
time += deltaT;
if (theModel->updateDomain(time, deltaT) < 0) {
opserr << "Newmark::newStep() - failed to update the domain\n";
return -4;
}
return 0;
}