60 for (
int j = 0; name[j]; j++) {
61 name[j] = tolower(name[j]);
64 typedef std::map<std::string,const LoadableCalls *> mleh;
76 for (
int j = 0; name[j]; j++) {
77 name[j] = tolower(name[j]);
86 silent_cerr(
"DataManager::SetLoadableElemModule(): "
87 "loadable element handler \"" << name
88 <<
"\" already defined" << std::endl);
92 silent_cout(
"DataManager::SetLoadableElemModule(): "
93 "loadable element handler \"" << name
94 <<
"\" already defined; "
95 "new definition ignored" << std::endl);
99 silent_cout(
"DataManager::SetLoadableElemModule(): "
100 "loadable element handler \"" << name
101 <<
"\" already defined; "
102 "replaced by new definition" << std::endl);
140 const integer& iStep,
bool bServePending)
146 "Global symbol table:" << std::endl
152 for (
unsigned int iCnt = 0; iCnt <
DriveData[iType].iNum; iCnt++) {
153 DriveData[iType].ppFirstDrive[iCnt]->ServePending(dTime);
207 out_ds <<
"Regular steps dof stats" << std::endl;
253 OutHdl.
Log() <<
"struct node momentum dofs:";
272 OutHdl.
Log() <<
"struct node momentum eqs:";
291 OutHdl.
Log() <<
"struct displacement node dofs:";
306 OutHdl.
Log() <<
"struct displacement node eqs:";
321 OutHdl.
Log() <<
"struct displacement node momentum dofs:";
343 OutHdl.
Log() <<
"struct displacement node momentum eqs:";
379 OutHdl.
Log() <<
"struct displacement node labels:";
396 for (NodeVecType::const_iterator i =
Nodes.begin(); i !=
Nodes.end(); ++i) {
399 <<
"(" << (*i)->GetLabel() <<
")"
403 unsigned int iNumDof = (*i)->iGetNumDof();
405 ASSERT((*i)->iGetFirstIndex() >= 0);
408 Dof* pDf = &
Dofs[(*i)->iGetFirstIndex()];
413 <<
"(" << (*i)->GetLabel() <<
"): "
414 "first dof = " << pDf->iIndex + 1
419 unsigned int nd = (*i)->iGetNumDof();
423 <<
"(" << (*i)->GetLabel() <<
"): "
424 << nd <<
" " << fd + 1;
426 out_ds <<
"->" << fd + nd;
430 (*i)->DescribeDof(out_ds,
435 (*i)->DescribeEq(out_ds,
442 std::vector<std::string> DofDesc;
443 (*i)->DescribeDof(DofDesc);
444 if (DofDesc.size() == iNumDof) {
445 for (
unsigned int iCnt = 0; iCnt < iNumDof; iCnt++) {
446 pDf[iCnt].Description = DofDesc[iCnt];
450 std::ostringstream os;
452 <<
"(" << (*i)->GetLabel() <<
")";
453 std::string name(os.str());
455 for (
unsigned int iCnt = 0; iCnt < iNumDof; iCnt++) {
457 os.seekp(0, std::ios_base::end);
458 os <<
": dof(" << iCnt + 1 <<
")";
459 pDf[iCnt].Description = os.str();
463 std::vector<std::string> EqDesc;
464 (*i)->DescribeEq(EqDesc);
465 if (EqDesc.size() == iNumDof) {
466 for (
unsigned int iCnt = 0; iCnt < iNumDof; iCnt++) {
467 pDf[iCnt].EqDescription = EqDesc[iCnt];
471 std::ostringstream os;
473 <<
"(" << (*i)->GetLabel() <<
")";
474 std::string name(os.str());
476 for (
unsigned int iCnt = 0; iCnt < iNumDof; iCnt++) {
478 os.seekp(0, std::ios_base::end);
479 os <<
": equation(" << iCnt + 1 <<
")";
480 pDf[iCnt].EqDescription = os.str();
484 for (
unsigned int iCnt = 0; iCnt < iNumDof; iCnt++) {
485 pDf[iCnt].Order = (*i)->GetDofType(iCnt);
486 pDf[iCnt].EqOrder = (*i)->GetEqType(iCnt);
499 <<
"(" << pEl->
GetLabel() <<
"))" << std::endl);
515 "first dof = " << pDf->iIndex + 1
525 << nd <<
" " << fd + 1;
527 out_ds <<
"->" << fd + nd;
545 std::vector<std::string> DofDesc;
547 if (DofDesc.size() == iNumDof) {
548 for (
unsigned int iCnt = 0; iCnt < iNumDof; iCnt++) {
549 pDf[iCnt].Description = DofDesc[iCnt];
553 std::ostringstream os;
556 std::string name(os.str());
558 for (
unsigned int iCnt = 0; iCnt < iNumDof; iCnt++) {
560 os.seekp(0, std::ios_base::end);
561 os <<
": dof(" << iCnt + 1 <<
")";
562 pDf[iCnt].Description = os.str();
566 std::vector<std::string> EqDesc;
568 if (EqDesc.size() == iNumDof) {
569 for (
unsigned int iCnt = 0; iCnt < iNumDof; iCnt++) {
570 pDf[iCnt].EqDescription = EqDesc[iCnt];
574 std::ostringstream os;
577 std::string name(os.str());
579 for (
unsigned int iCnt = 0; iCnt < iNumDof; iCnt++) {
581 os.seekp(0, std::ios_base::end);
582 os <<
": equation(" << iCnt + 1 <<
")";
583 pDf[iCnt].EqDescription = os.str();
587 for (
unsigned int iCnt = 0; iCnt < iNumDof; iCnt++) {
589 pDf[iCnt].EqOrder = pEWD->
GetEqType(iCnt);
602 typedef std::set<const Elem *> elmap;
603 typedef std::map<const Node *, elmap *> nodemap;
607 std::vector<const Node *> connectedNodes;
610 out_ds <<
"Element connections" << std::endl;
616 if (connectedNodes.size() > 0) {
619 <<
"(" << pEl->
GetLabel() <<
") connecting" << std::endl;
621 for (std::vector<const Node *>::const_iterator i = connectedNodes.begin();
622 i != connectedNodes.end(); ++i)
628 <<
"(" << real_i->
GetLabel() <<
")" << std::endl;
631 nodemap::iterator n = connectedElems[real_i->
GetNodeType()].find(real_i);
632 if (n == connectedElems[real_i->
GetNodeType()].end()) {
633 connectedElems[real_i->
GetNodeType()][real_i] =
new elmap;
635 connectedElems[real_i->
GetNodeType()][real_i]->insert(pEl);
641 <<
"(" << pEl->
GetLabel() <<
") not connected" << std::endl;
649 out_ds <<
"Node connections" << std::endl;
652 for (nodemap::iterator n = connectedElems[t].
begin();
653 n != connectedElems[t].end(); ++n)
657 <<
"(" << n->first->GetLabel() <<
") connected to" << std::endl;
659 for (elmap::const_iterator e = n->second->begin();
660 e != n->second->end(); ++e)
665 <<
"(" << (*e)->GetLabel() <<
")" << std::endl;
692 "Warning, no joints are defined; "
693 "You shouldn't have reached this point");
704 out_ds <<
"Initial assembly dof stats" << std::endl;
712 iInitialNumDofs +=
dynamic_cast<const StructDispNode*
>(i->second)->iGetInitialNumDof();
729 for (ElemContainerType::const_iterator e =
ElemData[iCnt1].ElemContainer.begin();
770 Dofs.resize(iInitialNumDofs);
776 for (iIndex = 0; iIndex < iInitialNumDofs; iIndex++) {
777 Dofs[iIndex].iIndex = iIndex;
793 unsigned int nd = iNumDofs;
798 <<
"): " << nd <<
" " << fd + 1;
800 out_ds <<
"->" << fd + nd;
814 std::vector<std::string> DofDesc;
816 if (DofDesc.size() == iNumDofs) {
817 for (
unsigned iCnt = 0; iCnt < iNumDofs; iCnt++) {
818 Dofs[iIndex + iCnt].Description = DofDesc[iCnt];
822 std::ostringstream os;
825 std::string name(os.str());
827 for (
unsigned int iCnt = 0; iCnt < iNumDofs; iCnt++) {
829 os.seekp(0, std::ios_base::end);
830 os <<
": dof(" << iCnt + 1 <<
")";
831 Dofs[iIndex + iCnt].Description = os.str();
835 std::vector<std::string> EqDesc;
837 if (EqDesc.size() == iNumDofs) {
838 for (
unsigned iCnt = 0; iCnt < iNumDofs; iCnt++) {
839 Dofs[iIndex + iCnt].EqDescription = EqDesc[iCnt];
843 std::ostringstream os;
846 std::string name(os.str());
848 for (
unsigned int iCnt = 0; iCnt < iNumDofs; iCnt++) {
850 os.seekp(0, std::ios_base::end);
851 os <<
": equation(" << iCnt + 1 <<
")";
852 Dofs[iIndex + iCnt].EqDescription = os.str();
860 <<
"(" << n->second->GetLabel() <<
") has 0 dofs"
879 for (ElemContainerType::const_iterator p =
ElemData[iCnt1].ElemContainer.begin();
907 unsigned int nd = iNumDofs;
913 <<
"): " << nd <<
" " << fd + 1;
915 out_ds <<
"->" << fd + nd;
929 std::vector<std::string> DofDesc;
931 if (DofDesc.size() == iNumDofs) {
932 for (
unsigned iCnt = 0; iCnt < iNumDofs; iCnt++) {
933 Dofs[iIndex + iCnt].Description = DofDesc[iCnt];
937 std::ostringstream os;
940 std::string name(os.str());
942 for (
unsigned int iCnt = 0; iCnt < iNumDofs; iCnt++) {
944 os.seekp(0, std::ios_base::end);
945 os <<
": dof(" << iCnt + 1 <<
")";
946 Dofs[iIndex + iCnt].Description = os.str();
950 std::vector<std::string> EqDesc;
952 if (EqDesc.size() == iNumDofs) {
953 for (
unsigned iCnt = 0; iCnt < iNumDofs; iCnt++) {
954 Dofs[iIndex + iCnt].EqDescription = EqDesc[iCnt];
958 std::ostringstream os;
961 std::string name(os.str());
963 for (
unsigned int iCnt = 0; iCnt < iNumDofs; iCnt++) {
965 os.seekp(0, std::ios_base::end);
966 os <<
": equation(" << iCnt + 1 <<
")";
967 Dofs[iIndex + iCnt].EqDescription = os.str();
976 "has 0 dofs" << std::endl);
983 ASSERT(iIndex == iInitialNumDofs);
994 while (pEl != NULL) {
999 if (iCurrRows >= 0) {
1001 iMaxRowsJac = std::max(iMaxRowsJac, iCurrRows);
1002 iMaxColsJac = std::max(iMaxColsJac, iCurrCols);
1005 iCurrRows = std::abs(iCurrRows);
1008 iMaxRowsRes = std::max(iMaxRowsRes, iCurrRows);
1009 iMaxItemsJac = std::max(iMaxItemsJac, iCurrRows * iCurrCols);
1021 #ifdef DEBUG_MEMMANAGER
1023 "After initialisation in InitialJointAssembly" << std::endl
1046 ElemData[iCnt1].bToBeUsedInAssembly() &&
1049 for (ElemContainerType::const_iterator p =
ElemData[iCnt1].ElemContainer.begin();
1079 for (
integer iNumIter = 0; ; iNumIter++) {
1108 pResHdl->
Add(iFirstIndex + 1, TmpVec*dPosStiff);
1114 pResHdl->
Add(iFirstIndex + 4, TmpVec*dPosStiff);
1124 TmpVec = RDelta*wPrev - wCurr;
1128 TmpVec = wPrev - wCurr;
1131 pResHdl->
Add(iFirstIndex + iOffset + 4, TmpVec*dVelStiff);
1136 pResHdl->
Add(iFirstIndex + iOffset + 1, TmpVec*dVelStiff);
1142 while (pEl != NULL) {
1166 if (!std::isfinite(dTest)) {
1167 silent_cerr(
"Assembly diverged; aborting..." << std::endl);
1170 dTest =
sqrt(dTest);
1179 silent_cout(
"\tIteration(" << iNumIter <<
") "
1180 "" << dTest << std::endl);
1186 "performed successfully in "
1187 << iNumIter <<
" iterations"
1194 silent_cerr(
"Initial assembly iterations "
1195 "reached maximum number "
1226 for (
int iCnt = 1; iCnt <= iOffset; iCnt++) {
1228 integer iTmp = iFirstIndex + iCnt;
1229 pMatHdl->
PutCoef(iTmp, iTmp, dPosStiff);
1233 pMatHdl->
PutCoef(iTmp, iTmp, dVelStiff);
1243 Vec3 TmpVec = R*(R0.
MulTV(W0*dVelStiff));
1247 pMatHdl->
PutCoef(iFirstIndex + iOffset + 6, iFirstIndex + 5, d);
1248 pMatHdl->
PutCoef(iFirstIndex + iOffset + 5, iFirstIndex + 6, -d);
1252 pMatHdl->
PutCoef(iFirstIndex + iOffset + 4, iFirstIndex + 6, d);
1253 pMatHdl->
PutCoef(iFirstIndex + iOffset + 6, iFirstIndex + 4, -d);
1257 pMatHdl->
PutCoef(iFirstIndex + iOffset + 5, iFirstIndex + 4, d);
1258 pMatHdl->
PutCoef(iFirstIndex + iOffset + 4, iFirstIndex + 5, -d);
1264 while (pEl != NULL) {
1275 silent_cout(
"Jacobian:" << std::endl
1284 silent_cerr(
"Initial assembly failed because no pivot element "
1285 "could be found for column " << err.
iCol
1287 "aborting..." << std::endl);
1303 silent_cout(
"\tIteration(" << iNumIter <<
") " << std::setw(12) << dTest <<
" J");
1307 silent_cout(
" cond=");
1316 silent_cout(std::endl);
1340 ElemData[iCnt1].bToBeUsedInAssembly() &&
1345 for (ElemContainerType::const_iterator p =
ElemData[iCnt1].ElemContainer.begin();
1351 pDO->
iNumDofs = p->second->iGetNumDof();
1373 for (NodeVecType::iterator i =
Nodes.begin(); i !=
Nodes.end(); ++i) {
1375 pDO->
iNumDofs = (*i)->iGetNumDof();
1386 for (ElemContainerType::const_iterator p =
ElemData[iCnt].ElemContainer.begin();
1392 <<
"(" << pEWD->
GetLabel() <<
")" << std::endl);
1407 for (NodeVecType::iterator i =
Nodes.begin(); i !=
Nodes.end(); ++i) {
1408 (*i)->SetValue(
this, X, XP);
1422 if (!fp.is_open()) {
1423 silent_cerr(
"DataManager::SetValue(): "
1430 if (fp.gcount() != std::streamsize(X.
iGetSize()*
sizeof(double))) {
1431 silent_cerr(
"DataManager::SetValue(): "
1437 if (fp.gcount() != std::streamsize(XP.
iGetSize()*
sizeof(double))) {
1438 silent_cerr(
"DataManager::SetValue(): "
1459 Var_Step =
OutHdl.CreateVar<
integer>(
"run.step",
"-",
"time step index");
1461 Var_TimeStep =
OutHdl.CreateVar<
doublereal>(
"run.timestep",
"s",
"integration time step");
1480 OutputHandler::NcDimVec dim(1);
1481 dim[0] =
OutHdl.CreateDim(
"eigensolutions", iNumAnalyses);
1483 m_Dim_Eig_iSize =
OutHdl.CreateDim(
"eig_iSize", iSize);
1484 m_Dim_Eig_iComplex =
OutHdl.CreateDim(
"complex_var_dim", 2);
1486 OutputHandler::AttrValVec attrs2(2);
1487 attrs2[0] = OutputHandler::AttrVal(
"type",
"integer");
1488 attrs2[1] = OutputHandler::AttrVal(
"description",
1489 "timestep index of eigensolution");
1491 Var_Eig_lStep =
OutHdl.CreateVar(
"eig.step", ncInt, attrs2, dim);
1493 OutputHandler::AttrValVec attrs3(3);
1494 attrs3[0] = OutputHandler::AttrVal(
"units",
"s");
1495 attrs3[1] = OutputHandler::AttrVal(
"type",
"doublereal");
1496 attrs3[2] = OutputHandler::AttrVal(
"description",
1497 "simulation time at which the eigensolution was computed");
1499 Var_Eig_dTime =
OutHdl.CreateVar(
"eig.time", ncDouble, attrs3, dim);
1501 attrs3[0] = OutputHandler::AttrVal(
"units",
"-");
1502 attrs3[1] = OutputHandler::AttrVal(
"type",
"doublereal");
1503 attrs3[2] = OutputHandler::AttrVal(
"description",
1504 "coefficient used to build Aplus and Aminus matrices");
1506 Var_Eig_dCoef =
OutHdl.CreateVar(
"eig.dCoef", ncDouble, attrs3, dim);
1508 OutputHandler::NcDimVec dim2(2);
1512 dim2[1] =
OutHdl.CreateDim(
"eig_iIdxSize", iNumNodes);
1514 attrs2[0] = OutputHandler::AttrVal(
"type",
"integer");
1515 attrs2[1] = OutputHandler::AttrVal(
"description",
1516 "structural nodes base index");
1518 Var_Eig_Idx =
OutHdl.CreateVar(
"eig.idx", ncInt, attrs2, dim2);
1527 const unsigned uCurrEigSol,
1528 const int iResultsPrecision)
1533 if (iResultsPrecision) {
1535 int iNewWidth = iResultsPrecision + 7;
1536 out.width(iNewWidth);
1537 out.precision(iResultsPrecision);
1542 <<
"% time: " << dTime << std::endl;
1544 <<
"dTime = " << dTime <<
';' << std::endl;
1548 <<
"% coefficient" << std::endl
1549 <<
"dCoef = " << dCoef <<
";" << std::endl;
1556 Var_Eig_dTime->put_rec(&dTime, uCurrEigSol);
1557 Var_Eig_lStep->put_rec(&lStep, uCurrEigSol);
1558 Var_Eig_dCoef->put_rec(&dCoef, uCurrEigSol);
1567 const unsigned uCurrEigSol,
1568 const int iMatrixPrecision)
1577 OutputHandler::NcDimVec dim2(2);
1578 dim2[0] = m_Dim_Eig_iSize;
1579 dim2[1] = m_Dim_Eig_iSize;
1581 OutputHandler::AttrValVec attrs3(3);
1582 attrs3[0] = OutputHandler::AttrVal(
"units",
"-");
1583 attrs3[1] = OutputHandler::AttrVal(
"type",
"doublereal");
1584 attrs3[2] = OutputHandler::AttrVal(
"description",
"F/xPrime + dCoef * F/x");
1586 std::stringstream varname_ss;
1587 varname_ss <<
"eig." << uCurrEigSol <<
".Aplus";
1588 Var_Eig_dAplus =
OutHdl.CreateVar(varname_ss.str(),ncDouble, attrs3, dim2);
1589 attrs3[2] = OutputHandler::AttrVal(
"description",
"F/xPrime - dCoef * F/x");
1593 varname_ss <<
"eig." << uCurrEigSol <<
".Aminus";
1594 Var_Eig_dAminus =
OutHdl.CreateVar(varname_ss.str(),ncDouble, attrs3, dim2);
1596 Var_Eig_dAplus->put(MatB.
pdGetMat(), nrows, ncols);
1597 Var_Eig_dAminus->put(MatA.
pdGetMat(), nrows, ncols);
1605 if (iMatrixPrecision) {
1607 int iNewWidth = iMatrixPrecision + 7;
1608 out.width(iNewWidth);
1609 out.precision(iMatrixPrecision);
1613 <<
"% F/xPrime + dCoef * F/x" << std::endl
1614 <<
"Aplus" <<
" = [";
1617 for (
integer r = 1; r <= nrows; r++) {
1619 out << MatB(r,
c) <<
' ';
1623 out <<
"];" << std::endl;
1626 out <<
";" << std::endl;
1631 <<
"% F/xPrime - dCoef * F/x" << std::endl
1632 <<
"Aminus" <<
" = [";
1634 for (
integer r = 1; r <= nrows; r++) {
1636 out << MatA(r,
c) <<
' ';
1640 out <<
"];" << std::endl;
1643 out <<
";" << std::endl;
1653 const unsigned uCurrEigSol,
1654 const int iMatrixPrecision)
1662 if (iMatrixPrecision) {
1664 int iNewWidth = iMatrixPrecision + 7;
1665 out.width(iNewWidth);
1666 out.precision(iMatrixPrecision);
1670 <<
"% F/xPrime + dCoef *F/x" << std::endl
1671 <<
"Aplus" <<
" = [";
1674 i != MatB.
end(); ++i)
1676 if (i->dCoef != 0.) {
1677 out << i->iRow + 1 <<
" " << i->iCol + 1 <<
" " << i->dCoef <<
";" << std::endl;
1681 out <<
"];" << std::endl
1682 <<
"Aplus = spconvert(Aplus);" << std::endl;
1685 <<
"% F/xPrime - dCoef *F/x" << std::endl
1686 <<
"Aminus" <<
" = [";
1689 i != MatA.
end(); ++i)
1691 if (i->dCoef != 0.) {
1692 out << i->iRow + 1 <<
" " << i->iCol + 1 <<
" " << i->dCoef <<
";" << std::endl;
1696 out <<
"];" << std::endl
1697 <<
"Aminus = spconvert(Aminus);" << std::endl;
1701 OutputHandler::NcDimVec dim2(2);
1702 std::stringstream dimname_ss;
1703 dimname_ss <<
"eig_" << uCurrEigSol <<
"_Aplus_sp_iSize";
1704 dim2[0] =
OutHdl.CreateDim(dimname_ss.str(), MatB.
Nz());
1705 dim2[1] =
OutHdl.DimV3();
1707 OutputHandler::AttrValVec attrs3(3);
1708 attrs3[0] = OutputHandler::AttrVal(
"units",
"-");
1709 attrs3[1] = OutputHandler::AttrVal(
"type",
"doublereal");
1710 attrs3[2] = OutputHandler::AttrVal(
"description",
"F/xPrime + dCoef * F/x");
1714 dimname_ss <<
"eig_" << uCurrEigSol <<
"_Aminus_sp_iSize";
1715 dim2[0] =
OutHdl.CreateDim(dimname_ss.str(), MatA.
Nz());
1717 std::stringstream varname_ss;
1718 varname_ss <<
"eig." << uCurrEigSol <<
".Aplus";
1719 Var_Eig_dAplus =
OutHdl.CreateVar(varname_ss.str(), ncDouble, attrs3, dim2);
1720 attrs3[2] = OutputHandler::AttrVal(
"description",
"F/xPrime - dCoef * F/x");
1724 varname_ss <<
"eig." << uCurrEigSol <<
".Aminus";
1725 Var_Eig_dAminus =
OutHdl.CreateVar(varname_ss.str(), ncDouble, attrs3, dim2);
1730 i != MatB.
end(); ++i)
1732 if (i->dCoef != 0.) {
1733 v =
Vec3(i->iRow, i->iCol, i->dCoef);
1734 Var_Eig_dAplus->put_rec(v.
pGetVec(), iCnt);
1741 j != MatA.
end(); ++j)
1743 if (j->dCoef != 0.) {
1744 v =
Vec3(j->iRow, j->iCol, j->dCoef);
1745 Var_Eig_dAminus->put_rec(v.
pGetVec(), iCnt);
1756 const unsigned uCurrEigSol,
1757 const int iMatrixPrecision)
1765 if (iMatrixPrecision) {
1767 int iNewWidth = iMatrixPrecision + 7;
1768 out.width(iNewWidth);
1769 out.precision(iMatrixPrecision);
1773 <<
"% F/xPrime + dCoef *F/x" << std::endl
1774 <<
"Aplus" <<
" = [";
1777 i != MatB.
end(); ++i)
1779 if (i->dCoef != 0.) {
1780 out << i->iRow + 1 <<
" " << i->iCol + 1 <<
" " << i->dCoef <<
";" << std::endl;
1784 out <<
"];" << std::endl
1785 <<
"Aplus = spconvert(Aplus);" << std::endl;
1788 <<
"% F/xPrime - dCoef *F/x" << std::endl
1789 <<
"Aminus" <<
" = [";
1792 j != MatA.
end(); ++j)
1794 if (j->dCoef != 0.) {
1795 out << j->iRow + 1 <<
" " << j->iCol + 1 <<
" " << j->dCoef <<
";" << std::endl;
1799 out <<
"];" << std::endl
1800 <<
"Aminus = spconvert(Aminus);" << std::endl;
1805 OutputHandler::NcDimVec dim2(2);
1807 std::stringstream dimname_ss;
1808 dimname_ss <<
"eig_" << uCurrEigSol <<
"_Aplus_sp_iSize";
1813 i != MatB.
end(); ++i)
1815 if (i->dCoef != 0.) {
1822 j != MatA.
end(); ++j)
1824 if(j->dCoef != 0.) {
1829 dim2[0] =
OutHdl.CreateDim(dimname_ss.str(), iMatBNz);
1830 dim2[1] =
OutHdl.DimV3();
1832 OutputHandler::AttrValVec attrs3(3);
1833 attrs3[0] = OutputHandler::AttrVal(
"units",
"-");
1834 attrs3[1] = OutputHandler::AttrVal(
"type",
"doublereal");
1835 attrs3[2] = OutputHandler::AttrVal(
"description",
"F/xPrime + dCoef * F/x");
1837 std::stringstream varname_ss;
1838 varname_ss <<
"eig." << uCurrEigSol <<
".Aplus";
1839 Var_Eig_dAplus =
OutHdl.CreateVar(varname_ss.str(), ncDouble, attrs3, dim2);
1843 dimname_ss <<
"eig_" << uCurrEigSol <<
"_Aminus_sp_iSize";
1844 dim2[0] =
OutHdl.CreateDim(dimname_ss.str(), iMatANz);
1846 attrs3[2] = OutputHandler::AttrVal(
"description",
"F/xPrime - dCoef * F/x");
1850 varname_ss <<
"eig." << uCurrEigSol <<
".Aminus";
1851 Var_Eig_dAminus =
OutHdl.CreateVar(varname_ss.str(), ncDouble, attrs3, dim2);
1856 i != MatB.
end(); ++i)
1858 if (i->dCoef != 0.) {
1859 v =
Vec3(i->iRow, i->iCol, i->dCoef);
1860 Var_Eig_dAplus->put_rec(v.
pGetVec(), iCnt);
1867 i != MatA.
end(); ++i)
1869 if (i->dCoef != 0.) {
1870 v =
Vec3(i->iRow, i->iCol, i->dCoef);
1871 Var_Eig_dAminus->put_rec(v.
pGetVec(), iCnt);
1893 if (iResultsPrecision) {
1895 int iNewWidth = iResultsPrecision + 7;
1896 out.width(iNewWidth);
1897 out.precision(iResultsPrecision);
1901 <<
"% structural nodes labels" << std::endl
1902 <<
"labels = [" << std::endl;
1904 for (; i != e; ++i) {
1913 out << pN->
GetLabel() <<
";" << std::endl;
1916 out <<
"];" << std::endl;
1919 <<
"% structural nodes base index" << std::endl
1920 <<
"idx = [" << std::endl;
1934 out <<
"];" << std::endl;
1937 <<
"% structural nodes reference configuration (X, Phi)" << std::endl
1938 <<
"X0 = [" << std::endl;
1956 << X(1) <<
";" << std::endl
1957 << X(2) <<
";" << std::endl
1958 << X(3) <<
";" << std::endl
1959 << Phi(1) <<
";" << std::endl
1960 << Phi(2) <<
";" << std::endl
1961 << Phi(3) <<
";" << std::endl;
1964 out <<
"];" << std::endl;
1973 std::vector<long> start (2, 0);
1974 start[0] = uCurrEigSol;
1975 std::vector<long>
count (2, 1);
1989 Var_Eig_Idx->set_cur(&start[0]);
1990 Var_Eig_Idx->put(&iNodeIndex, &count[0]);
1995 #endif // USE_NETCDF
2003 const std::vector<bool>& vOut,
2004 const unsigned uCurrEigSol,
2005 const int iResultsPrecision)
2007 const char signs[] = {
'-',
'+'};
2015 for (
integer r = 1; r <= iNVec; r++) {
2022 if (iEigenValues == 0)
2030 if (iResultsPrecision) {
2032 int iNewWidth = iResultsPrecision + 7;
2033 out.width(iNewWidth);
2034 out.precision(iResultsPrecision);
2038 <<
"% alphar, alphai, beta" << std::endl
2041 for (
integer r = 1; r <= iNVec; r++) {
2047 <<
R(r) + dShiftR <<
' '
2049 << (pBeta ? (*pBeta)(r) : 1.)
2050 <<
";" << std::endl;
2053 out <<
"];" << std::endl;
2058 <<
"% left eigenvectors" << std::endl
2059 <<
"VL = [" << std::endl;
2067 ASSERTMSG(
c < iNVec,
"partial eigenanalysis output: complex eigenvalue with real part of left eigenvector only");
2083 << re << signs[iSign] <<
"i*" << im <<
' ';
2086 << re << signs[1 - iSign] <<
"i*" << im <<
' ';
2091 << (*pVL)(r,
c) <<
' ';
2096 out <<
";" << std::endl;
2098 out <<
"];" << std::endl;
2105 <<
"% right eigenvectors" << std::endl
2106 <<
"VR = [" << std::endl;
2114 ASSERTMSG(
c < iNVec,
"partial eigenanalysis output: complex eigenvalue with real part of right eigenvector only");
2129 << re << signs[iSign] <<
"i*" << im <<
' ';
2132 << re << signs[1 - iSign] <<
"i*" << im <<
' ';
2142 out <<
";" << std::endl;
2144 out <<
"];" << std::endl;
2151 OutputHandler::NcDimVec dim_alpha(2);
2153 std::stringstream dimname_ss;
2154 dimname_ss <<
"eig_" << uCurrEigSol <<
"_iNVec_out";
2157 for (
integer r = 1; r <= iNVec; r++)
2164 dim_alpha[0] =
OutHdl.CreateDim(dimname_ss.str(), iNVecOut);
2165 dim_alpha[1] =
OutHdl.DimV3();
2167 OutputHandler::AttrValVec attrs3(3);
2168 attrs3[0] = OutputHandler::AttrVal(
"units",
"-");
2169 attrs3[1] = OutputHandler::AttrVal(
"type",
"doublereal");
2170 attrs3[2] = OutputHandler::AttrVal(
"description",
"alpha matrix");
2172 std::stringstream varname_ss;
2173 varname_ss <<
"eig." << uCurrEigSol <<
".alpha";
2174 Var_Eig_dAlpha =
OutHdl.CreateVar(varname_ss.str(), ncDouble, attrs3, dim_alpha);
2178 for (
integer r = 1; r <= iNVec; r++) {
2183 v(1) =
R(r) + dShiftR;
2185 v(3) = (pBeta ? (*pBeta)(r) : 1.);
2186 Var_Eig_dAlpha->put_rec(v.
pGetVec(), uNRec);
2190 OutputHandler::NcDimVec dim_v(3);
2191 dim_v[0] = m_Dim_Eig_iComplex;
2192 dim_v[1] = dim_alpha[0];
2193 dim_v[2] = m_Dim_Eig_iSize;
2199 std::vector<long> start (3, 0);
2200 const std::vector<long>
count (3, 1);
2204 OutputHandler::AttrValVec attrs3(3);
2205 attrs3[0] = OutputHandler::AttrVal(
"units",
"-");
2206 attrs3[1] = OutputHandler::AttrVal(
"type",
"doublereal");
2207 attrs3[2] = OutputHandler::AttrVal(
"description",
"VL - Left eigenvectors matrix");
2209 std::stringstream varname_ss;
2210 varname_ss <<
"eig." << uCurrEigSol <<
".VL";
2211 Var_Eig_dVL =
OutHdl.CreateVar(varname_ss.str(), ncDouble, attrs3, dim_v);
2226 ASSERTMSG(
c < iNVec,
"partial eigenanalysis output: complex eigenvalue with real part of left eigenvector only");
2230 im = (
c < iNVec) ? (*pVL)(r,
c + 1) : 0.;
2234 Var_Eig_dVL->set_cur(&start[0]);
2235 Var_Eig_dVL->put(&re, &count[0]);
2238 Var_Eig_dVL->set_cur(&start[0]);
2239 Var_Eig_dVL->put(&im, &count[0]);
2247 Var_Eig_dVL->set_cur(&start[0]);
2248 Var_Eig_dVL->put(&re, &count[0]);
2251 Var_Eig_dVL->set_cur(&start[0]);
2252 Var_Eig_dVL->put(&im, &count[0]);
2262 Var_Eig_dVL->set_cur(&start[0]);
2263 Var_Eig_dVL->put(&re, &count[0]);
2266 Var_Eig_dVL->set_cur(&start[0]);
2267 Var_Eig_dVL->put(&im, &count[0]);
2276 attrs3[0] = OutputHandler::AttrVal(
"units",
"-");
2277 attrs3[1] = OutputHandler::AttrVal(
"type",
"doublereal");
2278 attrs3[2] = OutputHandler::AttrVal(
"description",
"VR - Left eigenvectors matrix");
2282 varname_ss <<
"eig." << uCurrEigSol <<
".VR";
2283 Var_Eig_dVR =
OutHdl.CreateVar(varname_ss.str(), ncDouble, attrs3, dim_v);
2296 ASSERTMSG(
c < iNVec,
"partial eigenanalysis output: complex eigenvalue with real part of right eigenvector only");
2300 im = (
c < iNVec) ? VR(r,
c + 1) : 0.;
2304 Var_Eig_dVR->set_cur(&start[0]);
2305 Var_Eig_dVR->put(&re, &count[0]);
2308 Var_Eig_dVR->set_cur(&start[0]);
2309 Var_Eig_dVR->put(&im, &count[0]);
2317 Var_Eig_dVR->set_cur(&start[0]);
2318 Var_Eig_dVR->put(&re, &count[0]);
2321 Var_Eig_dVR->set_cur(&start[0]);
2322 Var_Eig_dVR->put(&im, &count[0]);
2331 Var_Eig_dVR->set_cur(&start[0]);
2332 Var_Eig_dVR->put(&re, &count[0]);
2335 Var_Eig_dVR->set_cur(&start[0]);
2336 Var_Eig_dVR->put(&im, &count[0]);
2407 OutHdl.pGetBinFile()->sync();
2423 for (MBDynParser::DCType::const_iterator i = DC.begin(); i != DC.end(); ++i) {
2424 i->second->Trace(OH);
2437 for (MBDynParser::DCType::const_iterator i = DC.begin(); i != DC.end(); ++i) {
2438 i->second->Output(OH);
2458 for (NodeVecType::const_iterator i =
Nodes.begin(); i !=
Nodes.end(); ++i) {
2459 (*i)->BeforePredict(X, XP, XPrev, XPPrev);
2482 for (NodeVecType::const_iterator i =
Nodes.begin(); i !=
Nodes.end(); ++i) {
2488 silent_cerr(
"DataManager::AfterPredict: "
2489 "warning, caught Elem::ChangedEquationStructure while processing "
2490 <<
psNodeNames[(*i)->GetNodeType()] <<
"(" << (*i)->GetLabel() <<
")" << std::endl);
2502 silent_cerr(
"DataManager::AfterPredict: "
2503 "warning, caught Elem::ChangedEquationStructure while processing "
2513 for (NodeVecType::const_iterator i =
Nodes.begin(); i !=
Nodes.end(); ++i) {
2529 for (NodeVecType::const_iterator i =
Nodes.begin(); i !=
Nodes.end(); ++i) {
2589 for (NodeVecType::const_iterator i =
Nodes.begin(); i !=
Nodes.end(); ++i) {
2605 silent_cout(
"Residual(" <<
DrvHdl.
iGetStep() <<
":" << iIterCnt <<
") "
2609 for (
int iTmpCnt = 1; iTmpCnt <=
iSize; iTmpCnt++) {
2610 silent_cout(
"Eq " << std::setw(8)
2612 << std::setw(20) << Res(iTmpCnt)
2613 <<
" " <<
Dofs[iTmpCnt - 1].EqDescription
2621 silent_cout(
"Solution(" <<
DrvHdl.
iGetStep() <<
":" << iIterCnt <<
") "
2625 for (
integer iTmpCnt = 1; iTmpCnt <=
iSize; iTmpCnt++) {
2626 silent_cout(
"Dof " << std::setw(8)
2628 << std::setw(20) << Sol(iTmpCnt)
2629 <<
" " <<
Dofs[iTmpCnt - 1].Description
2638 return Dofs[i - 1].Description;
2645 return Dofs[i - 1].EqDescription;
2652 return Dofs[i - 1].Order;
2659 return Dofs[i - 1].EqOrder;
2664 DataManager::bFDJac(
void)
const
2667 return (pFDJacMeter->dGet() != 0.);
2672 #endif // MBDYN_FDJAC
2719 std::vector<doublereal>&
2724 silent_cerr(
"unable to find FileDrive(" << uL <<
")" << std::endl);
2730 silent_cerr(
"FileDrive(" << uL <<
") is not a BufferStreamDrive" << std::endl);
2737 const std::vector<doublereal>&
2740 BufferStreamElem *pBSE = pFindElem<BufferStreamElem, StreamOutElem, Elem::SOCKETSTREAM_OUTPUT>(uL);
2742 silent_cerr(
"unable to find StreamOutElem(" << uL <<
"), or not a BufferStreamElem" << std::endl);
2754 silent_cerr(
"unable to find FileDrive(" << uL <<
")" << std::endl);
2760 silent_cerr(
"FileDrive(" << uL <<
") is not a BufferStreamDrive_base" << std::endl);
2773 silent_cerr(
"unable to find FileDrive(" << uL <<
")" << std::endl);
2779 silent_cerr(
"FileDrive(" << uL <<
") is not a BufferStreamDriveRaw" << std::endl);
2784 silent_cerr(
"FileDrive(" << uL <<
") owns its memory, unable to set buffer" << std::endl);
2794 BufferStreamElem_base *pBSE = pFindElem<BufferStreamElem_base, StreamOutElem, Elem::SOCKETSTREAM_OUTPUT>(uL);
2796 silent_cerr(
"unable to find StreamOutElem(" << uL <<
"), or not a BufferStreamElem_base" << std::endl);
2806 BufferStreamElemRaw *pBSE = pFindElem<BufferStreamElemRaw, StreamOutElem, Elem::SOCKETSTREAM_OUTPUT>(uL);
2808 silent_cerr(
"unable to find StreamOutElem(" << uL <<
"), or not a BufferStreamElemRaw" << std::endl);
2813 silent_cerr(
"StreamOutElem(" << uL <<
") owns its memory, unable to set buffer" << std::endl);
virtual DofOrder::Order GetEqType(unsigned int i) const
bool IsConverged(void) const
virtual const Vec3 & GetWPrev(void) const
virtual void Reset(void)=0
virtual VectorHandler * pResHdl(void) const =0
#define DEBUG_LEVEL_MATCH(level)
Drive * pFindDrive(Drive::Type Typ, unsigned int uL) const
unsigned int iExpectedNum
ElemContainerType ElemContainer
void OutputEigParams(const doublereal &dTime, const doublereal &dCoef, const unsigned uCurrEigSol, const int iResultsPrecision)
std::vector< doublereal > & GetBufIn(unsigned uL)
virtual integer iGetNumCols(void) const =0
bool outputIters(void) const
virtual StructDispNode::Type GetStructDispNodeType(void) const =0
virtual unsigned int iGetInitialNumDof(void) const =0
#define MBDYN_EXCEPT_ARGS
const doublereal * GetBufOutRaw(unsigned uL) const
void NodeOutput(OutputHandler &OH) const
std::ostream & DofStats(void) const
DofOwner::Type DofOwnerType
bool bGetNext(T &TReturn) const
#define DEBUGCOUTFNAME(fname)
virtual doublereal * pdGetVec(void) const =0
const doublereal & dGetInitialVelocityStiffness(void) const
virtual std::ostream & DescribeDof(std::ostream &out, const char *prefix="", bool bInitial=false) const
bool UseNetCDF(int out) const
const DCType & GetDriveCallerContainer(void) const
virtual const Mat3x3 & GetRCurr(void) const
virtual Node::Type GetNodeType(void) const
unsigned ConvergedRegister(void)
virtual DofOrder::Order GetEqType(int i) const
struct DataManager::@29 DriveData[Drive::LASTDRIVETYPE]
bool OutputEigClose(void)
doublereal dInitialPositionStiffness
const Vec3 & GetX(void) const
NaiveMatrixHandler::const_iterator begin(void) const
bool EndOfSimulation(void) const
virtual const Vec3 & GetXPrev(void) const
doublereal dGetTime(void) const
virtual const std::string & GetDofDescription(int i) const
SolutionManager *const GetSolutionManager(integer iNLD, integer iLWS=0) const
virtual bool Output(long lStep, const doublereal &dTime, const doublereal &dTimeStep, bool force=false) const
virtual void SetInitialValue(VectorHandler &X)
virtual void BeforePredict(VectorHandler &X, VectorHandler &XP, VectorHandler &XPrev, VectorHandler &XPPrev) const
Converged_t m_IsConverged
bool Close(const OutputHandler::OutFiles out)
#define SAFEDELETEARR(pnt)
const Vec3 & mb_zero< Vec3 >(void)
#define ASSERTMSG(expr, msg)
const NaiveMatrixHandler::const_iterator & end(void) const
void ConvergedSet(unsigned idx, Converged::State s)
void DriveTrace(OutputHandler &OH) const
bool outputRes(void) const
doublereal * GetBufInRaw(unsigned uL)
bool outputJac(void) const
virtual const doublereal & dGetVelocityStiffness(void) const
integer iMaxInitialIterations
virtual void InitialWorkSpaceDim(integer *piNumRows, integer *piNumCols) const =0
void SetLoadableElemModule(std::string, const LoadableCalls *, ModuleInsertMode=MIM_FAIL)
virtual Elem::Type GetElemType(void) const =0
void OutputEigFullMatrices(const MatrixHandler *pmMatA, const MatrixHandler *pmMatB, const unsigned uCurrEigSol, const int iMatrixPrecision)
void OutputEigGeometry(const unsigned uCurrSol, const int iResultsPrecision)
virtual void DerivativesUpdate(void) const
std::map< std::string, const LoadableCalls * > MapOfLoadableElemHandlers
virtual doublereal Dot(void) const
const std::vector< doublereal > & GetBufOut(unsigned uL) const
void ElemOutput(OutputHandler &OH) const
void InitialJointAssembly(void)
virtual integer iGetSize(void) const =0
bool bOwnsMemory(void) const
virtual DofOrder::Order GetDofType(int i) const
const LoadableCalls * GetLoadableElemModule(std::string) const
virtual bool bOmegaRotates(void) const
const SpMapMatrixHandler::const_iterator & end(void) const
bool outputSolverConditionNumber(void) const
NodeContainerType NodeContainer
virtual void AfterConvergence(void) const
Vec3 VecRot(const Mat3x3 &Phi)
bool Open(const OutputHandler::OutFiles out)
Vec3 MulTV(const Vec3 &v) const
void SetBufRaw(integer n, const doublereal *p)
virtual const DofOwner * pGetDofOwner(void) const
virtual void AfterPredict(void) const
virtual void OutputEigPrepare(const integer iNumAnalyses, const integer iSize)
void SetValue(VectorHandler &X, VectorHandler &XP)
bool outputSol(void) const
virtual void PrintSolution(const VectorHandler &Sol, integer iIterCnt) const
void LinkToSolution(VectorHandler &XCurr, VectorHandler &XPrimeCurr)
std::map< unsigned, const DriveCaller * > DCType
virtual StructNode::Type GetStructNodeType(void) const =0
DataManager::ElemContainerType::const_iterator begin(Elem::Type t) const
void IncElemCount(Elem::Type type)
integer iGetStep(void) const
doublereal Dot(void) const
virtual MatrixHandler * pMatHdl(void) const =0
virtual VariableSubMatrixHandler & InitialAssJac(VariableSubMatrixHandler &WorkMat, const VectorHandler &XCurr)=0
DriveCaller * pOutputMeter
bool bOwnsMemory(void) const
virtual void MakeRestart(void)
void IncCurrentStep(void)
doublereal dLastRestartTime
RigidBodyKinematics * pRBK
virtual const Mat3x3 & GetRPrev(void) const
virtual void Update(void)
long GetCurrentStep(void) const
doublereal dGetTimeStep(void) const
void OutputEigSparseMatrices(const MatrixHandler *pmMatA, const MatrixHandler *pmMatB, const unsigned uCurrEigSol, const int iMatrixPrecision)
struct DataManager::NodeDataStructure NodeData[Node::LASTNODETYPE]
bool bDoesOmegaRotate(void) const
virtual const Vec3 & GetVPrev(void) const
virtual void OutputPrepare(void)
virtual SubVectorHandler & InitialAssRes(SubVectorHandler &WorkVec, const VectorHandler &XCurr)=0
const Mat3x3 & GetR(void) const
virtual const doublereal & dGetPositionStiffness(void) const
SpMapMatrixHandler::const_iterator begin(void) const
virtual void PutCoef(integer iRow, integer iCol, const doublereal &dCoef)
virtual std::ostream & DescribeEq(std::ostream &out, const char *prefix="", bool bInitial=false) const
VectorHandler * pXPrimeCurr
virtual integer iGetFirstMomentumIndex(void) const =0
virtual integer iGetFirstPositionIndex(void) const
virtual const Vec3 & GetWCurr(void) const
virtual void Solve(void)=0
doublereal dInitialAssemblyTol
integer iRestartIterations
virtual unsigned int iGetInitialNumDof(void) const
bool IsOpen(int out) const
#define ASSERT(expression)
VecIter< Elem * > ElemIter
GradientExpression< UnaryExpr< FuncSqrt, Expr > > sqrt(const GradientExpression< Expr > &u)
virtual void MatrInitialize(void)
doublereal dInitialVelocityStiffness
virtual void BeforePredict(VectorHandler &, VectorHandler &, VectorHandler &, VectorHandler &) const
virtual const Vec3 & GetXCurr(void) const
virtual unsigned int iGetNumDof(void) const
virtual void Add(integer iRow, const Vec3 &v)
void SetTime(const doublereal &dTime, const doublereal &dTimeStep=-1., const integer &iStep=-1, bool bServePending=true)
#define defaultMemoryManager
InitialAssemblyElem * GetNext(void) const
virtual integer iGetNumCols(void) const
std::vector< doublereal > & GetBuf(void)
virtual doublereal dGet(const doublereal &dVar) const =0
void ElemOutputPrepare(OutputHandler &OH)
void OutputEigenvectors(const VectorHandler *pBeta, const VectorHandler &R, const VectorHandler &I, const doublereal &dShiftR, const MatrixHandler *pVL, const MatrixHandler &VR, const std::vector< bool > &vOut, const unsigned uCurrEigSol, const int iResultsPrecision)
virtual void GetConnectedNodes(std::vector< const Node * > &connectedNodes) const
static std::stack< cleanup * > c
const doublereal * pdGetMat(void) const
virtual void PrintResidual(const VectorHandler &Res, integer iIterCnt) const
virtual const doublereal * GetBufRaw(void) const =0
const char * psNodeNames[]
void LinkToSolution(const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
virtual Node::Type GetNodeType(void) const =0
doublereal * pdRestartTimes
const char * psElemNames[]
const doublereal & dGetInitialPositionStiffness(void) const
virtual void AfterConvergence(const VectorHandler &X, const VectorHandler &XP)
bool bGetConditionNumber(doublereal &dCond) const
void SetBufOutRaw(unsigned uL, integer n, const doublereal *p)
const doublereal * pGetVec(void) const
virtual DofOrder::Order GetDofType(unsigned int) const
doublereal dGetTime(void) const
virtual void DerivativesUpdate(const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
void SetTime(const doublereal &dt, const doublereal &dts, const integer &s)
virtual const Vec3 & GetVCurr(void) const
virtual void Update(void) const
void DriveOutput(OutputHandler &OH) const
std::ostream & Log(void) const
virtual void SetBufRaw(integer n, const doublereal *p)
bool bGetFirst(T &TReturn) const
Mat3x3 MulMT(const Mat3x3 &m) const
InitialAssemblyElem * GetFirst(void) const
virtual void AfterPredict(VectorHandler &X, VectorHandler &XP)
void SetBufInRaw(unsigned uL, integer n, const doublereal *p)
virtual VectorHandler * pSolHdl(void) const =0
virtual const doublereal * GetBufRaw(void)=0
virtual void SetValue(DataManager *pDM, VectorHandler &X, VectorHandler &XP, SimulationEntity::Hints *h=0)
struct DataManager::@30 DofData[DofOwner::LASTDOFTYPE]
virtual integer iGetFirstIndex(void) const
const std::vector< doublereal > & GetBuf(void) const
std::ostream & Eigenanalysis(void) const
void NodeOutputPrepare(OutputHandler &OH)
Table & GetSymbolTable(void) const
const Node * GetNode(void) const
unsigned int GetLabel(void) const
struct DataManager::ElemDataStructure ElemData[Elem::LASTELEMTYPE]
void OutputEigNaiveMatrices(const MatrixHandler *pmMatA, const MatrixHandler *pmMatB, const unsigned uCurrEigSol, const int iMatrixPrecision)
virtual doublereal dGetInitialTimeStep(void) const
#define DEBUGLCOUT(level, msg)
virtual const std::string & GetEqDescription(int i) const
virtual integer iGetNumRows(void) const
virtual std::ostream & DescribeDof(std::ostream &out, const char *prefix="", bool bInitial=false) const
virtual integer iGetNumRows(void) const =0
virtual std::ostream & DescribeEq(std::ostream &out, const char *prefix="", bool bInitial=false) const
bool UseText(int out) const
virtual void Update(const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)