1 /* $Header: /var/cvs/mbdyn/mbdyn/mbdyn-1.0/mbdyn/hydr/valve.h,v 1.30 2017/01/12 14:46:32 masarati Exp $ */
2 /*
3  * MBDyn (C) is a multibody analysis code.
4  * http://www.mbdyn.org
5  *
6  * Copyright (C) 1996-2017
7  *
8  * Pierangelo Masarati	<masarati@aero.polimi.it>
9  * Paolo Mantegazza	<mantegazza@aero.polimi.it>
10  *
11  * Dipartimento di Ingegneria Aerospaziale - Politecnico di Milano
12  * via La Masa, 34 - 20156 Milano, Italy
13  * http://www.aero.polimi.it
14  *
15  * Changing this copyright notice is forbidden.
16  *
17  * This program is free software; you can redistribute it and/or modify
18  * it under the terms of the GNU General Public License as published by
19  * the Free Software Foundation (version 2 of the License).
20  *
21  *
22  * This program is distributed in the hope that it will be useful,
23  * but WITHOUT ANY WARRANTY; without even the implied warranty of
24  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
25  * GNU General Public License for more details.
26  *
27  * You should have received a copy of the GNU General Public License
28  * along with this program; if not, write to the Free Software
29  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
30  */
31 
32 /*
33  * Copyright 1999-2000 Lamberto Puggelli <puggelli@tiscalinet.it>
34  * Dipartimento di Ingegneria Aerospaziale - Politecnico di Milano
35  */
36 
37 #ifndef VALVE_H
38 #define VALVE_H
39 
40 #include <preselem.h>
41 
42 /* Control_valve - begin */
43 
44 class Control_valve : virtual public Elem, public HydraulicElem, public DriveOwner {
45  private:
46    const PressureNode* pNode1;
47    const PressureNode* pNode2;
48    const PressureNode* pNode3;
49    const PressureNode* pNode4;
50    doublereal Stato;
51    doublereal Cd;         /* coefficiente di perdita */
52    doublereal area_max;   /* larghezza del condotto: A=x*area_max */
53    doublereal loss_area;  /* area di trafilamento in % sull'area max*/
54    doublereal s_max;
55    doublereal flow1;      /* portata nodo 1 (per l'output) */
56    doublereal flow2;      /* portata nodo 2 (per l'output) */
57    doublereal flow3;      /* portata nodo 3 (per l'output) */
58    doublereal flow4;      /* portata nodo 4 (per l'output) */
59    doublereal A1;
60    doublereal A2;
61    doublereal A3;
62    doublereal A4;
63    doublereal A1min;
64    doublereal A2min;
65    doublereal A3min;
66    doublereal A4min;
67 
68  public:
69    Control_valve(unsigned int uL, const DofOwner* pD, HydraulicFluid* hf,
70 		 const PressureNode* p1, const PressureNode* p2,
71 		 const PressureNode* p3, const PressureNode* p4,
72 		 doublereal A_max, doublereal Loss_a, const DriveCaller* pDC,flag fOut);
73 
74    ~Control_valve(void);
75 
76    /* Tipo di elemento idraulico (usato solo per debug ecc.) */
77    virtual HydraulicElem::Type GetHydraulicType(void) const;
78 
79    /* Contributo al file di restart */
80    virtual std::ostream& Restart(std::ostream& out) const;
81 
82    virtual unsigned int iGetNumDof(void) const;
83    virtual DofOrder::Order GetDofType(unsigned int i) const;
84 
85    virtual void WorkSpaceDim(integer* piNumRows, integer* piNumCols) const;
86 
87    VariableSubMatrixHandler& AssJac(VariableSubMatrixHandler& WorkMat,
88 				    doublereal dCoef,
89 				    const VectorHandler& XCurr,
90 				    const VectorHandler& XPrimeCurr);
91 
92    SubVectorHandler& AssRes(SubVectorHandler& WorkVec,
93 			    doublereal dCoef,
94 			    const VectorHandler& XCurr,
95 			    const VectorHandler& XPrimeCurr);
96 
97    virtual void Output(OutputHandler& OH) const;
98 
99    /* *******PER IL SOLUTORE PARALLELO******** */
100    /* Fornisce il tipo e la label dei nodi che sono connessi all'elemento
101       utile per l'assemblaggio della matrice di connessione fra i dofs */
GetConnectedNodes(std::vector<const Node * > & connectedNodes)102    virtual void GetConnectedNodes(std::vector<const Node *>& connectedNodes) const {
103      connectedNodes.resize(4);
104      connectedNodes[0] = pNode1;
105      connectedNodes[1] = pNode2;
106      connectedNodes[2] = pNode3;
107      connectedNodes[3] = pNode4;
108    };
109    /* ************************************************ */
110 };
111 
112 /* Control_valve - end */
113 
114 
115 /* Control_valve2 - begin */
116 
117 #define VALVE_6
118 // #undef VALVE_6
119 
120 class Control_valve2
121 : virtual public Elem, public HydraulicElem, public DriveOwner {
122 private:
123 	 /*
124 	  *
125 	  * Node 1    Node 4
126 	  *          __
127 	  *   |  \     | / \
128 	  *   |   \  /    |
129 	  *   |    \/     |
130 	  *   |    /\     |
131 	  *  \ /  / __|   |
132 	  *
133 	  * Node 2     Node 3
134 	  *
135 	  */
136 	enum {
137 		N1 = 0,
138 		N2 = 1,
139 		N3 = 2,
140 		N4 = 3,
141 		LAST_N = 4
142 	};
143 	enum {
144 		Q12 = 0,
145 		Q34 = 1,
146 		Q13 = 2,
147 		Q24 = 3,
148 #ifdef VALVE_6
149 		Q14 = 4,
150 		Q23 = 5,
151 		LAST_Q = 6
152 #else /* !VALVE_6 */
153 		LAST_Q = 4
154 #endif /* !VALVE_6 */
155 	};
156 
157 	const PressureNode* pNode[LAST_N];
158 	doublereal q[LAST_Q];
159 	doublereal dp[LAST_Q];
160 	doublereal density;
161 
162 	doublereal Stato;
163 	doublereal Cd;		/* coefficiente di perdita */
164 	doublereal area_max;	/* larghezza del condotto: A=x*area_max */
165 	doublereal loss_area;	/* area di trafilamento in % sull'area max */
166 	doublereal area_min;	/* area di trafilamento = area_max*loss_area */
167 	doublereal s_max;
168 	doublereal f[LAST_N];
169 	doublereal A[LAST_Q];
170 
171 	/* gathers data from nodes and computes intermediate member data */
172 	void Prepare(void);
173 
174 public:
175 	Control_valve2(unsigned int uL, const DofOwner* pD, HydraulicFluid* hf,
176 			const PressureNode* p1, const PressureNode* p2,
177 			const PressureNode* p3, const PressureNode* p4,
178 			doublereal A_max, doublereal Loss_a,
179 			const DriveCaller* pDC,flag fOut);
180 
181 	~Control_valve2(void);
182 
183 	/* Tipo di elemento idraulico (usato solo per debug ecc.) */
184 	virtual HydraulicElem::Type GetHydraulicType(void) const;
185 
186 	/* Contributo al file di restart */
187 	virtual std::ostream& Restart(std::ostream& out) const;
188 
189 	virtual unsigned int iGetNumDof(void) const;
190 	virtual DofOrder::Order GetDofType(unsigned int i) const;
191 
192 	virtual void WorkSpaceDim(integer* piNumRows, integer* piNumCols) const;
193 
194 	VariableSubMatrixHandler& AssJac(VariableSubMatrixHandler& WorkMat,
195 			doublereal dCoef, const VectorHandler& XCurr,
196 			const VectorHandler& XPrimeCurr);
197 
198 	SubVectorHandler& AssRes(SubVectorHandler& WorkVec,
199 			doublereal dCoef, const VectorHandler& XCurr,
200 			const VectorHandler& XPrimeCurr);
201 
202 	virtual void Output(OutputHandler& OH) const;
203 
204 	virtual void SetValue(DataManager *pDM,
205 			VectorHandler& X, VectorHandler& XP,
206 			SimulationEntity::Hints *ph = 0);
207 
208 	/* *******PER IL SOLUTORE PARALLELO******** */
209 	/* Fornisce il tipo e la label dei nodi che sono connessi all'elemento
210 	 * utile per l'assemblaggio della matrice di connessione fra i dofs */
GetConnectedNodes(std::vector<const Node * > & connectedNodes)211 	virtual void GetConnectedNodes(std::vector<const Node *>& connectedNodes) const {
212 		connectedNodes.resize(4);
213 		connectedNodes[0] = pNode[N1];
214 		connectedNodes[1] = pNode[N2];
215 		connectedNodes[2] = pNode[N3];
216 		connectedNodes[3] = pNode[N4];
217 	};
218 	/* ************************************************ */
219 };
220 
221 /* Control_valve2 - end */
222 
223 
224 /* Control_valve_dinamica - begin */
225 
226 class Dynamic_control_valve : virtual public Elem, public HydraulicElem, public DriveOwner {
227  private:
228    const PressureNode* pNode1;
229    const PressureNode* pNode2;
230    const PressureNode* pNode3;
231    const PressureNode* pNode4;
232    doublereal start;        /* posizione iniziale della valvola */
233    doublereal c_spost;      /* coef dello spostamento */
234    doublereal c_vel;        /* coef della velocita' */
235    doublereal c_acc;        /* coef dell'accelerazione */
236    doublereal Force;        /* forza applicata alla valvola */
237 
238    doublereal Cd;             /* coefficiente di perdita */
239    doublereal width;          /* larghezza del condotto: A=x*width */
240    doublereal loss_area;      /* area di trafilamento in % sull'area max*/
241    doublereal valve_diameter; /* diametro della valvola */
242    doublereal valve_density;  /* densita' del corpo della valvola */
243 
244    doublereal s_max;        /* corsa massima della valvola */
245 
246    doublereal A1;           /* area di collegamento nodo 1 & nodo 2 */
247    doublereal A2;           /* area di collegamento nodo 1 & nodo 3 */
248    doublereal A3;           /* area di collegamento nodo 3 & nodo 4 */
249    doublereal A4;           /* area di collegamento nodo 2 & nodo 4 */
250 
251    doublereal Mass;         /* massa del corpo della valvola */
252    doublereal flow1;        /* portata nodo 1 (per l'output) */
253    doublereal flow2;        /* portata nodo 2 (per l'output) */
254    doublereal flow3;        /* portata nodo 3 (per l'output) */
255    doublereal flow4;        /* portata nodo 4 (per l'output) */
256    doublereal s;            /* spostamento valvola    (per l'output) */
257    doublereal v;            /* velocita' valvola      (per l'output) */
258    doublereal sp;           /* velocita' valvola */
259    doublereal vp;           /* accelerazione valvola  (per l'output) */
260    doublereal c1;           /* coef dello spostamento */
261    doublereal c2;           /* coef della velocita' */
262    doublereal c3;           /* coef dell'accelerazione */
263    doublereal cf1;          /* coef dello spostamento finale */
264    doublereal cf2;          /* coef della velocita' finale */
265    doublereal cf3;          /* coef dell'accelerazione finale */
266    doublereal deltaP;       /* salto di pressione p1-p2+p3 */
267 
268  public:
269    Dynamic_control_valve(unsigned int uL, const DofOwner* pD,
270 			 HydraulicFluid* hf,
271 			 const PressureNode* p1, const PressureNode* p2,
272 			 const PressureNode* p3, const PressureNode* p4,
273 			 const DriveCaller* pDC, doublereal s0,
274 			 doublereal s_mx, doublereal W, doublereal Loss_A,
275 			 doublereal Valve_d, doublereal Valve_rho,
276 			 doublereal cs, doublereal cv, doublereal ca, flag fOut);
277 
278    ~Dynamic_control_valve(void);
279 
280    /* Tipo di elemento idraulico (usato solo per debug ecc.) */
281    virtual HydraulicElem::Type GetHydraulicType(void) const;
282 
283    /* Contributo al file di restart */
284    virtual std::ostream& Restart(std::ostream& out) const;
285 
286    virtual unsigned int iGetNumDof(void) const;
287    virtual DofOrder::Order GetDofType(unsigned int i) const;
288 
289    virtual void WorkSpaceDim(integer* piNumRows, integer* piNumCols) const;
290 
291    VariableSubMatrixHandler& AssJac(VariableSubMatrixHandler& WorkMat,
292 				    doublereal dCoef,
293 				    const VectorHandler& XCurr,
294 				    const VectorHandler& XPrimeCurr);
295 
296    SubVectorHandler& AssRes(SubVectorHandler& WorkVec,
297 			    doublereal dCoef,
298 			    const VectorHandler& XCurr,
299 			    const VectorHandler& XPrimeCurr);
300 
301    virtual void Output(OutputHandler& OH) const;
302 
303 	virtual void SetValue(DataManager *pDM,
304 			VectorHandler& X, VectorHandler& XP,
305 			SimulationEntity::Hints *ph = 0);
306 
307     /* *******PER IL SOLUTORE PARALLELO******** */
308    /* Fornisce il tipo e la label dei nodi che sono connessi all'elemento
309       utile per l'assemblaggio della matrice di connessione fra i dofs */
GetConnectedNodes(std::vector<const Node * > & connectedNodes)310    virtual void GetConnectedNodes(std::vector<const Node *>& connectedNodes) const {
311      connectedNodes.resize(4);
312      connectedNodes[0] = pNode1;
313      connectedNodes[1] = pNode2;
314      connectedNodes[2] = pNode3;
315      connectedNodes[3] = pNode4;
316    };
317    /* ************************************************ */
318 };
319 
320 /* Dynamic_control_valve - end */
321 
322 /* Pressure flow control_valve_dinamica - begin */
323 
324 class Pressure_flow_control_valve : virtual public Elem, public HydraulicElem, public DriveOwner {
325  private:
326    const PressureNode* pNode1;
327    const PressureNode* pNode2;
328    const PressureNode* pNode3;
329    const PressureNode* pNode4;
330    const PressureNode* pNode5;
331    const PressureNode* pNode6;
332    doublereal start;        /* posizione iniziale della valvola */
333    doublereal c_spost;      /* coef dello spostamento */
334    doublereal c_vel;        /* coef della velocita' */
335    doublereal c_acc;        /* coef dell'accelerazione */
336    doublereal Force;        /* forza applicata alla valvola */
337 
338    doublereal Cd;             /* coefficiente di perdita */
339    doublereal width;          /* larghezza del condotto: A=x*width */
340    doublereal loss_area;      /* area di trafilamento in % sull'area max*/
341    doublereal valve_diameter; /* diametro della valvola */
342    doublereal valve_density;  /* densita' del corpo della valvola */
343    doublereal valve_area;     /* area della valvola */
344    doublereal s_max;        /* corsa massima della valvola */
345 
346    doublereal A1;           /* area di collegamento nodo 1 & nodo 2 */
347    doublereal A2;           /* area di collegamento nodo 1 & nodo 3 */
348    doublereal A3;           /* area di collegamento nodo 3 & nodo 4 */
349    doublereal A4;           /* area di collegamento nodo 2 & nodo 4 */
350 
351    doublereal Mass;         /* massa del corpo della valvola */
352    doublereal flow1;        /* portata nodo 1 (per l'output) */
353    doublereal flow2;        /* portata nodo 2 (per l'output) */
354    doublereal flow3;        /* portata nodo 3 (per l'output) */
355    doublereal flow4;        /* portata nodo 4 (per l'output) */
356    doublereal flow5;        /* portata nodo 5 (per l'output) */
357    doublereal flow6;        /* portata nodo 6 (per l'output) */
358 
359    doublereal s;            /* spostamento valvola    (per l'output) */
360    doublereal v;            /* velocita' valvola      (per l'output) */
361    doublereal sp;           /* velocita' valvola */
362    doublereal vp;           /* accelerazione valvola  (per l'output) */
363    doublereal c1;           /* coef dello spostamento */
364    doublereal c2;           /* coef della velocita' */
365    doublereal c3;           /* coef dell'accelerazione */
366    doublereal cf1;          /* coef dello spostamento finale */
367    doublereal cf2;          /* coef della velocita' finale */
368    doublereal cf3;          /* coef dell'accelerazione finale */
369    doublereal deltaP;       /* salto di pressione p1-p2+p3 */
370 
371  public:
372    Pressure_flow_control_valve(unsigned int uL, const DofOwner* pD,
373 			 HydraulicFluid* hf,
374 			 const PressureNode* p1, const PressureNode* p2,
375 			 const PressureNode* p3, const PressureNode* p4,
376 			 const PressureNode* p5, const PressureNode* p6,
377 		         const DriveCaller* pDC, doublereal s0,
378 			 doublereal s_mx, doublereal W, doublereal Loss_A,
379 			 doublereal Valve_d, doublereal Valve_rho,
380 			 doublereal cs, doublereal cv, doublereal ca, flag fOut);
381 
382    ~Pressure_flow_control_valve(void);
383 
384    /* Tipo di elemento idraulico (usato solo per debug ecc.) */
385    virtual HydraulicElem::Type GetHydraulicType(void) const;
386 
387    /* Contributo al file di restart */
388    virtual std::ostream& Restart(std::ostream& out) const;
389 
390    virtual unsigned int iGetNumDof(void) const;
391    virtual DofOrder::Order GetDofType(unsigned int i) const;
392 
393    virtual void WorkSpaceDim(integer* piNumRows, integer* piNumCols) const;
394 
395    VariableSubMatrixHandler& AssJac(VariableSubMatrixHandler& WorkMat,
396 				    doublereal dCoef,
397 				    const VectorHandler& XCurr,
398 				    const VectorHandler& XPrimeCurr);
399 
400    SubVectorHandler& AssRes(SubVectorHandler& WorkVec,
401 			    doublereal dCoef,
402 			    const VectorHandler& XCurr,
403 			    const VectorHandler& XPrimeCurr);
404 
405    virtual void Output(OutputHandler& OH) const;
406 
407 	virtual void SetValue(DataManager *pDM,
408 			VectorHandler& X, VectorHandler& XP,
409 			SimulationEntity::Hints *ph = 0);
410 
411     /* *******PER IL SOLUTORE PARALLELO******** */
412    /* Fornisce il tipo e la label dei nodi che sono connessi all'elemento
413       utile per l'assemblaggio della matrice di connessione fra i dofs */
GetConnectedNodes(std::vector<const Node * > & connectedNodes)414    virtual void GetConnectedNodes(std::vector<const Node *>& connectedNodes) const {
415      connectedNodes.resize(6);
416      connectedNodes[0] = pNode1;
417      connectedNodes[1] = pNode2;
418      connectedNodes[2] = pNode3;
419      connectedNodes[3] = pNode4;
420      connectedNodes[4] = pNode5;
421      connectedNodes[5] = pNode6;
422   };
423    /* ************************************************ */
424 };
425 
426 /* Pressure_flow_control_valve - end */
427 
428 
429 /* Pressure_valve - begin */
430 
431 class Pressure_valve : virtual public Elem, public HydraulicElem {
432  private:
433    const PressureNode* pNode1;
434    const PressureNode* pNode2;
435    doublereal area_diaf;  /* area diaframma */
436    doublereal mass;       /* massa valvola */
437    doublereal area_max;   /* area maggiore della valvola */
438    doublereal Kappa;      /* costante della molla */
439    doublereal force0;     /* precarico della molla */
440    doublereal width;      /* larghezza luce di passaggio */
441    doublereal s_max;      /* corsa massima della valvola */
442    doublereal c_spost;    /* coef dello spostamento */
443    doublereal c_vel;      /* coef della velocita' */
444    doublereal c_acc;      /* coef dell'accelerazione */
445    doublereal c1;         /* coef dello spostamento */
446    doublereal c2;         /* coef della velocita' */
447    doublereal c3;         /* coef dell'accelerazione */
448    doublereal c4;         /* coef. per il termine costante */
449    doublereal cf1;        /* coef dello spostamento  finale */
450    doublereal cf2;        /* coef della velocita'  finale */
451    doublereal cf3;        /* coef dell'accelerazione finale */
452    doublereal cf4;        /* coef. per il termine costante finale */
453 
454    doublereal s;          /* spostamento diaframma    (per l'output) */
455    doublereal v;          /* velocita' diaframma      (per l'output) */
456    doublereal sp;         /* velocita' diaframma  */
457    doublereal vp;         /* accelerazione diaframma  (per l'output) */
458    doublereal flow1;      /* portata nodo 1           (per l'output) */
459    doublereal flow2;      /* portata nodo 2           (per l'output) */
460 
461  public:
462    Pressure_valve(unsigned int uL, const DofOwner* pD,
463 		  HydraulicFluid* hf,
464 		  const PressureNode* p1, const PressureNode* p2,
465 		  doublereal A_dia, doublereal mv,
466 		  doublereal A_max, doublereal s_mx, doublereal K,
467 		  doublereal F0, doublereal w,
468 		  doublereal cs, doublereal cv, doublereal ca, flag fOut);
469 
470    ~Pressure_valve(void);
471 
472    /* Tipo di elemento idraulico (usato solo per debug ecc.) */
473    virtual HydraulicElem::Type GetHydraulicType(void) const;
474 
475    /* Contributo al file di restart */
476    virtual std::ostream& Restart(std::ostream& out) const;
477 
478    virtual unsigned int iGetNumDof(void) const;
479    virtual DofOrder::Order GetDofType(unsigned int i) const;
480 
481    virtual void WorkSpaceDim(integer* piNumRows, integer* piNumCols) const;
482 
483    VariableSubMatrixHandler& AssJac(VariableSubMatrixHandler& WorkMat,
484 				    doublereal dCoef,
485 				    const VectorHandler& XCurr,
486 				    const VectorHandler& XPrimeCurr);
487 
488    SubVectorHandler& AssRes(SubVectorHandler& WorkVec,
489            		    doublereal dCoef,
490    			    const VectorHandler& XCurr,
491    			    const VectorHandler& XPrimeCurr);
492 
493    virtual void Output(OutputHandler& OH) const;
494 
495 	virtual void SetValue(DataManager *pDM,
496 			VectorHandler& X, VectorHandler& XP,
497 			SimulationEntity::Hints *ph = 0);
498 
499    /* *******PER IL SOLUTORE PARALLELO******** */
500    /* Fornisce il tipo e la label dei nodi che sono connessi all'elemento
501       utile per l'assemblaggio della matrice di connessione fra i dofs */
GetConnectedNodes(std::vector<const Node * > & connectedNodes)502    virtual void GetConnectedNodes(std::vector<const Node *>& connectedNodes) const {
503      connectedNodes.resize(2);
504      connectedNodes[0] = pNode1;
505      connectedNodes[1] = pNode2;
506    };
507    /* ************************************************ */
508 
509 };
510 
511 /* Pressure_valve - end */
512 
513 
514 /* Flow_valve - begin */
515 
516 class  Flow_valve : virtual public Elem, public HydraulicElem {
517  private:
518    const PressureNode* pNode1;
519    const PressureNode* pNode2;
520    const PressureNode* pNode3;
521    doublereal area_diaf;  /* area diaframma */
522    doublereal mass;       /* massa valvola */
523    doublereal area_pipe;  /* area del tubo */
524    doublereal area_max;   /* area maggiore della valvola */
525    doublereal Kappa;      /* costante della molla */
526    doublereal force0;     /* precarico della molla */
527    doublereal width;      /* larghezza luce di passaggio */
528    doublereal s_max;      /* corsa massima della valvola */
529    doublereal c_spost;    /* coef dello spostamento */
530    doublereal c_vel;      /* coef della velocita' */
531    doublereal c_acc;      /* coef dell'accelerazione */
532    doublereal c1;         /* coef dello spostamento */
533    doublereal c2;         /* coef della velocita' */
534    doublereal c3;         /* coef dell'accelerazione */
535    doublereal c4;         /* coef. per il termine costante */
536    doublereal cf1;        /* coef dello spostamento  finale */
537    doublereal cf2;        /* coef della velocita'  finale */
538    doublereal cf3;        /* coef dell'accelerazione finale */
539    doublereal cf4;        /* coef. per il termine costante finale */
540 
541    doublereal h;          /* perdita di carico concentrata tra i nodi 1 e 2 (smorza il moto della valvola) */
542    doublereal s;          /* spostamento valvola  (per l'output) */
543    doublereal sp;         /* velocita' valvola  (per l'output) */
544    doublereal v;          /* velocita' valvola  (per l'output) */
545    doublereal vp;         /* accelerazione valvola  (per l'output) */
546    doublereal flow1;      /* portata nodo 1  (per l'output) */
547    doublereal flow2;      /* portata nodo 2  (per l'output) */
548    doublereal flow3;      /* portata nodo 3  (per l'output) */
549 
550  public:
551    Flow_valve(unsigned int uL, const DofOwner* pD, HydraulicFluid* hf,
552               const PressureNode* p1, const PressureNode* p2,
553 	      const PressureNode* p3, doublereal A_dia,
554 	      doublereal mv, doublereal A_pipe,doublereal A_max,
555 	      doublereal K, doublereal F0, doublereal w,doublereal s_mx,
556 	      doublereal cs, doublereal cv, doublereal ca,  flag fOut);
557 
558    ~Flow_valve(void);
559 
560    /* Tipo di elemento idraulico (usato solo per debug ecc.) */
561    virtual HydraulicElem::Type GetHydraulicType(void) const;
562 
563    /* Contributo al file di restart */
564    virtual std::ostream& Restart(std::ostream& out) const;
565 
566    virtual unsigned int iGetNumDof(void) const;
567    virtual DofOrder::Order GetDofType(unsigned int i) const;
568 
569    virtual void WorkSpaceDim(integer* piNumRows, integer* piNumCols) const;
570 
571    VariableSubMatrixHandler& AssJac(VariableSubMatrixHandler& WorkMat,
572 				    doublereal dCoef,
573 				    const VectorHandler& XCurr,
574 				    const VectorHandler& XPrimeCurr);
575 
576    SubVectorHandler& AssRes(SubVectorHandler& WorkVec,
577 			    doublereal dCoef,
578 			    const VectorHandler& XCurr,
579 			    const VectorHandler& XPrimeCurr);
580 
581    virtual void Output(OutputHandler& OH) const;
582 
583 	virtual void SetValue(DataManager *pDM,
584 			VectorHandler& X, VectorHandler& XP,
585 			SimulationEntity::Hints *ph = 0);
586 
587    /* *******PER IL SOLUTORE PARALLELO******** */
588    /* Fornisce il tipo e la label dei nodi che sono connessi all'elemento
589       utile per l'assemblaggio della matrice di connessione fra i dofs */
GetConnectedNodes(std::vector<const Node * > & connectedNodes)590    virtual void GetConnectedNodes(std::vector<const Node *>& connectedNodes) const {
591      connectedNodes.resize(3);
592      connectedNodes[0] = pNode1;
593      connectedNodes[1] = pNode2;
594      connectedNodes[2] = pNode3;
595    };
596   /* ************************************************ */
597 };
598 
599 /* Flow_valve - end */
600 
601 #endif /* VALVE_H */
602 
603