59 stroke(St), start(start), area(As), area_pipe(A_pipe), mass(ms),
60 press0(P0), press_max(Pmax),
61 Kappa(k), weight(Wg), spring(Kspr),force0(F0), h_in(h_in), h_out(h_out),
62 c_spost(cs), c_vel(cv), c_acc(ca)
66 ASSERT(St > std::numeric_limits<doublereal>::epsilon());
67 ASSERT(As > std::numeric_limits<doublereal>::epsilon());
68 ASSERT(A_pipe > std::numeric_limits<doublereal>::epsilon());
69 ASSERT(ms > std::numeric_limits<doublereal>::epsilon());
104 return out <<
" Accumulator not implemented yet!" << std::endl;
134 DEBUGCOUT(
"Entering Accumulator::AssJac()" << std::endl);
152 s = XCurr(iFirstIndex+1);
153 v = XCurr(iFirstIndex+2);
167 DEBUGCOUT(
"AssJac(): ho superato la s_max: s" <<
s <<std::endl);
172 DEBUGCOUT(
"AssJac(): sono negativo: s" <<
s <<std::endl);
179 Jac13 = -density*
area*dCoef;
192 DEBUGCOUT(
"Jac11: " << Jac11 << std::endl);
193 DEBUGCOUT(
"Jac12: " << Jac12 << std::endl);
194 DEBUGCOUT(
"Jac13: " << Jac13 << std::endl);
195 DEBUGCOUT(
"Jac21: " << Jac21 << std::endl);
196 DEBUGCOUT(
"Jac22: " << Jac22 << std::endl);
197 DEBUGCOUT(
"Jac23: " << Jac23 << std::endl);
198 DEBUGCOUT(
"Jac31: " << Jac31 << std::endl);
199 DEBUGCOUT(
"Jac32: " << Jac32 << std::endl);
200 DEBUGCOUT(
"Jac33: " << Jac33 << std::endl);
223 DEBUGCOUT(
"Entering Accumulator::AssRes()" << std::endl);
231 s = XCurr(iFirstIndex+1);
232 v = XCurr(iFirstIndex+2);
233 sp = XPrimeCurr(iFirstIndex+1);
234 vp = XPrimeCurr(iFirstIndex+2);
301 DEBUGCOUT(
"AssJac(): ho superato la s_max: s " <<
s <<std::endl);
306 DEBUGCOUT(
"AssJac(): sono negativo: s " <<
s <<std::endl);
312 Res_1 = density*
v*
area;
322 DEBUGCOUT(
"x0spring: " << x0spring << std::endl);
332 DEBUGCOUT(
"area: " << area << std::endl);
351 DEBUGCOUT(
"-Res_1 (portata nodo1): " << -Res_1 << std::endl);
352 DEBUGCOUT(
"Res_2: " << Res_2 << std::endl);
353 DEBUGCOUT(
"Res_3: " << Res_3 << std::endl);
356 WorkVec.
PutItem(1, iNode1RowIndex, Res_1);
357 WorkVec.
PutItem(2, iFirstIndex+1, Res_2);
358 WorkVec.
PutItem(3, iFirstIndex+2, Res_3);
370 <<
" " <<
s <<
" " <<
v <<
" " <<
vp <<
" " <<
pgas
400 pNode1(p1), pNode2(p2),
401 press(Ps), area_pipe(A_pipe), area_serb(A_serb),level(lev),
402 s_max(s_mx), s_min(s_mn), c_spost(c_s)
408 ASSERT(Ps > std::numeric_limits<doublereal>::epsilon());
409 ASSERT(A_pipe > std::numeric_limits<doublereal>::epsilon());
410 ASSERT(A_serb > std::numeric_limits<doublereal>::epsilon());
438 return out <<
"Tank not implemented yet!" << std::endl;
471 DEBUGCOUT(
"Entering Tank::AssJac()" << std::endl);
494 s = XCurr(iFirstIndex+1);
499 if (jumpPres1S < 1.e8*std::numeric_limits<doublereal>::epsilon()) {
500 jumpPres1S = 1.e8*std::numeric_limits<doublereal>::epsilon();
506 if (jumpPresS2 < 1.e8*std::numeric_limits<doublereal>::epsilon()) {
507 jumpPresS2 = 1.e8*std::numeric_limits<doublereal>::epsilon();
527 DEBUGCOUT(
"Jac Esco dalla presa di emergenza: " << std::endl);
534 DEBUGCOUT(
"Jac Serbatoio pieno : " << std::endl);
538 if (s < 0. && flow2 > -
flow1) {
542 DEBUGCOUT(
"Jac Serbatoio vuoto : "<< std::endl);
566 DEBUGCOUT(
"Entering Tank::AssRes()" << std::endl);
578 s = XCurr(iFirstIndex+1);
579 sp = XPrimeCurr(iFirstIndex+1);
582 silent_cerr(
"Tank(" <<
GetLabel() <<
": negative fluid level "
583 <<
s <<
" impossible" << std::endl);
600 if (
s >
s_max && Res_1 > -Res_2) {
605 DEBUGCOUT(
"Res Serbatoio pieno: " << std::endl);
613 DEBUGCOUT(
"Esco dalla presa di emergenza: " << std::endl);
618 if (
s < 0. && Res_2 < -Res_1) {
623 DEBUGCOUT(
"Res Serbatoio vuoto: " << std::endl);
635 DEBUGCOUT(
"jumpPres1S: " << jumpPres1S << std::endl);
636 DEBUGCOUT(
"jumpPresS2: " << jumpPresS2 << std::endl);
637 DEBUGCOUT(
"density: " << density << std::endl);
648 DEBUGCOUT(
"PORTATE AI VARI NODI (positive se entranti)" << std::endl);
649 DEBUGCOUT(
"-Res_1: " << -Res_1 <<
" (portata nodo1) " << std::endl);
650 DEBUGCOUT(
"-Res_2: " << -Res_2 <<
" (portata nodo2) " << std::endl);
651 DEBUGCOUT(
"Res_3: " << Res_3 << std::endl);
654 WorkVec.
PutItem(1, iNode1RowIndex, Res_1);
655 WorkVec.
PutItem(2, iNode2RowIndex, Res_2);
656 WorkVec.
PutItem(3, iFirstIndex+1, Res_3);
667 out <<
" " <<
s <<
" " <<
sp <<
" " <<
flow1 <<
" " <<
flow2 << std::endl;
const PressureNode * pNode2
void PutColIndex(integer iSubCol, integer iCol)
virtual bool bToBeOutput(void) const
VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
GradientExpression< BinaryExpr< FuncPow, LhsExpr, RhsExpr > > pow(const GradientExpression< LhsExpr > &u, const GradientExpression< RhsExpr > &v)
#define MBDYN_EXCEPT_ARGS
FullSubMatrixHandler & SetFull(void)
void Resize(integer iNewRow, integer iNewCol)
virtual unsigned int iGetNumDof(void) const
void PutCoef(integer iRow, integer iCol, const doublereal &dCoef)
SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
virtual void Output(OutputHandler &OH) const
std::vector< Hint * > Hints
GradientExpression< UnaryExpr< FuncFabs, Expr > > fabs(const GradientExpression< Expr > &u)
virtual void PutItem(integer iSubRow, integer iRow, const doublereal &dCoef)
virtual doublereal dGetDensity(void) const =0
virtual std::ostream & Restart(std::ostream &out) const
virtual const doublereal & dGetX(void) const
virtual std::ostream & Restart(std::ostream &out) const
virtual void SetValue(DataManager *pDM, VectorHandler &X, VectorHandler &XP, SimulationEntity::Hints *ph=0)
doublereal copysign(doublereal x, doublereal y)
VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
virtual integer iGetFirstRowIndex(void) const
virtual DofOrder::Order GetDofType(unsigned int i) const
virtual HydraulicElem::Type GetHydraulicType(void) const
#define ASSERT(expression)
GradientExpression< UnaryExpr< FuncSqrt, Expr > > sqrt(const GradientExpression< Expr > &u)
virtual void PutCoef(integer iRow, const doublereal &dCoef)=0
virtual void SetValue(DataManager *pDM, VectorHandler &X, VectorHandler &XP, SimulationEntity::Hints *ph=0)
virtual void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const
virtual unsigned int iGetNumDof(void) const
const PressureNode * pNode1
Accumulator(unsigned int uL, const DofOwner *pD, HydraulicFluid *hf, const PressureNode *p1, doublereal St, doublereal start, doublereal As, doublereal A_pipe, doublereal ms, doublereal h_in, doublereal h_out, doublereal P0, doublereal Pmax, doublereal k, doublereal Wg, doublereal Kspr, doublereal force0, doublereal cs, doublereal cv, doublereal ca, flag fOut)
virtual void Output(OutputHandler &OH) const
void PutRowIndex(integer iSubRow, integer iRow)
Tank(unsigned int uL, const DofOwner *pD, HydraulicFluid *hf, const PressureNode *p1, const PressureNode *p2, doublereal press, doublereal A_pipe, doublereal A_serb, doublereal lev, doublereal s_mx, doublereal s_mn, doublereal c_s, flag fOut)
virtual HydraulicElem::Type GetHydraulicType(void) const
virtual Node::Type GetNodeType(void) const
virtual void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const
std::ostream & Hydraulic(void) const
virtual integer iGetFirstIndex(void) const
const PressureNode * pNode1
unsigned int GetLabel(void) const
SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
virtual void Resize(integer iNewSize)=0
virtual DofOrder::Order GetDofType(unsigned int i) const
virtual integer iGetFirstColIndex(void) const