114 pNodeHyd1(p1), pNodeHyd2(p2),
116 area1(A_1), area2(A_2),
117 dl(l), axis(axisTmp),
128 pNodeStr1(pN1), pNodeStr2(pN2), f1(f1Tmp), f2(f2Tmp)
134 ASSERT(
area1 > std::numeric_limits<doublereal>::epsilon());
135 ASSERT(
area2 > std::numeric_limits<doublereal>::epsilon());
136 ASSERT(
dl > std::numeric_limits<doublereal>::epsilon());
161 return out <<
"Actuator not implemented yet!" << std::endl;
198 DEBUGCOUT(
"Entering Actuator::AssJac()" << std::endl);
211 for (
int iCnt = 1; iCnt <= 6; iCnt++) {
259 doublereal dVel = TmpAxis.Dot(v2+Omega2.Cross(f2Tmp)-v1-Omega1.Cross(f1Tmp));
264 WM.
Sub(1, 4, JacMatWedge1);
265 WM.
Add(7, 4, JacMatWedge1);
268 for (
int iCnt = 1; iCnt <= 3; iCnt++) {
286 for (
int iCnt = 1; iCnt <= 3; iCnt++) {
295 WM.
Add(4, 4, TmpMat);
296 WM.
Sub(4, 10, TmpMat);
299 JacVec = f2Tmp.
Cross(TmpAxis);
300 for (
int iCnt = 1; iCnt <=3; iCnt++) {
309 WM.
PutCoef(13, 13, -densityDP1*dVel*area1);
311 WM.
PutCoef(14, 14, densityDP2*dVel*area2);
317 for (
int iCnt = 1; iCnt <= 3; iCnt++) {
319 WM.
PutCoef(13, iCnt, d*rho1A1);
320 WM.
PutCoef(13, 6+iCnt, -d*rho1A1);
322 WM.
PutCoef(14, iCnt, -d*rho2A2);
323 WM.
PutCoef(14, 6+iCnt, d*rho2A2);
327 JacVec = (TmpAxis.Cross(x2+f2Tmp-x1))*(densityDP1*
dpP1*dCoef)
328 +(TmpAxis.Cross(f1Tmp+(x2+Omega2.Cross(f2Tmp)-x1)*dCoef))*density1;
329 for (
int iCnt = 1; iCnt <= 3; iCnt++) {
334 JacVec = (TmpAxis.Cross(f2Tmp))*(densityDP1*
dpP1*dCoef)
335 +(TmpAxis.Cross(f2Tmp+(Omega2.Cross(f2Tmp))*dCoef))*density1;
336 for (
int iCnt = 1; iCnt <= 3; iCnt++) {
341 JacVec = (TmpAxis.Cross(x2+f2Tmp-x1))*(densityDP2*
dpP2*dCoef)
342 +(TmpAxis.Cross(f1Tmp+(x2+Omega2.Cross(f2Tmp)-x1)*dCoef))*density2;
343 for (
int iCnt = 1; iCnt <= 3; iCnt++) {
348 JacVec = (TmpAxis.Cross(f2Tmp))*(densityDP2*
dpP2*dCoef)
349 +(TmpAxis.Cross(f2Tmp+(Omega2.Cross(f2Tmp))*dCoef))*density2;
350 for (
int iCnt = 1; iCnt <= 3; iCnt++) {
382 for (
int iCnt = 1; iCnt <= 6; iCnt++) {
383 WorkVec.
PutRowIndex(iCnt, iNode1FirstMomIndex+iCnt);
384 WorkVec.
PutRowIndex(6+iCnt, iNode2FirstMomIndex+iCnt);
397 dp1 = XCurr(iIndex+1);
398 dp2 = XCurr(iIndex+2);
400 dpP1 = XPrimeCurr(iIndex+1);
401 dpP2 = XPrimeCurr(iIndex+2);
433 Vec3 Dist = x2+f2Tmp-x1-f1Tmp;
435 doublereal dVel = TmpAxis.
Dot(v2+Omega2.Cross(f2Tmp)-v1-Omega1.Cross(f1Tmp))
436 +Dist*(Omega1.Cross(TmpAxis));
443 WorkVec.
Sub(1, FHyd);
444 WorkVec.
Sub(4, f1Tmp.Cross(FHyd));
447 WorkVec.
Add(7, FHyd);
470 <<
" " <<
dp1 <<
" " <<
dp2
SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
void PutColIndex(integer iSubCol, integer iCol)
Vec3 Cross(const Vec3 &v) const
Actuator(unsigned int uL, const DofOwner *pD, const PressureNode *p1, const PressureNode *p2, const StructNode *pN1, const StructNode *pN2, const Vec3 &f1Tmp, const Vec3 &f2Tmp, const Vec3 &axisTmp, HydraulicFluid *hf1, HydraulicFluid *hf2, doublereal A_1, doublereal A_2, doublereal l, flag fOut)
virtual const Mat3x3 & GetRRef(void) const
virtual bool bToBeOutput(void) const
virtual HydraulicElem::Type GetHydraulicType(void) const
virtual void SetValue(DataManager *pDM, VectorHandler &X, VectorHandler &XP, SimulationEntity::Hints *ph=0)
virtual void ResizeReset(integer)
const MatCross_Manip MatCross
FullSubMatrixHandler & SetFull(void)
virtual const Mat3x3 & GetRCurr(void) const
virtual Node::Type GetNodeType(void) const
virtual doublereal dGetDensityDPres(void) const =0
doublereal Dot(const Vec3 &v) const
void Add(integer iRow, integer iCol, const Vec3 &v)
virtual void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const
virtual std::ostream & Restart(std::ostream &out) const
const PressureNode * pNodeHyd1
virtual void Sub(integer iRow, const Vec3 &v)
VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
virtual DofOrder::Order GetDofType(unsigned int i) const
void PutCoef(integer iRow, integer iCol, const doublereal &dCoef)
virtual const Vec3 & GetWRef(void) const
virtual void Output(OutputHandler &OH) const
std::vector< Hint * > Hints
virtual void PutRowIndex(integer iSubRow, integer iRow)=0
virtual doublereal dGetDensity(void) const =0
virtual const doublereal & dGetX(void) const
const doublereal & dGet(unsigned short int iRow) const
virtual unsigned int iGetNumDof(void) const
virtual integer iGetFirstRowIndex(void) const
virtual integer iGetFirstMomentumIndex(void) const =0
virtual integer iGetFirstPositionIndex(void) const
virtual const Vec3 & GetWCurr(void) const
#define ASSERT(expression)
virtual void PutCoef(integer iRow, const doublereal &dCoef)=0
virtual const Vec3 & GetXCurr(void) const
virtual void Add(integer iRow, const Vec3 &v)
virtual void ResizeReset(integer, integer)
virtual DofOrder::Order GetEqType(unsigned int i) const
void PutRowIndex(integer iSubRow, integer iRow)
virtual Node::Type GetNodeType(void) const
virtual const Vec3 & GetVCurr(void) const
void Sub(integer iRow, integer iCol, const Vec3 &v)
const StructNode * pNodeStr1
std::ostream & Hydraulic(void) const
virtual integer iGetFirstIndex(void) const
unsigned int GetLabel(void) const
const PressureNode * pNodeHyd2
const StructNode * pNodeStr2
virtual integer iGetFirstColIndex(void) const