Skip to content

Commit

Permalink
Merge branch 'main' into HO_ma
Browse files Browse the repository at this point in the history
  • Loading branch information
aabrown100-git authored Oct 8, 2024
2 parents 8d22187 + f754c50 commit 78fef26
Show file tree
Hide file tree
Showing 99 changed files with 2,391 additions and 478 deletions.
20 changes: 18 additions & 2 deletions Code/Source/svFSI/ComMod.h
Original file line number Diff line number Diff line change
Expand Up @@ -389,7 +389,7 @@ class stModelType

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

Expand All @@ -412,6 +412,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 @@ -442,7 +455,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 @@ -792,25 +792,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 @@ -821,21 +821,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 @@ -849,11 +849,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 @@ -1012,7 +1058,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 @@ -1061,7 +1108,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 @@ -1200,7 +1246,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 @@ -129,6 +129,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

0 comments on commit 78fef26

Please sign in to comment.