MBDyn-1.7.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups
LoadIncNorm Class Reference
Inheritance diagram for LoadIncNorm:
Collaboration diagram for LoadIncNorm:

Classes

struct  NodeData
 

Public Member Functions

 LoadIncNorm (unsigned uLabel, const DofOwner *pDO, DataManager *pDM, MBDynParser &HP)
 
virtual ~LoadIncNorm (void)
 
virtual void Output (OutputHandler &OH) const
 
virtual void WorkSpaceDim (integer *piNumRows, integer *piNumCols) const
 
VariableSubMatrixHandlerAssJac (VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
 
SubVectorHandlerAssRes (SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
 
unsigned int iGetNumPrivData (void) const
 
unsigned int iGetPrivDataIdx (const char *s) const
 
doublereal dGetPrivData (unsigned int i) const
 
int iGetNumConnectedNodes (void) const
 
void GetConnectedNodes (std::vector< const Node * > &connectedNodes) const
 
void SetValue (DataManager *pDM, VectorHandler &X, VectorHandler &XP, SimulationEntity::Hints *ph)
 
virtual unsigned int iGetNumDof (void) const
 
virtual DofOrder::Order GetDofType (unsigned int i) const
 
virtual DofOrder::Order GetEqType (unsigned int i) const
 
std::ostream & Restart (std::ostream &out) const
 
virtual unsigned int iGetInitialNumDof (void) const
 
virtual void InitialWorkSpaceDim (integer *piNumRows, integer *piNumCols) const
 
VariableSubMatrixHandlerInitialAssJac (VariableSubMatrixHandler &WorkMat, const VectorHandler &XCurr)
 
SubVectorHandlerInitialAssRes (SubVectorHandler &WorkVec, const VectorHandler &XCurr)
 
virtual void AfterPredict (VectorHandler &X, VectorHandler &XP)
 
virtual void AfterConvergence (const VectorHandler &X, const VectorHandler &XP)
 
doublereal dGetP (void) 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 HintParseHint (DataManager *pDM, const char *s) const
 
virtual void BeforePredict (VectorHandler &, VectorHandler &, VectorHandler &, VectorHandler &) const
 
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 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 UserDefinedElem
 UserDefinedElem (unsigned uLabel, const DofOwner *pDO)
 
virtual ~UserDefinedElem (void)
 
bool NeedsAirProperties (void) const
 
void NeedsAirProperties (bool yesno)
 
virtual Elem::Type GetElemType (void) const
 
virtual AerodynamicElem::Type GetAerodynamicElemType (void) const
 
- Public Member Functions inherited from InitialAssemblyElem
 InitialAssemblyElem (unsigned int uL, flag fOut)
 
virtual ~InitialAssemblyElem (void)
 
- Public Member Functions inherited from SubjectToInitialAssembly
 SubjectToInitialAssembly (void)
 
virtual ~SubjectToInitialAssembly (void)
 
- Public Member Functions inherited from AerodynamicElem
 AerodynamicElem (unsigned int uL, const DofOwner *pDO, flag fOut)
 
virtual ~AerodynamicElem (void)
 
virtual const InducedVelocitypGetInducedVelocity (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)
 
- Public Member Functions inherited from AirPropOwner
 AirPropOwner (void)
 
virtual ~AirPropOwner (void)
 
virtual void PutAirProperties (const AirProperties *pAP)
 
virtual flag fGetAirVelocity (Vec3 &Velocity, const Vec3 &X) const
 
virtual doublereal dGetAirDensity (const Vec3 &X) const
 
virtual doublereal dGetAirPressure (const Vec3 &X) const
 
virtual doublereal dGetAirTemperature (const Vec3 &X) const
 
virtual doublereal dGetSoundSpeed (const Vec3 &X) const
 
virtual bool GetAirProps (const Vec3 &X, doublereal &rho, doublereal &c, doublereal &p, doublereal &T) const
 
- Public Member Functions inherited from ElemGravityOwner
 ElemGravityOwner (unsigned int uL, flag fOut)
 
virtual ~ElemGravityOwner (void)
 
virtual doublereal dGetM (void) const
 
Vec3 GetS (void) const
 
Mat3x3 GetJ (void) const
 
Vec3 GetB (void) const
 
Vec3 GetG (void) const
 
- Public Member Functions inherited from GravityOwner
 GravityOwner (void)
 
virtual ~GravityOwner (void)
 
void PutGravity (const Gravity *pG)
 
virtual bool bGetGravity (const Vec3 &X, Vec3 &Acc) const
 

Private Attributes

int m_FirstSteps
 
doublereal m_dP
 
doublereal m_dPPrev
 
DriveOwner m_DeltaS
 
doublereal m_dDeltaS
 
doublereal m_dS
 
doublereal m_dPMax
 
std::vector< NodeDatam_Nodes
 
doublereal m_dCompliance
 
doublereal m_dRefLen
 
unsigned m_iDim
 
doublereal m_dDeltaP
 
doublereal m_DeltaS2
 

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 AerodynamicElem
enum  Type {
  UNKNOWN = -1, INDUCEDVELOCITY = 0, AEROMODAL, AERODYNAMICBODY,
  AERODYNAMICBEAM, AERODYNAMICEXTERNAL, AERODYNAMICEXTERNALMODAL, AERODYNAMICLOADABLE,
  AIRCRAFTINSTRUMENTS, GENERICFORCE, LASTAEROTYPE
}
 
- Protected Member Functions inherited from ElemGravityOwner
virtual Vec3 GetS_int (void) const
 
virtual Mat3x3 GetJ_int (void) const
 
virtual Vec3 GetB_int (void) const
 
virtual Vec3 GetG_int (void) const
 
- Protected Attributes inherited from WithLabel
unsigned int uLabel
 
std::string sName
 
- Protected Attributes inherited from ToBeOutput
flag fOutput
 
- Protected Attributes inherited from UserDefinedElem
bool needsAirProperties
 
- Protected Attributes inherited from AirPropOwner
const AirPropertiespAirProperties
 
- Protected Attributes inherited from GravityOwner
GravitypGravity
 

Detailed Description

Definition at line 47 of file module-loadinc.cc.

Constructor & Destructor Documentation

LoadIncNorm::LoadIncNorm ( unsigned  uLabel,
const DofOwner pDO,
DataManager pDM,
MBDynParser HP 
)

Definition at line 122 of file module-loadinc.cc.

References ASSERT, DataManager::begin(), DriveOwner::dGet(), StructNode::DUMMY, DataManager::end(), DataManager::fReadOutput(), MBDynParser::GetDriveCaller(), IncludeParser::GetLineData(), HighParser::GetReal(), StructNode::GetStructNodeType(), HighParser::IsArg(), HighParser::IsKeyWord(), Elem::LOADABLE, m_dCompliance, m_dDeltaP, m_dDeltaS, m_DeltaS, m_DeltaS2, m_dPMax, m_dPPrev, m_dRefLen, m_iDim, m_Nodes, MBDYN_EXCEPT_ARGS, DriveOwner::Set(), ToBeOutput::SetOutputFlag(), and Node::STRUCTURAL.

125 : Elem(uLabel, flag(0)),
126 UserDefinedElem(uLabel, pDO),
127 m_FirstSteps(2),
128 m_dS(0.),
129 m_dPMax(1.),
130 m_dCompliance(1.),
131 m_dRefLen(1.),
132 m_iDim(0)
133 {
134  // help
135  if (HP.IsKeyWord("help")) {
136  silent_cout(
137 "\n"
138 "Module: loadinc - load increment normalization\n"
139 "Author: Pierangelo Masarati <masarati@aero.polimi.it>\n"
140 "Organization: Dipartimento di Ingegneria Aerospaziale\n"
141 " Politecnico di Milano\n"
142 " http://www.aero.polimi.it/\n"
143 "\n"
144 " All rights reserved\n"
145 "\n"
146 "Usage:\n"
147 "\n"
148 "user defined : <label> , load increment normalization ,\n"
149 " [ max load , <max_load> , ] # bails out when p >= max_load\n"
150 " [ compliance , <compliance> , ] # compliance*p = length\n"
151 " [ reference length, <ref_length> , ] # multiplies DeltaTheta\n"
152 " (DriveCaller) <DeltaS> ; # arc length increment\n"
153 "\n"
154 "# output:\n"
155 "# 1: <label>\n"
156 "# 2: <p>\n"
157 "# 3: <s>\n"
158  << std::endl);
159 
160  if (!HP.IsArg()) {
161  /*
162  * Exit quietly if nothing else is provided
163  */
164  throw NoErr(MBDYN_EXCEPT_ARGS);
165  }
166  }
167 
168  if (HP.IsKeyWord("max" "load")) {
169  m_dPMax = HP.GetReal();
170  if (m_dPMax <= 0.) {
171  silent_cerr("LoadIncNorm(" << uLabel << "): invalid \"max load\" at line " << HP.GetLineData() << std::endl);
172  throw NoErr(MBDYN_EXCEPT_ARGS);
173  }
174  }
175 
176  if (HP.IsKeyWord("compliance")) {
177  m_dCompliance = HP.GetReal();
178  if (m_dCompliance <= std::numeric_limits<doublereal>::epsilon()) {
179  silent_cerr("LoadIncNorm(" << uLabel << "): invalid \"compliance\" at line " << HP.GetLineData() << std::endl);
180  throw NoErr(MBDYN_EXCEPT_ARGS);
181  }
182  }
183 
184  if (HP.IsKeyWord("reference" "length")) {
185  m_dRefLen = HP.GetReal();
186  if (m_dRefLen < 0.) {
187  silent_cerr("LoadIncNorm(" << uLabel << "): invalid \"reference length\" at line " << HP.GetLineData() << std::endl);
188  throw NoErr(MBDYN_EXCEPT_ARGS);
189  }
190 
191 #if 0
192  if (m_dRefLen == 0.) {
193  m_iDofOffset = 3;
194  }
195 #endif
196  }
197 
198  DriveCaller *pDC = HP.GetDriveCaller();
199  m_DeltaS.Set(pDC);
200 
202 
203  // initialize data structures
204  unsigned uCnt;
205  DataManager::NodeContainerType::const_iterator i;
206  for (i = pDM->begin(Node::STRUCTURAL), uCnt = 0; i != pDM->end(Node::STRUCTURAL); ++i) {
207  const StructDispNode *pDNode(dynamic_cast<const StructDispNode *>(i->second));
208  ASSERT(pDNode != 0);
209  const StructNode *pNode(dynamic_cast<const StructNode *>(pDNode));
210  if (pNode != 0 && pNode->GetStructNodeType() == StructNode::DUMMY) {
211  continue;
212  }
213  uCnt++;
214  }
215 
216  m_Nodes.resize(uCnt);
217 
218  for (i = pDM->begin(Node::STRUCTURAL), uCnt = 0; i != pDM->end(Node::STRUCTURAL); ++i) {
219  const StructDispNode *pDNode(dynamic_cast<const StructDispNode *>(i->second));
220  ASSERT(pDNode != 0);
221  const StructNode *pNode(dynamic_cast<const StructNode *>(pDNode));
222  if (pNode != 0 && pNode->GetStructNodeType() == StructNode::DUMMY) {
223  continue;
224  }
225  m_Nodes[uCnt].pNode = pDNode;
226  if (pNode != 0 && m_dRefLen > 0.) {
227  m_iDim += 6;
228 
229  } else {
230  m_iDim += 3;
231  }
232  uCnt++;
233  }
234 
235  m_dDeltaS = m_DeltaS.dGet();
236  if (m_dDeltaS < 0.) {
237  silent_cerr("LoadIncNorm(" << uLabel << "): DeltaS must be positive" << std::endl);
238  throw NoErr(MBDYN_EXCEPT_ARGS);
239  }
241  m_dPPrev = -m_dDeltaP;
242 
244 
245  // std::cerr << "### " << __PRETTY_FUNCTION__ << " m_dP=" << m_dP << " m_dDeltaP=" << m_dDeltaP << " m_dPPrev=" << m_dPPrev << std::endl;
246 }
flag fReadOutput(MBDynParser &HP, const T &t) const
Definition: dataman.h:1064
doublereal m_dPPrev
long int flag
Definition: mbdyn.h:43
doublereal m_dCompliance
#define MBDYN_EXCEPT_ARGS
Definition: except.h:63
DriveOwner m_DeltaS
doublereal m_dS
doublereal m_dPMax
DataManager::ElemContainerType::const_iterator begin(Elem::Type t) const
Definition: dataman.cc:902
virtual bool IsKeyWord(const char *sKeyWord)
Definition: parser.cc:910
doublereal m_DeltaS2
unsigned int uLabel
Definition: withlab.h:44
#define ASSERT(expression)
Definition: colamd.c:977
unsigned m_iDim
doublereal m_dDeltaS
Definition: except.h:79
virtual bool IsArg(void)
Definition: parser.cc:807
void Set(const DriveCaller *pDC)
Definition: drive.cc:647
doublereal dGet(const doublereal &dVar) const
Definition: drive.cc:664
UserDefinedElem(unsigned uLabel, const DofOwner *pDO)
Definition: userelem.cc:152
DriveCaller * GetDriveCaller(bool bDeferred=false)
Definition: mbpar.cc:2033
doublereal m_dDeltaP
virtual void SetOutputFlag(flag f=flag(1))
Definition: output.cc:896
std::vector< NodeData > m_Nodes
doublereal m_dRefLen
Elem(unsigned int uL, flag fOut)
Definition: elem.cc:41
virtual HighParser::ErrOut GetLineData(void) const
Definition: parsinc.cc:697
DataManager::ElemContainerType::const_iterator end(Elem::Type t) const
Definition: dataman.cc:908
virtual doublereal GetReal(const doublereal &dDefval=0.0)
Definition: parser.cc:1056

Here is the call graph for this function:

LoadIncNorm::~LoadIncNorm ( void  )
virtual

Definition at line 248 of file module-loadinc.cc.

References NO_OP.

249 {
250  NO_OP;
251 }
#define NO_OP
Definition: myassert.h:74

Member Function Documentation

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

Reimplemented from SimulationEntity.

Definition at line 273 of file module-loadinc.cc.

References DriveOwner::dGet(), m_DeltaS, m_dP, m_dPMax, m_dPPrev, m_dS, m_FirstSteps, and mbdyn_set_stop_at_end_of_time_step().

275 {
276  if (m_dP >= m_dPMax) {
278  }
279 
280  // std::cerr << "### " << __PRETTY_FUNCTION__ << " m_FirstSteps=" << m_FirstSteps << std::endl;
281 
282  if (m_FirstSteps) {
283  m_FirstSteps--;
284  }
285 
286  m_dS += m_DeltaS.dGet();
287  m_dPPrev = m_dP;
288 
289  // std::cerr << "### " << __PRETTY_FUNCTION__ << " m_dP=" << m_dP << " m_dDeltaP=" << m_dDeltaP << " m_dPPrev=" << m_dPPrev << std::endl;
290 }
doublereal m_dPPrev
doublereal m_dP
DriveOwner m_DeltaS
doublereal m_dS
doublereal m_dPMax
doublereal dGet(const doublereal &dVar) const
Definition: drive.cc:664
void mbdyn_set_stop_at_end_of_time_step(void)
Definition: solver.cc:200

Here is the call graph for this function:

void LoadIncNorm::AfterPredict ( VectorHandler X,
VectorHandler XP 
)
virtual

Reimplemented from SimulationEntity.

Definition at line 267 of file module-loadinc.cc.

References NO_OP.

268 {
269  NO_OP;
270 }
#define NO_OP
Definition: myassert.h:74
VariableSubMatrixHandler & LoadIncNorm::AssJac ( VariableSubMatrixHandler WorkMat,
doublereal  dCoef,
const VectorHandler XCurr,
const VectorHandler XPrimeCurr 
)
virtual

Implements Elem.

Definition at line 300 of file module-loadinc.cc.

References DriveOwner::dGet(), RotManip::DRot_I(), DofOwnerOwner::iGetFirstIndex(), m_dCompliance, m_dDeltaP, m_dDeltaS, m_DeltaS, m_DeltaS2, m_dRefLen, m_FirstSteps, m_Nodes, Mat3x3::MulTV(), FullSubMatrixHandler::PutCoef(), FullSubMatrixHandler::PutColIndex(), FullSubMatrixHandler::PutRowIndex(), FullSubMatrixHandler::ResizeReset(), VariableSubMatrixHandler::SetFull(), and WorkSpaceDim().

304 {
305  FullSubMatrixHandler& WM = WorkMat.SetFull();
306 
307  integer iIndex = iGetFirstIndex() + 1;
308 
309  // std::cerr << "### " << __PRETTY_FUNCTION__ << " m_FirstSteps=" << m_FirstSteps << std::endl;
310 
311  if (m_FirstSteps || m_dDeltaS == 0.) {
312  WM.ResizeReset(1, 1);
313  WM.PutRowIndex(1, iIndex);
314  WM.PutColIndex(1, iIndex);
315  WM.PutCoef(1, 1, m_dCompliance);
316 
317  } else {
318  integer iNumRows, iNumCols;
319  WorkSpaceDim(&iNumRows, &iNumCols);
320  WM.ResizeReset(iNumRows, iNumCols);
321 
322  WM.PutRowIndex(1, iIndex);
323  WM.PutColIndex(iNumCols, iIndex);
325  if (std::abs(d) <= 10.*std::numeric_limits<doublereal>::epsilon()) {
327  }
328  WM.PutCoef(1, iNumCols, d);
329 
330 
331  // std::cerr << "### " << __PRETTY_FUNCTION__ << " m_dP=" << m_dP << " m_dDeltaP=" << m_dDeltaP << " m_dPPrev=" << m_dPPrev << std::endl;
332 
333  doublereal dCoefX = dCoef/m_DeltaS2;
334  doublereal dCoefTheta = dCoefX*m_dRefLen*m_dRefLen;
335 
336  integer iNodeOffset = 0;
337  for (std::vector<NodeData>::const_iterator i = m_Nodes.begin(); i != m_Nodes.end(); ++i) {
338  integer iFirstPositionIndex = i->pNode->iGetFirstIndex();
339 
340  for (integer iCnt = 1; iCnt <= 3; iCnt++) {
341  WM.PutColIndex(iNodeOffset + iCnt, iFirstPositionIndex + iCnt);
342  WM.PutCoef(1, iNodeOffset + iCnt, dCoefX*i->DX(iCnt));
343  }
344 
345  if (m_dRefLen > 0.) {
346  const StructNode *pNode(dynamic_cast<const StructNode *>(i->pNode));
347  if (pNode != 0) {
348  // FIXME: check linearization
349  Mat3x3 Gm1 = RotManip::DRot_I(i->DTheta);
350  Vec3 VTmp = Gm1.MulTV(i->DTheta);
351 
352  for (integer iCnt = 1; iCnt <= 3; iCnt++) {
353  WM.PutColIndex(iNodeOffset + 3 + iCnt, iFirstPositionIndex + 3 + iCnt);
354  WM.PutCoef(1, iNodeOffset + 3 + iCnt, dCoefTheta*VTmp(iCnt));
355  }
356  iNodeOffset += 6;
357 
358  } else {
359  iNodeOffset += 3;
360  }
361 
362  } else {
363  iNodeOffset += 3;
364  }
365  }
366  }
367 
368  return WorkMat;
369 }
virtual void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const
void PutColIndex(integer iSubCol, integer iCol)
Definition: submat.h:325
doublereal m_dCompliance
Definition: matvec3.h:98
FullSubMatrixHandler & SetFull(void)
Definition: submat.h:1168
void PutCoef(integer iRow, integer iCol, const doublereal &dCoef)
Definition: submat.h:672
DriveOwner m_DeltaS
Vec3 MulTV(const Vec3 &v) const
Definition: matvec3.cc:482
doublereal m_DeltaS2
doublereal m_dDeltaS
virtual void ResizeReset(integer, integer)
Definition: submat.cc:182
void PutRowIndex(integer iSubRow, integer iRow)
Definition: submat.h:311
doublereal dGet(const doublereal &dVar) const
Definition: drive.cc:664
doublereal m_dDeltaP
std::vector< NodeData > m_Nodes
virtual integer iGetFirstIndex(void) const
Definition: dofown.h:127
doublereal m_dRefLen
double doublereal
Definition: colamd.c:52
long int integer
Definition: colamd.c:51
Mat3x3 DRot_I(const Vec3 &phi)
Definition: Rot.cc:111

Here is the call graph for this function:

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

Implements Elem.

Definition at line 372 of file module-loadinc.cc.

References DriveOwner::dGet(), StructNode::GetRCurr(), StructNode::GetRPrev(), DofOwnerOwner::iGetFirstIndex(), m_dCompliance, m_dDeltaP, m_dDeltaS, m_DeltaS, m_DeltaS2, m_dP, m_dPPrev, m_dRefLen, m_FirstSteps, m_Nodes, MBDYN_EXCEPT_ARGS, Mat3x3::MulMT(), SubVectorHandler::PutItem(), VectorHandler::ResizeReset(), grad::sqrt(), WithLabel::uLabel, RotManip::VecRot(), and WorkSpaceDim().

376 {
377  integer iNumRows, iNumCols;
378  WorkSpaceDim(&iNumRows, &iNumCols);
379  WorkVec.ResizeReset(iNumRows);
380 
381  integer iIndex = iGetFirstIndex() + 1;
382 
383  m_dP = XCurr(iIndex);
384  m_dDeltaP = m_dP - m_dPPrev;
385 
386  // std::cerr << "### " << __PRETTY_FUNCTION__ << " m_dP=" << m_dP << " m_dDeltaP=" << m_dDeltaP << " m_dPPrev=" << m_dPPrev << std::endl;
387 
388  m_dDeltaS = m_DeltaS.dGet();
389  if (m_dDeltaS < 0.) {
390  silent_cerr("LoadIncNorm(" << uLabel << ")::AssRes(): DeltaS must be positive" << std::endl);
391  throw NoErr(MBDYN_EXCEPT_ARGS);
392  }
393  doublereal d;
394 
395  // std::cerr << "### " << __PRETTY_FUNCTION__ << " m_FirstSteps=" << m_FirstSteps << std::endl;
396 
397  if (m_FirstSteps == 2) {
398  d = -m_dP*m_dCompliance;
399 
400  } else if (m_FirstSteps == 1 || m_dDeltaS == 0.) {
402 
403  } else {
404  d = 0.;
405 
406  for (std::vector<NodeData>::iterator i = m_Nodes.begin(); i != m_Nodes.end(); ++i) {
407  i->DX = i->pNode->GetXCurr() - i->pNode->GetXPrev();
408  d += i->DX.Dot();
409 
410  if (m_dRefLen > 0.) {
411  const StructNode *pNode(dynamic_cast<const StructNode *>(i->pNode));
412  if (pNode != 0) {
413  i->DTheta = RotManip::VecRot(pNode->GetRCurr().MulMT(pNode->GetRPrev()));
414  d += (m_dRefLen*m_dRefLen)*i->DTheta.Dot();
415  }
416  }
417  }
418 
420  m_DeltaS2 = std::sqrt(d);
421 
422  d = m_dDeltaS - m_DeltaS2;
423  }
424 
425  WorkVec.PutItem(1, iIndex, d);
426 
427  return WorkVec;
428 }
virtual void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const
doublereal m_dPPrev
doublereal m_dCompliance
#define MBDYN_EXCEPT_ARGS
Definition: except.h:63
virtual void ResizeReset(integer)
Definition: vh.cc:55
doublereal m_dP
DriveOwner m_DeltaS
virtual void PutItem(integer iSubRow, integer iRow, const doublereal &dCoef)
Definition: submat.h:1445
Vec3 VecRot(const Mat3x3 &Phi)
Definition: Rot.cc:136
doublereal m_DeltaS2
unsigned int uLabel
Definition: withlab.h:44
GradientExpression< UnaryExpr< FuncSqrt, Expr > > sqrt(const GradientExpression< Expr > &u)
Definition: gradient.h:2974
doublereal m_dDeltaS
Definition: except.h:79
doublereal dGet(const doublereal &dVar) const
Definition: drive.cc:664
doublereal m_dDeltaP
std::vector< NodeData > m_Nodes
virtual integer iGetFirstIndex(void) const
Definition: dofown.h:127
doublereal m_dRefLen
double doublereal
Definition: colamd.c:52
long int integer
Definition: colamd.c:51

Here is the call graph for this function:

doublereal LoadIncNorm::dGetP ( void  ) const

Definition at line 566 of file module-loadinc.cc.

References m_dP.

Referenced by LoadIncForce::AssRes().

567 {
568  return m_dP;
569 }
doublereal m_dP
doublereal LoadIncNorm::dGetPrivData ( unsigned int  i) const
virtual

Reimplemented from SimulationEntity.

Definition at line 455 of file module-loadinc.cc.

References m_dDeltaS, m_dP, m_dS, and MBDYN_EXCEPT_ARGS.

456 {
457  switch (i) {
458  case 1:
459  return m_dP;
460 
461  case 2:
462  return m_dS;
463 
464  case 3:
465  return m_dDeltaS;
466 
467  default:
469  }
470 }
#define MBDYN_EXCEPT_ARGS
Definition: except.h:63
doublereal m_dP
doublereal m_dS
doublereal m_dDeltaS
void LoadIncNorm::GetConnectedNodes ( std::vector< const Node * > &  connectedNodes) const
virtual

Reimplemented from Elem.

Definition at line 479 of file module-loadinc.cc.

References m_Nodes.

480 {
481  connectedNodes.resize(m_Nodes.size());
482 
483  for (unsigned uCnt = 0; uCnt < m_Nodes.size(); uCnt++) {
484  connectedNodes[uCnt] = m_Nodes[uCnt].pNode;
485  }
486 }
std::vector< NodeData > m_Nodes
DofOrder::Order LoadIncNorm::GetDofType ( unsigned int  i) const
virtual

Reimplemented from Elem.

Definition at line 505 of file module-loadinc.cc.

References DofOrder::ALGEBRAIC, and ASSERT.

506 {
507  ASSERT(i == 0);
508  return DofOrder::ALGEBRAIC;
509 }
#define ASSERT(expression)
Definition: colamd.c:977
DofOrder::Order LoadIncNorm::GetEqType ( unsigned int  i) const
virtual

Reimplemented from SimulationEntity.

Definition at line 512 of file module-loadinc.cc.

References DofOrder::ALGEBRAIC, and ASSERT.

513 {
514  ASSERT(i == 0);
515  return DofOrder::ALGEBRAIC;
516 }
#define ASSERT(expression)
Definition: colamd.c:977
unsigned int LoadIncNorm::iGetInitialNumDof ( void  ) const
virtual

Implements SubjectToInitialAssembly.

Definition at line 525 of file module-loadinc.cc.

526 {
527  return 0;
528 }
int LoadIncNorm::iGetNumConnectedNodes ( void  ) const

Definition at line 473 of file module-loadinc.cc.

References m_Nodes.

474 {
475  return m_Nodes.size();
476 }
std::vector< NodeData > m_Nodes
unsigned int LoadIncNorm::iGetNumDof ( void  ) const
virtual

Reimplemented from Elem.

Definition at line 499 of file module-loadinc.cc.

500 {
501  return 1;
502 }
unsigned int LoadIncNorm::iGetNumPrivData ( void  ) const
virtual

Reimplemented from SimulationEntity.

Definition at line 431 of file module-loadinc.cc.

432 {
433  return 3;
434 }
unsigned int LoadIncNorm::iGetPrivDataIdx ( const char *  s) const
virtual

Reimplemented from SimulationEntity.

Definition at line 437 of file module-loadinc.cc.

438 {
439  if (strcmp(s, "p") == 0) {
440  return 1;
441  }
442 
443  if (strcmp(s, "S") == 0) {
444  return 2;
445  }
446 
447  if (strcmp(s, "DeltaS") == 0) {
448  return 3;
449  }
450 
451  return 0;
452 }
VariableSubMatrixHandler & LoadIncNorm::InitialAssJac ( VariableSubMatrixHandler WorkMat,
const VectorHandler XCurr 
)
virtual

Implements SubjectToInitialAssembly.

Definition at line 540 of file module-loadinc.cc.

References ASSERT, and VariableSubMatrixHandler::SetNullMatrix().

543 {
544  // should not be called, since initial workspace is empty
545  ASSERT(0);
546 
547  WorkMat.SetNullMatrix();
548 
549  return WorkMat;
550 }
void SetNullMatrix(void)
Definition: submat.h:1159
#define ASSERT(expression)
Definition: colamd.c:977

Here is the call graph for this function:

SubVectorHandler & LoadIncNorm::InitialAssRes ( SubVectorHandler WorkVec,
const VectorHandler XCurr 
)
virtual

Implements SubjectToInitialAssembly.

Definition at line 553 of file module-loadinc.cc.

References ASSERT, and VectorHandler::ResizeReset().

556 {
557  // should not be called, since initial workspace is empty
558  ASSERT(0);
559 
560  WorkVec.ResizeReset(0);
561 
562  return WorkVec;
563 }
virtual void ResizeReset(integer)
Definition: vh.cc:55
#define ASSERT(expression)
Definition: colamd.c:977

Here is the call graph for this function:

void LoadIncNorm::InitialWorkSpaceDim ( integer piNumRows,
integer piNumCols 
) const
virtual

Implements SubjectToInitialAssembly.

Definition at line 531 of file module-loadinc.cc.

534 {
535  *piNumRows = 0;
536  *piNumCols = 0;
537 }
void LoadIncNorm::Output ( OutputHandler OH) const
virtual

Reimplemented from ToBeOutput.

Definition at line 254 of file module-loadinc.cc.

References ToBeOutput::bToBeOutput(), WithLabel::GetLabel(), OutputHandler::Loadable(), m_dP, and m_dS.

255 {
256  if (bToBeOutput()) {
257  std::ostream& out = OH.Loadable();
258 
259  out << GetLabel()
260  << " " << m_dP
261  << " " << m_dS
262  << std::endl;
263  }
264 }
virtual bool bToBeOutput(void) const
Definition: output.cc:890
doublereal m_dP
doublereal m_dS
std::ostream & Loadable(void) const
Definition: output.h:506
unsigned int GetLabel(void) const
Definition: withlab.cc:62

Here is the call graph for this function:

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

Implements Elem.

Definition at line 519 of file module-loadinc.cc.

520 {
521  return out << "# LoadIncNorm: not implemented" << std::endl;
522 }
void LoadIncNorm::SetValue ( DataManager pDM,
VectorHandler X,
VectorHandler XP,
SimulationEntity::Hints ph 
)
virtual

Reimplemented from SimulationEntity.

Definition at line 489 of file module-loadinc.cc.

References DofOwnerOwner::iGetFirstIndex(), and m_dPPrev.

492 {
493  integer iIndex = iGetFirstIndex() + 1;
494  X(iIndex) = 0.;
495  XP(iIndex) = m_dPPrev;
496 }
doublereal m_dPPrev
virtual integer iGetFirstIndex(void) const
Definition: dofown.h:127
long int integer
Definition: colamd.c:51

Here is the call graph for this function:

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

Implements Elem.

Definition at line 293 of file module-loadinc.cc.

References m_iDim.

Referenced by AssJac(), and AssRes().

294 {
295  *piNumRows = 1;
296  *piNumCols = m_iDim + 1;
297 }
unsigned m_iDim

Member Data Documentation

doublereal LoadIncNorm::m_dCompliance
private

Definition at line 70 of file module-loadinc.cc.

Referenced by AssJac(), AssRes(), and LoadIncNorm().

doublereal LoadIncNorm::m_dDeltaP
private

Definition at line 74 of file module-loadinc.cc.

Referenced by AssJac(), AssRes(), and LoadIncNorm().

doublereal LoadIncNorm::m_dDeltaS
private

Definition at line 54 of file module-loadinc.cc.

Referenced by AssJac(), AssRes(), dGetPrivData(), and LoadIncNorm().

DriveOwner LoadIncNorm::m_DeltaS
private

Definition at line 53 of file module-loadinc.cc.

Referenced by AfterConvergence(), AssJac(), AssRes(), and LoadIncNorm().

doublereal LoadIncNorm::m_DeltaS2
private

Definition at line 76 of file module-loadinc.cc.

Referenced by AssJac(), AssRes(), and LoadIncNorm().

doublereal LoadIncNorm::m_dP
private

Definition at line 51 of file module-loadinc.cc.

Referenced by AfterConvergence(), AssRes(), dGetP(), dGetPrivData(), and Output().

doublereal LoadIncNorm::m_dPMax
private

Definition at line 59 of file module-loadinc.cc.

Referenced by AfterConvergence(), and LoadIncNorm().

doublereal LoadIncNorm::m_dPPrev
private

Definition at line 52 of file module-loadinc.cc.

Referenced by AfterConvergence(), AssRes(), LoadIncNorm(), and SetValue().

doublereal LoadIncNorm::m_dRefLen
private

Definition at line 71 of file module-loadinc.cc.

Referenced by AssJac(), AssRes(), and LoadIncNorm().

doublereal LoadIncNorm::m_dS
private

Definition at line 55 of file module-loadinc.cc.

Referenced by AfterConvergence(), dGetPrivData(), and Output().

int LoadIncNorm::m_FirstSteps
private

Definition at line 50 of file module-loadinc.cc.

Referenced by AfterConvergence(), AssJac(), and AssRes().

unsigned LoadIncNorm::m_iDim
private

Definition at line 73 of file module-loadinc.cc.

Referenced by LoadIncNorm(), and WorkSpaceDim().

std::vector<NodeData> LoadIncNorm::m_Nodes
private

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