SimVascular / svFSIplus

svFSIplus is an open-source, parallel, finite element multi-physics solver.
https://simvascular.github.io/documentation/svfsi.html
Other
8 stars 24 forks source link

Update solid viscosity models #273

Open aabrown100-git opened 1 week ago

aabrown100-git commented 1 week ago

Problem

Currently, the code only has a Newtonian solid viscosity implemented. In this model, the viscous deviatoric Cauchy stress is given by

$\sigma_{vis}^{dev} = 2 \mu \mathbf{d}^{dev}$,

where

$\mathbf{d}^{dev} = \frac{1}{2} (\nabla{x} \mathbf{v} + \nabla{x} \mathbf{v}^T) - \frac{1}{3} \nabla \cdot \mathbf{v} \mathbf{I}$

or in terms of the 2nd Piola-Kirchhoff stress

$\mathbf{S}_{vis} = 2 \mu J \mathbf{F}^{-1} \mathbf{d}^{dev} \mathbf{F}{-T}$

A recent cardiac mechanics benchmark problem calls for a viscous pseudo-potential model for solid viscosity.

$\Psi_{vis} = \frac{\mu}{2} \text{tr}\dot{\mathbf{E}}^2$,

$S{vis}= \frac{\partial \Psi{vis}}{\partial \dot{\mathbf{E}}} = \mu \dot{\mathbf{E}}$

We should implement this new solid viscosity model.

Solution

This has been already been done in svFSI (https://github.com/vvedula22/svFSI). So we just need to translate the relevant parts of this code.

I have a functional draft of this feature here

Additional context

This is related to https://github.com/SimVascular/svFSIplus/issues/269. I want to first fix this issue, so that existing struct, ustruct, and FSI test cases are run with zero viscosity.

Code of Conduct

ktbolt commented 2 days ago

@aabrown100-git Does it make sense to create a Viscosity class that can be used for both fluids and solids?

aabrown100-git commented 1 day ago

Copying the discussion from https://github.com/SimVascular/svFSIplus/pull/270

From @ktbolt " The thing to do is to internally have separate solid and fluid viscosity parameters and a single Viscosity parameter in the user interface defined by context.

For example: A fluid domain

   <Domain id="0" >
      <Equation> fluid </Equation>
      <Density> 100.0 </Density>
      <Viscosity model="Constant"> <Value> 10.0 </Value> </Viscosity>
      <Backflow_stabilization_coefficient> 0.3 </Backflow_stabilization_coefficient>
   </Domain>

and a solid domain

   <Domain id="1" >
      <Equation> struct </Equation>
      <Constitutive_model type="stVK"> </Constitutive_model>
      <Density> 100.0 </Density>
      <Viscosity> 1.0 </Viscosity>
      <Elasticity_modulus> 5.6e7 </Elasticity_modulus>
      <Poisson_ratio> 0.4 </Poisson_ratio>
   </Domain>

These can be processed in DomainParameters::set_values() using the Equation parameter for context.

It would be better of course to have a Viscosity class that dealt with both fluid and solid viscosity models. "