[cig-commits] r16111 - in short/3D/PyLith/trunk: doc/userguide doc/userguide/materials doc/userguide/materials/figs examples/3d/hex8 libsrc/materials pylith/materials unittests/libtests/materials unittests/libtests/materials/data
willic3 at geodynamics.org
willic3 at geodynamics.org
Tue Dec 22 19:23:01 PST 2009
Author: willic3
Date: 2009-12-22 19:23:00 -0800 (Tue, 22 Dec 2009)
New Revision: 16111
Added:
short/3D/PyLith/trunk/doc/userguide/materials/figs/pylith-materials.svg
Removed:
short/3D/PyLith/trunk/doc/userguide/materials/figs/pylith-materials.ai
Modified:
short/3D/PyLith/trunk/doc/userguide/materials/figs/pylith-materials.eps
short/3D/PyLith/trunk/doc/userguide/materials/materials.lyx
short/3D/PyLith/trunk/doc/userguide/userguide.lyx
short/3D/PyLith/trunk/examples/3d/hex8/mat_powerlaw.spatialdb
short/3D/PyLith/trunk/examples/3d/hex8/pylithapp.cfg
short/3D/PyLith/trunk/examples/3d/hex8/savageprescott.cfg
short/3D/PyLith/trunk/libsrc/materials/PowerLaw3D.cc
short/3D/PyLith/trunk/libsrc/materials/PowerLaw3D.hh
short/3D/PyLith/trunk/pylith/materials/PowerLaw3D.py
short/3D/PyLith/trunk/unittests/libtests/materials/TestPowerLaw3D.cc
short/3D/PyLith/trunk/unittests/libtests/materials/data/PowerLaw3DElastic.py
short/3D/PyLith/trunk/unittests/libtests/materials/data/PowerLaw3DElasticData.cc
short/3D/PyLith/trunk/unittests/libtests/materials/data/PowerLaw3DTimeDep.py
short/3D/PyLith/trunk/unittests/libtests/materials/data/PowerLaw3DTimeDepData.cc
Log:
Modified power-law formulation so units are now dimensionally consistent.
Rather than specifying a power-law coefficient, users must now specify a
reference strain rate and a reference stress.
Deleted: short/3D/PyLith/trunk/doc/userguide/materials/figs/pylith-materials.ai
===================================================================
(Binary files differ)
Modified: short/3D/PyLith/trunk/doc/userguide/materials/figs/pylith-materials.eps
===================================================================
(Binary files differ)
Added: short/3D/PyLith/trunk/doc/userguide/materials/figs/pylith-materials.svg
===================================================================
--- short/3D/PyLith/trunk/doc/userguide/materials/figs/pylith-materials.svg (rev 0)
+++ short/3D/PyLith/trunk/doc/userguide/materials/figs/pylith-materials.svg 2009-12-23 03:23:00 UTC (rev 16111)
@@ -0,0 +1,648 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ id="svg2403"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ width="540"
+ height="540"
+ xml:space="preserve"
+ sodipodi:docname="pylith-materials.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"><metadata
+ id="metadata2408"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
+ id="defs2406"><inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective2410" /><clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath2418"><path
+ d="M 0,432 L 432,432 L 432,0 L 0,0 L 0,432 z"
+ id="path2420" /></clipPath></defs><sodipodi:namedview
+ inkscape:window-height="820"
+ inkscape:window-width="771"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ guidetolerance="10.0"
+ gridtolerance="10.0"
+ objecttolerance="10.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ showgrid="false"
+ inkscape:zoom="0.91851852"
+ inkscape:cx="315.35283"
+ inkscape:cy="270"
+ inkscape:window-x="179"
+ inkscape:window-y="86"
+ inkscape:current-layer="g2412" /><g
+ id="g2412"
+ inkscape:groupmode="layer"
+ inkscape:label="pylith-materials"
+ transform="matrix(1.25,0,0,-1.25,0,540)"><path
+ d="M 29.569,419.527 L 29.569,369.527"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2422" /><path
+ d="M 29.569,419.047 L 20.435,409.912"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2424" /><path
+ d="M 29.569,406.233 L 20.435,397.098"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2426" /><path
+ d="M 29.569,393.418 L 20.435,384.284"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2428" /><path
+ d="M 29.569,380.604 L 20.435,371.469"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2430" /><path
+ d="M 29.724,394.527 L 109.051,394.527"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2432" /><path
+ d="M 108.891,394.61 L 121.465,372.735"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2434" /><path
+ d="M 146.258,416.486 L 121.108,372.735"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2436" /><path
+ d="M 145.901,416.487 L 171.05,372.736"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2438" /><path
+ d="M 195.997,416.319 L 170.847,372.568"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2440" /><path
+ d="M 195.758,416.11 L 208.333,394.234"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2442" /><path
+ d="M 208.724,394.527 L 288.051,394.527"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2444" /><path
+ d="M 295.111,394.527 L 285.161,390.462 L 287.522,394.527 L 285.161,398.592 L 295.111,394.527 z"
+ style="fill:#373535;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path2446" /><path
+ d="M 29.569,330.177 L 29.569,280.177"
+ style="fill:#bec0c2;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path2448" /><path
+ d="M 29.569,330.177 L 29.569,280.177"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2450" /><path
+ d="M 29.569,329.696 L 20.435,320.562"
+ style="fill:#bec0c2;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path2452" /><path
+ d="M 29.569,329.696 L 20.435,320.562"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2454" /><path
+ d="M 29.569,316.882 L 20.435,307.747"
+ style="fill:#bec0c2;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path2456" /><path
+ d="M 29.569,316.882 L 20.435,307.747"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2458" /><path
+ d="M 29.569,304.068 L 20.435,294.933"
+ style="fill:#bec0c2;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path2460" /><path
+ d="M 29.569,304.068 L 20.435,294.933"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2462" /><path
+ d="M 29.569,291.254 L 20.435,282.118"
+ style="fill:#bec0c2;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path2464" /><path
+ d="M 29.569,291.254 L 20.435,282.118"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2466" /><path
+ d="M 29.724,305.177 L 109.051,305.177"
+ style="fill:#bec0c2;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path2468" /><path
+ d="M 29.724,305.177 L 109.051,305.177"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2470" /><path
+ d="M 108.891,305.26 L 121.465,283.385"
+ style="fill:#bec0c2;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path2472" /><path
+ d="M 108.891,305.26 L 121.465,283.385"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2474" /><path
+ d="M 146.258,327.136 L 121.108,283.385"
+ style="fill:#bec0c2;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path2476" /><path
+ d="M 146.258,327.136 L 121.108,283.385"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2478" /><path
+ d="M 145.901,327.136 L 171.05,283.386"
+ style="fill:#bec0c2;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path2480" /><path
+ d="M 145.901,327.136 L 171.05,283.386"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2482" /><path
+ d="M 195.997,326.969 L 170.846,283.218"
+ style="fill:#bec0c2;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path2484" /><path
+ d="M 195.997,326.969 L 170.846,283.218"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2486" /><path
+ d="M 195.758,326.759 L 208.333,304.884"
+ style="fill:#bec0c2;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path2488" /><path
+ d="M 195.758,326.759 L 208.333,304.884"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2490" /><path
+ d="M 302.391,305.177 L 381.717,305.177"
+ style="fill:#bec0c2;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path2492" /><path
+ d="M 388.777,305.177 L 378.827,301.112 L 381.188,305.177 L 378.827,309.241 L 388.777,305.177 z"
+ style="fill:#bec0c2;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path2494" /><path
+ d="M 302.391,305.177 L 381.717,305.177"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2496" /><path
+ d="M 388.777,305.177 L 378.827,301.112 L 381.188,305.177 L 378.827,309.241 L 388.777,305.177 z"
+ style="fill:#373535;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path2498" /><path
+ d="M 302.166,283.427 L 258.666,283.427 L 258.666,326.927 L 302.166,326.927 L 302.166,283.427 z"
+ style="fill:#bec0c2;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path2500" /><path
+ d="M 302.166,283.427 L 258.666,283.427 L 258.666,326.927 L 302.166,326.927 L 302.166,283.427 z"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2502" /><path
+ d="M 248.166,326.927 L 258.666,326.927"
+ style="fill:#bec0c2;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path2504" /><path
+ d="M 248.166,326.927 L 258.666,326.927"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2506" /><path
+ d="M 248.166,283.427 L 258.666,283.427"
+ style="fill:#bec0c2;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path2508" /><path
+ d="M 248.166,283.427 L 258.666,283.427"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2510" /><path
+ d="M 207.999,305.177 L 258.832,305.177"
+ style="fill:#bec0c2;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path2512" /><path
+ d="M 207.999,305.177 L 258.832,305.177"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2514" /><path
+ d="M 29.569,153.282 L 29.569,103.282"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2516" /><path
+ d="M 29.569,152.802 L 20.435,143.667"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2518" /><path
+ d="M 29.569,139.987 L 20.436,130.853"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2520" /><path
+ d="M 29.569,127.173 L 20.436,118.038"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2522" /><path
+ d="M 29.569,114.359 L 20.436,105.224"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2524" /><path
+ d="M 74.333,218.867 L 153.661,218.867"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2526" /><path
+ d="M 153.557,218.95 L 166.132,197.076"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2528" /><path
+ d="M 190.924,240.826 L 165.775,197.076"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2530" /><path
+ d="M 190.568,240.826 L 215.717,197.076"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2532" /><path
+ d="M 240.664,240.659 L 215.514,196.908"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2534" /><path
+ d="M 240.426,240.449 L 253,218.574"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2536" /><path
+ d="M 253.391,218.867 L 332.719,218.867"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2538" /><path
+ d="M 74.333,158.478 L 106.885,158.478"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2540" /><path
+ d="M 106.724,158.561 L 119.299,136.686"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2542" /><path
+ d="M 144.091,180.437 L 118.942,136.686"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2544" /><path
+ d="M 143.735,180.437 L 168.884,136.687"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2546" /><path
+ d="M 193.831,180.27 L 168.68,136.519"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2548" /><path
+ d="M 193.592,180.06 L 206.167,158.185"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2550" /><path
+ d="M 300.225,158.478 L 332.834,158.478"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2552" /><path
+ d="M 300,136.728 L 256.5,136.728 L 256.5,180.228 L 300,180.228 L 300,136.728 z"
+ style="fill:#bec0c2;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path2554" /><path
+ d="M 300,136.728 L 256.5,136.728 L 256.5,180.228 L 300,180.228 L 300,136.728 z"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2556" /><path
+ d="M 246,180.228 L 256.5,180.228"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2558" /><path
+ d="M 246,136.728 L 256.5,136.728"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2560" /><path
+ d="M 205.833,158.478 L 256.666,158.478"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2562" /><path
+ d="M 332.635,218.951 L 332.635,37.424"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2564" /><path
+ d="M 74.333,218.951 L 74.333,37.424"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2566" /><path
+ d="M 74.333,98.088 L 106.885,98.088"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2568" /><path
+ d="M 106.724,98.17 L 119.299,76.295"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2570" /><path
+ d="M 144.091,120.047 L 118.942,76.295"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2572" /><path
+ d="M 143.735,120.047 L 168.884,76.297"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2574" /><path
+ d="M 193.831,119.879 L 168.68,76.129"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2576" /><path
+ d="M 193.592,119.67 L 206.167,97.795"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2578" /><path
+ d="M 300.225,98.088 L 332.834,98.088"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2580" /><path
+ d="M 300,76.338 L 256.5,76.338 L 256.5,119.838 L 300,119.838 L 300,76.338 z"
+ style="fill:#bec0c2;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path2582" /><path
+ d="M 300,76.338 L 256.5,76.338 L 256.5,119.838 L 300,119.838 L 300,76.338 z"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2584" /><path
+ d="M 246,119.838 L 256.5,119.838"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2586" /><path
+ d="M 246,76.338 L 256.5,76.338"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2588" /><path
+ d="M 205.833,98.088 L 256.666,98.088"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2590" /><path
+ d="M 74.333,37.697 L 106.885,37.697"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2592" /><path
+ d="M 106.724,37.78 L 119.299,15.905"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2594" /><path
+ d="M 144.091,59.656 L 118.942,15.905"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2596" /><path
+ d="M 143.735,59.656 L 168.884,15.906"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2598" /><path
+ d="M 193.831,59.489 L 168.68,15.738"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2600" /><path
+ d="M 193.592,59.279 L 206.167,37.404"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2602" /><path
+ d="M 300.225,37.697 L 332.834,37.697"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2604" /><path
+ d="M 300,15.947 L 256.5,15.947 L 256.5,59.447 L 300,59.447 L 300,15.947 z"
+ style="fill:#bec0c2;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path2606" /><path
+ d="M 300,15.947 L 256.5,15.947 L 256.5,59.447 L 300,59.447 L 300,15.947 z"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2608" /><path
+ d="M 246,59.447 L 256.5,59.447"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2610" /><path
+ d="M 246,15.947 L 256.5,15.947"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2612" /><path
+ d="M 205.833,37.697 L 256.666,37.697"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2614" /><path
+ d="M 29.5,128.282 L 74.5,128.282"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2616" /><path
+ d="M 333,128.282 L 378,128.282"
+ style="fill:none;stroke:#373535;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2618" /><path
+ d="M 385.061,128.282 L 375.11,124.218 L 377.472,128.282 L 375.11,132.347 L 385.061,128.282 z"
+ style="fill:#373535;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path2620" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+<text
+ transform="scale(1,-1)"
+ id="text2678"
+ x="243.5347"
+ y="-271.5"><tspan
+ style="font-size:12px;font-variant:normal;font-weight:normal;font-stretch:normal;writing-mode:lr-tb;fill:#373535;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:Symbol;-inkscape-font-specification:Symbol"
+ x="243.5347"
+ y="-271.5"
+ id="tspan2680" /></text>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<text
+ xml:space="preserve"
+ style="font-size:14.39999962px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ x="253.45161"
+ y="-270"
+ id="text3191"
+ transform="scale(1,-1)"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3193"
+ x="253.45161"
+ y="-270"
+ dy="0 0 -4.3548388 0 0 0 -4.3548388">e<tspan
+ style="font-size:9.60000038px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ id="tspan3195"
+ dy="4.3548388">0</tspan>, S<tspan
+ style="font-size:9.60000038px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ id="tspan3201"
+ dy="4.3548388">0</tspan>, n (Power-law)</tspan></text>
+
+<text
+ xml:space="preserve"
+ style="font-size:14.39999962px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ x="256.06451"
+ y="-280.4516"
+ id="text2835"
+ transform="scale(1,-1)"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan2837"
+ x="256.06451"
+ y="-280.4516">. </tspan></text>
+<text
+ xml:space="preserve"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ x="326.61292"
+ y="117.58065"
+ id="text2839"
+ transform="matrix(0.8,0,0,-0.8,0,432)"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan2841"
+ x="326.61292"
+ y="117.58065"><tspan
+ style="-inkscape-font-specification:Symbol;font-family:Symbol;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;font-size:18px;text-anchor:start;text-align:start;writing-mode:lr;line-height:100%"
+ id="tspan2845">h</tspan> (Linear)</tspan></text>
+<text
+ xml:space="preserve"
+ style="font-size:14.39999962px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ x="343.16129"
+ y="-330.96774"
+ id="text2847"
+ transform="scale(1,-1)"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan2849"
+ x="343.16129"
+ y="-330.96774">Maxwell</tspan><tspan
+ sodipodi:role="line"
+ x="343.16129"
+ y="-312.96774"
+ id="tspan2851">Viscoelastic</tspan></text>
+<text
+ xml:space="preserve"
+ style="font-size:14.39999962px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ x="286.5484"
+ y="-405"
+ id="text2853"
+ transform="scale(1,-1)"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan2855"
+ x="286.5484"
+ y="-405">Elastic Isotropic 3D</tspan></text>
+<text
+ xml:space="preserve"
+ style="font-size:14.39999962px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ x="340.5484"
+ y="-171.58066"
+ id="text2857"
+ transform="scale(1,-1)"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan2859"
+ x="340.5484"
+ y="-171.58066">Generalized</tspan><tspan
+ sodipodi:role="line"
+ x="340.5484"
+ y="-153.58066"
+ id="tspan2861">Maxwell</tspan><tspan
+ sodipodi:role="line"
+ x="340.5484"
+ y="-135.58066"
+ id="tspan2863">Viscoelastic</tspan></text>
+<text
+ xml:space="preserve"
+ style="font-size:14.39999962px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Symbol;-inkscape-font-specification:Symbol"
+ x="141.78958"
+ y="-357.09677"
+ id="text2865"
+ transform="scale(1,-1)"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan2867"
+ x="141.78958"
+ y="-357.09677">l, m</tspan></text>
+<text
+ xml:space="preserve"
+ style="font-size:14.39999962px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Symbol;-inkscape-font-specification:Symbol"
+ x="141.78958"
+ y="-269.06213"
+ id="text2869"
+ transform="scale(1,-1)"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan2871"
+ x="141.78958"
+ y="-269.06213">l, m</tspan></text>
+<text
+ xml:space="preserve"
+ style="font-size:14.39999962px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Symbol;-inkscape-font-specification:Symbol"
+ x="181.67593"
+ y="-246.41696"
+ id="text2873"
+ transform="scale(1,-1)"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan2875"
+ x="181.67593"
+ y="-246.41696"
+ dy="0 0 -4.3548384 0 0 0 0 -4.3548384">m<tspan
+ style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ id="tspan2877"
+ dy="4.3548384">0</tspan>/m<tspan
+ style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ id="tspan2879"
+ dy="4.3548384">tot</tspan>, l</tspan></text>
+<text
+ xml:space="preserve"
+ style="font-size:14.39999962px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Symbol;-inkscape-font-specification:Symbol"
+ x="137.15152"
+ y="-180.11015"
+ id="text2887"
+ transform="scale(1,-1)"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan2889"
+ x="137.15152"
+ y="-180.11015"
+ dy="-4.3548384 0 -4.3548384 0 0 0 0 -4.3548384">m<tspan
+ style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ id="tspan2895"
+ dy="4.3548384">1</tspan>/m<tspan
+ style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ id="tspan2893"
+ dy="4.3548384">tot</tspan>, l</tspan></text>
+<text
+ xml:space="preserve"
+ style="font-size:14.39999962px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Symbol;-inkscape-font-specification:Symbol"
+ x="137.15152"
+ y="-117.83595"
+ id="text2899"
+ transform="scale(1,-1)"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan2901"
+ x="137.15152"
+ y="-117.83595"
+ dy="-8.7096777 0 -4.3548384 0 0 0 0 -4.3548384">m<tspan
+ style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ id="tspan2915"
+ dy="4.3548384">2</tspan>/m<tspan
+ style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ id="tspan2905"
+ dy="4.3548384">tot</tspan>, l</tspan></text>
+<text
+ xml:space="preserve"
+ style="font-size:14.39999962px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Symbol;-inkscape-font-specification:Symbol"
+ x="137.15152"
+ y="-59.916588"
+ id="text2907"
+ transform="scale(1,-1)"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan2909"
+ x="137.15152"
+ y="-59.916588"
+ dy="-8.7096777 0 -4.3548384 0 0 0 0 -4.3548384">m<tspan
+ style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ id="tspan2919"
+ dy="4.3548384">3</tspan>/m<tspan
+ style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ id="tspan2913"
+ dy="4.3548384">tot</tspan>, l</tspan></text>
+<text
+ xml:space="preserve"
+ style="font-size:14.39999962px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Symbol;-inkscape-font-specification:Symbol"
+ x="270.46777"
+ y="-157.57825"
+ id="text2935"
+ transform="scale(1,-1)"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan2937"
+ x="270.46777"
+ y="-157.57825">h<tspan
+ style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ id="tspan2939"
+ dy="4.3548384">1</tspan></tspan></text>
+<text
+ xml:space="preserve"
+ style="font-size:14.39999962px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Symbol;-inkscape-font-specification:Symbol"
+ x="270.51465"
+ y="-97.00351"
+ id="text2949"
+ transform="scale(1,-1)"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan2951"
+ x="270.51465"
+ y="-97.00351">h<tspan
+ style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ id="tspan2953"
+ dy="4.3548384">2</tspan></tspan></text>
+<text
+ xml:space="preserve"
+ style="font-size:14.39999962px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Symbol;-inkscape-font-specification:Symbol"
+ x="270.39453"
+ y="-36.513733"
+ id="text2955"
+ transform="scale(1,-1)"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan2957"
+ x="270.39453"
+ y="-36.513733">h<tspan
+ style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ id="tspan2959"
+ dy="4.3548384">3</tspan></tspan></text>
+</g></svg>
\ No newline at end of file
Modified: short/3D/PyLith/trunk/doc/userguide/materials/materials.lyx
===================================================================
--- short/3D/PyLith/trunk/doc/userguide/materials/materials.lyx 2009-12-18 21:44:27 UTC (rev 16110)
+++ short/3D/PyLith/trunk/doc/userguide/materials/materials.lyx 2009-12-23 03:23:00 UTC (rev 16111)
@@ -695,7 +695,7 @@
\begin_layout Plain Layout
\family typewriter
-viscosity_coefficient,
+reference_strain_rate, reference_stress,
\end_layout
\begin_layout Plain Layout
@@ -1405,7 +1405,7 @@
\end_layout
\begin_layout Standard
-At present, there are three viscoelastic material models available in PyLith
+At present, there are four viscoelastic material models available in PyLith
(Table
\begin_inset CommandInset ref
LatexCommand ref
@@ -1424,7 +1424,9 @@
Future code versions may include alternative formulations for the various
material models, so that users may use the most efficient formulation for
a particular problem.
-
+ Note that both 2D and 3D viscoelastic models are described, but we present
+ below only the 3D formulations.
+ The 2D formulations are easily obtained from the plane strain definition.
\end_layout
\begin_layout Standard
@@ -1448,14 +1450,14 @@
\end_inset
-Available 3D viscoelastic materials for PyLith.
+Available viscoelastic materials for PyLith.
\end_layout
\end_inset
\begin_inset Tabular
-<lyxtabular version="3" rows="4" columns="2">
+<lyxtabular version="3" rows="5" columns="2">
<features>
<column alignment="left" valignment="top" width="2.85in">
<column alignment="center" valignment="top" width="2.47in">
@@ -1488,6 +1490,26 @@
\begin_inset Text
\begin_layout Plain Layout
+MaxwellPlaneStrain
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Plane strain Maxwell material with linear viscous rheology
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
MaxwellIsotropic3D
\end_layout
@@ -1567,7 +1589,7 @@
\begin_layout Plain Layout
\align center
\begin_inset Graphics
- filename figs/pylith-materials.ai
+ filename figs/pylith-materials.eps
scale 75
\end_inset
@@ -1583,8 +1605,8 @@
\end_inset
-Spring-dashpot 1D representations of the available 3D elastic and viscoelastic
- material models for PyLith.
+Spring-dashpot 1D representations of the available 3D elastic and 2D/3D
+ viscoelastic material models for PyLith.
The top model is a linear elastic model, the middle model is a Maxwell
model, and the bottom model is a generalized Maxwell model.
For the generalized Maxwell model,
@@ -2782,108 +2804,150 @@
\end_inset
+When the exponential factor is included, we define a new parameter:
+\end_layout
+\begin_layout Standard
+\begin_inset Formula \begin{equation}
+A_{T}=A_{M}\exp\left(\frac{-Q}{RT}\right)=\frac{\sqrt{3}^{n+1}}{2}A_{E}\exp\left(\frac{-Q}{RT}\right)\:.\label{eq:75}\end{equation}
+
+\end_inset
+
+
\end_layout
\begin_layout Standard
-Since users will generally want to make direct use of laboratory results,
- PyLith converts the coefficients internally, and users are asked to specify
- the power-law exponent,
-\begin_inset Formula $n$
+There is a problem with the usage of parameters
+\begin_inset Formula $A_{E}$
\end_inset
-, as well as a power-law coefficient:
+,
+\begin_inset Formula $A_{M}$
+\end_inset
+
+, and
+\begin_inset Formula $A_{T}$
+\end_inset
+
+.
+ Since the dimensions of these parameters are dependent on the value of
+ the power-law exponent, they are not really constants.
+ In addition to being logically inconsistent, this presents problems when
+ specifying parameters for PyLith, since the power-law exponent must be
+ known before the units can be determined.
+ An alternative way of writing the flow rule is (e.g.,
+\begin_inset CommandInset citation
+LatexCommand cite
+key "Prentice:1968"
+
+\end_inset
+
+):
\begin_inset Formula \begin{equation}
-A_{T}=A_{E}\exp\left(\frac{-Q}{RT}\right)\:.\label{eq:75}\end{equation}
+\frac{\sqrt{\dot{L}_{2}^{\prime C}}}{\dot{e}_{0}}=\left(\frac{\sqrt{J_{2}^{\prime}}}{S_{0}}\right)^{n},\label{eq:76}\end{equation}
\end_inset
-In Table
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "tab:powerLaw"
+where
+\begin_inset Formula $\dot{e}_{0}$
+\end_inset
+ and
+\begin_inset Formula $S_{0}$
\end_inset
-, the properties
+ are reference values for the strain rate and deviatoric stress.
+ This means that
+\begin_inset Formula \begin{equation}
+\frac{\dot{e}_{0}}{S_{0}^{n}}=A_{T}\:.\label{eq:77}\end{equation}
+
+\end_inset
+
+Users must therefore specify three parameters for a power-law material.
+ The properties
\family typewriter
-power-law-coefficient
+reference-strain-rate
\family default
- and
+,
\family typewriter
+reference-stress
+\family default
+, and
+\family typewriter
power-law-exponent
\family default
+ in Table
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "tab:powerLaw"
+
+\end_inset
+
refer to
-\begin_inset Formula $A_{T}$
+\begin_inset Formula $\dot{e}_{0}$
\end_inset
- and
+,
+\begin_inset Formula $S_{0}$
+\end_inset
+
+, and
\begin_inset Formula $n$
\end_inset
, respectively.
- Note that the units of
-\begin_inset Formula $A_{E}$
-\end_inset
-
- and
+ To specify the power-law properties for PyLith using laboratory results,
+ the user must first compute
\begin_inset Formula $A_{T}$
\end_inset
- are
-\begin_inset Formula $\mathrm{stress}^{-n}\mathrm{time}^{-1}$
+ using
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:75"
+
\end_inset
.
- Frequently, the
-\begin_inset Formula $\log_{10}$
+ Then, values for
+\begin_inset Formula $\dot{e}_{0}$
\end_inset
- of
-\begin_inset Formula $A_{E}$
+ and
+\begin_inset Formula $S_{0}$
\end_inset
- is given (e.g.,
-\begin_inset CommandInset citation
-LatexCommand cite
-key "Kirby:Kronenberg:1987"
-
+ must be provided.
+ The simplest method is probably to assume a reasonable value for the reference
+ strain rate, and then compute
+\begin_inset Formula $S_{0}$
\end_inset
-).
- To avoid scaling issues, PyLith internally makes use of a viscosity coefficient
-,
-\begin_inset Formula $\eta$
+ as
+\begin_inset Formula \begin{equation}
+S_{0}=\left(\frac{\dot{e}_{0}}{A_{T}}\right)^{\frac{1}{n}}\:.\label{eq:78}\end{equation}
+
\end_inset
-, rather than the power-law coefficient:
-\begin_inset Formula \begin{gather}
-\dot{e}_{ij}^{C}=\frac{\sqrt{J_{2}^{\prime}}^{n-1}S_{ij}}{2\eta^{n}}\label{eq:76}\\
-\eta=\frac{\exp\left(\frac{Q}{nRT}\right)}{\left(2A_{M}\right)^{\frac{1}{n}}}\:.\nonumber \end{gather}
-\end_inset
+\end_layout
-This viscosity coefficient is the value written to info files, as listed
- in Table
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "tab:material-model-output"
+\begin_layout Standard
+The flow law in component form is
+\begin_inset Formula \begin{equation}
+\dot{e}_{ij}^{C}=\frac{\dot{e}_{0}\sqrt{J_{2}^{\prime}}^{n-1}S_{ij}}{S_{0}^{n}}\:,\label{eq:79}\end{equation}
\end_inset
-.
-\end_layout
-
-\begin_layout Standard
-The creep strain increment is approximated as
+and the creep strain increment is approximated as
\begin_inset Formula \begin{gather}
-\underline{\Delta e}^{C}=\frac{\Delta t\sqrt{^{\tau}J_{2}^{\prime}}^{n-1}\,^{\tau}\underline{S}}{2\eta^{n}}=\frac{\Delta t^{\tau}\overline{\sigma}^{n-1}\,^{\tau}\underline{S}}{2\sqrt{3}\eta^{n}}\,.\label{eq:77}\end{gather}
+\underline{\Delta e}^{C}=\frac{\Delta t\dot{e}_{0}\sqrt{^{\tau}J_{2}^{\prime}}^{n-1}\,^{\tau}\underline{S}}{S_{0}^{n}}=\frac{\Delta t\dot{e}_{0}\phantom{}^{\tau}\overline{\sigma}^{n-1}\,^{\tau}\underline{S}}{\sqrt{3}S_{0}^{n}}\,.\label{eq:80}\end{gather}
\end_inset
-Therefore,
+ Therefore,
\begin_inset Formula \begin{gather}
-\Delta\bar{e}^{C}=\frac{\Delta t\sqrt{^{\tau}J_{2}^{\prime}}^{n}}{\sqrt{3}\eta^{n}}=\frac{\Delta t^{\tau}\overline{\sigma}^{n}}{\sqrt{3}^{n+1}\eta^{n}}\,,\,\textrm{and}\,^{\tau}\gamma=\frac{\sqrt{^{\tau}J_{2}^{\prime}}^{n-1}}{2\eta^{n}}\,.\label{eq:78}\end{gather}
+\Delta\bar{e}^{C}=\frac{2\Delta t\dot{e}_{0}\sqrt{^{\tau}J_{2}^{\prime}}^{n}}{\sqrt{3}S_{0}^{n}}=\frac{2\Delta t\dot{e}_{0}\phantom{}^{\tau}\overline{\sigma}^{n}}{\sqrt{3}^{n+1}S_{0}^{n}}\,,\,\textrm{and}\,^{\tau}\gamma=\frac{\dot{e}_{0}\sqrt{^{\tau}J_{2}^{\prime}}^{n-1}}{S_{0}^{n}}\,.\label{eq:81}\end{gather}
\end_inset
@@ -2897,14 +2961,14 @@
,
\begin_inset CommandInset ref
LatexCommand ref
-reference "eq:77"
+reference "eq:80"
\end_inset
, and
\begin_inset CommandInset ref
LatexCommand ref
-reference "eq:78"
+reference "eq:81"
\end_inset
@@ -2917,26 +2981,26 @@
, we obtain:
\begin_inset Formula \begin{gather}
-^{t+\Delta t}\underline{S}=\frac{E}{1+\nu}\left\{ ^{t+\Delta t}\underline{e}^{\prime}-\Delta t^{\tau}\gamma\left[\left(1-\alpha\right)^{t}\underline{S}+\alpha{}^{t+\Delta t}\underline{S}\right]\right\} +\underline{S}^{I}\,,\label{eq:79}\end{gather}
+^{t+\Delta t}\underline{S}=\frac{E}{1+\nu}\left\{ ^{t+\Delta t}\underline{e}^{\prime}-\Delta t^{\tau}\gamma\left[\left(1-\alpha\right)^{t}\underline{S}+\alpha{}^{t+\Delta t}\underline{S}\right]\right\} +\underline{S}^{I}\,,\label{eq:82}\end{gather}
\end_inset
which may be rewritten:
\begin_inset Formula \begin{gather}
-^{t+\Delta t}\underline{S}\left(\frac{1+\nu}{E}+\alpha\Delta t^{\tau}\gamma\right)={}^{t+\Delta t}\underline{e}^{\prime}-\Delta t^{\tau}\gamma\left(1-\alpha\right)^{t}\underline{S}+\frac{1+\nu}{E}\underline{S}^{I}\,.\label{eq:80}\end{gather}
+^{t+\Delta t}\underline{S}\left(\frac{1+\nu}{E}+\alpha\Delta t^{\tau}\gamma\right)={}^{t+\Delta t}\underline{e}^{\prime}-\Delta t^{\tau}\gamma\left(1-\alpha\right)^{t}\underline{S}+\frac{1+\nu}{E}\underline{S}^{I}\,.\label{eq:83}\end{gather}
\end_inset
Taking the scalar inner product of both sides we obtain:
\begin_inset Formula \begin{gather}
-a^{2}\,\,{}^{t+\Delta t}J_{2}^{\prime}-b+c^{\tau}\gamma-d^{2}\,^{\tau}\gamma^{2}=F=0\,,\label{eq:81}\end{gather}
+a^{2}\,\,{}^{t+\Delta t}J_{2}^{\prime}-b+c^{\tau}\gamma-d^{2}\,^{\tau}\gamma^{2}=F=0\,,\label{eq:84}\end{gather}
\end_inset
where
\begin_inset Formula \begin{gather}
a=\frac{1+\nu}{E}+\alpha\Delta t^{\tau}\gamma\,\,\nonumber \\
-b=\frac{1}{2}{}^{t+\Delta t}\underline{e}^{\prime}\cdot{}^{t+\Delta t}\underline{e}^{\prime}+\frac{1+\nu}{E}{}^{t+\Delta t}\underline{e}^{\prime}\cdot\underline{S}^{I}+\left(\frac{1+\nu}{E}\right)^{2}\,^{I}J_{2}^{\prime}\,.\label{eq:82}\\
+b=\frac{1}{2}{}^{t+\Delta t}\underline{e}^{\prime}\cdot{}^{t+\Delta t}\underline{e}^{\prime}+\frac{1+\nu}{E}{}^{t+\Delta t}\underline{e}^{\prime}\cdot\underline{S}^{I}+\left(\frac{1+\nu}{E}\right)^{2}\,^{I}J_{2}^{\prime}\,.\label{eq:85}\\
c=\Delta t\left(1-\alpha\right){}^{t+\Delta t}\underline{e}^{\prime}\cdot^{t}\underline{S}+\Delta t\left(1-\alpha\right)\frac{1+\nu}{E}\,^{t}\underline{S}\cdot\underline{S}^{I}\,\,\nonumber \\
d=\Delta t\left(1-\alpha\right)\sqrt{^{t}J_{2}^{\prime}}\,\,\nonumber \end{gather}
@@ -2945,7 +3009,7 @@
Equation
\begin_inset CommandInset ref
LatexCommand ref
-reference "eq:81"
+reference "eq:84"
\end_inset
@@ -2959,17 +3023,24 @@
time step may be found from Equations
\begin_inset CommandInset ref
LatexCommand ref
-reference "eq:78"
+reference "eq:49"
\end_inset
- and
+,
\begin_inset CommandInset ref
LatexCommand ref
-reference "eq:79"
+reference "eq:81"
\end_inset
+, and
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "eq:82"
+
+\end_inset
+
, and the total stresses may be found from Equation
\begin_inset CommandInset ref
LatexCommand ref
@@ -2993,19 +3064,19 @@
We begin by rewriting Equation
\begin_inset CommandInset ref
LatexCommand ref
-reference "eq:80"
+reference "eq:83"
\end_inset
as
\begin_inset Formula \begin{gather}
-F=^{t+\Delta t}S_{i}\left(a_{E}+\alpha\Delta t^{\tau}\gamma\right)-^{t+\Delta t}e_{i}^{\prime}+\Delta t^{\tau}\gamma\left(1-\alpha\right)^{t}S_{i}-a_{E}S_{i}^{I}=0\label{eq:83}\end{gather}
+F=^{t+\Delta t}S_{i}\left(a_{E}+\alpha\Delta t^{\tau}\gamma\right)-^{t+\Delta t}e_{i}^{\prime}+\Delta t^{\tau}\gamma\left(1-\alpha\right)^{t}S_{i}-a_{E}S_{i}^{I}=0\label{eq:86}\end{gather}
\end_inset
where
\begin_inset Formula \begin{gather}
-a_{E}=\frac{1+\nu}{E}\,.\label{eq:84}\end{gather}
+a_{E}=\frac{1+\nu}{E}\,.\label{eq:87}\end{gather}
\end_inset
@@ -3015,7 +3086,7 @@
is
\begin_inset Formula \begin{gather}
-\frac{\partial F}{\partial^{t+\Delta t}e_{k}^{\prime}}=-\delta_{ik}\:,\label{eq:85}\end{gather}
+\frac{\partial F}{\partial^{t+\Delta t}e_{k}^{\prime}}=-\delta_{ik}\:,\label{eq:88}\end{gather}
\end_inset
@@ -3025,14 +3096,14 @@
is
\begin_inset Formula \begin{gather}
-\frac{\partial F}{\partial^{t+\Delta t}S_{i}}=a_{E}+\alpha\Delta t^{\tau}\gamma+\frac{\partial^{\tau}\gamma}{\partial^{t+\Delta t}S_{i}}\Delta t\left[\alpha^{t+\Delta t}S_{i}+\left(1-\alpha\right)^{t}S_{i}\right]\:.\label{eq:86}\end{gather}
+\frac{\partial F}{\partial^{t+\Delta t}S_{i}}=a_{E}+\alpha\Delta t^{\tau}\gamma+\frac{\partial^{\tau}\gamma}{\partial^{t+\Delta t}S_{i}}\Delta t\left[\alpha^{t+\Delta t}S_{i}+\left(1-\alpha\right)^{t}S_{i}\right]\:.\label{eq:89}\end{gather}
\end_inset
From Equation
\begin_inset CommandInset ref
LatexCommand ref
-reference "eq:78"
+reference "eq:81"
\end_inset
@@ -3045,20 +3116,20 @@
,
\begin_inset Formula \begin{gather}
-^{\tau}\gamma=\frac{1}{2\eta^{n}}\left[\alpha\sqrt{^{t+\Delta t}J_{2}^{\prime}}+\left(1-\alpha\right)\sqrt{^{t}J_{2}^{\prime}}\right]^{n-1}\:.\label{eq:87}\end{gather}
+^{\tau}\gamma=\frac{\dot{e}_{0}}{S_{0}^{n}}\left[\alpha\sqrt{^{t+\Delta t}J_{2}^{\prime}}+\left(1-\alpha\right)\sqrt{^{t}J_{2}^{\prime}}\right]^{n-1}\:.\label{eq:90}\end{gather}
\end_inset
Then
\begin_inset Formula \begin{gather}
-\frac{\partial^{\tau}\gamma}{\partial{}^{t+\Delta t}S_{i}}=\frac{\partial^{\tau}\gamma}{\partial\sqrt{^{t+\Delta t}J_{2}^{\prime}}}\frac{\partial\sqrt{^{t+\Delta t}J_{2}^{\prime}}}{\partial^{t+\Delta t}S_{l}}\label{eq:88}\\
-=\frac{\alpha\left(n-1\right)\sqrt{^{\tau}J_{2}^{\prime}}^{n-2}{}^{t+\Delta t}T_{i}}{4\eta^{n}}\,,\nonumber \end{gather}
+\frac{\partial^{\tau}\gamma}{\partial{}^{t+\Delta t}S_{i}}=\frac{\partial^{\tau}\gamma}{\partial\sqrt{^{t+\Delta t}J_{2}^{\prime}}}\frac{\partial\sqrt{^{t+\Delta t}J_{2}^{\prime}}}{\partial^{t+\Delta t}S_{l}}\label{eq:91}\\
+=\frac{\dot{e}_{0}\alpha\left(n-1\right)\sqrt{^{\tau}J_{2}^{\prime}}^{n-2}{}^{t+\Delta t}T_{i}}{2S_{0}^{n}}\,,\nonumber \end{gather}
\end_inset
Where
\begin_inset Formula \begin{gather}
-^{t+\Delta t}T_{i}=^{t+\Delta t}S_{i}\:;\:\:1\leq i\leq3\label{eq:89}\\
+^{t+\Delta t}T_{i}=^{t+\Delta t}S_{i}\:;\:\:1\leq i\leq3\label{eq:92}\\
^{t+\Delta t}T_{i}=2^{t+\Delta t}S_{i}\:;\:\:\textrm{otherwise.}\nonumber \end{gather}
\end_inset
@@ -3066,27 +3137,27 @@
Then using Equations
\begin_inset CommandInset ref
LatexCommand ref
-reference "eq:85"
+reference "eq:88"
\end_inset
,
\begin_inset CommandInset ref
LatexCommand ref
-reference "eq:86"
+reference "eq:89"
\end_inset
,
\begin_inset CommandInset ref
LatexCommand ref
-reference "eq:88"
+reference "eq:91"
\end_inset
, and the quotient rule for derivatives of an implicit function,
\begin_inset Formula \begin{gather}
-\frac{\partial^{t+\Delta t}S_{i}}{\partial{}^{t+\Delta t}e_{k}^{\prime}}=\frac{\delta_{ik}}{a_{E}+\alpha\Delta t\left[^{\tau}\gamma+\frac{^{\tau}S_{i}\left(n-1\right){}^{t+\Delta t}T_{i}\sqrt{^{\tau}J_{2}^{\prime}}^{n-2}}{4\sqrt{^{t+\Delta t}J_{2}^{\prime}}\eta^{n}}\right]}\,.\label{eq:90}\end{gather}
+\frac{\partial^{t+\Delta t}S_{i}}{\partial{}^{t+\Delta t}e_{k}^{\prime}}=\frac{\delta_{ik}}{a_{E}+\alpha\Delta t\left[^{\tau}\gamma+\frac{\dot{e}_{0}{}^{\tau}S_{i}\left(n-1\right){}^{t+\Delta t}T_{i}\sqrt{^{\tau}J_{2}^{\prime}}^{n-2}}{2\sqrt{^{t+\Delta t}J_{2}^{\prime}}S_{0}^{n}}\right]}\,.\label{eq:93}\end{gather}
\end_inset
@@ -3101,7 +3172,11 @@
\end_inset
-.
+ (making the appropriate substitution for
+\begin_inset Formula $^{\tau}\gamma$
+\end_inset
+
+).
Then, using Equations
\begin_inset CommandInset ref
LatexCommand ref
@@ -3130,26 +3205,26 @@
-1 & -1 & 2 & 0 & 0 & 0\\
0 & 0 & 0 & 3 & 0 & 0\\
0 & 0 & 0 & 0 & 3 & 0\\
-0 & 0 & 0 & 0 & 0 & 3\end{array}\right]\,.\label{eq:91}\end{gather}
+0 & 0 & 0 & 0 & 0 & 3\end{array}\right]\,.\label{eq:94}\end{gather}
\end_inset
Note that if there are no deviatoric stresses at the beginning and end of
a time step (or if
-\begin_inset Formula $\eta$
+\begin_inset Formula $\nicefrac{\dot{e}_{0}}{S_{0}^{n}}$
\end_inset
- goes to infinity), Equations
+ approaches zero), Equations
\begin_inset CommandInset ref
LatexCommand ref
-reference "eq:90"
+reference "eq:93"
\end_inset
and
\begin_inset CommandInset ref
LatexCommand ref
-reference "eq:91"
+reference "eq:94"
\end_inset
@@ -3161,13 +3236,13 @@
we require the derivative of equation
\begin_inset CommandInset ref
LatexCommand ref
-reference "eq:81"
+reference "eq:84"
\end_inset
, which may be written:
\begin_inset Formula \begin{gather}
-\frac{\partial F}{\partial\sqrt{^{t+\Delta t}J_{2}^{\prime}}}=2a^{2}\sqrt{^{t+\Delta t}J_{2}^{\prime}}+\frac{\alpha\left(n-1\right)\sqrt{^{\tau}J_{2}^{\prime}}^{n-2}}{2\eta^{n}}\left(2a\alpha\Delta t{}^{t+\Delta t}J_{2}^{\prime}+c-2d^{2}\,^{\tau}\gamma\right)\,.\label{eq:92}\end{gather}
+\frac{\partial F}{\partial\sqrt{^{t+\Delta t}J_{2}^{\prime}}}=2a^{2}\sqrt{^{t+\Delta t}J_{2}^{\prime}}+\frac{\dot{e}_{0}\alpha\left(n-1\right)\sqrt{^{\tau}J_{2}^{\prime}}^{n-2}}{S_{0}^{n}}\left(2a\alpha\Delta t{}^{t+\Delta t}J_{2}^{\prime}+c-2d^{2}\,^{\tau}\gamma\right)\,.\label{eq:95}\end{gather}
\end_inset
@@ -3674,7 +3749,7 @@
\begin_inset Tabular
-<lyxtabular version="3" rows="6" columns="2">
+<lyxtabular version="3" rows="7" columns="2">
<features>
<column alignment="center" valignment="middle" width="0.85in">
<column alignment="center" valignment="middle" width="2.47in">
@@ -3783,7 +3858,7 @@
\begin_inset Text
\begin_layout Plain Layout
-\begin_inset Formula $A_{T}$
+\begin_inset Formula $\dot{e}_{0}$
\end_inset
@@ -3797,13 +3872,38 @@
\begin_layout Plain Layout
\family typewriter
-power-law-coefficient
+reference-strain-rate
\end_layout
\end_inset
</cell>
</row>
<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+\begin_inset Formula $S_{0}$
+\end_inset
+
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+reference-stress
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
\begin_inset Text
Modified: short/3D/PyLith/trunk/doc/userguide/userguide.lyx
===================================================================
--- short/3D/PyLith/trunk/doc/userguide/userguide.lyx 2009-12-18 21:44:27 UTC (rev 16110)
+++ short/3D/PyLith/trunk/doc/userguide/userguide.lyx 2009-12-23 03:23:00 UTC (rev 16111)
@@ -628,5 +628,25 @@
, Elsevier Science Ltd., Oxford, 480 pp.
\end_layout
+\begin_layout Bibliography
+\begin_inset CommandInset bibitem
+LatexCommand bibitem
+label "16"
+key "Prentice:1968"
+
+\end_inset
+
+Prentice, J.
+ H, (1968), Dimensional problem of the power law in rheology,
+\shape italic
+Nature
+\shape default
+,
+\shape italic
+217
+\shape default
+, 157.
+\end_layout
+
\end_body
\end_document
Modified: short/3D/PyLith/trunk/examples/3d/hex8/mat_powerlaw.spatialdb
===================================================================
--- short/3D/PyLith/trunk/examples/3d/hex8/mat_powerlaw.spatialdb 2009-12-18 21:44:27 UTC (rev 16110)
+++ short/3D/PyLith/trunk/examples/3d/hex8/mat_powerlaw.spatialdb 2009-12-23 03:23:00 UTC (rev 16111)
@@ -6,9 +6,9 @@
//
#SPATIAL.ascii 1
SimpleDB {
- num-values = 5 // number of material property values
- value-names = density vs vp power-law-coeff power-law-exponent // names of the material property values
- value-units = kg/m**3 m/s m/s Pa**(-3.0)/s None // units
+ num-values = 6 // number of material property values
+ value-names = density vs vp reference-strain-rate reference-stress power-law-exponent // names of the material property values
+ value-units = kg/m**3 m/s m/s 1/s Pa None // units
num-locs = 1 // number of locations
data-dim = 0
space-dim = 3
@@ -24,6 +24,7 @@
// (4) density (kg/m^3)
// (5) vs (m/s)
// (6) vp (m/s)
-// (7) viscosity-coeff (Pa**(-power_law_exponent)/s)
+// (7) reference-strain-rate (1/s)
+// (8) reference-stress (Pa)
// (8) power-law-exponent (no units)
-0.0 0.0 0.0 2500.0 3000.0 5291.502622129181 1.1111e-37 3.0
+0.0 0.0 0.0 2500.0 3000.0 5291.502622129181 1.0e-6 1.25992105e+10 3.0
Modified: short/3D/PyLith/trunk/examples/3d/hex8/pylithapp.cfg
===================================================================
--- short/3D/PyLith/trunk/examples/3d/hex8/pylithapp.cfg 2009-12-18 21:44:27 UTC (rev 16110)
+++ short/3D/PyLith/trunk/examples/3d/hex8/pylithapp.cfg 2009-12-23 03:23:00 UTC (rev 16111)
@@ -82,7 +82,7 @@
ksp_monitor = true
ksp_view = true
log_summary = true
-ksp_max_it = 100
+ksp_max_it = 500
ksp_gmres_restart = 50
# start_in_debugger = true
Modified: short/3D/PyLith/trunk/examples/3d/hex8/savageprescott.cfg
===================================================================
--- short/3D/PyLith/trunk/examples/3d/hex8/savageprescott.cfg 2009-12-18 21:44:27 UTC (rev 16110)
+++ short/3D/PyLith/trunk/examples/3d/hex8/savageprescott.cfg 2009-12-23 03:23:00 UTC (rev 16111)
@@ -43,7 +43,7 @@
# ----------------------------------------------------------------------
# Uncomment the lines below to switch to the power-law rheology and
-# nonlinear solver and comment out the lines
+# nonlinear solver.
# ----------------------------------------------------------------------
#[pylithapp.timedependent]
@@ -53,7 +53,7 @@
#[pylithapp.timedependent.materials.viscoelastic]
#db_properties.iohandler.filename = mat_powerlaw.spatialdb
-#output.cell_info_fields = [density,mu,lambda,viscosity_coefficient,power_law_exponent]
+#output.cell_info_fields = [density,mu,lambda,reference_strain_rate,reference_stress,power_law_exponent]
# ----------------------------------------------------------------------
# boundary conditions
Modified: short/3D/PyLith/trunk/libsrc/materials/PowerLaw3D.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/PowerLaw3D.cc 2009-12-18 21:44:27 UTC (rev 16110)
+++ short/3D/PyLith/trunk/libsrc/materials/PowerLaw3D.cc 2009-12-23 03:23:00 UTC (rev 16111)
@@ -44,21 +44,23 @@
const int numElasticConsts = 21;
/// Number of physical properties.
- const int numProperties = 5;
+ const int numProperties = 6;
/// Physical properties.
const Metadata::ParamDescription properties[] = {
{ "density", 1, pylith::topology::FieldBase::SCALAR },
{ "mu", 1, pylith::topology::FieldBase::SCALAR },
{ "lambda", 1, pylith::topology::FieldBase::SCALAR },
- { "viscosity_coefficient", 1, pylith::topology::FieldBase::SCALAR },
+ { "reference_strain_rate", 1, pylith::topology::FieldBase::SCALAR },
+ { "reference_stress", 1, pylith::topology::FieldBase::SCALAR },
{ "power_law_exponent", 1, pylith::topology::FieldBase::SCALAR }
};
// Values expected in properties spatial database
- const int numDBProperties = 5;
+ const int numDBProperties = 6;
const char* dbProperties[] = {"density", "vs", "vp" ,
- "power-law-coefficient",
+ "reference-strain-rate",
+ "reference-stress",
"power-law-exponent"};
/// Number of state variables.
@@ -99,11 +101,14 @@
const int pylith::materials::PowerLaw3D::p_lambda =
pylith::materials::PowerLaw3D::p_mu + 1;
-const int pylith::materials::PowerLaw3D::p_viscosityCoefficient =
+const int pylith::materials::PowerLaw3D::p_referenceStrainRate =
pylith::materials::PowerLaw3D::p_lambda + 1;
+const int pylith::materials::PowerLaw3D::p_referenceStress =
+ pylith::materials::PowerLaw3D::p_referenceStrainRate + 1;
+
const int pylith::materials::PowerLaw3D::p_powerLawExponent =
- pylith::materials::PowerLaw3D::p_viscosityCoefficient + 1;
+ pylith::materials::PowerLaw3D::p_referenceStress + 1;
// Indices of property database values (order must match dbProperties).
const int pylith::materials::PowerLaw3D::db_density = 0;
@@ -114,11 +119,14 @@
const int pylith::materials::PowerLaw3D::db_vp =
pylith::materials::PowerLaw3D::db_vs + 1;
-const int pylith::materials::PowerLaw3D::db_powerLawCoefficient =
+const int pylith::materials::PowerLaw3D::db_referenceStrainRate =
pylith::materials::PowerLaw3D::db_vp + 1;
+const int pylith::materials::PowerLaw3D::db_referenceStress =
+ pylith::materials::PowerLaw3D::db_referenceStrainRate + 1;
+
const int pylith::materials::PowerLaw3D::db_powerLawExponent =
- pylith::materials::PowerLaw3D::db_powerLawCoefficient + 1;
+ pylith::materials::PowerLaw3D::db_referenceStress + 1;
// Indices of state variables.
const int pylith::materials::PowerLaw3D::s_viscousStrain = 0;
@@ -198,18 +206,20 @@
const double density = dbValues[db_density];
const double vs = dbValues[db_vs];
const double vp = dbValues[db_vp];
- const double powerLawCoefficient = dbValues[db_powerLawCoefficient];
+ const double referenceStrainRate = dbValues[db_referenceStrainRate];
+ const double referenceStress = dbValues[db_referenceStress];
const double powerLawExponent = dbValues[db_powerLawExponent];
- if (density <= 0.0 || vs <= 0.0 || vp <= 0.0 || powerLawCoefficient <= 0.0
- || powerLawExponent < 1.0) {
+ if (density <= 0.0 || vs <= 0.0 || vp <= 0.0 || referenceStrainRate <= 0.0
+ || referenceStress <= 0.0 || powerLawExponent < 1.0) {
std::ostringstream msg;
msg << "Spatial database returned illegal value for physical "
<< "properties.\n"
<< "density: " << density << "\n"
<< "vp: " << vp << "\n"
<< "vs: " << vs << "\n"
- << "powerLawCoefficient: " << powerLawCoefficient << "\n"
+ << "referenceStrainRate: " << referenceStrainRate << "\n"
+ << "referenceStress: " << referenceStress << "\n"
<< "powerLawExponent: " << powerLawExponent << "\n";
throw std::runtime_error(msg.str());
} // if
@@ -227,14 +237,11 @@
} // if
assert(mu > 0);
- const double factor = powerLawCoefficient *
- pow(sqrt(3.0), (powerLawExponent + 1.0));
- const double viscosityCoefficient = pow(factor, -1.0/powerLawExponent);
-
propValues[p_density] = density;
propValues[p_mu] = mu;
propValues[p_lambda] = lambda;
- propValues[p_viscosityCoefficient] = viscosityCoefficient;
+ propValues[p_referenceStrainRate] = referenceStrainRate;
+ propValues[p_referenceStress] = referenceStress;
propValues[p_powerLawExponent] = powerLawExponent;
PetscLogFlops(6);
@@ -253,21 +260,21 @@
const double densityScale = _normalizer->densityScale();
const double pressureScale = _normalizer->pressureScale();
const double timeScale = _normalizer->timeScale();
- // **** NOTE: Make sure scaling is correct for viscosity coefficient.
- const double powerLawExponent = values[p_powerLawExponent];
- const double viscosityCoeffScale =
- pow(timeScale, (1.0/powerLawExponent)) * pressureScale;
+ const double strainRateScale = 1.0/timeScale;
+
values[p_density] =
_normalizer->nondimensionalize(values[p_density], densityScale);
values[p_mu] =
_normalizer->nondimensionalize(values[p_mu], pressureScale);
values[p_lambda] =
_normalizer->nondimensionalize(values[p_lambda], pressureScale);
- values[p_viscosityCoefficient] =
- _normalizer->nondimensionalize(values[p_viscosityCoefficient],
- viscosityCoeffScale);
+ values[p_referenceStrainRate] =
+ _normalizer->nondimensionalize(values[p_referenceStrainRate],
+ strainRateScale);
+ values[p_referenceStress] =
+ _normalizer->nondimensionalize(values[p_referenceStress], pressureScale);
- PetscLogFlops(7);
+ PetscLogFlops(6);
} // _nondimProperties
// ----------------------------------------------------------------------
@@ -283,21 +290,20 @@
const double densityScale = _normalizer->densityScale();
const double pressureScale = _normalizer->pressureScale();
const double timeScale = _normalizer->timeScale();
- // **** NOTE: Make sure scaling is correct for viscosity coefficient.
- const double powerLawExponent = values[p_powerLawExponent];
- const double viscosityCoeffScale =
- pow(timeScale, (1.0/powerLawExponent)) * pressureScale;
+ const double strainRateScale = 1.0/timeScale;
+
values[p_density] =
_normalizer->dimensionalize(values[p_density], densityScale);
values[p_mu] =
_normalizer->dimensionalize(values[p_mu], pressureScale);
values[p_lambda] =
_normalizer->dimensionalize(values[p_lambda], pressureScale);
- values[p_viscosityCoefficient] =
- _normalizer->dimensionalize(values[p_viscosityCoefficient],
- viscosityCoeffScale);
+ values[p_referenceStrainRate] =
+ _normalizer->dimensionalize(values[p_referenceStrainRate], strainRateScale);
+ values[p_referenceStress] =
+ _normalizer->dimensionalize(values[p_referenceStress], pressureScale);
- PetscLogFlops(7);
+ PetscLogFlops(6);
} // _dimProperties
// ----------------------------------------------------------------------
@@ -384,7 +390,8 @@
assert(0 != stateVars);
assert(_numVarsQuadPt == numStateVars);
const double mu = properties[p_mu];
- const double viscosityCoefficient = properties[p_viscosityCoefficient];
+ const double referenceStrainRate = properties[p_referenceStrainRate];
+ const double referenceStress = properties[p_referenceStress];
const double powerLawExp = properties[p_powerLawExponent];
const double stress[] = {stateVars[s_stress],
@@ -404,16 +411,16 @@
const double effStress = sqrt(0.5 * devStressProd);
double dtTest = 1.0;
if (effStress != 0.0)
- dtTest = 0.1 *
- pow((viscosityCoefficient/effStress), (powerLawExp - 1.0)) *
- (viscosityCoefficient/mu);
+ dtTest = 0.05 *
+ pow((referenceStress/effStress), (powerLawExp - 1.0)) *
+ (referenceStress/mu)/referenceStrainRate;
const double dtStable = dtTest;
#if 0 // DEBUGGING
double maxwellTime = 10.0 * dtStable;
std::cout << "Maxwell time: " << maxwellTime << std::endl;
#endif
- PetscLogFlops(20);
+ PetscLogFlops(21);
return dtStable;
} // _stableTimeStepImplicit
@@ -513,7 +520,8 @@
const double mu = properties[p_mu];
const double lambda = properties[p_lambda];
- const double viscosityCoefficient = properties[p_viscosityCoefficient];
+ const double referenceStrainRate = properties[p_referenceStrainRate];
+ const double referenceStress = properties[p_referenceStress];
const double powerLawExp = properties[p_powerLawExponent];
const double visStrainT[] = {stateVars[s_viscousStrain],
stateVars[s_viscousStrain + 1],
@@ -618,7 +626,8 @@
_effStressParams.dt = _dt;
_effStressParams.effStressT = effStressT;
_effStressParams.powerLawExp = powerLawExp;
- _effStressParams.viscosityCoefficient = viscosityCoefficient;
+ _effStressParams.referenceStrainRate = referenceStrainRate;
+ _effStressParams.referenceStress = referenceStress;
const double effStressInitialGuess = effStressT;
@@ -630,9 +639,9 @@
// Compute stresses from effective stress.
const double effStressTau = (1.0 - alpha) * effStressT +
alpha * effStressTpdt;
- const double gammaTau = 0.5 *
- pow((effStressTau/viscosityCoefficient),
- (powerLawExp - 1.0))/viscosityCoefficient;
+ const double gammaTau = referenceStrainRate *
+ pow((effStressTau/referenceStress),
+ (powerLawExp - 1.0))/referenceStress;
const double factor1 = 1.0/(ae + alpha * _dt * gammaTau);
const double factor2 = timeFac * gammaTau;
double devStressTpdt = 0.0;
@@ -668,11 +677,12 @@
const double dt = _effStressParams.dt;
const double effStressT = _effStressParams.effStressT;
const double powerLawExp = _effStressParams.powerLawExp;
- const double viscosityCoefficient = _effStressParams.viscosityCoefficient;
+ const double referenceStrainRate = _effStressParams.referenceStrainRate;
+ const double referenceStress = _effStressParams.referenceStress;
const double factor1 = 1.0-alpha;
const double effStressTau = factor1 * effStressT + alpha * effStressTpdt;
- const double gammaTau = 0.5 * pow((effStressTau/viscosityCoefficient),
- (powerLawExp - 1.0))/viscosityCoefficient;
+ const double gammaTau = referenceStrainRate *
+ pow((effStressTau/referenceStress), (powerLawExp - 1.0))/referenceStress;
const double a = ae + alpha * dt * gammaTau;
const double y = a * a * effStressTpdt * effStressTpdt - b +
c * gammaTau - d * d * gammaTau * gammaTau;
@@ -695,15 +705,16 @@
const double dt = _effStressParams.dt;
const double effStressT = _effStressParams.effStressT;
const double powerLawExp = _effStressParams.powerLawExp;
- const double viscosityCoefficient = _effStressParams.viscosityCoefficient;
+ const double referenceStrainRate = _effStressParams.referenceStrainRate;
+ const double referenceStress = _effStressParams.referenceStress;
const double factor1 = 1.0-alpha;
const double effStressTau = factor1 * effStressT + alpha * effStressTpdt;
- const double gammaTau = 0.5 * pow((effStressTau/viscosityCoefficient),
- (powerLawExp - 1.0))/viscosityCoefficient;
+ const double gammaTau = referenceStrainRate *
+ pow((effStressTau/referenceStress), (powerLawExp - 1.0))/referenceStress;
const double a = ae + alpha * dt * gammaTau;
- const double dGammaTau = 0.5 * alpha * (powerLawExp - 1.0) *
- pow((effStressTau/viscosityCoefficient), (powerLawExp - 2.0))/
- (viscosityCoefficient * viscosityCoefficient);
+ const double dGammaTau = referenceStrainRate * alpha * (powerLawExp - 1.0) *
+ pow((effStressTau/referenceStress), (powerLawExp - 2.0))/
+ (referenceStress * referenceStress);
const double dy = 2.0 * a * a * effStressTpdt + dGammaTau *
(2.0 * a * alpha * dt * effStressTpdt * effStressTpdt +
c - 2.0 * d * d * gammaTau);
@@ -731,14 +742,15 @@
const double dt = _effStressParams.dt;
const double effStressT = _effStressParams.effStressT;
const double powerLawExp = _effStressParams.powerLawExp;
- const double viscosityCoefficient = _effStressParams.viscosityCoefficient;
+ const double referenceStrainRate = _effStressParams.referenceStrainRate;
+ const double referenceStress = _effStressParams.referenceStress;
const double factor1 = 1.0-alpha;
const double effStressTau = factor1 * effStressT + alpha * effStressTpdt;
- const double gammaTau = 0.5 * pow((effStressTau/viscosityCoefficient),
- (powerLawExp - 1.0))/viscosityCoefficient;
- const double dGammaTau = 0.5 * alpha * (powerLawExp - 1.0) *
- pow((effStressTau/viscosityCoefficient), (powerLawExp - 2.0))/
- (viscosityCoefficient * viscosityCoefficient);
+ const double gammaTau = referenceStrainRate *
+ pow((effStressTau/referenceStress), (powerLawExp - 1.0))/referenceStress;
+ const double dGammaTau = referenceStrainRate * alpha * (powerLawExp - 1.0) *
+ pow((effStressTau/referenceStress), (powerLawExp - 2.0))/
+ (referenceStress * referenceStress);
const double a = ae + alpha * dt * gammaTau;
y = a * a * effStressTpdt * effStressTpdt -
b +
@@ -818,111 +830,8 @@
// ----------------------------------------------------------------------
// Compute derivative of elasticity matrix at location from properties
-// as a viscoelastic material. This version is to be used for the first
-// iteration, before strains have been computed.
+// as a viscoelastic material.
void
-pylith::materials::PowerLaw3D::_calcElasticConstsViscoelasticInitial(
- double* const elasticConsts,
- const int numElasticConsts,
- const double* properties,
- const int numProperties,
- const double* stateVars,
- const int numStateVars,
- const double* totalStrain,
- const int strainSize,
- const double* initialStress,
- const int initialStressSize,
- const double* initialStrain,
- const int initialStrainSize)
-{ // _calcElasticConstsViscoelasticInitial
- assert(0 != elasticConsts);
- assert(_PowerLaw3D::numElasticConsts == numElasticConsts);
- assert(0 != properties);
- assert(_numPropsQuadPt == numProperties);
- assert(0 != stateVars);
- assert(_numVarsQuadPt == numStateVars);
- assert(0 != totalStrain);
- assert(_PowerLaw3D::tensorSize == strainSize);
- assert(0 != initialStress);
- assert(_PowerLaw3D::tensorSize == initialStressSize);
- assert(0 != initialStrain);
- assert(_PowerLaw3D::tensorSize == initialStrainSize);
-
- const int tensorSize = _tensorSize;
- const double mu = properties[p_mu];
- const double lambda = properties[p_lambda];
- const double viscosityCoefficient = properties[p_viscosityCoefficient];
- const double powerLawExp = properties[p_powerLawExponent];
- const double stress[] = {stateVars[s_stress],
- stateVars[s_stress + 1],
- stateVars[s_stress + 2],
- stateVars[s_stress + 3],
- stateVars[s_stress + 4],
- stateVars[s_stress + 5]};
-
- const double mu2 = 2.0 * mu;
- const double ae = 1.0/mu2;
- const double bulkModulus = lambda + mu2/3.0;
-
- const double meanStress = (stress[0] + stress[1] + stress[2])/3.0;
- const double devStress[] = {stress[0] - meanStress,
- stress[1] - meanStress,
- stress[2] - meanStress,
- stress[3],
- stress[4],
- stress[5]};
- const double effStress = sqrt(0.5 * _scalarProduct(devStress, devStress));
- const double gamma = 0.5 *
- pow((effStress/viscosityCoefficient),
- (powerLawExp - 1.0))/viscosityCoefficient;
- // const double visFac = 1.0/(3.0 * (ae + _dt * gamma));
- const double visFac1 = 3.0 *(ae + _dt * gamma);
- const double visFac2 = 0.75 * _dt * (powerLawExp - 1.0) *
- pow((effStress/viscosityCoefficient), (powerLawExp - 2.0))/
- (viscosityCoefficient * viscosityCoefficient * effStress);
- const double dStress11dStrain11 = 1.0/
- (visFac1 + devStress[0] * devStress[0] * visFac2);
- const double dStress22dStrain22 = 1.0/
- (visFac1 + devStress[1] * devStress[1] * visFac2);
- const double dStress33dStrain33 = 1.0/
- (visFac1 + devStress[2] * devStress[2] * visFac2);
- const double dStress12dStrain12 = 1.0/
- (visFac1 + 2.0 * devStress[3] * devStress[3] * visFac2);
- const double dStress23dStrain23 = 1.0/
- (visFac1 + 2.0 * devStress[4] * devStress[4] * visFac2);
- const double dStress13dStrain13 = 1.0/
- (visFac1 + 2.0 * devStress[5] * devStress[5] * visFac2);
- elasticConsts[ 0] = bulkModulus + 2.0 * dStress11dStrain11; // C1111
- elasticConsts[ 1] = bulkModulus - dStress11dStrain11; // C1122
- elasticConsts[ 2] = elasticConsts[1]; // C1133
- elasticConsts[ 3] = 0; // C1112
- elasticConsts[ 4] = 0; // C1123
- elasticConsts[ 5] = 0; // C1113
- elasticConsts[ 6] = bulkModulus + 2.0 * dStress22dStrain22; // C2222
- elasticConsts[ 7] = bulkModulus - dStress22dStrain22; // C2233
- elasticConsts[ 8] = 0; // C2212
- elasticConsts[ 9] = 0; // C2223
- elasticConsts[10] = 0; // C2213
- elasticConsts[11] = bulkModulus + 2.0 * dStress33dStrain33; // C3333
- elasticConsts[12] = 0; // C3312
- elasticConsts[13] = 0; // C3323
- elasticConsts[14] = 0; // C3313
- elasticConsts[15] = 3.0 * dStress12dStrain12; // C1212
- elasticConsts[16] = 0; // C1223
- elasticConsts[17] = 0; // C1213
- elasticConsts[18] = 3.0 * dStress23dStrain23; // C2323
- elasticConsts[19] = 0; // C2313
- elasticConsts[20] = 3.0 * dStress13dStrain13; // C1313
-
- // PetscLogFlops(37);
- PetscLogFlops(85);
-} // _calcElasticConstsViscoelasticInitial
-
-// ----------------------------------------------------------------------
-// Compute derivative of elasticity matrix at location from properties
-// as a viscoelastic material. This version is to be used after the first
-// iteration, once strains have already been computed.
-void
pylith::materials::PowerLaw3D::_calcElasticConstsViscoelastic(
double* const elasticConsts,
const int numElasticConsts,
@@ -954,7 +863,8 @@
const double mu = properties[p_mu];
const double lambda = properties[p_lambda];
- const double viscosityCoefficient = properties[p_viscosityCoefficient];
+ const double referenceStrainRate = properties[p_referenceStrainRate];
+ const double referenceStress = properties[p_referenceStress];
const double powerLawExp = properties[p_powerLawExponent];
// State variables.
@@ -1074,7 +984,8 @@
_effStressParams.dt = _dt;
_effStressParams.effStressT = effStressT;
_effStressParams.powerLawExp = powerLawExp;
- _effStressParams.viscosityCoefficient = viscosityCoefficient;
+ _effStressParams.referenceStrainRate = referenceStrainRate;
+ _effStressParams.referenceStress = referenceStress;
const double effStressInitialGuess = effStressT;
@@ -1086,9 +997,9 @@
// end of time step.
const double effStressTau = (1.0 - alpha) * effStressT +
alpha * effStressTpdt;
- const double gammaTau = 0.5 *
- pow((effStressTau/viscosityCoefficient),
- (powerLawExp - 1.0))/viscosityCoefficient;
+ const double gammaTau = referenceStrainRate *
+ pow((effStressTau/referenceStress),
+ (powerLawExp - 1.0))/referenceStress;
const double a = ae + alpha * _dt * gammaTau;
const double factor1 = 1.0/a;
const double factor2 = timeFac * gammaTau;
@@ -1112,9 +1023,10 @@
alpha * devStressT[3] + explicitFac * devStressTpdt[3],
alpha * devStressT[4] + explicitFac * devStressTpdt[4],
alpha * devStressT[5] + explicitFac * devStressTpdt[5]};
- const double factor3 = 0.25 * _dt * alpha * (powerLawExp - 1.0) *
- pow((effStressTau/viscosityCoefficient), (powerLawExp - 2.0))/
- (viscosityCoefficient * viscosityCoefficient * effStressTpdt);
+ const double factor3 = 0.5 * referenceStrainRate * _dt * alpha *
+ (powerLawExp - 1.0) *
+ pow((effStressTau/referenceStress), (powerLawExp - 2.0))/
+ (referenceStress * referenceStress * effStressTpdt);
// Compute deviatoric derivatives
const double dStress11dStrain11 = 1.0/
@@ -1154,7 +1066,7 @@
elasticConsts[19] = 0.0; // C2313
elasticConsts[20] = dStress13dStrain13; // C1313
- PetscLogFlops(103);
+ PetscLogFlops(114);
} // else
} // _calcElasticConstsViscoelastic
@@ -1235,7 +1147,8 @@
// since otherwise we would have to redo a lot of calculations.
const double mu = properties[p_mu];
const double lambda = properties[p_lambda];
- const double viscosityCoefficient = properties[p_viscosityCoefficient];
+ const double referenceStrainRate = properties[p_referenceStrainRate];
+ const double referenceStress = properties[p_referenceStress];
const double powerLawExp = properties[p_powerLawExponent];
const double visStrainT[] = {stateVars[s_viscousStrain],
@@ -1337,7 +1250,8 @@
_effStressParams.dt = _dt;
_effStressParams.effStressT = effStressT;
_effStressParams.powerLawExp = powerLawExp;
- _effStressParams.viscosityCoefficient = viscosityCoefficient;
+ _effStressParams.referenceStrainRate = referenceStrainRate;
+ _effStressParams.referenceStress = referenceStress;
const double effStressInitialGuess = effStressT;
@@ -1350,9 +1264,9 @@
// Compute stress and viscous strain and update appropriate state variables.
const double effStressTau = (1.0 - alpha) * effStressT +
alpha * effStressTpdt;
- const double gammaTau = 0.5 *
- pow((effStressTau/viscosityCoefficient),
- (powerLawExp - 1.0))/viscosityCoefficient;
+ const double gammaTau = referenceStrainRate *
+ pow((effStressTau/referenceStress),
+ (powerLawExp - 1.0))/referenceStress;
const double factor1 = 1.0/(ae + alpha * _dt * gammaTau);
const double factor2 = timeFac * gammaTau;
double devStressTpdt = 0.0;
Modified: short/3D/PyLith/trunk/libsrc/materials/PowerLaw3D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/PowerLaw3D.hh 2009-12-18 21:44:27 UTC (rev 16110)
+++ short/3D/PyLith/trunk/libsrc/materials/PowerLaw3D.hh 2009-12-23 03:23:00 UTC (rev 16111)
@@ -391,35 +391,6 @@
const int initialStrainSize);
/** Compute derivatives of elasticity matrix from properties as a
- * viscoelastic material for first iteration.
- *
- * @param elasticConsts Array for elastic constants.
- * @param numElasticConsts Number of elastic constants.
- * @param properties Properties at location.
- * @param numProperties Number of properties.
- * @param stateVars State variables at locations.
- * @param numStateVars Number of state variables.
- * @param totalStrain Total strain at location.
- * @param strainSize Size of strain tensor.
- * @param initialStress Initial stress values.
- * @param initialStressSize Size of initial stress array.
- * @param initialStrain Initial strain values.
- * @param initialStrainSize Size of initial strain array.
- */
- void _calcElasticConstsViscoelasticInitial(double* const elasticConsts,
- const int numElasticConsts,
- const double* properties,
- const int numProperties,
- const double* stateVars,
- const int numStateVars,
- const double* totalStrain,
- const int strainSize,
- const double* initialStress,
- const int initialStressSize,
- const double* initialStrain,
- const int initialStrainSize);
-
- /** Compute derivatives of elasticity matrix from properties as a
* viscoelastic material.
*
* @param elasticConsts Array for elastic constants.
@@ -512,7 +483,8 @@
double dt;
double effStressT;
double powerLawExp;
- double viscosityCoefficient;
+ double referenceStrainRate;
+ double referenceStress;
};
// PRIVATE MEMBERS ////////////////////////////////////////////////////
@@ -533,12 +505,14 @@
static const int p_density;
static const int p_mu;
static const int p_lambda;
- static const int p_viscosityCoefficient;
+ static const int p_referenceStrainRate;
+ static const int p_referenceStress;
static const int p_powerLawExponent;
static const int db_density;
static const int db_vs;
static const int db_vp;
- static const int db_powerLawCoefficient;
+ static const int db_referenceStrainRate;
+ static const int db_referenceStress;
static const int db_powerLawExponent;
static const int s_viscousStrain;
Modified: short/3D/PyLith/trunk/pylith/materials/PowerLaw3D.py
===================================================================
--- short/3D/PyLith/trunk/pylith/materials/PowerLaw3D.py 2009-12-18 21:44:27 UTC (rev 16110)
+++ short/3D/PyLith/trunk/pylith/materials/PowerLaw3D.py 2009-12-23 03:23:00 UTC (rev 16111)
@@ -41,7 +41,8 @@
'data': []},
'cell': \
{'info': ["mu", "lambda", "density",
- "viscosity_coefficient", "power_law_exponent"],
+ "reference_strain_rate", "reference_stress",
+ "power_law_exponent"],
'data': ["total_strain", "stress", "viscous_strain"]}}
self._loggingPrefix = "MaPL3D "
return
Modified: short/3D/PyLith/trunk/unittests/libtests/materials/TestPowerLaw3D.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/TestPowerLaw3D.cc 2009-12-18 21:44:27 UTC (rev 16110)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/TestPowerLaw3D.cc 2009-12-23 03:23:00 UTC (rev 16111)
@@ -195,7 +195,8 @@
CPPUNIT_ASSERT(material.hasProperty("mu"));
CPPUNIT_ASSERT(material.hasProperty("lambda"));
CPPUNIT_ASSERT(material.hasProperty("density"));
- CPPUNIT_ASSERT(material.hasProperty("viscosity_coefficient"));
+ CPPUNIT_ASSERT(material.hasProperty("reference_strain_rate"));
+ CPPUNIT_ASSERT(material.hasProperty("reference_stress"));
CPPUNIT_ASSERT(material.hasProperty("power_law_exponent"));
CPPUNIT_ASSERT(!material.hasProperty("aaa"));
} // testHasProperty
Modified: short/3D/PyLith/trunk/unittests/libtests/materials/data/PowerLaw3DElastic.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/data/PowerLaw3DElastic.py 2009-12-18 21:44:27 UTC (rev 16110)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/data/PowerLaw3DElastic.py 2009-12-23 03:23:00 UTC (rev 16111)
@@ -39,14 +39,17 @@
"""
ElasticMaterialApp.__init__(self, name)
+ # import pdb
+ # pdb.set_trace()
numLocs = 2
self.dimension = dimension
self.numLocs = numLocs
self.dbPropertyValues = ["density", "vs", "vp",
- "power_law_coefficient", "power_law_exponent"]
- self.numPropertyValues = numpy.array([1, 1, 1, 1, 1], dtype=numpy.int32)
+ "reference_strain_rate", "reference_stress",
+ "power_law_exponent"]
+ self.numPropertyValues = numpy.array([1, 1, 1, 1, 1, 1], dtype=numpy.int32)
self.dbStateVarValues = ["viscous-strain-xx",
"viscous-strain-yy",
@@ -66,20 +69,28 @@
densityA = 2500.0
vsA = 3000.0
vpA = vsA*3**0.5
+ # Derive new values in based on previous value for power-law coefficient
+ # and viscosity coefficient.
powerLawCoeffA = 1.0/3.0e18
+ refStrainRateA = 1.0e-6
powerLawExponentA = 1.0
strainA = [1.1e-4, 1.2e-4, 1.3e-4, 1.4e-4, 1.5e-4, 1.6e-4]
initialStressA = [2.1e4, 2.2e4, 2.3e4, 2.4e4, 2.5e4, 2.6e4]
initialStrainA = [3.1e-4, 3.2e-4, 3.3e-4, 3.4e-4, 3.5e-4, 3.6e-4]
muA = vsA*vsA*densityA
lambdaA = vpA*vpA*densityA - 2.0*muA
+
viscosityCoeffA = (1.0/((3.0**0.5)**(powerLawExponentA + 1.0) \
* powerLawCoeffA))**(1.0/powerLawExponentA)
+ refStressA = viscosityCoeffA * \
+ (2.0 * refStrainRateA) ** (1.0/powerLawExponentA)
+ # refStressA = (refStrainRateA/powerLawCoeffA)**(1.0/powerLawExponentA)
densityB = 2000.0
vsB = 1200.0
vpB = vsB*3**0.5
powerLawCoeffB = 1.0/9.0e30
+ refStrainRateB = 1.0e-6
powerLawExponentB = 3.0
strainB = [4.1e-4, 4.2e-4, 4.3e-4, 4.4e-4, 4.5e-4, 4.6e-4]
initialStressB = [5.1e4, 5.2e4, 5.3e4, 5.4e4, 5.5e4, 5.6e4]
@@ -88,25 +99,29 @@
lambdaB = vpB*vpB*densityB - 2.0*muB
viscosityCoeffB = (1.0/((3.0**0.5)**(powerLawExponentB + 1.0) \
* powerLawCoeffB))**(1.0/powerLawExponentB)
+ refStressB = viscosityCoeffB * \
+ (2.0 * refStrainRateB) ** (1.0/powerLawExponentB)
+ # refStressB = (refStrainRateB/powerLawCoeffB)**(1.0/powerLawExponentB)
self.lengthScale = 1.0e+3
self.pressureScale = muA
self.timeScale = 1.0
self.densityScale = 1.0e+3
- self.viscosityCoeffScaleA = \
- (self.timeScale**(1.0/powerLawExponentA)) * self.pressureScale
- self.viscosityCoeffScaleB = \
- (self.timeScale**(1.0/powerLawExponentB)) * self.pressureScale
+ self.strainRateScale = 1.0/self.timeScale
self.dbProperties = numpy.array([ [densityA, vsA, vpA, \
- powerLawCoeffA, powerLawExponentA],
+ refStrainRateA, refStressA, \
+ powerLawExponentA],
[densityB, vsB, vpB, \
- powerLawCoeffB, powerLawExponentB] ],
+ refStrainRateB, refStressB, \
+ powerLawExponentB] ],
dtype=numpy.float64)
self.properties = numpy.array([ [densityA, muA, lambdaA, \
- viscosityCoeffA, powerLawExponentA],
+ refStrainRateA, refStressA, \
+ powerLawExponentA],
[densityB, muB, lambdaB, \
- viscosityCoeffB, powerLawExponentB] ],
+ refStrainRateB, refStressB, \
+ powerLawExponentB] ],
dtype=numpy.float64)
# TEMPORARY, need to determine how to use initial state variables
@@ -118,13 +133,14 @@
mu0 = self.pressureScale
density0 = self.densityScale
time0 = self.timeScale
- viscosityCoeff0 = self.viscosityCoeffScaleA
- viscosityCoeff1 = self.viscosityCoeffScaleB
+ strainRate0 = self.strainRateScale
self.propertiesNondim = \
numpy.array([ [densityA/density0, muA/mu0, lambdaA/mu0, \
- viscosityCoeffA/viscosityCoeff0, powerLawExponentA],
+ refStrainRateA/strainRate0, refStressA/mu0, \
+ powerLawExponentA],
[densityB/density0, muB/mu0, lambdaB/mu0, \
- viscosityCoeffB/viscosityCoeff1, powerLawExponentB] ],
+ refStrainRateB/strainRate0, refStressB/mu0, \
+ powerLawExponentB] ],
dtype=numpy.float64)
self.stateVarsNondim = self.stateVars # no scaling
@@ -155,9 +171,9 @@
self._calcStress(strainB, muB, lambdaB, \
initialStressB, initialStrainB)
- maxwellTimeA = self._getMaxwellTime(muA, viscosityCoeffA, \
+ maxwellTimeA = self._getMaxwellTime(muA, refStrainRateA, refStressA, \
powerLawExponentA, self.stress[0,:])
- maxwellTimeB = self._getMaxwellTime(muB, viscosityCoeffB, \
+ maxwellTimeB = self._getMaxwellTime(muB, refStrainRateB, refStressB, \
powerLawExponentB, self.stress[1,:])
viscousStrainUpdated = numpy.zeros((numLocs, tensorSize),
@@ -187,7 +203,8 @@
return scalarProduct
- def _getMaxwellTime(self, mu, viscosityCoeff, powerLawExponent, stress):
+ def _getMaxwellTime(self, mu, refStrainRate, refStress, powerLawExponent,
+ stress):
"""
Compute Maxwell time from stress, viscosity coefficient, shear modulus, and
power-law exponent.
@@ -203,8 +220,8 @@
effStress = (0.5 * devStressProd)**0.5
maxwellTime = 1.0
if (effStress != 0.0):
- maxwellTime = (viscosityCoeff/effStress)**(powerLawExponent - 1.0) * \
- (viscosityCoeff/mu)
+ maxwellTime = 0.5 * (refStress/effStress)**(powerLawExponent - 1.0) * \
+ (refStress/mu)/refStrainRate
return maxwellTime
Modified: short/3D/PyLith/trunk/unittests/libtests/materials/data/PowerLaw3DElasticData.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/data/PowerLaw3DElasticData.cc 2009-12-18 21:44:27 UTC (rev 16110)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/data/PowerLaw3DElasticData.cc 2009-12-23 03:23:00 UTC (rev 16111)
@@ -19,15 +19,15 @@
const int pylith::materials::PowerLaw3DElasticData::_numLocs = 2;
-const int pylith::materials::PowerLaw3DElasticData::_numProperties = 5;
+const int pylith::materials::PowerLaw3DElasticData::_numProperties = 6;
const int pylith::materials::PowerLaw3DElasticData::_numStateVars = 2;
-const int pylith::materials::PowerLaw3DElasticData::_numDBProperties = 5;
+const int pylith::materials::PowerLaw3DElasticData::_numDBProperties = 6;
const int pylith::materials::PowerLaw3DElasticData::_numDBStateVars = 12;
-const int pylith::materials::PowerLaw3DElasticData::_numPropsQuadPt = 5;
+const int pylith::materials::PowerLaw3DElasticData::_numPropsQuadPt = 6;
const int pylith::materials::PowerLaw3DElasticData::_numVarsQuadPt = 12;
@@ -47,6 +47,7 @@
1,
1,
1,
+1,
};
const int pylith::materials::PowerLaw3DElasticData::_numStateVarValues[] = {
@@ -58,7 +59,8 @@
"density",
"vs",
"vp",
-"power_law_coefficient",
+"reference_strain_rate",
+"reference_stress",
"power_law_exponent",
};
@@ -81,12 +83,14 @@
2.50000000e+03,
3.00000000e+03,
5.19615242e+03,
- 3.33333333e-19,
+ 1.00000000e-06,
+ 2.00000000e+12,
1.00000000e+00,
2.00000000e+03,
1.20000000e+03,
2.07846097e+03,
- 1.11111111e-31,
+ 1.00000000e-06,
+ 1.25992105e+08,
3.00000000e+00,
};
@@ -121,12 +125,14 @@
2.50000000e+03,
2.25000000e+10,
2.25000000e+10,
- 1.00000000e+18,
+ 1.00000000e-06,
+ 2.00000000e+12,
1.00000000e+00,
2.00000000e+03,
2.88000000e+09,
2.88000000e+09,
- 1.00000000e+10,
+ 1.00000000e-06,
+ 1.25992105e+08,
3.00000000e+00,
};
@@ -161,12 +167,14 @@
2.50000000e+00,
1.00000000e+00,
1.00000000e+00,
- 4.44444444e+07,
+ 1.00000000e-06,
+ 8.88888889e+01,
1.00000000e+00,
2.00000000e+00,
1.28000000e-01,
1.28000000e-01,
- 4.44444444e-01,
+ 1.00000000e-06,
+ 5.59964911e-03,
3.00000000e+00,
};
Modified: short/3D/PyLith/trunk/unittests/libtests/materials/data/PowerLaw3DTimeDep.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/data/PowerLaw3DTimeDep.py 2009-12-18 21:44:27 UTC (rev 16110)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/data/PowerLaw3DTimeDep.py 2009-12-23 03:23:00 UTC (rev 16111)
@@ -48,10 +48,12 @@
self.numLocs = numLocs
self.dbPropertyValues = ["density", "vs", "vp",
- "power_law_coefficient", "power_law_exponent"]
+ "reference_strain_rate", "reference_stress",
+ "power_law_exponent"]
self.propertyValues = ["density", "mu", "lambda",
- "viscosity_coefficient", "power_law_exponent"]
- self.numPropertyValues = numpy.array([1, 1, 1, 1, 1], dtype=numpy.int32)
+ "reference_strain_rate", "reference_stress",
+ "power_law_exponent"]
+ self.numPropertyValues = numpy.array([1, 1, 1, 1, 1, 1], dtype=numpy.int32)
self.dbStateVarValues = ["viscous-strain-xx",
"viscous-strain-yy",
@@ -76,6 +78,7 @@
vsA = 3000.0
vpA = vsA*3**0.5
powerLawCoeffA = 1.0/3.0e18
+ refStrainRateA = 1.0e-6
powerLawExponentA = 1.0
strainA = [1.1e-4, 1.2e-4, 1.3e-4, 1.4e-4, 1.5e-4, 1.6e-4]
initialStressA = [2.1e4, 2.2e4, 2.3e4, 2.4e4, 2.5e4, 2.6e4]
@@ -84,12 +87,14 @@
lambdaA = vpA*vpA*densityA - 2.0*muA
viscosityCoeffA = (1.0/((3.0**0.5)**(powerLawExponentA + 1.0) \
* powerLawCoeffA))**(1.0/powerLawExponentA)
+ refStressA = viscosityCoeffA * \
+ (2.0 * refStrainRateA) ** (1.0/powerLawExponentA)
-
densityB = 2000.0
vsB = 1200.0
vpB = vsB*3**0.5
powerLawCoeffB = 1.0/9.0e36
+ refStrainRateB = 1.0e-6
powerLawExponentB = 3.0
strainB = [4.1e-4, 4.2e-4, 4.3e-4, 4.4e-4, 4.5e-4, 4.6e-4]
initialStressB = [5.1e4, 5.2e4, 5.3e4, 5.4e4, 5.5e4, 5.6e4]
@@ -98,25 +103,28 @@
lambdaB = vpB*vpB*densityB - 2.0*muB
viscosityCoeffB = (1.0/((3.0**0.5)**(powerLawExponentB + 1.0) \
* powerLawCoeffB))**(1.0/powerLawExponentB)
+ refStressB = viscosityCoeffB * \
+ (2.0 * refStrainRateB) ** (1.0/powerLawExponentB)
self.lengthScale = 1.0e+3
self.pressureScale = muA
self.timeScale = 1.0
self.densityScale = 1.0e+3
- self.viscosityCoeffScaleA = \
- (self.timeScale**(1.0/powerLawExponentA)) * self.pressureScale
- self.viscosityCoeffScaleB = \
- (self.timeScale**(1.0/powerLawExponentB)) * self.pressureScale
+ self.strainRateScale = 1.0/self.timeScale
self.dbProperties = numpy.array([ [densityA, vsA, vpA, \
- powerLawCoeffA, powerLawExponentA],
+ refStrainRateA, refStressA, \
+ powerLawExponentA],
[densityB, vsB, vpB, \
- powerLawCoeffB, powerLawExponentB] ],
+ refStrainRateB, refStressB, \
+ powerLawExponentB] ],
dtype=numpy.float64)
self.properties = numpy.array([ [densityA, muA, lambdaA, \
- viscosityCoeffA, powerLawExponentA],
+ refStrainRateA, refStressA, \
+ powerLawExponentA],
[densityB, muB, lambdaB, \
- viscosityCoeffB, powerLawExponentB] ],
+ refStrainRateB, refStressB, \
+ powerLawExponentB] ],
dtype=numpy.float64)
# TEMPORARY, need to determine how to use initial state variables
@@ -126,16 +134,17 @@
mu0 = self.pressureScale
density0 = self.densityScale
time0 = self.timeScale
- viscosityCoeff0 = self.viscosityCoeffScaleA
- viscosityCoeff1 = self.viscosityCoeffScaleB
+ strainRate0 = self.strainRateScale
self.propertiesNondim = \
numpy.array([ [densityA/density0, muA/mu0, \
lambdaA/mu0, \
- viscosityCoeffA/viscosityCoeff0, \
+ refStrainRateA/strainRate0, \
+ refStressA/mu0, \
powerLawExponentA], \
[densityB/density0, muB/mu0, \
lambdaB/mu0, \
- viscosityCoeffB/viscosityCoeff1, \
+ refStrainRateB/strainRate0, \
+ refStressB/mu0, \
powerLawExponentB] ], \
dtype=numpy.float64)
@@ -175,22 +184,24 @@
(self.elasticConsts[0,:], self.stress[0,:], self.stateVarsUpdated[0,:]) = \
self._calcStress(strainA,
- muA, lambdaA, viscosityCoeffA,
+ muA, lambdaA, refStrainRateA,
+ refStressA,
powerLawExponentA,
visStrainA, stressA,
initialStressA, initialStrainA)
(self.elasticConsts[1,:], self.stress[1,:], self.stateVarsUpdated[1,:]) = \
self._calcStress(strainB,
- muB, lambdaB, viscosityCoeffB,
+ muB, lambdaB, refStrainRateB,
+ refStressB,
powerLawExponentB,
visStrainB, stressB,
initialStressB, initialStrainB)
# Use state variables to compute Maxwell times (and stable time step size).
- maxwellTimeA = self._getMaxwellTime(muA, viscosityCoeffA, \
+ maxwellTimeA = self._getMaxwellTime(muA, refStrainRateA, refStressA, \
powerLawExponentA, stressA)
- maxwellTimeB = self._getMaxwellTime(muB, viscosityCoeffB, \
+ maxwellTimeB = self._getMaxwellTime(muB, refStrainRateB, refStressB, \
powerLawExponentB, stressB)
self.dtStableImplicit = 0.1*min(maxwellTimeA, maxwellTimeB)
@@ -198,7 +209,7 @@
def _bracket(self, effStressInitialGuess, ae, b, c, d, alpha, dt, effStressT,
- powerLawExponentV, viscosityCoeffV):
+ powerLawExponentV, refStrainRateV, refStressV):
"""
Function to bracket the effective stress.
"""
@@ -216,9 +227,11 @@
x2 = 1500.0
funcValue1 = self._effStressFunc(x1, ae, b, c, d, alpha, dt,
- effStressT, powerLawExponentV, viscosityCoeffV)
+ effStressT, powerLawExponentV,
+ refStrainRateV, refStressV)
funcValue2 = self._effStressFunc(x2, ae, b, c, d, alpha, dt,
- effStressT, powerLawExponentV, viscosityCoeffV)
+ effStressT, powerLawExponentV,
+ refStrainRateV, refStressV)
iteration = 0
bracketed = False
@@ -233,14 +246,14 @@
funcValue1 = self._effStressFunc(x1, ae, b, c, d, alpha, dt,
effStressT, powerLawExponentV,
- viscosityCoeffV)
+ refStrainRateV, refStressV)
else:
x2 += bracketFactor * (x1 - x2)
x2 = max(x2, 0.0)
funcValue2 = self._effStressFunc(x2, ae, b, c, d, alpha, dt,
effStressT, powerLawExponentV,
- viscosityCoeffV)
+ refStrainRateV, refStressV)
iteration += 1
if bracketed == False:
@@ -249,10 +262,11 @@
return x1, x2
- def _getMaxwellTime(self, mu, viscosityCoeff, powerLawExponent, stress):
+ def _getMaxwellTime(self, mu, refStrainRate, refStress, powerLawExponent,
+ stress):
"""
- Compute Maxwell time from stress, viscosity coefficient, shear modulus, and
- power-law exponent.
+ Compute Maxwell time from stress, reference stress and strain rate, shear
+ modulus, and power-law exponent.
"""
meanStress = (stress[0] + stress[1] + stress[2])/3.0
devStress = numpy.array(stress, dtype=numpy.float64)
@@ -268,8 +282,8 @@
effStress = (0.5 * devStressProd)**0.5
maxwellTime = 1.0
if (effStress != 0.0):
- maxwellTime = (viscosityCoeff/effStress)**(powerLawExponent - 1.0) * \
- (viscosityCoeff/mu)
+ maxwellTime = 0.5 * (refStress/effStress)**(powerLawExponent - 1.0) * \
+ (refStress/mu)/refStrainRate
return maxwellTime
@@ -288,7 +302,7 @@
def _calcStressComponent(self, strainVal, strainComp, stressComp, strainTpdt,
- muV, lambdaV, viscosityCoeffV,
+ muV, lambdaV, refStrainRateV, refStressV,
powerLawExponentV, visStrainT, stressT,
initialStress, initialStrain):
"""
@@ -298,7 +312,8 @@
strainTest = numpy.array(strainTpdt, dtype=numpy.float64)
strainTest[strainComp] = strainVal
stressTpdt, visStrainTpdt = self._computeStress(strainTest, muV, lambdaV,
- viscosityCoeffV,
+ refStrainRateV,
+ refStressV,
powerLawExponentV,
visStrainT,
stressT,
@@ -308,15 +323,15 @@
def _effStressFunc(self, effStressTpdt, ae, b, c, d, alpha, dt, effStressT,
- powerLawExponentV, viscosityCoeffV):
+ powerLawExponentV, refStrainRateV, refStressV):
"""
Function to compute effective stress function for a given effective stress.
"""
factor1 = 1.0 - alpha
effStressTau = factor1 * effStressT + alpha * effStressTpdt
- gammaTau = 0.5 * (effStressTau/viscosityCoeffV)** \
- (powerLawExponentV - 1.0) / viscosityCoeffV
+ gammaTau = refStrainRateV * (effStressTau/refStressV)** \
+ (powerLawExponentV - 1.0) / refStressV
a = ae + alpha * dt * gammaTau
effStressFunc = a * a * effStressTpdt * effStressTpdt - b + \
c * gammaTau - d * d * gammaTau * gammaTau
@@ -324,7 +339,7 @@
return effStressFunc
- def _computeStress(self, strainTpdt, muV, lambdaV, viscosityCoeffV,
+ def _computeStress(self, strainTpdt, muV, lambdaV, refStrainRateV, refStressV,
powerLawExponentV, visStrainT, stressT,
initialStress, initialStrain):
"""
@@ -379,7 +394,7 @@
x1, x2 = self._bracket(effStressInitialGuess, ae, b, c, d, self.alpha,
self.dt, effStressT, powerLawExponentV,
- viscosityCoeffV)
+ refStrainRateV, refStressV)
# Find the root using Brent's method (from scipy)
rootTolerance = 1.0e-14
@@ -387,13 +402,13 @@
args=(ae, b, c, d, self.alpha,
self.dt, effStressT,
powerLawExponentV,
- viscosityCoeffV),
+ refStrainRateV, refStressV),
xtol=rootTolerance)
# Compute stresses from the effective stress.
effStressTau = (1.0 - self.alpha) * effStressT + self.alpha * effStressTpdt
- gammaTau = 0.5 * ((effStressTau/viscosityCoeffV)** \
- (powerLawExponentV - 1.0)) / viscosityCoeffV
+ gammaTau = refStrainRateV * ((effStressTau/refStressV)** \
+ (powerLawExponentV - 1.0)) / refStressV
factor1 = 1.0/(ae + self.alpha * self.dt * gammaTau)
factor2 = timeFac * gammaTau
devStressTpdt = 0.0
@@ -414,7 +429,7 @@
return stressTpdt, visStrainTpdt
- def _calcStress(self, strainV, muV, lambdaV, viscosityCoeffV,
+ def _calcStress(self, strainV, muV, lambdaV, refStrainRateV, refStressV,
powerLawExponentV,visStrainV, stressV,
initialStressV, initialStrainV):
"""
@@ -431,7 +446,7 @@
initialStrain = numpy.array(initialStrainV, dtype=numpy.float64)
stressTpdt, visStrainTpdt = self._computeStress(strainTpdt, muV, lambdaV,
- viscosityCoeffV,
+ refStrainRateV, refStressV,
powerLawExponentV,
visStrainT, stressT,
initialStress,
@@ -454,7 +469,7 @@
args=(strainComp,
stressComp,
strainTpdt, muV, lambdaV,
- viscosityCoeffV,
+ refStrainRateV, refStressV,
powerLawExponentV,
visStrainT,
stressT, initialStress,
Modified: short/3D/PyLith/trunk/unittests/libtests/materials/data/PowerLaw3DTimeDepData.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/data/PowerLaw3DTimeDepData.cc 2009-12-18 21:44:27 UTC (rev 16110)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/data/PowerLaw3DTimeDepData.cc 2009-12-23 03:23:00 UTC (rev 16111)
@@ -19,15 +19,15 @@
const int pylith::materials::PowerLaw3DTimeDepData::_numLocs = 2;
-const int pylith::materials::PowerLaw3DTimeDepData::_numProperties = 5;
+const int pylith::materials::PowerLaw3DTimeDepData::_numProperties = 6;
const int pylith::materials::PowerLaw3DTimeDepData::_numStateVars = 2;
-const int pylith::materials::PowerLaw3DTimeDepData::_numDBProperties = 5;
+const int pylith::materials::PowerLaw3DTimeDepData::_numDBProperties = 6;
const int pylith::materials::PowerLaw3DTimeDepData::_numDBStateVars = 12;
-const int pylith::materials::PowerLaw3DTimeDepData::_numPropsQuadPt = 5;
+const int pylith::materials::PowerLaw3DTimeDepData::_numPropsQuadPt = 6;
const int pylith::materials::PowerLaw3DTimeDepData::_numVarsQuadPt = 12;
@@ -47,6 +47,7 @@
1,
1,
1,
+1,
};
const int pylith::materials::PowerLaw3DTimeDepData::_numStateVarValues[] = {
@@ -58,7 +59,8 @@
"density",
"vs",
"vp",
-"power_law_coefficient",
+"reference_strain_rate",
+"reference_stress",
"power_law_exponent",
};
@@ -81,12 +83,14 @@
2.50000000e+03,
3.00000000e+03,
5.19615242e+03,
- 3.33333333e-19,
+ 1.00000000e-06,
+ 2.00000000e+12,
1.00000000e+00,
2.00000000e+03,
1.20000000e+03,
2.07846097e+03,
- 1.11111111e-37,
+ 1.00000000e-06,
+ 1.25992105e+10,
3.00000000e+00,
};
@@ -109,12 +113,14 @@
2.50000000e+03,
2.25000000e+10,
2.25000000e+10,
- 1.00000000e+18,
+ 1.00000000e-06,
+ 2.00000000e+12,
1.00000000e+00,
2.00000000e+03,
2.88000000e+09,
2.88000000e+09,
- 1.00000000e+12,
+ 1.00000000e-06,
+ 1.25992105e+10,
3.00000000e+00,
};
@@ -149,12 +155,14 @@
2.50000000e+00,
1.00000000e+00,
1.00000000e+00,
- 4.44444444e+07,
+ 1.00000000e-06,
+ 8.88888889e+01,
1.00000000e+00,
2.00000000e+00,
1.28000000e-01,
1.28000000e-01,
- 4.44444444e+01,
+ 1.00000000e-06,
+ 5.59964911e-01,
3.00000000e+00,
};
More information about the CIG-COMMITS
mailing list