[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