[CIG-SHORT] Kelvin-Voigt viscoelasticity

okuyama.satoshi okuyama.satoshi at jaea.go.jp
Tue Jan 5 21:48:48 PST 2016


Dear Developers,

TL;DR: How can I model kelvin-voigt material when GenMaxwellPlaneStrain/
       GenMaxwellIsotropic3D does not allow shear-ratio-1 being huge value?

I recently started analyzing kelvin-voigt viscoelastic deformation using 
PyLith. Since PyLith does not support kelvin-voigt model directly, I tried 
to do this using Generalized Maxwell material.

Since kelvin-voigt model consists of single spring and single dashpot in 
parallel, I have to allow only spring0 and dashpot1 to be effective.


  +--------- spring0 (mu0) ------------+   strain0, stress0
  |                                    |
  +- spring 1(mu1) -- dashpot1 (eta1) -+   strain1, stress1
  |                                    |
--+                                    +-- total strain, total stress
  |                                    |
  +- spring2 (mu2) -- dashpot2 (eta2) -+   strain2, stress2
  |                                    |
  +- spring3 (mu3) -- dashpot3 (eta3) -+   strain3, stress3


Each maxwell model (and a spring) is connected in parallel, so

(total strain) = (strain0) = (strain1) = (strain2) = (strain3)
(total stress) = (stress0) + (stress1) + (stress2) + (stress3)

To disable spring2, 3 and dashpot2, 3, I set mu and eta for corresponding 
spring/dashpot to zero. This should make strain2 and strain3 always zero as 
required.

Next, spring1 and dashpot1 are connected in series, so

(strain1) = (spring1 strain) + (dashpot1 strain)
(stress1) = (spring1 stress) = (dashpot1 stress)

To disable spring1, I want to set mu1 to infinity so that (spring1 strain) 
becomes zero.

(mu0, mu1, mu2, mu3) = (mu, inf, 0, 0)
(eta1, eta2, eta3) = (eta, 0, 0)

Since PyLith defines fraction of each shear modulus rather than shear modulus 
itself, I set shear-ratio-1 to 1e+10.

---------------------------- part of spatialdb ----------------------------
  value-names =  density vs vp shear-ratio-1 shear-ratio-2 shear-ratio-3 viscosity-1 viscosity-2 viscosity-3
  value-units =  kg/m**3  m/s  m/s None None None Pa*s Pa*s Pa*s
                   .
                   .
                   .

0 0 2700 3333 5800 1e+10 0 0 1e+18 0 0
---------------------------------------------------------------------------

However, PyLith does not allow sum of fractions greater than 1!

----------------------- part of the error message -------------------------
RuntimeError: Shear modulus ratios sum to a value greater than 1.0 for
Generalized Maxwell model.
Ratio 1: 0
Ratio 2: 0
Ratio 3: 0
Total:   1e+10
---------------------------------------------------------------------------

I looked into the source and confirmed this. It just adds up the shear ratio
and throws runtime_error when the sum is greater than 1.

--------------------- part of GenMaxwellPlaneStrain.cc --------------------
272  PylithScalar visFrac = 0.0;
273  for (int imodel = 0; imodel < numMaxwellModels; ++imodel) 
274    visFrac += dbValues[db_shearRatio + imodel];
275  if (visFrac > 1.0) {
276    std::ostringstream msg;
277    msg << "Shear modulus ratios sum to a value greater than 1.0 for\n"
278	<< "Generalized Maxwell model.\n"
279	<< "Ratio 1: " << propValues[db_shearRatio  ] << "\n"
280	<< "Ratio 2: " << propValues[db_shearRatio+1] << "\n"
281	<< "Ratio 3: " << propValues[db_shearRatio+2] << "\n"
282	<< "Total:   " << visFrac << "\n";
283    throw std::runtime_error(msg.str());
284  } // if
---------------------------------------------------------------------------

Now, how can I configure kelvin-voigt visco-elasticity using GenMaxwellPlane
Strain or GenMaxwellIsotropic3D?

I would appreciate any advice. Thank you.



# I think "propValues" in line 279-281 should be "dbValues".

---
Satoshi Okuyama


More information about the CIG-SHORT mailing list