38  use json_module, 
only : json_file
 
   55     real(kind=
rp) :: kappa = 0.41_rp
 
   57     real(kind=
rp) :: b = 5.2_rp
 
   62     procedure, pass(this) :: init_from_components => &
 
   69     procedure, 
private, pass(this) :: 
solve 
 
   82    type(
coef_t), 
intent(in) :: coef
 
   83    integer, 
intent(in) :: msk(:)
 
   84    integer, 
intent(in) :: facet(:)
 
   85    real(kind=
rp), 
intent(in) :: nu
 
   86    integer, 
intent(in) :: h_index
 
   87    type(json_file), 
intent(inout) :: json
 
   88    real(kind=
rp) :: kappa, b
 
   93    call this%init_from_components(coef, msk, facet, nu, h_index, kappa, b)
 
 
  107    type(
coef_t), 
intent(in) :: coef
 
  108    integer, 
intent(in) :: msk(:)
 
  109    integer, 
intent(in) :: facet(:)
 
  110    integer, 
intent(in) :: h_index
 
  111    real(kind=
rp), 
intent(in) :: nu
 
  112    real(kind=
rp), 
intent(in) :: kappa
 
  113    real(kind=
rp), 
intent(in) :: b
 
  116       call neko_error(
"Spalding's law is only available on the CPU backend.")
 
  119    call this%init_base(coef, msk, facet, nu, h_index)
 
 
  130    call this%free_base()
 
 
  139    real(kind=
rp), 
intent(in) :: t
 
  140    integer, 
intent(in) :: tstep
 
  145    real(kind=
rp) :: ui, vi, wi, magu, utau, normu, guess
 
  153      ui = u%x(this%ind_r(i), this%ind_s(i), this%ind_t(i), this%ind_e(i))
 
  154      vi = v%x(this%ind_r(i), this%ind_s(i), this%ind_t(i), this%ind_e(i))
 
  155      wi = w%x(this%ind_r(i), this%ind_s(i), this%ind_t(i), this%ind_e(i))
 
  158      normu = ui * this%n_x%x(i) + vi * this%n_y%x(i) + wi * this%n_z%x(i)
 
  160      ui = ui - normu * this%n_x%x(i)
 
  161      vi = vi - normu * this%n_y%x(i)
 
  162      wi = wi - normu * this%n_z%x(i)
 
  164      magu = sqrt(ui**2 + vi**2 + wi**2)
 
  167      if (tstep .eq. 1) 
then 
  168         guess = sqrt(magu * this%nu / this%h%x(i))
 
  170         guess = this%tau_x(i)**2 + this%tau_y(i)**2 + this%tau_z(i)**2
 
  171         guess = sqrt(sqrt(guess))
 
  174      utau =  this%solve(magu, this%h%x(i), guess)
 
  177      this%tau_x(i) = -utau**2 * ui / magu
 
  178      this%tau_y(i) = -utau**2 * vi / magu
 
  179      this%tau_z(i) = -utau**2 * wi / magu
 
 
  188  function solve(this, u,  y, guess) 
result(utau)
 
  190    real(kind=
rp), 
intent(in) :: u
 
  191    real(kind=
rp), 
intent(in) :: y
 
  192    real(kind=
rp), 
intent(in) :: guess
 
  193    real(kind=
rp) :: yp, up, kappa, b, utau
 
  194    real(kind=
rp) :: error, f, df, old
 
  195    integer :: niter, k, maxiter
 
  205      yp = y * utau / this%nu
 
  210      f = (up + exp(-kappa*b)* &
 
  211          (exp(kappa*up) - 1.0_rp - kappa*up - 0.5_rp*(kappa*up)**2 - &
 
  212           1.0_rp/6*(kappa*up)**3) - yp)
 
  214      df = (-y / this%nu - u/utau**2 - kappa*up/utau*exp(-kappa*b) * &
 
  215           (exp(kappa*up) - 1 - kappa*up - 0.5*(kappa*up)**2))
 
  220      error = abs((old - utau)/old)
 
  222      if (error < 1e-3) 
then 
  229       write(*,*) 
"Newton not converged", error, f, utau, old, guess
 
 
Retrieves a parameter by name or assigns a provided default value. In the latter case also adds the m...
 
Defines a mapping of the degrees of freedom.
 
Defines a registry for storing solution fields.
 
type(field_registry_t), target, public neko_field_registry
Global field registry.
 
Utilities for retrieving parameters from the case files.
 
integer, parameter, public neko_log_debug
Debug log level.
 
type(log_t), public neko_log
Global log stream.
 
integer, parameter neko_bcknd_device
 
integer, parameter, public rp
Global precision used in computations.
 
real(kind=rp) function solve(this, u, y, guess)
Newton solver for the algebraic equation defined by the law.
 
subroutine spalding_compute(this, t, tstep)
Compute the wall shear stress.
 
subroutine spalding_init_from_components(this, coef, msk, facet, nu, h_index, kappa, b)
Constructor from components.
 
subroutine spalding_init(this, coef, msk, facet, nu, h_index, json)
Constructor from JSON.
 
subroutine spalding_free(this)
Destructor for the spalding_t (base) class.
 
Coefficients defined on a given (mesh, ) tuple. Arrays use indices (i,j,k,e): element e,...
 
Wall model based on Spalding's law of the wall. Reference: http://dx.doi.org/10.1115/1....
 
Base abstract type for wall-stress models for wall-modelled LES.