47 n_x, n_y, n_z, nu, rho_w, h, tau_x, tau_y, tau_z, n_nodes, &
49 integer,
intent(in) :: n_nodes, tstep
50 real(kind=
rp),
dimension(n_nodes),
intent(in) :: u, v, w
51 real(kind=
rp),
dimension(n_nodes),
intent(in) :: rho_w
52 real(kind=
rp),
dimension(n_nodes),
intent(in) :: n_x, n_y, n_z, h, nu
53 real(kind=
rp),
dimension(n_nodes),
intent(inout) :: tau_x, tau_y, tau_z
54 real(kind=
rp),
intent(in) :: kappa, b
56 real(kind=
rp) :: ui, vi, wi, magu, utau, normu, guess, rho
67 normu = ui * n_x(i) + vi * n_y(i) + wi * n_z(i)
69 ui = ui - normu * n_x(i)
70 vi = vi - normu * n_y(i)
71 wi = wi - normu * n_z(i)
73 magu = sqrt(ui**2 + vi**2 + wi**2)
76 if (tstep .eq. 1)
then
77 guess = sqrt(magu * nu(i) / h(i))
79 guess = tau_x(i)**2 + tau_y(i)**2 + tau_z(i)**2
80 guess = sqrt(sqrt(guess))
83 utau =
solve_cpu(magu, h(i), guess, nu(i), kappa, b)
86 tau_x(i) = -rho*utau**2 * ui / magu
87 tau_y(i) = -rho*utau**2 * vi / magu
88 tau_z(i) = -rho*utau**2 * wi / magu
101 function solve_cpu(u, y, guess, nu, kappa, B)
result(utau)
102 real(kind=
rp),
intent(in) :: u
103 real(kind=
rp),
intent(in) :: y
104 real(kind=
rp),
intent(in) :: guess
105 real(kind=
rp),
intent(in) :: nu, kappa, b
106 real(kind=
rp) :: yp, up, utau
107 real(kind=
rp) :: error, f, df, old
108 integer :: niter, k, maxiter
109 character(len=LOG_SIZE) :: log_msg
122 f = (up + exp(-kappa*b)* &
123 (exp(kappa*up) - 1.0_rp - kappa*up - 0.5_rp*(kappa*up)**2 - &
124 1.0_rp/6*(kappa*up)**3) - yp)
126 df = (-y / nu - u/utau**2 - kappa*up/utau*exp(-kappa*b) * &
127 (exp(kappa*up) - 1 - kappa*up - 0.5*(kappa*up)**2))
132 error = abs((old - utau)/old)
134 if (error < 1e-3)
then
140 if (niter .eq. maxiter)
then
143 write(log_msg, *)
"Newton not converged", error, f, utau
subroutine, public spalding_compute_cpu(u, v, w, n_x, n_y, n_z, nu, rho_w, h, tau_x, tau_y, tau_z, n_nodes, kappa, b, tstep)
Compute the wall shear stress on cpu using Spalding's model.
real(kind=rp) function solve_cpu(u, y, guess, nu, kappa, b)
Newton solver for the algebraic equation defined by the law on cpu.