63 :
Elem(uLabel, fOutput),
64 Genel(uLabel, pDO, fOutput),
67 pdE(pE), pdA(pA), pdB(pB), pdC(pC), dD(D),
75 DEBUGCOUT(
"GenelStateSpaceSISO " << uLabel
76 <<
", NumDofs: " <<
iNumDofs << std::endl);
89 std::vector<doublereal> RSCALE(Order);
90 std::vector<doublereal> LSCALE(Order);
93 std::vector<doublereal> WORK(6*Order);
95 (void)__FC_DECL__(dggbal)(&JOB, &N,
pdA, &LDA,
96 pdE, &LDB, &ILO, &IHI,
97 &LSCALE[0], &RSCALE[0], &WORK[0], &INFO);
100 (void)__FC_DECL__(dgebal)(&JOB, &N,
pdA, &LDA,
101 &ILO, &IHI, &RSCALE[0], &INFO);
103 for (
unsigned i = 0; i <
Order; i++) {
104 LSCALE[i] = 1./RSCALE[i];
109 silent_cout(
"GenelStateSpaceSISO(" << uLabel <<
"): "
110 "balancing failed (ignored)" << std::endl);
113 for (
unsigned i = 0; i <
Order; i++) {
124 for (
unsigned i = 0; i < 2*
Order; i++) {
129 for (
unsigned i = 0; i <
Order; i++) {
134 for (
unsigned i = 0; i <
Order; i++) {
186 return out <<
"GenelStateSpaceSISO: not implemented yet!" << std::endl;
197 if (dynamic_cast<ScalarDofValue *>(
SV_u) != 0) {
209 DEBUGCOUT(
"Entering GenelStateSpaceSISO::AssJac()" << std::endl);
241 for (
unsigned int i =
iNumDofs; i > 0; i--) {
242 WM.
PutCoef(i, iIdx_u, pdb[i]*dd);
246 WM.
PutCoef(iNumRows, iNumCols, dCoef);
253 for (
unsigned int i = iNumDofs; i > 0; i--) {
256 WM.
PutCoef(iNumRows, i, -pdc[i]*dCoef);
259 for (
unsigned int j = iNumDofs; j > 0; j--) {
262 WM.
PutCoef(i, j, pde[j] - pda[j]*dCoef);
267 for (
unsigned int i = iNumDofs; i > 0; i--) {
270 WM.
PutCoef(iNumRows, i, -pdc[i]*dCoef);
272 for (
unsigned int j = iNumDofs; j > 0; j--) {
275 WM.
PutCoef(i, j, -pda[j]*dCoef);
292 DEBUGCOUT(
"Entering GenelStateSpaceSISO::AssRes()" << std::endl);
311 for (
unsigned int i =
iNumDofs; i > 0; i--) {
313 pdx[i] = XCurr(iFirstIndex + i);
314 pdxp[i] = XPrimeCurr(iFirstIndex + i);
326 for (
unsigned int i = iNumDofs; i-- > 0; ) {
330 for (
unsigned int j = iNumDofs; j-- > 0; ) {
331 d += pda[j]*pdx[j] - pde[j]*pdxp[j];
337 for (
unsigned int i = iNumDofs; i-- > 0; ) {
338 d = pdb[i]*u - pdxp[i];
340 for (
unsigned int j = iNumDofs; j-- > 0; ) {
362 for (
unsigned int i = iNumDofs; i-- > 0; ) {
365 for (
unsigned int j = iNumDofs; j-- > 0; ) {
371 for (
unsigned i = 0; i <
iNumDofs; i++) {
372 X(iFirstIndex + i) =
pdX[i];
373 XP(iFirstIndex + i) =
pdXP[i];
385 std::ostream &out(OH.
Genels());
387 for (
unsigned int i = 0; i <
iNumDofs; i++) {
388 out <<
" " <<
pdX[i];
390 for (
unsigned int i = 0; i <
iNumDofs; i++) {
391 out <<
" " <<
pdXP[i];
399 std::vector<const Node *>& connectedNodes)
const {
401 if (dynamic_cast<NodeDof *>(
SV_u)) {
404 connectedNodes.resize(iNodes);
406 if (dynamic_cast<NodeDof *>(
SV_u)) {
407 connectedNodes[1] =
dynamic_cast<NodeDof *
>(
SV_u)->pNode;
418 unsigned int iNumOut,
420 std::vector<ScalarValue *>& u,
431 :
Elem(uLabel, fOutput),
432 Genel(uLabel, pDO, fOutput),
433 iNumOutputs(iNumOut), iNumInputs(u.size()),
434 pvSD_y(const_cast<
ScalarDof *>(y)), SV_u(u),
436 pdE(pE), pdA(pA), pdB(pB), pdC(pC), pdD(pD),
449 DEBUGCOUT(
"GenelStateSpaceMIMO " << uLabel
450 <<
", NumDofs: " <<
iNumDofs << std::endl);
464 std::vector<doublereal> RSCALE(Order);
465 std::vector<doublereal> LSCALE(Order);
468 std::vector<doublereal> WORK(6*Order);
470 rc = __FC_DECL__(dggbal)(&JOB, &N,
pdA, &LDA,
471 pdE, &LDB, &ILO, &IHI,
472 &LSCALE[0], &RSCALE[0], &WORK[0], &INFO);
475 rc = __FC_DECL__(dgebal)(&JOB, &N,
pdA, &LDA,
476 &ILO, &IHI, &RSCALE[0], &INFO);
478 for (
unsigned i = 0; i <
Order; i++) {
479 LSCALE[i] = 1./RSCALE[i];
484 silent_cout(
"GenelStateSpaceMIMO(" << uLabel <<
"): "
485 "balancing failed (ignored)" << std::endl);
490 for (
unsigned i = 0; i <
Order; i++) {
499 for (
unsigned i = 0; i <
Order; i++) {
510 for (
unsigned i = 0; i < 2*
Order; i++) {
515 for (
unsigned i = 0; i <
Order; i++) {
520 for (
unsigned i = 0; i <
Order; i++) {
553 for (std::vector<ScalarValue *>::iterator i =
SV_u.begin();
554 i !=
SV_u.end(); ++i)
579 return out <<
"GenelStateSpaceMIMO: not implemented yet!" << std::endl;
590 for (
unsigned int j =
iNumInputs; j-- > 0; ) {
591 if (dynamic_cast<ScalarDofValue *>(
SV_u[j]) != 0) {
604 DEBUGCOUT(
"Entering GenelStateSpaceMIMO::AssJac()" << std::endl);
614 for (
unsigned int j = 0; j <
iNumInputs; j++) {
630 for (
unsigned int i = 1; i <=
iNumDofs; i++) {
631 WM.
PutCoef(i, iIdx_u, pdb[0]*dd);
639 for (
unsigned int i = iNumOutputs; i > 0; i--) {
646 WM.
PutCoef(iNumDofs + i, iNumDofs + i, dCoef);
649 for (
unsigned int j = iNumDofs; j > 0; j--) {
652 WM.
PutCoef(iNumDofs + i, j, -pdc[j]*dCoef);
660 for (
unsigned int i = iNumDofs; i > 0; i--) {
665 for (
unsigned int j = iNumDofs; j > 0; j--) {
669 WM.
PutCoef(i, j, pde[j] - pda[j]*dCoef);
674 for (
unsigned int i = iNumDofs; i > 0; i--) {
678 for (
unsigned int j = iNumDofs; j > 0; j--) {
682 WM.
PutCoef(i, j, -pda[j]*dCoef);
698 DEBUGCOUT(
"Entering GenelStateSpaceMIMO::AssRes()" << std::endl);
709 for (
unsigned int i =
iNumDofs; i > 0; i--) {
711 pdx[i] = XCurr(iFirstIndex+i);
712 pdxp[i] = XPrimeCurr(iFirstIndex+i);
724 for (
unsigned int j = iNumDofs; j > 0; j--) {
728 for (
unsigned int j = iNumInputs; j > 0; j--) {
729 d += pdd[j]*
SV_u[j - 1]->dGetValue();
731 WorkVec.
PutCoef(iNumDofs + i, d);
741 for (
unsigned int j = iNumDofs; j > 0; j--) {
744 WorkVec.
PutCoef(iNumDofs + i, d);
754 for (
unsigned int i = iNumDofs; i-- > 0; ) {
757 for (
unsigned int j = iNumInputs; j-- > 0; ) {
758 d += pdb[j]*
SV_u[j]->dGetValue();
762 for (
unsigned int j = iNumDofs; j-- > 0; ) {
763 d += pda[j]*pdx[j] - pde[j]*pdxp[j];
769 for (
unsigned int i = iNumDofs; i-- > 0; ) {
772 for (
unsigned int j = iNumInputs; j-- > 0; ) {
773 d += pdb[j]*
SV_u[j]->dGetValue();
776 for (
unsigned int j = iNumDofs; j-- > 0; ) {
797 for (
unsigned int i = iNumDofs; i-- > 0; ) {
800 for (
unsigned int j = iNumInputs; j-- > 0; ) {
801 pdXP[i] += pdb[j]*
SV_u[j]->dGetValue();
804 for (
unsigned int j = iNumDofs; j-- > 0; ) {
810 for (
unsigned i = 0; i <
iNumDofs; i++) {
811 X(iFirstIndex + i) =
pdX[i];
812 XP(iFirstIndex + i) =
pdXP[i];
820 std::ostream& out(OH.
Genels());
822 for (
unsigned int i = 0; i <
iNumDofs; i++) {
823 out <<
" " <<
pdX[i];
825 for (
unsigned int i = 0; i <
iNumDofs; i++) {
826 out <<
" " <<
pdXP[i];
834 std::vector<const Node *>& connectedNodes)
const {
836 for (std::vector<ScalarValue *>::const_iterator u =
SV_u.begin();
837 u !=
SV_u.end(); ++u)
839 if (dynamic_cast<NodeDof *>(*u)) {
844 connectedNodes.resize(iNodes);
849 for (std::vector<ScalarValue *>::const_iterator u =
SV_u.begin();
850 u !=
SV_u.end(); ++u)
854 connectedNodes[i++] = ndp->
pNode;
std::ostream & Genels(void) const
GenelStateSpaceMIMO(unsigned int uLabel, const DofOwner *pDO, unsigned int iNumOut, const ScalarDof *y, std::vector< ScalarValue * > &u, unsigned int Order, doublereal *pE, doublereal *pA, doublereal *pB, doublereal *pC, doublereal *pD, bool bBalance, doublereal *pdX0, doublereal *pdXP0, flag fOutput)
void PutColIndex(integer iSubCol, integer iCol)
virtual doublereal dGetValue(void) const =0
virtual SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
virtual bool bToBeOutput(void) const
virtual void ResizeReset(integer)
FullSubMatrixHandler & SetFull(void)
void SetValue(DataManager *pDM, VectorHandler &X, VectorHandler &XP, SimulationEntity::Hints *ph=0)
virtual VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &, const VectorHandler &)
virtual VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &, const VectorHandler &)
virtual ~GenelStateSpaceSISO(void)
#define SAFEDELETEARR(pnt)
void PutCoef(integer iRow, integer iCol, const doublereal &dCoef)
virtual const doublereal & dGetX(void) const =0
std::vector< Hint * > Hints
void IncCoef(integer iRow, integer iCol, const doublereal &dCoef)
virtual DofOrder::Order GetDofType(unsigned int i) const
virtual std::ostream & Restart(std::ostream &out) const
virtual void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const
virtual void PutRowIndex(integer iSubRow, integer iRow)=0
virtual void Output(OutputHandler &OH) const
virtual integer iGetFirstRowIndex(void) const
#define ASSERT(expression)
virtual void GetConnectedNodes(std::vector< const Node * > &connectedNodes) const
virtual void PutCoef(integer iRow, const doublereal &dCoef)=0
virtual void GetConnectedNodes(std::vector< const Node * > &connectedNodes) const
virtual unsigned int iGetNumDof(void) const
virtual void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const
virtual void ResizeReset(integer, integer)
virtual void Output(OutputHandler &OH) const
virtual ~GenelStateSpaceMIMO(void)
std::vector< ScalarValue * > SV_u
void PutRowIndex(integer iSubRow, integer iRow)
virtual DofOrder::Order GetDofType(unsigned int i) const
#define SAFENEWARR(pnt, item, sz)
virtual unsigned int iGetNumDof(void) const
virtual integer iGetFirstIndex(void) const
void SetValue(DataManager *pDM, VectorHandler &X, VectorHandler &XP, SimulationEntity::Hints *ph=0)
unsigned int GetLabel(void) const
virtual SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
GenelStateSpaceSISO(unsigned int uLabel, const DofOwner *pDO, const ScalarDof &y, ScalarValue *u, unsigned int Order, doublereal *pE, doublereal *pA, doublereal *pB, doublereal *pC, doublereal D, bool bBalance, doublereal *pdX0, doublereal *pdXP0, flag fOutput)
virtual std::ostream & Restart(std::ostream &out) const
virtual integer iGetFirstColIndex(void) const