Bonjour a tous,
Alors voila je me suis mit en tête de faire un petit programme qui me calcul les PDC directement et pour beaucoup de chose...
Je trouve des résultat à peux prêt cohérent cependant, je voudrait vous faire validez mon algo vois si je n'est pas une erreur cachée...
PS je code en VB.net
Le codes est à utiliser avec le système SI
Voila ce que j'obtient après exécution.
Le code est ci dessous:
Merci de vos retour.Code:Module Moteur_de_calcul_hydraulique ''' <summary> ''' Même fonction que QM ''' </summary> ''' <param name="Diametre">Unité SI metre</param> ''' <param name="QV">Unité SI m^3/s</param> ''' <param name="Type">1: Eau 2: Air 3:Autre</param> ''' <param name="Masse_Volumique">Si Type=1 alors on calcul QM</param> ''' <returns></returns> ''' <remarks></remarks> Public Function Calcul_PDC(ByVal Diametre As Double, ByVal longueur As Double, ByVal QV As Double, ByVal Masse_Volumique As Double, ByVal Viscosite_cinematique As Double, ByVal Epsilon As Double) As Double Dim Vitesse As Double Dim Lambda As Double Dim Reynolds As Double If QV = 0 Or QV < 0 Then MsgBox("Le débit volumique ne peux pas être égale à 0!" & vbCrLf & "Arrêt du calcul", MsgBoxStyle.Exclamation, "Donnée manquante sur un débit.") Return 0 End If If Masse_Volumique = 0 Or Masse_Volumique < 0 Then MsgBox("La masse volumique du fluide ne peut pas être égale à 0!" & vbCrLf & "Arrêt du calcul", MsgBoxStyle.Exclamation, "Donnée manquante sur une masse volumique.") Return 0 End If If longueur <= 0 Then MsgBox("La longueur du tube ne peut pas être égale à 0!" & vbCrLf & "Arrêt du calcul", MsgBoxStyle.Exclamation, "Donnée manquante sur la longueur du tube.") Return 0 End If Vitesse = Fonction_Vitesse(Diametre, QV) Reynolds = Fonction_Reynolds(Diametre, Viscosite_cinematique) Lambda = Fonction_Lambda(Reynolds, Epsilon) Return Masse_Volumique * (Lambda * longueur * Pow(Vitesse, 2)) / (2 * Diametre) End Function ''' <summary> ''' Calcule le nombre de reynolds ''' </summary> ''' <param name="diametre">Diamètre de la canalisation</param> ''' <param name="Viscosite_cinematique">Viscosité cinématique</param> ''' <returns></returns> ''' <remarks></remarks> Public Function Fonction_Reynolds(ByVal diametre As Double, ByVal Viscosite_cinematique As Double) As Double 'Diamètre en mètre 'Longueur en mètre 'Viscosité SI Return (2 * diametre) / Viscosite_cinematique End Function ''' <summary> ''' Retourne le lambda suivant le cas ''' </summary> ''' <param name="Nombre_Reynolds">Nombre de Reynolds</param> ''' <param name="Epsilon">Epsilon du tube</param> ''' <param name="Diametre">Diamètre du tube</param> ''' <returns></returns> ''' <remarks></remarks> Public Function Fonction_Lambda(ByVal Nombre_Reynolds As Double, ByVal Epsilon As Double) As Double Dim g1 As Double Dim Gdef As Double, Gprimedef As Double Dim Danslog As Double Dim Log10 As Double = 0.000000001 Log10 = Log(10) If Nombre_Reynolds < 2500 Then 'Domaine laminaire Fonction_Lambda = 64 / Nombre_Reynolds Else 'Domaine turbulent g1 = 0.01 'Valeur initiale Danslog = Epsilon / 3.71 + 2.51 / Nombre_Reynolds / Sqrt(g1) Gdef = Sqrt(1 / g1) + 2 * Log(Danslog) / Log10 Gprimedef = -1 / 2 / (g1 ^ 1.5) - 2.51 / Log10 / Danslog / Nombre_Reynolds / (g1 ^ 1.5) Do g1 = g1 - Gdef / Gprimedef 'Formule de Newton Danslog = Epsilon / 3.71 + 2.51 / Nombre_Reynolds / Sqrt(g1) Gdef = Sqrt(1 / g1) + 2 * Log(Danslog) / Log10 Gprimedef = -1 / 2 / (g1 ^ 1.5) - 2.51 / Log10 / Danslog / Nombre_Reynolds / (g1 ^ 1.5) Loop Until Abs(Gdef) < 0.0000000001 Fonction_Lambda = g1 End If End Function #Region "Débit fluide" ''' <summary> ''' Retourne le debit massique d'un fluide ''' </summary> ''' <param name="QV">Débit volumique unité SI m^3/s</param> ''' <param name="Masse_Volumique">Masse volumique du fluide unité SI Kg/m^3</param> ''' <returns></returns> ''' <remarks></remarks> Public Function Fonction_QM(ByVal QV As Double, ByVal Masse_Volumique As Double) As Double Return Masse_Volumique * QV End Function ''' <summary> ''' Retourne le débit volumique d'un fluide ''' </summary> ''' <param name="QM">Débit massique Unité SI Kg/s</param> ''' <param name="Masse_Volumique">Masse volumique du fluide unité SI Kg/m^3</param> ''' <returns></returns> ''' <remarks></remarks> Public Function Fonction_QV(ByVal QM As Double, ByVal Masse_Volumique As Double) As Double Return QM / Masse_Volumique End Function #End Region #Region "Vitesse fliude" ''' <summary> ''' Calcule la vitesse du fluide ''' </summary> ''' <param name="Diametre">Unité SI metre</param> ''' <param name="QV">Débit volumique unité SI m^3/s</param> ''' <returns></returns> ''' <remarks></remarks> Public Function Fonction_Vitesse(ByVal Diametre As Double, ByVal QV As Double) As Double Return QV / (Fonction_Section(Diametre)) End Function ''' <summary> ''' Calcule la vitesse du fluide ''' </summary> ''' <param name="Diametre">Unité SI metre</param> ''' <param name="QM">Débit massique Unité SI Kg/s</param> ''' <param name="Masse_Volumique">Masse volumique du fluide unité SI Kg/m^3</param> ''' <returns></returns> ''' <remarks></remarks> Public Function Fonction_Vitesse(ByVal Diametre As Double, ByVal QM As Double, ByVal Masse_Volumique As Double) As Double Return Fonction_QV(QM, Masse_Volumique) / (Fonction_Section(Diametre)) End Function #End Region Public Function fonction_Type(ByVal Nombre_Reynolds As Double) As String If Nombre_Reynolds < 2000 Then Return "Laminair" ElseIf Nombre_Reynolds < 3000 Then Return "Transitoir" Else Return "Turbulant" End If End Function Public Function Fonction_Section(ByVal Diametre As Double) As Double Return (PI * Pow(Diametre / 2, 2)) End Function
-----