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.
Nom : 1.png
Affichages : 180
Taille : 8,5 Ko

Le code est ci dessous:

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
Merci de vos retour.