Fixed Point Method

Fixed Point Solver

using LinearAlgebra

function fp(g, x, tol=1E-5, maxit=10000)
    for k in 1:maxit
        xnew = g(x)
        if norm(xnew-x)/norm(x) <= tol
            return xnew, k
        end
        x = xnew
    end
    println("No convergence in $maxit iterations")
    return x, k
end
fp (generic function with 3 methods)

Define the fluids functions

function gfluids(vF)
    v = vF[1]
    F = vF[2]

    rho = 1000.   # kg/m3
    mu  = 1E-3    # Pa*s = kg/m*s
    D   = 0.1     # m
    L   = 100.    # m
    eps = D/100.  # m
    dP  = 101325. # Pa

    Re = rho*D*v/mu
    F  = -log10(eps/D/3.7 + 2.51*F/Re)
    v  = sqrt(2*D*dP/rho/L)*F

    return [v F]
end
gfluids (generic function with 1 method)

Solve and output the result

vFguess = [1.0 1.0]
vF, nit = fp(gfluids, vFguess)
println("\nv = $(vF[1]) (m/s)")
println("f = $(1.0/vF[2]^2)")
println("iterations = $nit")
v = 1.1521264775724867 (m/s)
f = 0.1526673942799946
iterations = 3