Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Solid viscosity update #286

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
aad683e
Solid viscosity update and restructuring first pass. Added preliminar…
aabrown100-git Sep 9, 2024
785dd34
Merge branch 'SimVascular:main' into solid_viscosity_update
aabrown100-git Sep 9, 2024
603bcb1
Add useful comments
aabrown100-git Sep 10, 2024
ddc1dfb
Update comments for solid visc models
aabrown100-git Sep 11, 2024
03d71c2
Updating solid viscosity for ustruct. Removing solid viscosity stabil…
aabrown100-git Sep 11, 2024
6936119
Solid viscosity update for struct_2d(). Cleanup comments in struct_3d…
aabrown100-git Sep 11, 2024
864f51d
Adding back viscosity-based stabilization in ustruct_xd_c(). PROBABLY…
aabrown100-git Sep 12, 2024
84a492e
Modifying viscosity test case and documentation
aabrown100-git Sep 12, 2024
05ff4b0
Removing viscosity-based stabilization in ustruct_xd_c(). According t…
aabrown100-git Sep 12, 2024
a824f50
Potential viscosity bug fix (very important for convergence)
aabrown100-git Sep 16, 2024
3d5000d
Minor bug fix in Newtonian tangent. Doesn't seem to improve convergen…
aabrown100-git Sep 16, 2024
466f9e6
Updating Newtonian viscosity test case, adding Potential viscosity te…
aabrown100-git Sep 16, 2024
0d1dc5a
Adding note about likely error in Newtonian tangent
aabrown100-git Sep 16, 2024
e6bc611
Add ustruct viscosity tests, update load profile description in READMEs
aabrown100-git Sep 16, 2024
82418b0
Merge branch 'main' of https://github.com/SimVascular/svFSIplus into …
aabrown100-git Sep 26, 2024
73e58f0
Merge branch 'SimVascular:main' into solid_viscosity_update
aabrown100-git Oct 3, 2024
0f677f5
Change input file to take only "Viscosity". Code determines if Solid_…
aabrown100-git Oct 3, 2024
4557b07
Replace raw strings with EquationType physics types. Add CMM and stok…
aabrown100-git Oct 3, 2024
22d402c
Merge branch 'SimVascular:main' into solid_viscosity_update
aabrown100-git Oct 4, 2024
e9621bd
Merge branch 'SimVascular:main' into solid_viscosity_update
aabrown100-git Oct 5, 2024
1e58948
Removing references to old solid_viscosity
aabrown100-git Oct 5, 2024
1ba3f25
Merge branch 'main' into solid_viscosity_update
aabrown100-git Oct 8, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 18 additions & 2 deletions Code/Source/svFSI/ComMod.h
Original file line number Diff line number Diff line change
Expand Up @@ -386,7 +386,7 @@ class stModelType

/// @brief Fluid viscosity model type
//
class viscModelType
class fluidViscModelType
{
public:

Expand All @@ -409,6 +409,19 @@ class viscModelType
double n = 0.0;
};

/// @brief Fluid viscosity model type
//
class solidViscModelType
{
public:

// Type of constitutive model for fluid viscosity
consts::SolidViscosityModelType viscType = consts::SolidViscosityModelType::viscType_NA;

// Viscosity value
double mu = 0.0;
};

/// @brief Domain type is to keep track with element belong to which domain
/// and also different physical quantities
//
Expand Down Expand Up @@ -439,7 +452,10 @@ class dmnType
stModelType stM;

// Viscosity model for fluids
viscModelType visc;
fluidViscModelType fluid_visc;

// Viscosity model for solids
solidViscModelType solid_visc;
};

/// @brief Mesh adjacency (neighboring element for each element)
Expand Down
243 changes: 192 additions & 51 deletions Code/Source/svFSI/Parameters.cpp

Large diffs are not rendered by default.

80 changes: 64 additions & 16 deletions Code/Source/svFSI/Parameters.h
Original file line number Diff line number Diff line change
Expand Up @@ -791,25 +791,25 @@ class VariableWallPropsParameters : public ParameterLists


//////////////////////////////////////////////////////////
// Viscosity //
// FluidViscosity //
//////////////////////////////////////////////////////////

// The following classes are used to store parameters for
// various viscosity models.
// various fluid viscosity models.

class ViscosityNewtonianParameters : public ParameterLists
class FluidViscosityNewtonianParameters : public ParameterLists
{
public:
ViscosityNewtonianParameters();
FluidViscosityNewtonianParameters();
void print_parameters();
void set_values(tinyxml2::XMLElement* equation_params);
Parameter<double> constant_value;
};

class ViscosityCarreauYasudaParameters : public ParameterLists
class FluidViscosityCarreauYasudaParameters : public ParameterLists
{
public:
ViscosityCarreauYasudaParameters();
FluidViscosityCarreauYasudaParameters();
void print_parameters();
void set_values(tinyxml2::XMLElement* xml_elem);

Expand All @@ -820,21 +820,21 @@ class ViscosityCarreauYasudaParameters : public ParameterLists
Parameter<double> shear_rate_tensor_exponent;
};

class ViscosityCassonsParameters : public ParameterLists
class FluidViscosityCassonsParameters : public ParameterLists
{
public:
ViscosityCassonsParameters();
FluidViscosityCassonsParameters();
void print_parameters();
void set_values(tinyxml2::XMLElement* xml_elem);
Parameter<double> asymptotic_viscosity;
Parameter<double> yield_stress;
Parameter<double> low_shear_rate_threshold;
};

class ViscosityParameters : public ParameterLists
class FluidViscosityParameters : public ParameterLists
{
public:
ViscosityParameters();
FluidViscosityParameters();

static const std::string xml_element_name_;

Expand All @@ -848,11 +848,57 @@ class ViscosityParameters : public ParameterLists

Parameter<std::string> model;

ViscosityNewtonianParameters newtonian_model;
ViscosityCarreauYasudaParameters carreau_yasuda_model;
ViscosityCassonsParameters cassons_model;
FluidViscosityNewtonianParameters newtonian_model;
FluidViscosityCarreauYasudaParameters carreau_yasuda_model;
FluidViscosityCassonsParameters cassons_model;
};

//////////////////////////////////////////////////////////
// SolidViscosity //
//////////////////////////////////////////////////////////

// The following classes are used to store parameters for
// various solid viscosity models.

class SolidViscosityNewtonianParameters : public ParameterLists
{
public:
SolidViscosityNewtonianParameters();
void print_parameters();
void set_values(tinyxml2::XMLElement* equation_params);
Parameter<double> constant_value;
};

class SolidViscosityPotentialParameters : public ParameterLists
{
public:
SolidViscosityPotentialParameters();
void print_parameters();
void set_values(tinyxml2::XMLElement* equation_params);
Parameter<double> constant_value;
};

class SolidViscosityParameters : public ParameterLists
{
public:
SolidViscosityParameters();

static const std::string xml_element_name_;

static const std::string NEWTONIAN_MODEL;
static const std::string POTENTIAL_MODEL;
static const std::set<std::string> model_names;

void print_parameters();
void set_values(tinyxml2::XMLElement* xml_elem);

Parameter<std::string> model;

SolidViscosityNewtonianParameters newtonian_model;
SolidViscosityPotentialParameters potential_model;
};


/// @brief The LinearAlgebraParameters class stores parameters for
/// the 'Linear_algebra' XML element.
class LinearAlgebraParameters : public ParameterLists
Expand Down Expand Up @@ -1011,7 +1057,8 @@ class DomainParameters : public ParameterLists
ConstitutiveModelParameters constitutive_model;
FiberReinforcementStressParameters fiber_reinforcement_stress;
StimulusParameters stimulus;
ViscosityParameters viscosity;
FluidViscosityParameters fluid_viscosity;
SolidViscosityParameters solid_viscosity;

// Attributes.
Parameter<std::string> id;
Expand Down Expand Up @@ -1060,7 +1107,6 @@ class DomainParameters : public ParameterLists

Parameter<double> shell_thickness;
Parameter<double> solid_density;
Parameter<double> solid_viscosity;
Parameter<double> source_term;
Parameter<double> time_step_for_integration;
};
Expand Down Expand Up @@ -1199,7 +1245,9 @@ class EquationParameters : public ParameterLists

VariableWallPropsParameters variable_wall_properties;

ViscosityParameters viscosity;
FluidViscosityParameters fluid_viscosity;

SolidViscosityParameters solid_viscosity;

ECGLeadsParameters ecg_leads;
};
Expand Down
2 changes: 1 addition & 1 deletion Code/Source/svFSI/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -1048,7 +1048,7 @@ Distribute boundary condition data to all processors.
<!-- dist_visc_model -->
<!-- =============== -->

<h2 id="dist_visc_model"> dist_visc_model(const ComMod& com_mod, const CmMod& cm_mod, const cmType& cm, viscModelType& lVis) </h2>
<h2 id="dist_visc_model"> dist_visc_model(const ComMod& com_mod, const CmMod& cm_mod, const cmType& cm, fluidViscModelType& lVis) </h2>

[distribute.cpp](https://github.com/ktbolt/svFSI/blob/Implement-svFSI-using-cpp_19/Code/Source/svFSI_cinterface/distribute.cpp)

Expand Down
15 changes: 15 additions & 0 deletions Code/Source/svFSI/consts.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,21 @@ const std::map<std::string,FluidViscosityModelType> fluid_viscosity_model_name_t

};

/// @brief Map for solid viscosity model string to SolidViscosityModelType.
//
const std::map<std::string,SolidViscosityModelType> solid_viscosity_model_name_to_type
{
{"Newtonian", SolidViscosityModelType::viscType_Newtonian},
{"newtonian", SolidViscosityModelType::viscType_Newtonian},
{"Newt", SolidViscosityModelType::viscType_Newtonian},
{"newt", SolidViscosityModelType::viscType_Newtonian},

{"Potential", SolidViscosityModelType::viscType_Potential},
{"potential", SolidViscosityModelType::viscType_Potential},
{"Pot", SolidViscosityModelType::viscType_Potential},
{"pot", SolidViscosityModelType::viscType_Potential},
};


/// @brief Map number of element nodes to element type.
///
Expand Down
35 changes: 22 additions & 13 deletions Code/Source/svFSI/consts.h
Original file line number Diff line number Diff line change
Expand Up @@ -398,19 +398,18 @@ enum class PhysicalProperyType
NA = 0,
fluid_density = 1,
solid_density = 2,
solid_viscosity = 3,
elasticity_modulus = 4,
poisson_ratio = 5,
conductivity = 6,
f_x = 7, // internal force x
f_y = 8, // internal force y
f_z = 9, // internal force z
backflow_stab = 10, // stabilization coeff. for backflow divergence
source_term = 11, // external source
damping = 12,
shell_thickness = 13,
ctau_M = 14, // stabilization coeffs. for USTRUCT (momentum, continuity)
ctau_C = 15
elasticity_modulus = 3,
poisson_ratio = 4,
conductivity = 5,
f_x = 6, // internal force x
f_y = 7, // internal force y
f_z = 8, // internal force z
backflow_stab = 9, // stabilization coeff. for backflow divergence
source_term = 10, // external source
damping = 11,
shell_thickness = 12,
ctau_M = 13, // stabilization coeffs. for USTRUCT (momentum, continuity)
ctau_C = 14
};

enum class PreconditionerType
Expand Down Expand Up @@ -460,6 +459,16 @@ enum class FluidViscosityModelType
/// Map for fluid viscosity model string to FluidViscosityModelType.
extern const std::map<std::string,FluidViscosityModelType> fluid_viscosity_model_name_to_type;

enum class SolidViscosityModelType
{
viscType_NA = 695,
viscType_Newtonian = 694,
viscType_Potential = 693
};

/// Map for solid viscosity model string to SolidViscosityModelType.
extern const std::map<std::string,SolidViscosityModelType> solid_viscosity_model_name_to_type;

/// Template for printing enum class types as an int.
template<typename T>
std::ostream& operator<<(typename std::enable_if<std::is_enum<T>::value, std::ostream>::type& stream, const T& e)
Expand Down
13 changes: 11 additions & 2 deletions Code/Source/svFSI/distribute.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1061,12 +1061,13 @@ void dist_eq(ComMod& com_mod, const CmMod& cm_mod, const cmType& cm, const std::

if ((dmn.phys == EquationType::phys_struct) || (dmn.phys == EquationType::phys_ustruct)) {
dist_mat_consts(com_mod, cm_mod, cm, dmn.stM);
dist_solid_visc_model(com_mod, cm_mod, cm, dmn.solid_visc);
}

if ((dmn.phys == EquationType::phys_fluid) ||
(dmn.phys == EquationType::phys_stokes) ||
(dmn.phys == EquationType::phys_CMM && !com_mod.cmmInit)) {
dist_visc_model(com_mod, cm_mod, cm, dmn.visc);
dist_fluid_visc_model(com_mod, cm_mod, cm, dmn.fluid_visc);
}
}

Expand Down Expand Up @@ -1224,7 +1225,7 @@ void dist_mat_consts(const ComMod& com_mod, const CmMod& cm_mod, const cmType& c
}


void dist_visc_model(const ComMod& com_mod, const CmMod& cm_mod, const cmType& cm, viscModelType& lVis)
void dist_fluid_visc_model(const ComMod& com_mod, const CmMod& cm_mod, const cmType& cm, fluidViscModelType& lVis)
{
using namespace consts;

Expand All @@ -1236,6 +1237,14 @@ void dist_visc_model(const ComMod& com_mod, const CmMod& cm_mod, const cmType& c
cm.bcast(cm_mod, &lVis.n);
}

void dist_solid_visc_model(const ComMod& com_mod, const CmMod& cm_mod, const cmType& cm, solidViscModelType& lVis)
{
using namespace consts;

cm.bcast_enum(cm_mod, &lVis.viscType);
cm.bcast(cm_mod, &lVis.mu);
}


void part_face(Simulation* simulation, mshType& lM, faceType& lFa, faceType& gFa, Vector<int>& gmtl)
{
Expand Down
4 changes: 3 additions & 1 deletion Code/Source/svFSI/distribute.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,9 @@ void dist_eq(ComMod& com_mod, const CmMod& cm_mod, const cmType& cm, const std::

void dist_mat_consts(const ComMod& com_mod, const CmMod& cm_mod, const cmType& cm, stModelType& lStM);

void dist_visc_model(const ComMod& com_mod, const CmMod& cm_mod, const cmType& cm, viscModelType& lVis);
void dist_fluid_visc_model(const ComMod& com_mod, const CmMod& cm_mod, const cmType& cm, fluidViscModelType& lVis);

void dist_solid_visc_model(const ComMod& com_mod, const CmMod& cm_mod, const cmType& cm, solidViscModelType& lVis);

void part_face(Simulation* simulation, mshType& lM, faceType& lFa, faceType& gFa, Vector<int>& gmtl);

Expand Down
20 changes: 10 additions & 10 deletions Code/Source/svFSI/fluid.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1950,20 +1950,20 @@ void get_viscosity(const ComMod& com_mod, const dmnType& lDmn, double& gamma, do

double mu_i, mu_o, lam, a, n, T1, T2;

switch (lDmn.visc.viscType) {
switch (lDmn.fluid_visc.viscType) {

case FluidViscosityModelType::viscType_Const:
mu = lDmn.visc.mu_i;
mu = lDmn.fluid_visc.mu_i;
mu_s = mu;
mu_x = 0.0;
break;

case FluidViscosityModelType::viscType_CY:
mu_i = lDmn.visc.mu_i;
mu_o = lDmn.visc.mu_o;
lam = lDmn.visc.lam;
a = lDmn.visc.a;
n = lDmn.visc.n;
mu_i = lDmn.fluid_visc.mu_i;
mu_o = lDmn.fluid_visc.mu_o;
lam = lDmn.fluid_visc.lam;
a = lDmn.fluid_visc.a;
n = lDmn.fluid_visc.n;

T1 = 1.0 + pow(lam*gamma, a);
T2 = pow(T1,((n-1.0)/a));
Expand All @@ -1976,9 +1976,9 @@ void get_viscosity(const ComMod& com_mod, const dmnType& lDmn, double& gamma, do
break;

case FluidViscosityModelType::viscType_Cass:
mu_i = lDmn.visc.mu_i;
mu_o = lDmn.visc.mu_o;
lam = lDmn.visc.lam;
mu_i = lDmn.fluid_visc.mu_i;
mu_o = lDmn.fluid_visc.mu_o;
lam = lDmn.fluid_visc.lam;

if (gamma < lam) {
mu_o = mu_o / sqrt(lam);
Expand Down
Loading
Loading