51#define BINGHAM_MIN_SHEAR_RATE 1.e-10
65 FluidDynamicMaterial :: initializeFrom(ir);
82 FluidDynamicMaterial :: giveInputRecord(input);
103 double gamma2 = gamma * gamma;
104 double dmudg, dgde1, dgde2, dgde3, mu;
106 dmudg = dgde1 = dgde2 = dgde3 = 0.0;
113 dgde1 = 2.0 * fabs( epsd.
at(1) ) / gamma;
114 dgde2 = 2.0 * fabs( epsd.
at(2) ) / gamma;
115 dgde3 = 1.0 * fabs( epsd.
at(3) ) / gamma;
118 return min(
min( ( epsd.
at(1) * dmudg * dgde1 + mu ), ( epsd.
at(2) * dmudg * dgde2 + mu ) ),
119 ( epsd.
at(3) * dmudg * dgde3 + mu ) );
124 if ( temp_tau <
tau_c ) {
135BinghamFluidMaterial2 :: give(
int aProperty,
GaussPoint *gp)
const
142 return FluidDynamicMaterial :: give(aProperty, gp);
147std::unique_ptr<MaterialStatus>
150 return std::make_unique<BinghamFluidMaterial2Status>(gp);
175 if ( tau > this->
tau_c ) {
192BinghamFluidMaterial2 :: computeTangent3D(MatResponseMode mode,
GaussPoint *gp,
TimeStep *tStep)
const
208 2.0 * epsd.at(1) / gamma,
209 2.0 * epsd.at(2) / gamma,
210 2.0 * epsd.at(3) / gamma,
211 1.0 * epsd.at(4) / gamma,
212 1.0 * epsd.at(5) / gamma,
213 1.0 * epsd.at(6) / gamma,
216 for (
int i = 1; i <= 6; i++ ) {
217 d.
at(1, i) = std::abs( 2.0 * epsd.at(1) * dmudg * dgde.at(i) );
218 d.
at(2, i) = std::abs( 2.0 * epsd.at(2) * dmudg * dgde.at(i) );
219 d.
at(3, i) = std::abs( 2.0 * epsd.at(3) * dmudg * dgde.at(i) );
220 d.
at(4, i) = std::abs( epsd.at(4) * dmudg * dgde.at(i) );
221 d.
at(5, i) = std::abs( epsd.at(5) * dmudg * dgde.at(i) );
222 d.
at(6, i) = std::abs( epsd.at(6) * dmudg * dgde.at(i) );
226 d.
at(1, 1) += 2.0 * mu;
227 d.
at(2, 2) += 2.0 * mu;
228 d.
at(3, 3) += 2.0 * mu;
237BinghamFluidMaterial2 :: checkConsistency()
239 if (
domain->giveEngngModel()->giveEquationScalingFlag() ) {
245 this->
tau_0 /= scale;
252BinghamFluidMaterial2 :: computeActualViscosity(
double tau,
double shearRate)
const
264 if ( tau <=
tau_c ) {
277 double val = 2.0 * ( epsd[0] * epsd[0] + epsd[1] * epsd[1] + epsd[2] * epsd[2] ) +
278 epsd[3] * epsd[3] + epsd[4] * epsd[4] + epsd[5] * epsd[5];
285 double val = 0.5 * ( sigd[0] * sigd[0] + sigd[1] * sigd[1] + sigd[2] * sigd[2] +
286 2.0 * (sigd[3] * sigd[3] + sigd[4] * sigd[4] + sigd[5] * sigd[5]) );
307BinghamFluidMaterial2 :: computeDeviatoricStress(
const FloatArrayF<6> &deps,
double nu)
310 2.0 * nu * ( deps[0] ),
311 2.0 * nu * ( deps[1] ),
312 2.0 * nu * ( deps[2] ),
320BinghamFluidMaterial2Status :: BinghamFluidMaterial2Status(
GaussPoint *g) :
325BinghamFluidMaterial2Status :: printOutputAt(FILE *File,
TimeStep *tStep)
const
327 fprintf(File,
" strains ");
329 fprintf( File,
" %.4e", e );
332 fprintf(File,
"\n deviatoric stresses");
334 fprintf( File,
" %.4e", e );
343BinghamFluidMaterial2Status :: updateYourself(
TimeStep *tStep)
345 FluidDynamicMaterialStatus :: updateYourself(tStep);
354BinghamFluidMaterial2Status :: initTempStatus()
356 FluidDynamicMaterialStatus :: initTempStatus();
367 FluidDynamicMaterialStatus :: saveContext(stream, mode);
382 FluidDynamicMaterialStatus :: restoreContext(stream, mode);
401 for (
int i = 1; i <= nincr; i++ ) {
403 computeDeviatoricStressVector(tau, gp, eps, tStep);
404 giveDeviatoricStiffnessMatrix(d, TangentStiffness, gp, tStep);
405 tau_t.beProductOf(d, eps_i);
410 printf(
"%e %e %e %e %e %e %e %e %e\n", eps.at(1), eps.at(2), eps.at(3), tau.at(1), tau.at(2), tau.at(3), tau_t.at(1), tau_t.at(2), tau_t.at(3) );
#define BINGHAM_MIN_SHEAR_RATE
#define _IFT_BinghamFluidMaterial2_mu0
#define BINGHAM_DEFAULT_STRESS_GROWTH_RATE
#define _IFT_BinghamFluidMaterial2_tau0
#define _IFT_BinghamFluidMaterial2_muinf
#define _IFT_BinghamFluidMaterial2_stressGrowthRate
#define REGISTER_Material_Alt(class, altname)
#define REGISTER_Material(class)
double temp_devStressMagnitude
double devStressMagnitude
Magnitude of deviatoric stresses.
const FloatArrayF< 6 > & giveTempDeviatoricStrainVector() const
void letTempDevStressMagnitudeBe(double _val)
void letTempDevStrainMagnitudeBe(double _val)
FloatArrayF< 6 > temp_deviatoricStrainVector
Deviatoric stresses and strains (reduced form).
double temp_devStrainMagnitude
void letTempDeviatoricStrainVectorBe(const FloatArrayF< 6 > &v)
double giveTempDevStrainMagnitude() const
double devStrainMagnitude
Magnitude of deviatoric strains.
static FloatArrayF< 6 > computeDeviatoricStrain(const FloatArrayF< 6 > &eps)
static double computeDevStrainMagnitude(const FloatArrayF< 6 > &epsd)
static FloatArrayF< 6 > computeDeviatoricStress(const FloatArrayF< 6 > &deps, double nu)
double computeActualViscosity(double tau, double shearRate) const
double tau_0
Yield stress.
static double computeDevStressMagnitude(const FloatArrayF< 6 > &sigd)
double stressGrowthRate
Stress growth rate - parameter controlling the shape of regularized model.
virtual int read(int *data, std::size_t count)=0
Reads count integer values into array pointed by data.
virtual int write(const int *data, std::size_t count)=0
Writes count integer values from array pointed by data.
Domain * domain
Link to domain object, useful for communicating with other FEM components.
double at(std::size_t i, std::size_t j) const
FluidDynamicMaterialStatus(GaussPoint *g)
Constructor - creates new TransportMaterialStatus with number n, belonging to domain d and integratio...
FloatArrayF< 6 > deviatoricStrainRateVector
Strain vector in reduced form.
void letDeviatoricStressVectorBe(const FloatArrayF< 6 > &v)
FloatArrayF< 6 > deviatoricStressVector
Stress vector in reduced form.
FluidDynamicMaterial(int n, Domain *d)
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
Dictionary propertyDictionary
FloatArrayF< N > min(const FloatArrayF< N > &a, const FloatArrayF< N > &b)
FloatArrayF< N > max(const FloatArrayF< N > &a, const FloatArrayF< N > &b)
@ CIO_IOERR
General IO error.