52 pNode1(p1), pNode2(p2),
53 diameter(Dh), area(A),
54 length(L), turbulent(transition), q0(q0)
60 ASSERT(Dh > std::numeric_limits<doublereal>::epsilon());
61 ASSERT(A > std::numeric_limits<doublereal>::epsilon());
62 ASSERT(L> std::numeric_limits<doublereal>::epsilon());
74 DEBUGCOUT(
"Costruttore Laminare: klam: " <<
klam <<std::endl);
75 DEBUGCOUT(
"Costruttore Transizione: ktra: " <<
ktra <<std::endl);
76 DEBUGCOUT(
"Costruttore Turbolento: ktrb: " <<
ktrb <<std::endl);
93 return out <<
"Pipe not implemented yet!" << std::endl;
117 DEBUGCOUT(
"Entering Pipe::AssJac()" << std::endl);
119 DEBUGCOUT(
"dblepsilon INIZIO: " << std::numeric_limits<doublereal>::epsilon() << std::endl);
153 DEBUGCOUT(
"Entering Pipe::AssJac() sono laminare" << std::endl);
161 DEBUGCOUT(
"Entering Pipe::AssJac() sono turbolento" << std::endl);
164 if (jumpPres < 1.e8*std::numeric_limits<doublereal>::epsilon()) {
165 jumpPres = 1.e8*std::numeric_limits<doublereal>::epsilon();
168 DEBUGCOUT(
"AssJac() JUMPPRES dopo: " << jumpPres << std::endl);
178 DEBUGCOUT(
"Entering Pipe::AssJac() sono in transizione" << std::endl);
185 DEBUGCOUT(
"Sono in transizione lam->turb" << std::endl);
211 DEBUGCOUT(
"Sono in transizione turb->lam" << std::endl);
216 if (jumpPres < 1.e8*std::numeric_limits<doublereal>::epsilon()) {
217 jumpPres = 1.e8*std::numeric_limits<doublereal>::epsilon();
220 DEBUGCOUT(
"AssJac() JUMPPRES dopo: " << jumpPres << std::endl);
227 DEBUGCOUT(
"Jac turb->lam: TRATTO DI INTERPOLAZIONE" << std::endl);
250 DEBUGCOUT(
"JAC p1: " << p1 << std::endl);
251 DEBUGCOUT(
"JAC p2: " << p2 << std::endl);
252 DEBUGCOUT(
"JAC jumpPres: " << jumpPres << std::endl);
258 DEBUGCOUT(
"JAC Jac13: " << Jac13 << std::endl);
259 DEBUGCOUT(
"JAC Jac23: " << Jac23 << std::endl);
260 DEBUGCOUT(
"JAC Jac31: " << Jac31 << std::endl);
261 DEBUGCOUT(
"JAC Jac32: " << Jac32 << std::endl);
262 DEBUGCOUT(
"JAC Jac33: " << Jac33 << std::endl);
280 DEBUGCOUT(
"Entering Pipe::AssRes()" << std::endl);
304 DEBUGCOUT(
"Entering Pipe::AssRes() SONO LAMINARE" << std::endl);
306 Res_3 =
klam*q-p1+p2;
312 DEBUGCOUT(
"Entering Pipe::AssRes() SONO TURBOLENTO" << std::endl);
320 DEBUGCOUT(
"SONO IN TRANSIZIONE " << std::endl);
330 DEBUGCOUT(
"SONO IN TRANSIZIONE lam->turb" << std::endl);
334 Res_3 =
klam*q-p1+p2;
336 DEBUGCOUT(
"RES lam->turb: TRATTO 64/RE" << std::endl);
341 DEBUGCOUT(
"RES lam->turb:TRATTO DI INTERPOLAZIONE"<< std::endl);
353 DEBUGCOUT(
"fa lam->turb: " << fa << std::endl);
367 DEBUGCOUT(
"SONO IN TRANSIZIONE turb->lam" << std::endl);
374 DEBUGCOUT(
"RES turb->lam:TRATTO 0.3164/Re^0.25" << std::endl);
378 DEBUGCOUT(
"RES turb->lam:TRATTO DI INTERPOLAZIONE"<< std::endl);
399 DEBUGCOUT(
"RES density: " << density << std::endl);
400 DEBUGCOUT(
"RES p1: " << p1 << std::endl);
401 DEBUGCOUT(
"RES p2: " << p2 << std::endl);
408 DEBUGCOUT(
"***********************************************" << std::endl);
410 DEBUGCOUT(
" se positiva il fluido va dal nodo 1 al nodo 2" << std::endl);
411 DEBUGCOUT(
"***********************************************" << std::endl);
413 DEBUGCOUT(
"RES Res_1: " << Res_1 << std::endl);
414 DEBUGCOUT(
"RES Res_2: " << Res_2 << std::endl);
415 DEBUGCOUT(
"RES Res_3: " << Res_3 << std::endl);
418 WorkVec.
PutItem(1, iNode1RowIndex, Res_1);
419 WorkVec.
PutItem(2, iNode2RowIndex, Res_2);
420 WorkVec.
PutItem(3, iFirstIndex, Res_3);
451 <<
" " <<
vel <<
" " <<
flow <<
" " <<
Re << std::endl;
476 pNode1(p1), pNode2(p2),
477 diameter(Dh), area(A),
478 length(L), turbulent(transition), q0(q0)
484 ASSERT(Dh > std::numeric_limits<doublereal>::epsilon());
485 ASSERT(A > std::numeric_limits<doublereal>::epsilon());
486 ASSERT(L > std::numeric_limits<doublereal>::epsilon());
509 return out <<
"Pipe not implemented yet!" << std::endl;
537 DEBUGCOUT(
"Entering Pipe::AssJac()" << std::endl);
538 DEBUGCOUT(
"Valore di dblepsilon INIZIO:" << std::numeric_limits<doublereal>::epsilon() << std::endl);
593 lack54 = dCoef*(-2.*
klam/densityS);
594 lack55 = dCoef*(2.*
klam/densityE);
600 DEBUGCOUT(
"AssJac() sono turbolento" << std::endl);
604 lack54 = -dCoef*(
fa*kappa2/densityS)*
fabs(-q2+2.*q1);
605 lack55 = dCoef*(
fa*kappa2/densityE)*
fabs(2.*q2-q1);
614 DEBUGCOUT(
"AssJac() sono in transizione" << std::endl);
622 DEBUGCOUT(
"Sono in transizione lam->turb" << std::endl);
626 lack54 = dCoef*(-2.*
klam/densityS);
627 lack55 = dCoef*(+2.*
klam/densityE);
643 DEBUGCOUT(
"JAC fa1: " << fa1 << std::endl);
644 DEBUGCOUT(
"JAC fa2: " << fa2 << std::endl);
654 DEBUGCOUT(
"Sono in transizione turb->lam" << std::endl);
661 lack54 = -dCoef*(
fa*kappa2/densityS)*
fabs(-q2+2.*q1);
662 lack55 = dCoef*(
fa*kappa2/densityE)*
fabs(2.*q2-q1);
668 DEBUGCOUT(
"Jac turb->lam: TRATTO DI INTERPOLAZIONE"<< std::endl);
684 DEBUGCOUT(
"JAC fa1: " << fa1 << std::endl);
685 DEBUGCOUT(
"JAC fa2: " << fa2 << std::endl);
699 DEBUGCOUT(
"JAC p1: " << p1 << std::endl);
700 DEBUGCOUT(
"JAC p2: " << p2 << std::endl);
701 DEBUGCOUT(
"JAC q1: " << q1 << std::endl);
702 DEBUGCOUT(
"JAC q2: " << q2 << std::endl);
705 DEBUGCOUT(
"JAC q1p: " << q1p << std::endl);
706 DEBUGCOUT(
"JAC q2p: " << q2p << std::endl);
711 DEBUGCOUT(
"JAC Jac14: " << Jac14 << std::endl);
712 DEBUGCOUT(
"JAC Jac25: " << Jac25 << std::endl);
713 DEBUGCOUT(
"JAC Jac31: " << Jac31 << std::endl);
714 DEBUGCOUT(
"JAC Jac32: " << Jac32 << std::endl);
715 DEBUGCOUT(
"JAC Jac33: " << Jac33 << std::endl);
716 DEBUGCOUT(
"JAC Jac43: " << Jac43 << std::endl);
717 DEBUGCOUT(
"JAC Jac44: " << Jac44 << std::endl);
718 DEBUGCOUT(
"JAC Jac45: " << Jac45 << std::endl);
719 DEBUGCOUT(
"JAC Jac51: " << Jac51 << std::endl);
720 DEBUGCOUT(
"JAC Jac52: " << Jac52 << std::endl);
721 DEBUGCOUT(
"JAC Jac54: " << Jac54 << std::endl);
722 DEBUGCOUT(
"JAC Jac55: " << Jac55 << std::endl);
748 DEBUGCOUT(
"Entering Dynamic_pipe::AssRes()" << std::endl);
801 DEBUGCOUT(
"SONO IN LAMINARE" << std::endl);
803 lack = -
klam*(Qx1/densityx1+Qx2/densityx2);
807 DEBUGCOUT(
"SONO IN TURBOLENTO" << std::endl);
814 DEBUGCOUT(
"SONO IN TURBOLENTO lack: " << lack << std::endl);
815 DEBUGCOUT(
"SONO IN TURBOLENTO Qx1: " << Qx1 << std::endl);
816 DEBUGCOUT(
"SONO IN TURBOLENTO Qx2: " << Qx2 << std::endl);
823 DEBUGCOUT(
"SONO IN TRANSIZIONE" << std::endl);
831 DEBUGCOUT(
"SONO IN TRANSIZIONE lam->turb" << std::endl);
835 lack = -
klam*(Qx1/densityx1+Qx2/densityx2);
837 DEBUGCOUT(
"RES lam->turb: TRATTO 64/RE" << std::endl);
841 DEBUGCOUT(
"RES lam->turb: TRATTO DI INTERPOLAZIONE"<< std::endl);
858 DEBUGCOUT(
"RES lam->turb fax1: " << fax1 << std::endl);
859 DEBUGCOUT(
"RES lam->turb fax2: " << fax2 << std::endl);
861 lack = -kappa3*(fax1*
copysign(Qx1*Qx1, Qx1)/densityx1
862 +fax2*
copysign(Qx2*Qx2, Qx2)/densityx2);
869 DEBUGCOUT(
"SONO IN TRANSIZIONE turb->lam" << std::endl);
881 DEBUGCOUT(
"RES turb->lam:TRATTO DI INTERPOLAZIONE" << std::endl);
896 DEBUGCOUT(
"RES turb->lam fax1: " << fax1 << std::endl);
897 DEBUGCOUT(
"RES turb->lam fax2: " << fax2 << std::endl);
901 lack = -kappa3*(fax1*
copysign(Qx1*Qx1, Qx1)/densityx1
902 +fax2*
copysign(Qx2*Qx2, Qx2)/densityx2);
909 VelM = ((-q1+q2)/2.)/(
area*densityM);
915 DEBUGCOUT(
"RES densityS: " << densityS << std::endl);
916 DEBUGCOUT(
"RES densityM: " << densityM << std::endl);
917 DEBUGCOUT(
"RES densityE: " << densityE << std::endl);
918 DEBUGCOUT(
"RES p1 : " << p1 << std::endl);
919 DEBUGCOUT(
"RES p2 : " << p2 << std::endl);
920 DEBUGCOUT(
"RES pr : " << pr << std::endl);
921 DEBUGCOUT(
"RES prp: " << prp << std::endl);
922 DEBUGCOUT(
"RES q1: " << q1 << std::endl);
923 DEBUGCOUT(
"RES q2: " << q2 << std::endl);
924 DEBUGCOUT(
"RES q1p: " << q1p << std::endl);
925 DEBUGCOUT(
"RES q2p: " << q2p << std::endl);
931 DEBUGCOUT(
"***********************************************"<< std::endl);
935 DEBUGCOUT(
" se positiva il fluido va dal nodo 1 al nodo 2 " << std::endl);
936 DEBUGCOUT(
"***********************************************"<< std::endl);
937 DEBUGCOUT(
"RES Res_1: " << Res_1 << std::endl);
938 DEBUGCOUT(
"RES Res_2: " << Res_2 << std::endl);
939 DEBUGCOUT(
"RES Res_3: " << Res_3 << std::endl);
940 DEBUGCOUT(
"RES Res_4: " << Res_4 << std::endl);
941 DEBUGCOUT(
"RES Res_5: " << Res_5 << std::endl);
944 WorkVec.
PutItem(1, iNode1RowIndex, Res_1);
945 WorkVec.
PutItem(2, iNode2RowIndex, Res_2);
946 WorkVec.
PutItem(3, iFirstIndex+1, Res_3);
947 WorkVec.
PutItem(4, iFirstIndex+2, Res_4);
948 WorkVec.
PutItem(5, iFirstIndex+3, Res_5);
1024 turbulent(transition),
1032 ASSERT(Dh > std::numeric_limits<doublereal>::epsilon());
1033 ASSERT(A > std::numeric_limits<doublereal>::epsilon());
1034 ASSERT(L > std::numeric_limits<doublereal>::epsilon());
1054 return out <<
"Pipe not implemented yet!" << std::endl;
1133 dLoss11 = .75*dk/dd1;
1134 dLoss12 = .25*dk/dd1;
1135 dLoss21 = .25*dk/dd2;
1136 dLoss22 = .75*dk/dd2;
1174 doublereal fax1 = (((5.*a*fqq1+4.*b)*fqq1+3.*c)*fqq1+2.*d)*fqq1;
1175 doublereal fax2 = (((5.*a*fqq2+4.*b)*fqq2+3.*c)*fqq2+2.*d)*fqq2;
1197 WM.
PutCoef(1, 4, -dr*densityDPres1);
1199 WM.
PutCoef(2, 4, -dr*3.*densityDPres2);
1208 WM.
PutCoef(3, 3, -dr + ddq1 - ddq12);
1210 WM.
PutCoef(4, 3, -dr + ddq12);
1211 WM.
PutCoef(4, 4, dr + ddq12 - ddq2);
1217 WM.
PutCoef(3, 6, dr+dq12/area*dCoef + dLoss12);
1218 WM.
PutCoef(4, 5, dr-dq12/area*dCoef + dLoss21);
1238 DEBUGCOUT(
"Entering DynamicPipe::AssRes()" << std::endl);
1249 p1 = XCurr(iFirstIndex+1);
1250 p2 = XCurr(iFirstIndex+2);
1251 p1p = XPrimeCurr(iFirstIndex+1);
1252 p2p = XPrimeCurr(iFirstIndex+2);
1254 q1 = XCurr(iFirstIndex+3);
1255 q2 = XCurr(iFirstIndex+4);
1256 q1p = XPrimeCurr(iFirstIndex+3);
1257 q2p = XPrimeCurr(iFirstIndex+4);
1290 dLoss1 = dk*qq1/dd1;
1291 dLoss2 = dk*qq2/dd2;
1297 dLoss1 = dk*qq1*
pow(
fabs(qq1), .75)/dd1;
1298 dLoss2 = dk*qq2*
pow(
fabs(qq2), .75)/dd2;
1324 doublereal fax1 = qq1*(((a*fqq1+b)*fqq1+c)*fqq1+d)*fqq1;
1325 doublereal fax2 = qq2*(((a*fqq2+b)*fqq2+c)*fqq2+d)*fqq2;
1327 dLoss1 =
dKtra*fax1/dd1;
1328 dLoss2 =
dKtra*fax2/dd2;
1340 WorkVec.
PutItem(3, iFirstIndex+1,
1342 WorkVec.
PutItem(4, iFirstIndex+2,
1346 WorkVec.
PutItem(5, iFirstIndex+3, pn1-
p1);
1347 WorkVec.
PutItem(6, iFirstIndex+4, pn2-
p2);
const PressureNode * pNode1
const PressureNode * pNode1
const PressureNode * pNode1
void PutColIndex(integer iSubCol, integer iCol)
virtual bool bToBeOutput(void) const
GradientExpression< BinaryExpr< FuncPow, LhsExpr, RhsExpr > > pow(const GradientExpression< LhsExpr > &u, const GradientExpression< RhsExpr > &v)
Dynamic_pipe(unsigned int uL, const DofOwner *pD, HydraulicFluid *hf, const PressureNode *p1, const PressureNode *p2, doublereal Dh, doublereal A, doublereal L, flag transition, doublereal q0, flag fOut)
virtual doublereal dGetRe(Re which)
FullSubMatrixHandler & SetFull(void)
virtual doublereal dGetDensityDPres(void) const =0
virtual void AfterConvergence(const VectorHandler &X, const VectorHandler &XP)
virtual void Output(OutputHandler &OH) const
virtual void Output(OutputHandler &OH) const
void PutCoef(integer iRow, integer iCol, const doublereal &dCoef)
virtual unsigned int iGetNumDof(void) const
virtual void SetValue(DataManager *pDM, VectorHandler &X, VectorHandler &XP, SimulationEntity::Hints *ph=0)
SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
std::vector< Hint * > Hints
virtual void SetValue(DataManager *pDM, VectorHandler &X, VectorHandler &XP, SimulationEntity::Hints *ph=0)
virtual std::ostream & Restart(std::ostream &out) const
DynamicPipe(unsigned int uL, const DofOwner *pD, HydraulicFluid *hf, const PressureNode *p1, const PressureNode *p2, doublereal Dh, doublereal A, doublereal L, flag transition, doublereal q0, flag fOut)
GradientExpression< UnaryExpr< FuncFabs, Expr > > fabs(const GradientExpression< Expr > &u)
virtual void PutItem(integer iSubRow, integer iRow, const doublereal &dCoef)
virtual DofOrder::Order GetEqType(unsigned int i) const
virtual void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const
virtual DofOrder::Order GetDofType(unsigned int i) const
virtual doublereal dGetDensity(void) const =0
virtual const doublereal & dGetX(void) const
virtual void SetValue(DataManager *pDM, VectorHandler &X, VectorHandler &XP, SimulationEntity::Hints *ph=0)
Pipe(unsigned int uL, const DofOwner *pD, HydraulicFluid *hf, const PressureNode *p1, const PressureNode *p2, doublereal Dh, doublereal A, doublereal L, flag transition, doublereal q0, flag fOut)
virtual HydraulicElem::Type GetHydraulicType(void) const
virtual void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const
const PressureNode * pNode2
virtual void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const
virtual unsigned int iGetNumDof(void) const
doublereal copysign(doublereal x, doublereal y)
SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
virtual HydraulicElem::Type GetHydraulicType(void) const
virtual integer iGetFirstRowIndex(void) const
virtual std::ostream & Restart(std::ostream &out) const
#define ASSERT(expression)
const PressureNode * pNode2
virtual doublereal dGetViscosity(void) const =0
const PressureNode * pNode2
GradientExpression< UnaryExpr< FuncSqrt, Expr > > sqrt(const GradientExpression< Expr > &u)
virtual void PutCoef(integer iRow, const doublereal &dCoef)=0
virtual std::ostream & Restart(std::ostream &out) const
SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
virtual void ResizeReset(integer, integer)
virtual void AfterConvergence(const VectorHandler &X, const VectorHandler &XP)
VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
static std::stack< cleanup * > c
virtual DofOrder::Order GetDofType(unsigned int i) const
virtual HydraulicElem::Type GetHydraulicType(void) const
void PutRowIndex(integer iSubRow, integer iRow)
virtual void AfterConvergence(const VectorHandler &X, const VectorHandler &XP)
VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
virtual Node::Type GetNodeType(void) const
static const doublereal a
std::ostream & Hydraulic(void) const
VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
virtual integer iGetFirstIndex(void) const
unsigned int GetLabel(void) const
virtual unsigned int iGetNumDof(void) const
virtual void Resize(integer iNewSize)=0
virtual void Output(OutputHandler &OH) const
virtual DofOrder::Order GetDofType(unsigned int i) const
virtual integer iGetFirstColIndex(void) const