Attribute VB_Name = "Mdl_Bousquet"
Sub JBousquet(j, KsiI, ItaI, ZtaI, vKsiJ, vItaJ, vZtaJ, PhiJ)
    
    method = "Bousquet"
    
    vKsiJ = 0
    vItaJ = 0
    vZtaJ = 0
    PhiJ = 0
    
    SignBRK = 1
    
    For k = 1 To NP(j)

        L = k + 1
        If L > NP(j) Then L = 1

        dK = Sqr((Ksi(L, j) - Ksi(k, j)) ^ 2 + (Ita(L, j) - Ita(k, j)) ^ 2)
        rK = Sqr((KsiI - Ksi(k, j)) ^ 2 + (ItaI - Ita(k, j)) ^ 2 + ZtaI ^ 2)
        rL = Sqr((KsiI - Ksi(L, j)) ^ 2 + (ItaI - Ita(L, j)) ^ 2 + ZtaI ^ 2)
        
        LK = (Ksi(k, j) - KsiI) * (Ksi(L, j) - Ksi(k, j))
        LK = (LK + (Ita(k, j) - ItaI) * (Ita(L, j) - Ita(k, j))) / dK
        
        mK = (Ksi(L, j) - KsiI) * (Ksi(L, j) - Ksi(k, j))
        mK = (mK + (Ita(L, j) - ItaI) * (Ita(L, j) - Ita(k, j))) / dK
        
        bRK = (KsiI - Ksi(k, j)) * (Ita(L, j) - Ita(k, j))
        bRK = (bRK - (ItaI - Ita(k, j)) * (Ksi(L, j) - Ksi(k, j))) / dK
        Qk = Log((rK + rL + dK) / (rK + rL - dK))
        denom = (rK * rL * bRK ^ 2 + ZtaI ^ 2 * LK * mK)
        If denom = 0 Then
            JK = 0
        Else
            TanJK = bRK * (Abs(ZtaI) * (rK * mK - rL * LK)) / denom
            JK = Atn(TanJK)
            If TanJK < 0 Then JK = JK + pi
        End If

        If bRK < 0 Then
            SignBRK = -1
            JK = JK - pi
        End If
        If bRK = 0 Then JK = JK + pi

        vKsiJ = vKsiJ - (Ita(L, j) - Ita(k, j)) * Qk / dK
        vItaJ = vItaJ + (Ksi(L, j) - Ksi(k, j)) * Qk / dK
        vZtaJ = vZtaJ + JK
        PhiJ = PhiJ + bRK * Qk + Abs(ZtaI) * JK

    Next k

    dTeta = 0
    If SignBRK > 0 Then dTeta = pi2
    
    vKsiJ = vKsiJ / pi4
    vItaJ = vItaJ / pi4
    SignZeta = 1: If ZtaI < 0 Then SignZeta = -1
    vZtaJ = SignZeta * (dTeta - vZtaJ) / pi4
    
    PhiJ = -(PhiJ - Abs(ZtaI) * dTeta) / pi4
    
End Sub
