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