Models
Coefficient
Thunderbolt.ConstantCoefficient
— TypeConstantCoefficient(value)
Evaluates to the same value in space and time everywhere.
Thunderbolt.FieldCoefficient
— TypeFieldCoefficient(data, interpolation)
A constant in time data field, interpolated per element with a given interpolation.
Thunderbolt.AnalyticalCoefficient
— TypeAnalyticalCoefficient(f::Function, cs::CoordinateSystemCoefficient)
A coefficient given as the analytical function f(x,t) in the specified coordiante system.
Thunderbolt.SpectralTensorCoefficient
— TypeSpectralTensorCoefficient(eigenvector_coefficient, eigenvalue_coefficient)
Represent a tensor A via spectral decomposition ∑ᵢ λᵢ vᵢ ⊗ vᵢ.
Thunderbolt.SpatiallyHomogeneousDataField
— TypeSpatiallyHomogeneousDataField(timings::Vector, data::Vector)
A data field which is constant in space and piecewise constant in time.
The value during the time interval [tᵢ,tᵢ₊₁] is dataᵢ, where t₀ is negative infinity and the last time point+1 is positive infinity.
Thunderbolt.CoordinateSystemCoefficient
— TypeCoordinateSystemCoefficient(coordinate_system)
Helper to obtain the location in some possibly problem-specific coordinate system, e.g. for analytical coefficients (see AnalyticalCoefficient
).
Missing docstring for evaluate_coefficient
. Check Documenter's build log for details.
Microstructure
Missing docstring for AnisotropicPlanarMicrostructureModel
. Check Documenter's build log for details.
Missing docstring for OrthotropicMicrostructureModel
. Check Documenter's build log for details.
Thunderbolt.create_simple_microstructure_model
— Functioncreate_simple_microstructure_model(coordinate_system, ip_component::VectorInterpolationCollection; endo_helix_angle = deg2rad(80.0), epi_helix_angle = deg2rad(-65.0), endo_transversal_angle = 0.0, epi_transversal_angle = 0.0, sheetlet_angle = 0.0, make_orthogonal=true)
Create a rotating fiber field by deducing the circumferential direction from apicobasal and transmural gradients.
FIXME! Sheetlet angle construction is broken (i.e. does not preserve input angle).
Thunderbolt.streeter_type_fsn
— Functionstreeter_type_fsn(transmural_direction::Vec{3}, circumferential_direction::Vec{3}, apicobasal_direction::Vec{3}, helix_angle, transversal_angle, sheetlet_pseudo_angle, make_orthogonal=true)
Compute fiber, sheetlet and normal direction from the transmural, circumferential, apicobasal directions in addition to given helix, transversal and sheetlet angles. The theory is based on the classical work by Streeter Jr et al. [4].
Boundary Conditions
Thunderbolt.RobinBC
— TypeRobinBC(α, boundary_name::String)
\[\bm{P}(\bm{u}) \cdot \bm{n}_0 = - \alpha \bm{u} \quad \textbf{x} \in \partial \Omega_0,\]
Thunderbolt.NormalSpringBC
— TypeNormalSpringBC(kₛ boundary_name::String)
\[\bm{P}(\bm{u}) \cdot \bm{n}_0 = - k_s \bm{u} \cdot n_0 \quad \textbf{x} \in \partial \Omega_0,\]
Thunderbolt.BendingSpringBC
— TypeBendingSpringBC(kᵇ, boundary_name::String)
\[\bm{P}(\bm{u}) \cdot \bm{n}_0 = - \partial_F \frac{1}{2} k_b \left (cof(F) n_0 - n_0 \right) \quad \textbf{x} \in \partial \Omega_0,\]
Thunderbolt.ConstantPressureBC
— TypeConstantPressureBC(p::Real, boundary_name::String)
\[\bm{P}(\bm{u}) \cdot \bm{n}_0 = - p n_0 \quad \textbf{x} \in \partial \Omega_0,\]
Thunderbolt.PressureFieldBC
— TypePressureFieldBC(pressure_field, boundary_name::String)
\[\bm{P}(\bm{u}) \cdot \bm{n}_0 = - k_s \bm{u} \cdot n_0 \quad \textbf{x} \in \partial \Omega_0,\]
Solid Mechanics
Thunderbolt.StructuralModel
— TypeStructuralModel(mechanical_model, face_models)
A generic model for structural problems.
Thunderbolt.ExtendedHillModel
— TypeExtendedHillModel(passive_spring_model, active_spring_model, active_deformation_gradient_model,contraction_model, microstructure_model)
The extended (generalized) Hill model as proposed by Ogiermann et al. [5]. The original formulation dates back to Stålhand et al. [6] for smooth muscle tissues.
In this framework the model is formulated as an energy minimization problem with the following additively split energy:
\[W(\mathbf{F}, \mathbf{F}^{\rm{a}}) = W_{\rm{passive}}(\mathbf{F}) + \mathcal{N}(\bm{\alpha})W_{\rm{active}}(\mathbf{F}\mathbf{F}^{-\rm{a}})\]
Where $W_{\rm{passive}}$ is the passive material response and $W_{\rm{active}}$ the active response respectvely. $\mathcal{N}$ is the amount of formed crossbridges. We refer to the original paper [5] for more details.
Thunderbolt.GeneralizedHillModel
— TypeGeneralizedHillModel(passive_spring_model, active_spring_model, active_deformation_gradient_model,contraction_model, microstructure_model)
The generalized Hill framework as proposed by Göktepe et al. [7].
In this framework the model is formulated as an energy minimization problem with the following additively split energy:
\[W(\mathbf{F}, \mathbf{F}^{\rm{a}}) = W_{\rm{passive}}(\mathbf{F}) + W_{\rm{active}}(\mathbf{F}\mathbf{F}^{-\rm{a}})\]
Where $W_{\rm{passive}}$ is the passive material response and $W_{\rm{active}}$ the active response respectvely.
Thunderbolt.ActiveStressModel
— TypeActiveStressModel(material_model, active_stress_model, contraction_model, microstructure_model)
The active stress model as originally proposed by Guccione et al. [8].
In this framework the model is formulated via balance of linear momentum in the first Piola Kirchhoff $\mathbf{P}$:
\[\mathbf{P}(\mathbf{F},T^{\rm{a}}) := \partial_{\mathbf{F}} W_{\rm{passive}}(\mathbf{F}) + \mathbf{P}^{\rm{a}}(\mathbf{F}, T^{\rm{a}})\]
where the passive material response can be described by an energy $W_{\rm{passive}$ and $T^{\rm{a}}$ the active tension generated by the contraction model.
Thunderbolt.PK1Model
— TypePK1Model(material, coefficient_field)
PK1Model(material, internal_model, coefficient_field)
Models the stress formulated in the 1st Piola-Kirchhoff stress tensor. If the material is energy-based, then the term is formulated as follows: $\int{\Omega0} P(u,s) \cdot \delta F dV = \int{\Omega0} \partial_{F} \psi(u,s) \cdot \delta \nabla u $
Thunderbolt.PrestressedMechanicalModel
— TypePrestressedMechanicalModel(inner_model, prestress_field)
Passive Energies
Thunderbolt.NullEnergyModel
— TypeA simple dummy energy with $\Psi = 0$.
Thunderbolt.LinearSpringModel
— TypeA simple linear fiber spring model for testing purposes.
\[\Psi^{\rm{a}} = \frac{a^{\rm{f}}}{2}(I_e^{\rm{e}}-1)^2\]
Thunderbolt.TransverseIsotopicNeoHookeanModel
— Typehttps://onlinelibrary.wiley.com/doi/epdf/10.1002/cnm.2866
Thunderbolt.HolzapfelOgden2009Model
— TypeThe well-known orthotropic material model for the passive response of cardiac tissues by Holzapfel and Ogden [9].
\[\Psi = \frac{a}{2b} e^{b(I_1-3)} + \sum_{i\in\{\rm{f},\rm{s}\}} \frac{a^i}{2b^i}(e^{b^i<I_4^i - 1>^2}-1) + \frac{a^{\rm{fs}}}{2b^{\rm{fs}}}(e^{b^{\rm{fs}}{I_8^{\rm{fs}}}^2}-1)\]
Thunderbolt.LinYinPassiveModel
— TypeThis is the Fung-type transverse isotropic material model for the passive response of cardiac tissue proposed by Lin and Yin [10].
\[\Psi = C_1(e^{C_2(I_1-3)^2 + C_3(I_1-3)(I_4-1) + C_4(I_4-1)^2}-1)\]
Thunderbolt.LinYinActiveModel
— TypeThis is the transverse isotropic material model for the active response of cardiac tissue proposed by Lin and Yin [10].
\[\Psi=C_0 + C_1*(I_1-3)(I_4-1) + C_2(I_1-3)^2 + C_3*(I_4-1)^2 + C_3*(I_1-3) + C_5*(I_4-1)\]
Thunderbolt.HumphreyStrumpfYinModel
— TypeThis is the transverse isotropic material model for the active response of cardiac tissue proposed by Humphrey et al. [11].
\[\Psi = C_1(\sqrt{I_4}-1)^2 + C_2(\sqrt{I_4}-1)^3 + C_3(\sqrt{I_4}-1)(I_1-3) + C_3(I_1-3)^2\]
Thunderbolt.Guccione1991PassiveModel
— TypeAn orthotropic material model for the passive myocardial tissue response by Guccione et al. [12].
\[\Psi = B^{\rm{ff}} {E^{\rm{ff}}}^2 + B^{\rm{ss}}{E^{\rm{ss}}}^2 + B^{\rm{nn}}{E^{\rm{nn}}}^2 + B^{\rm{ns}}({E^{\rm{ns}}}^2+{E^{\rm{sn}}}^2) + B^{\rm{fs}}({E^{\rm{fs}}}^2+{E^{\rm{sf}}}^2) + B^{\rm{fn}}({E^{\rm{fn}}}^2+{E^{\rm{nf}}}^2)\]
The default parameterization is taken from from [13].
Thunderbolt.BioNeoHooekean
— TypeBioNeoHooekean
A simple isotropic Neo-Hookean model of the form
\[\Psi = \alpha (\bar{I_1}-3)\]
Active Energies
Thunderbolt.SimpleActiveSpring
— TypeSimpleActiveSpring
A simple linear fiber spring as for example found in [7].
\[\Psi^{\rm{a}} = \frac{a^{\rm{f}}}{2}(I_e^{\rm{e}}-1)^2\]
Thunderbolt.ActiveMaterialAdapter
— TypeA simple helper to use a passive material model as an active material for GeneralizedHillModel, ExtendedHillModel and ActiveStressModel.
Active Deformation Gradients
Thunderbolt.GMKActiveDeformationGradientModel
— TypeThe active deformation gradient formulation by Göktepe et al. [7].
\[F^{\rm{a}} = (\lambda^{\rm{a}}-1) f_0 \otimes f_0\]
- I$
See also [5] for a further analysis.
Thunderbolt.GMKIncompressibleActiveDeformationGradientModel
— TypeAn incompressivle version of the active deformation gradient formulation by Göktepe et al. [7].
\[F^{\rm{a}} = \lambda^{\rm{a}} f_0 \otimes f_0 + \frac{1}{\sqrt{\lambda^{\rm{a}}}}(s_0 \otimes s_0 + n_0 \otimes n_0)\]
See also [5] for a further analysis.
Thunderbolt.RLRSQActiveDeformationGradientModel
— TypeThe active deformation gradient formulation by Rossi et al. [14].
\[F^{\rm{a}} = \lambda^{\rm{a}} f_0 \otimes f_0 + (1+\kappa(\lambda^{\rm{a}}-1)) s_0 \otimes s_0 + \frac{1}{1+\kappa(\lambda^{\rm{a}}-1))\lambda^{\rm{a}}} n_0 \otimes n_0\]
Where $\kappa \geq 0$ is the sheelet part.
See also [5] for a further analysis.
Active Stresses
Thunderbolt.SimpleActiveStress
— TypeA simple active stress component.
\[T^{\rm{a}} = T^{\rm{max}} \, [Ca_{\rm{i}}] \frac{(F \cdot f_0) \otimes f_0}{||F \cdot f_0||}\]
Thunderbolt.PiersantiActiveStress
— TypeThe active stress component described by Piersanti et al. [15] (Eq. 3).
\[T^{\rm{a}} = T^{\rm{max}} \, [Ca_{\rm{i}}] \left(p^f \frac{(F \cdot f_0) \otimes f_0}{||F \cdot f_0||} + p^{\rm{s}} \frac{(F \cdot s_0) \otimes s_0}{||F \cdot s_0||} + p^{\rm{n}} \frac{(F \cdot n_0) \otimes n_0}{||F \cdot n_0||}\right)\]
Thunderbolt.Guccione1993ActiveModel
— TypeThe active stress component as described by Guccione et al. [8].
\[T^{\rm{a}} = T^{\rm{max}} \, [Ca_{\rm{i}}] (F \cdot f_0) \otimes f_0\]
Compression
Thunderbolt.NullCompressionPenalty
— TypeA simple dummy compression model with $U(I_3) = 0$.
Thunderbolt.SimpleCompressionPenalty
— TypeA compression model with $U(I_3) = \beta (I_3 -1 - 2\log(\sqrt{I_3}))^a$.
Citation missing. How is this one called in literature?
Thunderbolt.HartmannNeffCompressionPenalty1
— TypeAn isochoric compression model where
\[U(I_3) = \beta (I_3^b + I_3^{-b} -2)^a\]
with $a,b \geq 1$.
Entry 1 from table 3 in [16].
Thunderbolt.HartmannNeffCompressionPenalty2
— TypeAn isochoric compression model where
\[U(I_3) = \beta (\sqrt{I_3}-1)^a\]
with $a > 1$.
Entry 2 from table 3 in [16].
Thunderbolt.HartmannNeffCompressionPenalty3
— TypeAn isochoric compression model where
\[U(I_3) = \beta (I_3 - 2\log(\sqrt{I_3}) + 4\log(\sqrt{I_3})^2))\]
Entry 3 from table 3 in [16].
Electrophysiology
Thunderbolt.TransientDiffusionModel
— TypeTransientDiffusionModel(conductivity_coefficient, source_term, solution_variable_symbol)
Model formulated as $\partial_t u = \nabla \cdot \kappa(x) \nabla u + f$
Thunderbolt.SteadyDiffusionModel
— TypeSteadyDiffusionModel(conductivity_coefficient, source_term, solution_variable_symbol)
Model formulated as $\nabla \cdot \kappa(x) \nabla u = f$
Thunderbolt.MonodomainModel
— TypeSimplification of the bidomain model with the structure
χCₘ∂ₜφₘ = ∇⋅κ∇φₘ + χ(Iᵢₒₙ(φₘ,𝐬) + Iₛₜᵢₘ(t)) ∂ₜ𝐬 = g(φₘ,𝐬)
(TODO citation). Can be derived through the assumption (TODO), but also when the assumption is violated we can construct optimal κ (TODO citation+example) for the reconstruction of φₘ.
Thunderbolt.ParabolicParabolicBidomainModel
— TypeThe original model formulation (TODO citation) with the structure
χCₘ∂ₜφₘ = ∇⋅κᵢ∇φᵢ + χ(Iᵢₒₙ(φₘ,𝐬,x) + Iₛₜᵢₘ,ᵢ(x,t)) χCₘ∂ₜφₘ = ∇⋅κₑ∇φₑ - χ(Iᵢₒₙ(φₘ,𝐬,x) + Iₛₜᵢₘ,ₑ(x,t)) ∂ₜ𝐬 = g(φₘ,𝐬,x) φᵢ - φₑ = φₘ
Not implemented yet.
Thunderbolt.ParabolicEllipticBidomainModel
— TypeTransformed bidomain model with the structure
χCₘ∂ₜφₘ = ∇⋅κᵢ∇φₘ + ∇⋅κᵢ∇φₑ + χ(Iᵢₒₙ(φₘ,𝐬,x) + Iₛₜᵢₘ(x,t)) 0 = ∇⋅κᵢ∇φₘ + ∇⋅(κᵢ+κₑ)∇φₑ + Iₛₜᵢₘ,ₑ(t) - Iₛₜᵢₘ,ᵢ(t) ∂ₜ𝐬 = g(φₘ,𝐬,x) φᵢ = φₘ + φₑ
This formulation is a transformation of the parabolic-parabolic form (c.f. TODO citation) and has been derived by (TODO citation) first.
Not implemented yet.
Thunderbolt.ReactionDiffusionSplit
— TypeReactionDiffusionSplit(model)
ReactionDiffusionSplit(model, coeff)
Annotation for the classical reaction-diffusion split of a given model. The second argument is a coefficient describing the input x
for the reaction model rhs, which is usually some generalized coordinate.
Thunderbolt.NoStimulationProtocol
— TypeA dummy protocol describing the absence of stimuli for a simulation.
Thunderbolt.TransmembraneStimulationProtocol
— TypeSupertype for all stimulation protocols fulfilling $I_{\rm{stim,e}} = I_{\rm{stim,i}}$.
Thunderbolt.AnalyticalTransmembraneStimulationProtocol
— TypeDescribe the transmembrane stimulation by some analytical function on a given set of time intervals.
Cells
These are intended to be replaced by ModelingToolkit analogues!
Thunderbolt.ParametrizedFHNModel
— TypeThe classical neuron electrophysiology model independently found by FitzHugh [17] and Nagumo et al. [18]. This model is less stiff and cheaper than any cardiac electrophysiology model, which maks it a good choice for quick testing if things work at all.
Thunderbolt.ParametrizedPCG2019Model
— TypeThe canine ventricular cardiomyocyte electrophysiology model by Pathmanathan et al. [19].
Fluid Mechanics
Lumped Models
Thunderbolt.DummyLumpedCircuitModel
— TypeKeep the volume at a certain level.
Thunderbolt.MTKLumpedCicuitModel
— TypeMTKLumpedCicuitModel
A lumped (0D) circulatory model for LV simulations as presented in Regazzoni et al. [20].
Thunderbolt.RSAFDQ2022LumpedCicuitModel
— TypeRSAFDQ2022LumpedCicuitModel
A lumped (0D) circulatory model for LV simulations as presented in Regazzoni et al. [20].
Multiphysics
Generic Interface
Thunderbolt.InterfaceCoupler
— TypeAbstract supertype for all interface coupling schemes.
Thunderbolt.VolumeCoupler
— TypeAbstract supertype for all volume coupling schemes.
Thunderbolt.Coupling
— TypeHelper to describe the coupling between problems.
Thunderbolt.CoupledModel
— TypeA descriptor for a coupled model.
FSI
Thunderbolt.LumpedFluidSolidCoupler
— TypeEnforce the constraints that chamber volume 3D (solid model) = chamber volume 0D (lumped circuit) via Lagrange multiplied, where a surface pressure integral is introduced such that ∫ ∂Ωendo Here chamber_volume_method
is responsible to compute the 3D volume.
This approach has been proposed by Regazzoni et al. [20].
Thunderbolt.Hirschvogel2017SurrogateVolume
— TypeChamber volume estimator as presented in [21].
Compute the chamber volume as a surface integral via the integral
- ∫ (x + d) det(F) cof(F) N ∂Ωendo
where it is assumed that the chamber is convex, zero displacement in apicobasal direction at the valvular plane occurs and the plane normal is aligned with the z axis, where the origin is at z=0.
Thunderbolt.RSAFDQ2022SurrogateVolume
— TypeCompute the chamber volume as a surface integral via the integral -∫ det(F) ((h ⊗ h)(x + d - b)) adj(F) N ∂Ωendo
as proposed by Regazzoni et al. [20].
This integral basically measures the volume via displacement on a given axis.
Thunderbolt.RSAFDQ2022Split
— TypeAnnotation for the split described by Regazzoni et al. [20].
Thunderbolt.RSAFDQ2022Model
— TypeThe split model described by Regazzoni et al. [20] alone.