本文整理汇总了C++中FE_Element::getM_Force方法的典型用法代码示例。如果您正苦于以下问题:C++ FE_Element::getM_Force方法的具体用法?C++ FE_Element::getM_Force怎么用?C++ FE_Element::getM_Force使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类FE_Element
的用法示例。
在下文中一共展示了FE_Element::getM_Force方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: x
void
BandArpackSolver::myMv(int n, double *v, double *result)
{
Vector x(v, n);
Vector y(result,n);
y.Zero();
AnalysisModel *theAnalysisModel = theSOE->theModel;
// loop over the FE_Elements
FE_Element *elePtr;
FE_EleIter &theEles = theAnalysisModel->getFEs();
while((elePtr = theEles()) != 0) {
const Vector &b = elePtr->getM_Force(x, 1.0);
y.Assemble(b, elePtr->getID(), 1.0);
}
// loop over the DOF_Groups
DOF_Group *dofPtr;
DOF_GrpIter &theDofs = theAnalysisModel->getDOFs();
Integrator *theIntegrator = 0;
while ((dofPtr = theDofs()) != 0) {
const Vector &a = dofPtr->getM_Force(x,1.0);
y.Assemble(a,dofPtr->getID(),1.0);
}
}
示例2: while
int
IncrementalIntegrator::doMv(const Vector &v, Vector &res) {
int n = v.Size();
if (isDiagonal == true) {
for (int i=0; i<n; i++)
res[i] = diagMass[i]*v[i];
return 0;
}
res.Zero();
// loop over the FE_Elements
FE_Element *elePtr;
FE_EleIter &theEles = theAnalysisModel->getFEs();
while((elePtr = theEles()) != 0) {
const Vector &b = elePtr->getM_Force(v, 1.0);
res.Assemble(b, elePtr->getID(), 1.0);
}
// loop over the DOF_Groups
DOF_Group *dofPtr;
DOF_GrpIter &theDofs = theAnalysisModel->getDOFs();
while ((dofPtr = theDofs()) != 0) {
const Vector &a = dofPtr->getM_Force(v, 1.0);
res.Assemble(a, dofPtr->getID(), 1.0);
}
return 0;
}
示例3: x
void
ArpackSolver::myMv(int n, double *v, double *result)
{
Vector x(v, n);
Vector y(result,n);
bool mDiagonal = theArpackSOE->mDiagonal;
if (mDiagonal == true) {
int Msize = theArpackSOE->Msize;
double *M = theArpackSOE->M;
/* for output
DataFileStream dataStream("M.txt");
dataStream.open();
for (int i=0; i<n; i++)
dataStream << M[i] << endln;
dataStream.close();
*/
if (n <= Msize) {
for (int i=0; i<n; i++)
result[i] = M[i]*v[i];
} else {
opserr << "ArpackSolver::myMv() n > Msize!\n";
return;
}
} else {
y.Zero();
AnalysisModel *theAnalysisModel = theArpackSOE->theModel;
// loop over the FE_Elements
FE_Element *elePtr;
FE_EleIter &theEles = theAnalysisModel->getFEs();
while((elePtr = theEles()) != 0) {
const Vector &b = elePtr->getM_Force(x, 1.0);
y.Assemble(b, elePtr->getID(), 1.0);
}
// loop over the DOF_Groups
DOF_Group *dofPtr;
DOF_GrpIter &theDofs = theAnalysisModel->getDOFs();
while ((dofPtr = theDofs()) != 0) {
const Vector &a = dofPtr->getM_Force(x,1.0);
y.Assemble(a, dofPtr->getID(), 1.0);
}
}
// if paallel we have to merge the results
int processID = theArpackSOE->processID;
if (processID != -1) {
Channel **theChannels = theArpackSOE->theChannels;
int numChannels = theArpackSOE->numChannels;
if (processID != 0) {
theChannels[0]->sendVector(0, 0, y);
theChannels[0]->recvVector(0, 0, y);
} else {
Vector other(workArea, n);
// recv contribution from remote & add
for (int i=0; i<numChannels; i++) {
theChannels[i]->recvVector(0,0,other);
y += other;
}
// send result back
for (int i=0; i<numChannels; i++) {
theChannels[i]->sendVector(0,0,y);
}
}
}
}