Skip to content

Add Quemada non-Newtonian viscosity model and verify all non-Newtonian models against analytical solutions #654

Description

@aabrown100-git

Problem

svMultiPhysics currently supports three fluid viscosity models: Newtonian, Carreau-Yasuda, and Casson (get_viscosity() in Code/Source/solver/fluid.cpp). It does not support the Quemada model, which accounts for both hematocrit and shear-rate dependence of blood viscosity. Quemada is used in cardiovascular CFD where blood rheology may affect flow patterns — e.g., hepatic flow distribution in Fontan (TCPC) simulations — and we need it to reproduce/compare against Fontan simulations run in other solvers.

In addition, the existing non-Newtonian test cases (tests/cases/fluid/carreau_yasuda, tests/cases/fluid/casson) are regression tests: they compare against a stored result_001.vtu from a pulsatile pipe run, but do not verify the models against a known solution. So a model that is coded incorrectly but stable would still pass.

Proposed solution

1. Add the Quemada model

Quemada viscosity [1, 2]:

$$\mu(\dot\gamma) = \mu_F \left(1 - \frac{k \phi}{2}\right)^{-2}$$

where the intrinsic viscosity $k$ depends on shear rate:

$$k(\dot\gamma) = \frac{k_0 + k_\infty \sqrt{\dot\gamma/\dot\gamma_c}}{1 + \sqrt{\dot\gamma/\dot\gamma_c}}$$

with plasma viscosity $\mu_F$, hematocrit $\phi$, and parameters $k_0$ (low-shear limit of $k$), $k_\infty$ (high-shear limit of $k$), and critical shear rate $\dot\gamma_c$. The last three typically depend on hematocrit.

[1] Quemada D. "Rheology of concentrated disperse systems and minimum energy dissipation principle. I. Viscosity-concentration relationship." Rheol Acta 1977;16(1):82–94. doi:10.1007/BF01516932
[2] Quemada D. "Rheology of concentrated disperse systems II. A model for non-newtonian shear viscosity in steady flows." Rheol Acta 1978;17(6):632–642. doi:10.1007/BF01522036

  • Add viscType_Quemada to FluidViscosityModelType and the name map in consts.cpp
  • Add parameter parsing in read_files.cpp / Parameters
  • Implement mu, mu_s, and mu_x (derivative w.r.t. shear rate, for the tangent) in get_viscosity()
  • Document parameters and add a README, following the existing Casson/CY test cases

2. Verification test cases for all non-Newtonian models

Add steady, fully developed flow in a straight tube driven by a constant pressure gradient, compared against analytical/reference solutions for velocity profile and flow rate:

  • Quemada: Popel AS, Enden G. "An analytical solution for steady flow of a Quemada fluid in a circular tube." Rheol Acta 1993;32(4):422–426. doi:10.1007/BF00435088 (PMC). Closed-form velocity profile and flow rate in terms of $k_0$, $k_\infty$, $\dot\gamma_c$. The solution reduces to Newtonian (parabolic) and Casson in limiting cases, so one setup gives three checks.
  • Casson: closed-form plug-flow solution for a Casson fluid in a tube.
  • Carreau-Yasuda: no closed form; compare against a high-resolution 1D numerical solution of the radial momentum equation.
  • Newtonian: Poiseuille.

Suggested metrics: L2 / max error of the axial velocity profile along a radial line, and relative error in flow rate, with mesh refinement to show convergence.

This verifies that the constitutive models are coded correctly. It does not validate which blood model is physiologically appropriate; that is out of scope here.

3. Review of existing implementations (to be confirmed by the tests above)

While reading get_viscosity(), a few things in the Casson branch look worth checking:

  • mu_x is computed as 2*mu_o*(mu_o+mu_i)/gamma, which is positive, while Casson viscosity decreases with shear rate (d mu/d gamma < 0). Compare with the CY branch, where mu_x has the sign of (n-1).
  • Below the low-shear-rate threshold, viscosity is held constant but mu_x is non-zero.
  • gamma is passed by reference and overwritten with lam below the threshold, which changes the caller's value.

These may affect only nonlinear convergence (tangent) rather than the converged solution, but the verification cases should make that clear.

Additional context

Related: #633 (templated viscous stress models) touches the same code area.

Code of Conduct

  • I agree to follow this project's Code of Conduct and Contributing Guidelines

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requesttestTest features

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions