MBDyn-1.7.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups
DiscreteControlElem Class Reference

#include <discctrl.h>

Inheritance diagram for DiscreteControlElem:
Collaboration diagram for DiscreteControlElem:

Public Member Functions

 DiscreteControlElem (unsigned int uL, const DofOwner *pDO, integer iNumOut, std::vector< ScalarValue * > &vOut, std::vector< DriveCaller * > &vOutSF, integer iNumIn, ScalarDof *ppIn, DiscreteControlProcess *p, integer iNIt, flag fOut)
 
virtual ~DiscreteControlElem (void)
 
virtual Electric::Type GetElectricType (void) const
 
virtual std::ostream & Restart (std::ostream &out) const
 
virtual void AfterConvergence (const VectorHandler &X, const VectorHandler &XP)
 
virtual unsigned int iGetNumDof (void) const
 
virtual DofOrder::Order GetDofType (unsigned int) const
 
virtual void WorkSpaceDim (integer *piNumRows, integer *piNumCols) const
 
virtual VariableSubMatrixHandlerAssJac (VariableSubMatrixHandler &WorkMat, doublereal, const VectorHandler &, const VectorHandler &)
 
virtual SubVectorHandlerAssRes (SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
 
virtual unsigned int iGetNumPrivData (void) const
 
virtual unsigned int iGetPrivDataIdx (const char *s) const
 
virtual doublereal dGetPrivData (unsigned int i) const
 
virtual void GetConnectedNodes (std::vector< const Node * > &connectedNodes) const
 
- Public Member Functions inherited from Elem
 Elem (unsigned int uL, flag fOut)
 
virtual ~Elem (void)
 
virtual std::ostream & DescribeDof (std::ostream &out, const char *prefix="", bool bInitial=false) const
 
virtual void DescribeDof (std::vector< std::string > &desc, bool bInitial=false, int i=-1) const
 
virtual std::ostream & DescribeEq (std::ostream &out, const char *prefix="", bool bInitial=false) const
 
virtual void DescribeEq (std::vector< std::string > &desc, bool bInitial=false, int i=-1) const
 
virtual void AssMats (VariableSubMatrixHandler &WorkMatA, VariableSubMatrixHandler &WorkMatB, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
 
virtual bool bInverseDynamics (void) const
 
void SetInverseDynamicsFlags (unsigned uIDF)
 
unsigned GetInverseDynamicsFlags (void) const
 
bool bIsErgonomy (void) const
 
bool bIsRightHandSide (void) const
 
virtual VariableSubMatrixHandlerAssJac (VariableSubMatrixHandler &WorkMat, const VectorHandler &XCurr)
 
virtual SubVectorHandlerAssRes (SubVectorHandler &WorkVec, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr, const VectorHandler &XPrimePrimeCurr, InverseDynamics::Order iOrder=InverseDynamics::INVERSE_DYNAMICS)
 
virtual int GetNumConnectedNodes (void) const
 
- Public Member Functions inherited from WithLabel
 WithLabel (unsigned int uL=0, const std::string &sN="")
 
virtual ~WithLabel (void)
 
void PutLabel (unsigned int uL)
 
void PutName (const std::string &sN)
 
unsigned int GetLabel (void) const
 
const std::string & GetName (void) const
 
- Public Member Functions inherited from SimulationEntity
 SimulationEntity (void)
 
virtual ~SimulationEntity (void)
 
virtual bool bIsValidIndex (unsigned int i) const
 
virtual DofOrder::Order GetEqType (unsigned int i) const
 
virtual void SetValue (DataManager *pDM, VectorHandler &X, VectorHandler &XP, SimulationEntity::Hints *h=0)
 
virtual HintParseHint (DataManager *pDM, const char *s) const
 
virtual void BeforePredict (VectorHandler &, VectorHandler &, VectorHandler &, VectorHandler &) const
 
virtual void AfterPredict (VectorHandler &X, VectorHandler &XP)
 
virtual void Update (const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
 
virtual void DerivativesUpdate (const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
 
virtual void Update (const VectorHandler &XCurr, InverseDynamics::Order iOrder)
 
virtual void AfterConvergence (const VectorHandler &X, const VectorHandler &XP, const VectorHandler &XPP)
 
virtual std::ostream & OutputAppend (std::ostream &out) const
 
virtual void ReadInitialState (MBDynParser &HP)
 
- Public Member Functions inherited from ToBeOutput
 ToBeOutput (flag fOut=fDefaultOut)
 
virtual ~ToBeOutput (void)
 
virtual void OutputPrepare (OutputHandler &OH)
 
virtual void Output (OutputHandler &OH) const
 
virtual void Output (OutputHandler &OH, const VectorHandler &X, const VectorHandler &XP) const
 
virtual flag fToBeOutput (void) const
 
virtual bool bToBeOutput (void) const
 
virtual void SetOutputFlag (flag f=flag(1))
 
- Public Member Functions inherited from Electric
 Electric (unsigned int uL, const DofOwner *pDO, flag fOut)
 
virtual ~Electric (void)
 
virtual Elem::Type GetElemType (void) const
 
- Public Member Functions inherited from ElemWithDofs
 ElemWithDofs (unsigned int uL, const DofOwner *pDO, flag fOut)
 
virtual ~ElemWithDofs (void)
 
- Public Member Functions inherited from DofOwnerOwner
 DofOwnerOwner (const DofOwner *pDO)
 
virtual ~DofOwnerOwner ()
 
virtual const DofOwnerpGetDofOwner (void) const
 
virtual integer iGetFirstIndex (void) const
 
virtual void SetInitialValue (VectorHandler &X)
 

Protected Attributes

DiscreteControlProcesspDCP
 
bool bNewStep
 
integer iNumIter
 
integer iCurrIter
 
integer iNumOutputs
 
std::vector< ScalarValue * > vOutputs
 
std::vector< DriveOwner * > vOutScaleFact
 
std::vector< doublerealdOut
 
integer iNumInputs
 
ScalarDofpInputs
 
std::vector< doublerealdIn
 
- Protected Attributes inherited from WithLabel
unsigned int uLabel
 
std::string sName
 
- Protected Attributes inherited from ToBeOutput
flag fOutput
 

Additional Inherited Members

- Public Types inherited from Elem
enum  Type {
  UNKNOWN = -1, AIRPROPERTIES = 0, INDUCEDVELOCITY, AUTOMATICSTRUCTURAL,
  GRAVITY, BODY, JOINT, JOINT_REGULARIZATION,
  BEAM, PLATE, FORCE, INERTIA,
  ELECTRICBULK, ELECTRIC, THERMAL, HYDRAULIC,
  BULK, LOADABLE, DRIVEN, EXTERNAL,
  AEROMODAL, AERODYNAMIC, GENEL, SOCKETSTREAM_OUTPUT,
  RTAI_OUTPUT = SOCKETSTREAM_OUTPUT, LASTELEMTYPE
}
 
- Public Types inherited from SimulationEntity
typedef std::vector< Hint * > Hints
 
- Public Types inherited from ToBeOutput
enum  { OUTPUT = 0x1U, OUTPUT_MASK = 0xFU, OUTPUT_PRIVATE = 0x10U, OUTPUT_PRIVATE_MASK = ~OUTPUT_MASK }
 
- Public Types inherited from Electric
enum  Type {
  UNKNOWN = -1, ACCELEROMETER = 0, DISPLACEMENT, DISCRETECONTROL,
  MOTOR, LASTELECTRICTYPE
}
 

Detailed Description

Definition at line 271 of file discctrl.h.

Constructor & Destructor Documentation

DiscreteControlElem::DiscreteControlElem ( unsigned int  uL,
const DofOwner pDO,
integer  iNumOut,
std::vector< ScalarValue * > &  vOut,
std::vector< DriveCaller * > &  vOutSF,
integer  iNumIn,
ScalarDof ppIn,
DiscreteControlProcess p,
integer  iNIt,
flag  fOut 
)

Definition at line 690 of file discctrl.cc.

References ASSERT, dIn, dOut, iNumInputs, iNumOutputs, SAFENEWWITHCONSTRUCTOR, and vOutScaleFact.

700 : Elem(uL, fOut),
701 Electric(uL, pDO, fOut),
702 pDCP(p),
703 bNewStep(true),
704 iNumIter(iNIt),
705 iCurrIter(0),
706 iNumOutputs(iNumOut),
707 vOutputs(vOut),
709 iNumInputs(iNumIn),
710 pInputs(pIn),
712 {
713  /* The inputs should be all scalar dofs; an abtract force is
714  * applied to every node;
715  * the outputs can be of every kind */
716 
717  /* Allocs and resets memory for input and output current values */
718  ASSERT(iNumInputs > 0);
719  ASSERT(iNumOutputs > 0);
720 
721  vOutScaleFact.resize(iNumOutputs);
722 
723  for (int i = iNumOutputs; i-- > 0; ) {
724  vOutScaleFact[i] = 0;
726  DriveOwner,
727  DriveOwner(vOutSF[i]));
728  }
729 
730  for (std::vector<doublereal>::iterator i = dIn.begin();
731  i != dIn.end(); ++i)
732  {
733  *i = 0.;
734  }
735 
736  for (std::vector<doublereal>::iterator i = dOut.begin();
737  i != dOut.end(); ++i)
738  {
739  *i = 0.;
740  }
741 }
std::vector< doublereal > dOut
Definition: discctrl.h:281
std::vector< DriveOwner * > vOutScaleFact
Definition: discctrl.h:280
std::vector< doublereal > dIn
Definition: discctrl.h:285
Electric(unsigned int uL, const DofOwner *pDO, flag fOut)
Definition: elec.cc:48
DiscreteControlProcess * pDCP
Definition: discctrl.h:273
std::vector< ScalarValue * > vOutputs
Definition: discctrl.h:279
ScalarDof * pInputs
Definition: discctrl.h:284
#define ASSERT(expression)
Definition: colamd.c:977
integer iNumOutputs
Definition: discctrl.h:278
#define SAFENEWWITHCONSTRUCTOR(pnt, item, constructor)
Definition: mynewmem.h:698
integer iNumInputs
Definition: discctrl.h:283
Elem(unsigned int uL, flag fOut)
Definition: elem.cc:41
DiscreteControlElem::~DiscreteControlElem ( void  )
virtual

Definition at line 743 of file discctrl.cc.

References pDCP, pInputs, SAFEDELETE, SAFEDELETEARR, vOutputs, and vOutScaleFact.

744 {
745  for (std::vector<DriveOwner *>::iterator i = vOutScaleFact.begin();
746  i != vOutScaleFact.end(); ++i)
747  {
748  SAFEDELETE(*i);
749  }
750 
751  for (std::vector<ScalarValue *>::iterator i = vOutputs.begin();
752  i != vOutputs.end(); ++i)
753  {
754  SAFEDELETE(*i);
755  }
756 
757  // Allocated by DataManager
759 
760  // Must destroy the other processes too
761  SAFEDELETE(pDCP);
762 }
std::vector< DriveOwner * > vOutScaleFact
Definition: discctrl.h:280
#define SAFEDELETEARR(pnt)
Definition: mynewmem.h:713
DiscreteControlProcess * pDCP
Definition: discctrl.h:273
std::vector< ScalarValue * > vOutputs
Definition: discctrl.h:279
ScalarDof * pInputs
Definition: discctrl.h:284
#define SAFEDELETE(pnt)
Definition: mynewmem.h:710

Member Function Documentation

void DiscreteControlElem::AfterConvergence ( const VectorHandler X,
const VectorHandler XP 
)
virtual

Reimplemented from SimulationEntity.

Definition at line 782 of file discctrl.cc.

References ASSERT, bNewStep, dEmptyDesiredOut, ScalarDof::dGetValue(), dIn, dOut, iCurrIter, iNumInputs, iNumIter, iNumOutputs, pDCP, pInputs, DiscreteControlProcess::PutOutput(), vOutputs, and vOutScaleFact.

784 {
785  // Sets the flag for a new step
786  if (++iCurrIter == iNumIter) {
787  iCurrIter = 0;
788 
789  ASSERT(bNewStep == false);
790  bNewStep = true;
791 
792  // Gets output from solution
793  for (int iCnt = iNumOutputs; iCnt-- > 0; ) {
794  dOut[iCnt] = vOutScaleFact[iCnt]->dGet()*vOutputs[iCnt]->dGetValue();
795  }
796 
797  // Gets input from solution
798  for (int iCnt = iNumInputs; iCnt-- > 0; ) {
799  dIn[iCnt] = pInputs[iCnt].dGetValue();
800  }
801 
802  // Puts measures to control subprocess
803  // DCP knows the length of dOut and dIn
805  }
806 
807  // Add extra output as needed
808 }
std::vector< doublereal > dOut
Definition: discctrl.h:281
std::vector< DriveOwner * > vOutScaleFact
Definition: discctrl.h:280
std::vector< doublereal > dIn
Definition: discctrl.h:285
DiscreteControlProcess * pDCP
Definition: discctrl.h:273
std::vector< ScalarValue * > vOutputs
Definition: discctrl.h:279
ScalarDof * pInputs
Definition: discctrl.h:284
#define ASSERT(expression)
Definition: colamd.c:977
integer iNumOutputs
Definition: discctrl.h:278
integer iNumInputs
Definition: discctrl.h:283
virtual void PutOutput(const std::vector< doublereal > &dOut, const std::vector< doublereal > &dIn, const std::vector< doublereal > &dDesiredOut)=0
static const std::vector< doublereal > dEmptyDesiredOut
Definition: discctrl.cc:779
const doublereal & dGetValue(void) const
Definition: node.cc:730

Here is the call graph for this function:

VariableSubMatrixHandler & DiscreteControlElem::AssJac ( VariableSubMatrixHandler WorkMat,
doublereal  ,
const VectorHandler ,
const VectorHandler  
)
virtual

Implements Elem.

Definition at line 863 of file discctrl.cc.

References VariableSubMatrixHandler::SetNullMatrix().

867 {
868  WorkMat.SetNullMatrix();
869  return WorkMat;
870 }
void SetNullMatrix(void)
Definition: submat.h:1159

Here is the call graph for this function:

SubVectorHandler & DiscreteControlElem::AssRes ( SubVectorHandler WorkVec,
doublereal  dCoef,
const VectorHandler XCurr,
const VectorHandler XPrimeCurr 
)
virtual

Implements Elem.

Definition at line 812 of file discctrl.cc.

References bNewStep, dIn, DiscreteControlProcess::GetInput(), iNumInputs, pDCP, pInputs, SubVectorHandler::PutItem(), and VectorHandler::ResizeReset().

816 {
817  WorkVec.ResizeReset(iNumInputs);
818 
819  // At first iteration gets the input from the control subprocess
820  if (bNewStep) {
821  // Gets the inputs from subprocess
822  // DCP knows the length of dIn
823  pDCP->GetInput(dIn);
824 
825  // resets the flag
826  bNewStep = false;
827  }
828 
829  // Sets the parameters
830  for (int iCnt = iNumInputs; iCnt-- > 0; ) {
831  // Equivalent to an abstract force
832  WorkVec.PutItem(iCnt + 1, pInputs[iCnt].pNode->iGetFirstRowIndex() + 1, dIn[iCnt]);
833  }
834 
835  return WorkVec;
836 }
virtual void ResizeReset(integer)
Definition: vh.cc:55
std::vector< doublereal > dIn
Definition: discctrl.h:285
virtual void PutItem(integer iSubRow, integer iRow, const doublereal &dCoef)
Definition: submat.h:1445
DiscreteControlProcess * pDCP
Definition: discctrl.h:273
ScalarDof * pInputs
Definition: discctrl.h:284
integer iNumInputs
Definition: discctrl.h:283
virtual void GetInput(std::vector< doublereal > &dIn)=0

Here is the call graph for this function:

doublereal DiscreteControlElem::dGetPrivData ( unsigned int  i) const
virtual

Reimplemented from SimulationEntity.

Definition at line 927 of file discctrl.cc.

References dIn, iNumInputs, and MBDYN_EXCEPT_ARGS.

928 {
929  if (i < 1 || i > (unsigned int)iNumInputs) {
931  }
932 
933  return dIn[i - 1];
934 }
#define MBDYN_EXCEPT_ARGS
Definition: except.h:63
std::vector< doublereal > dIn
Definition: discctrl.h:285
integer iNumInputs
Definition: discctrl.h:283
void DiscreteControlElem::GetConnectedNodes ( std::vector< const Node * > &  connectedNodes) const
virtual

Reimplemented from Elem.

Definition at line 939 of file discctrl.cc.

References ASSERT, iNumInputs, iNumOutputs, pInputs, ScalarDof::pNode, and vOutputs.

940  {
941  connectedNodes.resize(iNumInputs + iNumOutputs);
942  for (int i = 0; i < iNumInputs; i++) {
943  connectedNodes[i] = pInputs[i].pNode;
944  }
945 
946  unsigned cnt = unsigned(iNumInputs);
947  for (int i = 0; i < iNumOutputs; i++) {
948  ScalarDofValue *psdv = dynamic_cast<ScalarDofValue *>(vOutputs[i]);
949  if (psdv) {
950  connectedNodes[cnt] = psdv->pNode;
951  cnt++;
952  }
953  }
954 
955  ASSERT(cnt <= connectedNodes.size());
956 
957  if (cnt != connectedNodes.size()) {
958  connectedNodes.resize(cnt);
959  }
960 }
ScalarNode * pNode
Definition: node.h:708
std::vector< ScalarValue * > vOutputs
Definition: discctrl.h:279
ScalarDof * pInputs
Definition: discctrl.h:284
#define ASSERT(expression)
Definition: colamd.c:977
integer iNumOutputs
Definition: discctrl.h:278
integer iNumInputs
Definition: discctrl.h:283
DofOrder::Order DiscreteControlElem::GetDofType ( unsigned int  ) const
virtual

Reimplemented from Elem.

Definition at line 847 of file discctrl.cc.

References ASSERTMSG, and DofOrder::UNKNOWN.

848 {
849  ASSERTMSG(0, "You shouldn't have called this function");
850  return DofOrder::UNKNOWN;
851 }
#define ASSERTMSG(expr, msg)
Definition: myassert.h:219
Electric::Type DiscreteControlElem::GetElectricType ( void  ) const
virtual

Implements Electric.

Definition at line 765 of file discctrl.cc.

References Electric::DISCRETECONTROL.

766 {
768 }
unsigned int DiscreteControlElem::iGetNumDof ( void  ) const
virtual

Reimplemented from Elem.

Definition at line 840 of file discctrl.cc.

841 {
842  return 0;
843 }
unsigned int DiscreteControlElem::iGetNumPrivData ( void  ) const
virtual

Reimplemented from SimulationEntity.

Definition at line 873 of file discctrl.cc.

References iNumInputs.

874 {
875  return iNumInputs;
876 }
integer iNumInputs
Definition: discctrl.h:283
unsigned int DiscreteControlElem::iGetPrivDataIdx ( const char *  s) const
virtual

Reimplemented from SimulationEntity.

Definition at line 879 of file discctrl.cc.

References WithLabel::GetLabel(), and iNumInputs.

880 {
881  /*
882  * legal values:
883  *
884  * "u[<idx>]" with <idx> ::= positive integer between 1 and iNumInputs
885  */
886  switch (s[0]) {
887  case 'u':
888  s++;
889  break;
890 
891  default:
892  return 0;
893  }
894 
895  if (s[0] != '[') {
896  return 0;
897  }
898  s++;
899 
900  if (s[0] == '-') {
901  return 0;
902  }
903 
904  char *next;
905  errno = 0;
906  long idx = std::strtol(s, &next, 10);
907  int save_errno = errno;
908  if (next == s || next[0] != ']') {
909  return 0;
910  }
911 
912  if (save_errno == ERANGE) {
913  silent_cerr("DiscreteControlElem(" << GetLabel() << "): "
914  "warning, private data index " << std::string(s, next - s)
915  << " overflows" << std::endl);
916  return 0;
917  }
918 
919  if (idx > iNumInputs) {
920  return 0;
921  }
922 
923  return idx;
924 }
integer iNumInputs
Definition: discctrl.h:283
unsigned int GetLabel(void) const
Definition: withlab.cc:62

Here is the call graph for this function:

std::ostream & DiscreteControlElem::Restart ( std::ostream &  out) const
virtual

Implements Elem.

Definition at line 772 of file discctrl.cc.

References WithLabel::GetLabel().

773 {
774  out << " electric: " << GetLabel() << ", discrete control; "
775  "# to be implemented" << std::endl;
776  return out;
777 }
unsigned int GetLabel(void) const
Definition: withlab.cc:62

Here is the call graph for this function:

void DiscreteControlElem::WorkSpaceDim ( integer piNumRows,
integer piNumCols 
) const
virtual

Implements Elem.

Definition at line 855 of file discctrl.cc.

References iNumInputs.

856 {
857  *piNumRows = iNumInputs;
858  *piNumCols = 1;
859 }
integer iNumInputs
Definition: discctrl.h:283

Member Data Documentation

bool DiscreteControlElem::bNewStep
protected

Definition at line 274 of file discctrl.h.

Referenced by AfterConvergence(), and AssRes().

std::vector<doublereal> DiscreteControlElem::dIn
protected

Definition at line 285 of file discctrl.h.

Referenced by AfterConvergence(), AssRes(), dGetPrivData(), and DiscreteControlElem().

std::vector<doublereal> DiscreteControlElem::dOut
protected

Definition at line 281 of file discctrl.h.

Referenced by AfterConvergence(), and DiscreteControlElem().

integer DiscreteControlElem::iCurrIter
protected

Definition at line 276 of file discctrl.h.

Referenced by AfterConvergence().

integer DiscreteControlElem::iNumInputs
protected
integer DiscreteControlElem::iNumIter
protected

Definition at line 275 of file discctrl.h.

Referenced by AfterConvergence().

integer DiscreteControlElem::iNumOutputs
protected

Definition at line 278 of file discctrl.h.

Referenced by AfterConvergence(), DiscreteControlElem(), and GetConnectedNodes().

DiscreteControlProcess* DiscreteControlElem::pDCP
protected

Definition at line 273 of file discctrl.h.

Referenced by AfterConvergence(), AssRes(), and ~DiscreteControlElem().

ScalarDof* DiscreteControlElem::pInputs
protected

Definition at line 284 of file discctrl.h.

Referenced by AfterConvergence(), AssRes(), GetConnectedNodes(), and ~DiscreteControlElem().

std::vector<ScalarValue *> DiscreteControlElem::vOutputs
protected

Definition at line 279 of file discctrl.h.

Referenced by AfterConvergence(), GetConnectedNodes(), and ~DiscreteControlElem().

std::vector<DriveOwner*> DiscreteControlElem::vOutScaleFact
protected

Definition at line 280 of file discctrl.h.

Referenced by AfterConvergence(), DiscreteControlElem(), and ~DiscreteControlElem().


The documentation for this class was generated from the following files: