def __init__(self): """ Constructor. """ self.availableFields = \ {'vertex': \ {'info': ["vertex info"], 'data': ["vertex data 1", "vertex data 2"]}, 'cell': \ {'info': ["cell info"], 'data': ["cell data"]}} filename = "data/twohex8.txt" from pylith.meshio.MeshIOAscii import MeshIOAscii iohandler = MeshIOAscii() iohandler.inventory.filename = filename from spatialdata.geocoords.CSCart import CSCart iohandler.inventory.coordsys = CSCart() iohandler._configure() from spatialdata.units.Nondimensional import Nondimensional normalizer = Nondimensional() normalizer._configure() mesh = iohandler.read(debug=False, interpolate=False) from pylith.topology.Fields import Fields fields = Fields(mesh) self.mesh = mesh self.fields = fields return
def _runTest(self, filenameIn, filenameOut, filenameOutE, faultGroup=None): from spatialdata.geocoords.CSCart import CSCart cs = CSCart() cs._configure() from pylith.meshio.MeshIOAscii import MeshIOAscii io = MeshIOAscii() io.inventory.filename = filenameIn io.inventory.coordsys = cs io._configure() mesh = io.read(debug=False, interpolate=True) if not faultGroup is None: from pylith.faults.FaultCohesiveKin import FaultCohesiveKin fault = FaultCohesiveKin() fault.inventory.matId = 10 fault.inventory.faultLabel = faultGroup fault._configure() nvertices = fault.numVerticesNoMesh(mesh) firstFaultVertex = 0 firstLagrangeVertex = nvertices firstFaultCell = 2*nvertices fault.adjustTopology(mesh, firstFaultVertex, firstLagrangeVertex, firstFaultCell) from pylith.topology.RefineUniform import RefineUniform refiner = RefineUniform() meshRefined = refiner.refine(mesh) return
def setUp(self): """ Setup mesh and associated field. """ from spatialdata.geocoords.CSCart import CSCart cs = CSCart() cs.inventory.spaceDim = 2 cs._configure() from spatialdata.units.Nondimensional import Nondimensional normalizer = Nondimensional() normalizer._configure() from pylith.meshio.MeshIOAscii import MeshIOAscii importer = MeshIOAscii() importer.inventory.filename = "data/tri3.mesh" importer.inventory.coordsys = cs importer._configure() self.mesh = importer.read(debug=False, interpolate=False) from pylith.topology.SolutionFields import SolutionFields fields = SolutionFields(self.mesh) fields.add("disp t+dt", "displacement") fields.solutionName("disp t+dt") solution = fields.solution() solution.newSection(solution.VERTICES_FIELD, self.mesh.dimension()) solution.allocate() solution.zero() self.fields = fields self.jacobian = Jacobian(solution) return
def _runTest(self, filenameIn, filenameOut, filenameOutE, faultGroup=None): from spatialdata.geocoords.CSCart import CSCart cs = CSCart() cs._configure() from pylith.meshio.MeshIOAscii import MeshIOAscii io = MeshIOAscii() io.inventory.filename = filenameIn io.inventory.coordsys = cs io._configure() mesh = io.read(debug=False, interpolate=True) if not faultGroup is None: from pylith.faults.FaultCohesiveKin import FaultCohesiveKin fault = FaultCohesiveKin() fault.inventory.matId = 10 fault.inventory.faultLabel = faultGroup fault._configure() nvertices = fault.numVerticesNoMesh(mesh) firstFaultVertex = 0 firstLagrangeVertex = nvertices firstFaultCell = 2 * nvertices fault.adjustTopology(mesh, firstFaultVertex, firstLagrangeVertex, firstFaultCell) from pylith.topology.RefineUniform import RefineUniform refiner = RefineUniform() meshRefined = refiner.refine(mesh) return
def setUp(self): """ Setup mesh and associated field. """ from spatialdata.geocoords.CSCart import CSCart cs = CSCart() cs.inventory.spaceDim = 2 cs._configure() from spatialdata.units.Nondimensional import Nondimensional normalizer = Nondimensional() normalizer._configure() from pylith.meshio.MeshIOAscii import MeshIOAscii importer = MeshIOAscii() importer.inventory.filename = "data/tri3.mesh" importer.inventory.coordsys = cs importer._configure() self.mesh = importer.read(debug=False, interpolate=False) self.field = Field(self.mesh) self.field.allocate() return
def setUp(self): from pylith.meshio.MeshIOAscii import MeshIOAscii iohandler = MeshIOAscii() filename = "data/twohex8.txt" from spatialdata.units.Nondimensional import Nondimensional normalizer = Nondimensional() normalizer._configure() from spatialdata.geocoords.CSCart import CSCart iohandler.inventory.filename = filename iohandler.inventory.coordsys = CSCart() iohandler._configure() mesh = iohandler.read(debug=False, interpolate=False) from pylith.topology.SolutionFields import SolutionFields fields = SolutionFields(mesh) name = "disp(t)" fields.add(name, "displacement") fields.solutionName(name) field = fields.get(name) field.subfieldAdd("displacement", mesh.dimension(), field.VECTOR) field.subfieldsSetup() field.newSection(field.VERTICES_FIELD, mesh.dimension()) field.allocate() self.mesh = mesh self.fields = fields self.normalizer = normalizer return
def test_preinitialize(self): """ Test preinitialize(). WARNING: This is not a rigorous test of initialize() because we don't verify the results. """ from pylith.feassemble.FIATSimplex import FIATSimplex cell = FIATSimplex() cell.inventory.dimension = 2 cell.inventory.order = 1 cell.inventory.degree = 1 cell._configure() from pylith.feassemble.Quadrature import Quadrature quadrature = Quadrature() quadrature.inventory.cell = cell quadrature.inventory.minJacobian = 1.0e-4 quadrature._configure() from spatialdata.spatialdb.SimpleDB import SimpleDB from spatialdata.spatialdb.SimpleIOAscii import SimpleIOAscii iohandler = SimpleIOAscii() iohandler.inventory.filename = "data/matinitialize.spatialdb" iohandler._configure() db = SimpleDB() db.inventory.label = "material properties" db.inventory.iohandler = iohandler db._configure() from pylith.materials.ElasticPlaneStrain import ElasticPlaneStrain material = ElasticPlaneStrain() material.inventory.quadrature = quadrature material.inventory.dbProperties = db material.inventory.label = "my material" material.inventory.id = 54 material._configure() from spatialdata.geocoords.CSCart import CSCart cs = CSCart() cs.inventory.spaceDim = 2 cs._configure() from spatialdata.units.Nondimensional import Nondimensional normalizer = Nondimensional() normalizer._configure() from pylith.meshio.MeshIOAscii import MeshIOAscii importer = MeshIOAscii() importer.inventory.filename = "data/twoelems.mesh" importer.inventory.coordsys = cs importer._configure() mesh = importer.read(debug=False, interpolate=False) material.preinitialize(mesh) # No test of result. return
def _preinitialize(self): """ Setup mesh and integrator and preinitialize integrator. """ from spatialdata.units.Nondimensional import Nondimensional normalizer = Nondimensional() normalizer._configure() # Setup mesh cs = CSCart() cs.inventory.spaceDim = 2 cs._configure() from pylith.meshio.MeshIOAscii import MeshIOAscii importer = MeshIOAscii() importer.inventory.filename = "data/tri3.mesh" importer.inventory.coordsys = cs importer._configure() mesh = importer.read(debug=False, interpolate=False) # Setup material from pylith.feassemble.FIATSimplex import FIATSimplex cell = FIATSimplex() cell.inventory.dimension = 2 cell.inventory.degree = 1 cell.inventory.order = 1 cell._configure() from pylith.feassemble.Quadrature import Quadrature quadrature = Quadrature() quadrature.inventory.cell = cell quadrature._configure() from spatialdata.spatialdb.SimpleDB import SimpleDB from spatialdata.spatialdb.SimpleIOAscii import SimpleIOAscii iohandler = SimpleIOAscii() iohandler.inventory.filename = "data/elasticplanestrain.spatialdb" iohandler._configure() db = SimpleDB() db.inventory.label = "elastic plane strain" db.inventory.iohandler = iohandler db._configure() from pylith.materials.ElasticPlaneStrain import ElasticPlaneStrain material = ElasticPlaneStrain() material.inventory.label = "elastic plane strain" material.inventory.id = 0 material.inventory.dbProperties = db material.inventory.quadrature = quadrature material._configure() from pylith.meshio.OutputMatElastic import OutputMatElastic material.output = OutputMatElastic() material.output._configure() material.output.writer._configure() # Setup integrator integrator = ElasticityImplicitLgDeform() integrator.preinitialize(mesh, material) return (mesh, integrator)
def test_filename(self): """ Test filename(). """ value = "hi.txt" io = MeshIOAscii() io.filename(value) self.assertEqual(value, io.filename()) return
def test_readwrite(self): """ Test write() and read(). """ filenameIn = "data/mesh2Din3D.txt" filenameOut = "data/mesh2Din3D_test.txt" from spatialdata.geocoords.CSCart import CSCart cs = CSCart() cs._configure() io = MeshIOAscii() io.inventory.filename = filenameIn io.inventory.coordsys = cs io._configure() from spatialdata.units.Nondimensional import Nondimensional normalizer = Nondimensional() mesh = io.read(debug=False, interpolate=True) io.filename(filenameOut) io.write(mesh) fileE = open(filenameIn, "r") linesE = fileE.readlines() fileE.close() fileT = open(filenameOut, "r") linesT = fileT.readlines() fileT.close() self.assertEqual(len(linesE), len(linesT)) for (lineE, lineT) in zip(linesE, linesT): self.assertEqual(lineE, lineT) return
def _initialize(self): """ Initialize DirichletBoundary boundary condition. """ from spatialdata.geocoords.CSCart import CSCart cs = CSCart() cs.inventory.spaceDim = 2 cs._configure() from spatialdata.units.Nondimensional import Nondimensional normalizer = Nondimensional() normalizer._configure() from pylith.meshio.MeshIOAscii import MeshIOAscii importer = MeshIOAscii() importer.inventory.filename = "data/tri3.mesh" importer.inventory.coordsys = cs importer._configure() mesh = importer.read(debug=False, interpolate=False) from spatialdata.spatialdb.SimpleDB import SimpleDB db = SimpleDB() db.inventory.label = "TestDirichletBoundary tri3" db.inventory.iohandler.inventory.filename = "data/tri3_disp.spatialdb" db.inventory.iohandler._configure() db._configure() from spatialdata.spatialdb.SimpleDB import SimpleDB dbRate = SimpleDB() dbRate.inventory.label = "TestDirichletBoundary tri3" dbRate.inventory.iohandler.inventory.filename = "data/tri3_vel.spatialdb" dbRate.inventory.iohandler._configure() dbRate._configure() from pylith.bc.DirichletBoundary import DirichletBoundary bc = DirichletBoundary() bc.inventory.output._configure() bc.inventory.output.writer._configure() bc.inventory.label = "bc" bc.inventory.bcDOF = [1] bc.inventory.dbInitial = db bc.inventory.dbRate = dbRate bc._configure() bc.preinitialize(mesh) bc.initialize(totalTime=0.0, numTimeSteps=1, normalizer=normalizer) # Setup field from pylith.topology.Field import Field field = Field(mesh) field.newSection(field.VERTICES_FIELD, cs.spaceDim()) return (mesh, bc, field)
def _getMesh(self): """ Get mesh from file. """ from spatialdata.geocoords.CSCart import CSCart cs = CSCart() cs.inventory.spaceDim = 2 cs._configure() from spatialdata.units.Nondimensional import Nondimensional normalizer = Nondimensional() normalizer._configure() from pylith.meshio.MeshIOAscii import MeshIOAscii importer = MeshIOAscii() importer.inventory.filename = "data/tri3.mesh" importer.inventory.coordsys = cs importer._configure() mesh = importer.read(debug=False, interpolate=False) return mesh
def setUp(self): """ Setup mesh and associated field. """ from spatialdata.geocoords.CSCart import CSCart cs = CSCart() cs.inventory.spaceDim = 2 cs._configure() from spatialdata.units.Nondimensional import Nondimensional normalizer = Nondimensional() normalizer._configure() from pylith.meshio.MeshIOAscii import MeshIOAscii importer = MeshIOAscii() importer.inventory.filename = "data/tri3.mesh" importer.inventory.coordsys = cs importer._configure() self.mesh = importer.read(debug=False, interpolate=False) self.fields = Fields(self.mesh) return
def test_adjustTopology(self): """ Test adjustTopology(). WARNING: This is not a rigorous test of adjustTopology() because we neither set the input fields or verify the results. """ cs = CSCart() cs.inventory.spaceDim = 2 cs._configure() from spatialdata.units.Nondimensional import Nondimensional normalizer = Nondimensional() normalizer._configure() from pylith.meshio.MeshIOAscii import MeshIOAscii importer = MeshIOAscii() importer.inventory.filename = "data/tri3.mesh" importer.inventory.coordsys = cs importer._configure() mesh = importer.read(debug=False, interpolate=False) fault = FaultCohesiveKin() fault.inventory.matId = 10 fault.inventory.faultLabel = "fault" fault.inventory.faultEdge = "fault_edge" fault._configure() nvertices = fault.numVerticesNoMesh(mesh) firstFaultVertex = 0 firstLagrangeVertex = nvertices firstFaultCell = 2*nvertices fault.adjustTopology(mesh, firstFaultVertex, firstLagrangeVertex, firstFaultCell) # We should really add something here to check to make sure things # actually initialized correctly return
def test_readwrite(self): """ Test read(). """ filenameGmvIn = "data/cube2_ascii.gmv" filenamePsetIn = "data/cube2_ascii.pset" filenameOut = "data/cube2_test.txt" filenameE = "data/cube2.txt" from spatialdata.geocoords.CSCart import CSCart cs = CSCart() cs._configure() # For now, we only test reading the file. We would like to write # the file and compare against the original. io = MeshIOLagrit() io.inventory.filenameGmv = filenameGmvIn io.inventory.filenamePset = filenamePsetIn io._configure() from spatialdata.units.Nondimensional import Nondimensional normalizer = Nondimensional() mesh = io.read(debug=False, interpolate=True) testhandler = MeshIOAscii() testhandler.filename(filenameOut) testhandler.coordsys = cs testhandler.write(mesh) fileE = open(filenameE, "r") linesE = fileE.readlines() fileE.close() fileT = open(filenameOut, "r") linesT = fileT.readlines() fileT.close() self.assertEqual(len(linesE), len(linesT)) for (lineE, lineT) in zip(linesE, linesT): self.assertEqual(lineE, lineT) return
def test_readwrite(self): """ Test read(). """ filenameIn = "data/twohex8.exo" filenameOut = "data/twohex8_test.txt" filenameE = "data/twohex8.txt" from spatialdata.geocoords.CSCart import CSCart cs = CSCart() cs._configure() # For now, we only test reading the file. io = MeshIOCubit() io.inventory.filename = filenameIn io.inventory.useNames = False io._configure() from spatialdata.units.Nondimensional import Nondimensional normalizer = Nondimensional() mesh = io.read(debug=False, interpolate=True) testhandler = MeshIOAscii() testhandler.filename(filenameOut) testhandler.coordsys = cs testhandler.write(mesh) fileE = open(filenameE, "r") linesE = fileE.readlines() fileE.close() fileT = open(filenameOut, "r") linesT = fileT.readlines() fileT.close() self.assertEqual(len(linesE), len(linesT)) for (lineE, lineT) in zip(linesE, linesT): self.assertEqual(lineE, lineT) return
def test_readwrite(self): """ Test read(). """ filenameIn = "data/twohex8.exo" filenameOut = "data/twohex8_test.txt" filenameE = "data/twohex8.txt" from spatialdata.geocoords.CSCart import CSCart cs = CSCart() cs._configure() # For now, we only test reading the file. io = MeshIOCubit() io.inventory.filename = filenameIn io.inventory.useNames = False io._configure() from spatialdata.units.Nondimensional import Nondimensional normalizer = Nondimensional() mesh = io.read(debug=False, interpolate=False) testhandler = MeshIOAscii() testhandler.filename(filenameOut) testhandler.coordsys = cs testhandler.write(mesh) fileE = open(filenameE, "r") linesE = fileE.readlines() fileE.close() fileT = open(filenameOut, "r") linesT = fileT.readlines() fileT.close() self.assertEqual(len(linesE), len(linesT)) for (lineE, lineT) in zip(linesE, linesT): self.assertEqual(lineE, lineT) return
if len(sys.argv) != 2: raise ValueError("usage: exotoascii.py EXODUS_MESH") filenameEXO = sys.argv[1] filenameASCII = filenameEXO.replace(".exo", ".mesh") from pylith.meshio.MeshIOAscii import MeshIOAscii from pylith.meshio.MeshIOCubit import MeshIOCubit import pylith.utils.petsc as petsc petsc.initialize(sys.argv) cubit = MeshIOCubit() cubit.inventory.filename = filenameEXO cubit._configure() mesh = cubit.read(debug=False, interpolate=True) ascii = MeshIOAscii() ascii.inventory.filename = filenameASCII ascii._configure() ascii.write(mesh) del cubit del ascii del mesh petsc.finalize() # End of file
def _initialize(self): """ Initialize AbsorbingDampers boundary condition. """ from spatialdata.spatialdb.SimpleDB import SimpleDB db = SimpleDB() db.inventory.label = "TestAbsorbingDampers tri3" db.inventory.iohandler.inventory.filename = \ "data/elasticplanestrain.spatialdb" db.inventory.iohandler._configure() db._configure() from pylith.feassemble.FIATSimplex import FIATSimplex cell = FIATSimplex() cell.inventory.dimension = 1 cell.inventory.degree = 1 cell.inventory.order = 1 cell._configure() from pylith.feassemble.Quadrature import Quadrature quadrature = Quadrature() quadrature.inventory.cell = cell quadrature._configure() from pylith.bc.AbsorbingDampers import AbsorbingDampers bc = AbsorbingDampers() bc.inventory.quadrature = quadrature bc.inventory.db = db bc.inventory.id = 0 bc.inventory.label = "bc" bc._configure() from spatialdata.geocoords.CSCart import CSCart cs = CSCart() cs.inventory.spaceDim = 2 cs._configure() from spatialdata.units.Nondimensional import Nondimensional normalizer = Nondimensional() normalizer._configure() from pylith.meshio.MeshIOAscii import MeshIOAscii importer = MeshIOAscii() importer.inventory.filename = "data/tri3.mesh" importer.inventory.coordsys = cs importer._configure() mesh = importer.read(debug=False, interpolate=False) bc.preinitialize(mesh) bc.initialize(totalTime=0.0, numTimeSteps=1, normalizer=normalizer) bc.timeStep(0.01) # Setup fields from pylith.topology.SolutionFields import SolutionFields fields = SolutionFields(mesh) fields.add("residual", "residual") fields.add("dispIncr(t->t+dt)", "displacement") fields.add("disp(t)", "displacement") fields.add("disp(t-dt)", "displacement") fields.add("velocity(t)", "velocity") fields.solutionName("dispIncr(t->t+dt)") residual = fields.get("residual") residual.newSection(residual.VERTICES_FIELD, cs.spaceDim()) residual.allocate() residual.zero() fields.copyLayout("residual") return (mesh, bc, fields)
def _initialize(self): """ Initialize fault. """ dt = 2.4 from spatialdata.units.Nondimensional import Nondimensional normalizer = Nondimensional() normalizer._configure() # Setup mesh cs = CSCart() cs.inventory.spaceDim = 2 cs._configure() from pylith.meshio.MeshIOAscii import MeshIOAscii importer = MeshIOAscii() importer.inventory.filename = "data/tri3.mesh" importer.inventory.coordsys = cs importer._configure() mesh = importer.read(debug=False, interpolate=False) # Setup quadrature from pylith.feassemble.FIATSimplex import FIATSimplex cell = FIATSimplex() cell.inventory.dimension = 1 cell.inventory.degree = 1 cell.inventory.order = 1 cell._configure() from pylith.feassemble.Quadrature import Quadrature quadrature = Quadrature() quadrature.inventory.cell = cell quadrature._configure() # Setup impulses from spatialdata.spatialdb.SimpleDB import SimpleDB from spatialdata.spatialdb.SimpleIOAscii import SimpleIOAscii ioImpulseAmp = SimpleIOAscii() ioImpulseAmp.inventory.filename = "data/tri3_impulses.spatialdb" ioImpulseAmp._configure() dbImpulseAmp = SimpleDB() dbImpulseAmp.inventory.iohandler = ioImpulseAmp dbImpulseAmp.inventory.label = "impulse amplitude" dbImpulseAmp._configure() # Setup fault fault = FaultCohesiveImpulses() fault.inventory.output.inventory.writer._configure() fault.inventory.output._configure() fault.inventory.matId = 10 fault.inventory.faultLabel = "fault" fault.inventory.upDir = [0, 0, 1] fault.inventory.faultQuadrature = quadrature fault.inventory.dbImpulseAmp = dbImpulseAmp fault._configure() nvertices = fault.numVerticesNoMesh(mesh) firstFaultVertex = 0 firstLagrangeVertex = nvertices firstFaultCell = 2*nvertices fault.adjustTopology(mesh, firstFaultVertex, firstLagrangeVertex, firstFaultCell) fault.preinitialize(mesh) fault.timeStep(dt) fault.verifyConfiguration() from pyre.units.time import s fault.initialize(totalTime=0.0*s, numTimeSteps=1, normalizer=normalizer) # Setup fields from pylith.topology.SolutionFields import SolutionFields fields = SolutionFields(mesh) fields.add("residual", "residual") fields.add("dispIncr(t->t+dt)", "displacement_increment") fields.add("disp(t)", "displacement") fields.solutionName("dispIncr(t->t+dt)") residual = fields.get("residual") residual.newSection(residual.VERTICES_FIELD, cs.spaceDim()) residual.allocate() residual.zero() fields.copyLayout("residual") return (mesh, fault, fields)
def _initialize(self): """ Initialize fault. """ dt = 2.4 from spatialdata.units.Nondimensional import Nondimensional normalizer = Nondimensional() normalizer._configure() # Setup mesh cs = CSCart() cs.inventory.spaceDim = 2 cs._configure() from pylith.meshio.MeshIOAscii import MeshIOAscii importer = MeshIOAscii() importer.inventory.filename = "data/tri3.mesh" importer.inventory.coordsys = cs importer._configure() mesh = importer.read(debug=False, interpolate=False) # Setup quadrature from pylith.feassemble.FIATSimplex import FIATSimplex cell = FIATSimplex() cell.inventory.dimension = 1 cell.inventory.degree = 1 cell.inventory.order = 1 cell._configure() from pylith.feassemble.Quadrature import Quadrature quadrature = Quadrature() quadrature.inventory.cell = cell quadrature._configure() # Setup earthquake source from spatialdata.spatialdb.SimpleDB import SimpleDB from spatialdata.spatialdb.SimpleIOAscii import SimpleIOAscii ioFinalSlip = SimpleIOAscii() ioFinalSlip.inventory.filename = "data/tri3_finalslip.spatialdb" ioFinalSlip._configure() dbFinalSlip = SimpleDB() dbFinalSlip.inventory.iohandler = ioFinalSlip dbFinalSlip.inventory.label = "final slip" dbFinalSlip._configure() ioSlipTime = SimpleIOAscii() ioSlipTime.inventory.filename = "data/tri3_sliptime.spatialdb" ioSlipTime._configure() dbSlipTime = SimpleDB() dbSlipTime.inventory.iohandler = ioSlipTime dbSlipTime.inventory.label = "slip time" dbSlipTime._configure() from pylith.faults.StepSlipFn import StepSlipFn slipfn = StepSlipFn() slipfn.inventory.dbSlip = dbFinalSlip slipfn.inventory.dbSlipTime = dbSlipTime slipfn._configure() # Setup fault fault = FaultCohesiveKin() fault.inventory.output.inventory.writer._configure() fault.inventory.output._configure() fault.inventory.matId = 10 fault.inventory.faultLabel = "fault" fault.inventory.upDir = [0, 0, 1] fault.inventory.faultQuadrature = quadrature fault._configure() eqsrc = fault.eqsrcs.components()[0] eqsrc.inventory.originTime = 1.23*second eqsrc.inventory.slipfn = slipfn eqsrc._configure() nvertices = fault.numVerticesNoMesh(mesh) firstFaultVertex = 0 firstLagrangeVertex = nvertices firstFaultCell = 2*nvertices fault.adjustTopology(mesh, firstFaultVertex, firstLagrangeVertex, firstFaultCell) fault.preinitialize(mesh) fault.timeStep(dt) fault.verifyConfiguration() from pyre.units.time import s fault.initialize(totalTime=0.0*s, numTimeSteps=1, normalizer=normalizer) # Setup fields from pylith.topology.SolutionFields import SolutionFields fields = SolutionFields(mesh) fields.add("residual", "residual") fields.add("dispIncr(t->t+dt)", "displacement_increment") fields.add("disp(t)", "displacement") fields.solutionName("dispIncr(t->t+dt)") residual = fields.get("residual") residual.subfieldAdd("displacement", cs.spaceDim(), residual.VECTOR) residual.subfieldAdd("lagrange_multiplier", cs.spaceDim(), residual.VECTOR) residual.subfieldsSetup() residual.setupSolnChart() residual.setupSolnDof(cs.spaceDim()) fault.setupSolnDof(residual) residual.allocate() residual.zero() fields.copyLayout("residual") return (mesh, fault, fields)
def _initialize(self): """ Initialize fault. """ dt = 2.4 from spatialdata.units.Nondimensional import Nondimensional normalizer = Nondimensional() normalizer._configure() # Setup mesh cs = CSCart() cs.inventory.spaceDim = 2 cs._configure() from pylith.meshio.MeshIOAscii import MeshIOAscii importer = MeshIOAscii() importer.inventory.filename = "data/tri3.mesh" importer.inventory.coordsys = cs importer._configure() mesh = importer.read(debug=False, interpolate=False) # Setup quadrature from pylith.feassemble.FIATSimplex import FIATSimplex cell = FIATSimplex() cell.inventory.dimension = 1 cell.inventory.degree = 1 cell.inventory.order = 1 cell._configure() from pylith.feassemble.Quadrature import Quadrature quadrature = Quadrature() quadrature.inventory.cell = cell quadrature._configure() # Setup impulses from spatialdata.spatialdb.SimpleDB import SimpleDB from spatialdata.spatialdb.SimpleIOAscii import SimpleIOAscii ioImpulseAmp = SimpleIOAscii() ioImpulseAmp.inventory.filename = "data/tri3_impulses.spatialdb" ioImpulseAmp._configure() dbImpulseAmp = SimpleDB() dbImpulseAmp.inventory.iohandler = ioImpulseAmp dbImpulseAmp.inventory.label = "impulse amplitude" dbImpulseAmp._configure() # Setup fault fault = FaultCohesiveImpulses() fault.inventory.output.inventory.writer._configure() fault.inventory.output._configure() fault.inventory.matId = 10 fault.inventory.faultLabel = "fault" fault.inventory.upDir = [0, 0, 1] fault.inventory.faultQuadrature = quadrature fault.inventory.dbImpulseAmp = dbImpulseAmp fault._configure() nvertices = fault.numVerticesNoMesh(mesh) firstFaultVertex = 0 firstLagrangeVertex = nvertices firstFaultCell = 2*nvertices fault.adjustTopology(mesh, firstFaultVertex, firstLagrangeVertex, firstFaultCell) fault.preinitialize(mesh) fault.timeStep(dt) fault.verifyConfiguration() from pyre.units.time import s fault.initialize(totalTime=0.0*s, numTimeSteps=1, normalizer=normalizer) # Setup fields from pylith.topology.SolutionFields import SolutionFields fields = SolutionFields(mesh) fields.add("residual", "residual") fields.add("dispIncr(t->t+dt)", "displacement_increment") fields.add("disp(t)", "displacement") fields.solutionName("dispIncr(t->t+dt)") residual = fields.get("residual") residual.subfieldAdd("displacement", cs.spaceDim(), residual.VECTOR) residual.subfieldAdd("lagrange_multiplier", cs.spaceDim(), residual.VECTOR) residual.subfieldsSetup() residual.setupSolnChart() residual.setupSolnDof(cs.spaceDim()) fault.setupSolnDof(residual) residual.allocate() residual.zero() fields.copyLayout("residual") return (mesh, fault, fields)
def test_constructor(self): """ Test constructor. """ io = MeshIOAscii() return
def _initialize(self): """ Initialize fault. """ dt = 2.4 from spatialdata.units.Nondimensional import Nondimensional normalizer = Nondimensional() normalizer._configure() # Setup mesh cs = CSCart() cs.inventory.spaceDim = 2 cs._configure() from pylith.meshio.MeshIOAscii import MeshIOAscii importer = MeshIOAscii() importer.inventory.filename = "data/tri3.mesh" importer.inventory.coordsys = cs importer._configure() mesh = importer.read(debug=False, interpolate=False) # Setup quadrature from pylith.feassemble.FIATSimplex import FIATSimplex cell = FIATSimplex() cell.inventory.dimension = 1 cell.inventory.degree = 1 cell.inventory.order = 1 cell._configure() from pylith.feassemble.Quadrature import Quadrature quadrature = Quadrature() quadrature.inventory.cell = cell quadrature._configure() # Setup rupture info from spatialdata.spatialdb.SimpleDB import SimpleDB from spatialdata.spatialdb.SimpleIOAscii import SimpleIOAscii ioTractions = SimpleIOAscii() ioTractions.inventory.filename = "data/tri3_initialtractions.spatialdb" ioTractions._configure() dbTractions = SimpleDB() dbTractions.inventory.iohandler = ioTractions dbTractions.inventory.label = "initial tractions" dbTractions._configure() from pylith.faults.TractPerturbation import TractPerturbation tract = TractPerturbation() tract.inventory.dbInitial = dbTractions tract._configure() ioFriction = SimpleIOAscii() ioFriction.inventory.filename = "data/tri3_staticfriction.spatialdb" ioFriction._configure() dbFriction = SimpleDB() dbFriction.inventory.iohandler = ioFriction dbFriction.inventory.label = "friction" dbFriction._configure() from pylith.friction.StaticFriction import StaticFriction friction = StaticFriction() friction.inventory.label = "Static friction" friction.inventory.dbProperties = dbFriction friction._configure() # Setup fault fault = FaultCohesiveDyn() fault.inventory.output.inventory.writer._configure() fault.inventory.output._configure() fault.inventory.matId = 10 fault.inventory.faultLabel = "fault" fault.inventory.upDir = [0, 0, 1] fault.inventory.faultQuadrature = quadrature fault.inventory.tract = tract fault.inventory.friction = friction fault._configure() nvertices = fault.numVerticesNoMesh(mesh) firstFaultVertex = 0 firstLagrangeVertex = nvertices firstFaultCell = 2*nvertices fault.adjustTopology(mesh, firstFaultVertex, firstLagrangeVertex, firstFaultCell) from pylith.topology.topology import MeshOps_nondimensionalize MeshOps_nondimensionalize(mesh, normalizer) fault.preinitialize(mesh) fault.timeStep(dt) fault.verifyConfiguration() from pyre.units.time import s fault.initialize(totalTime=0.0*s, numTimeSteps=1, normalizer=normalizer) # Setup fields from pylith.topology.SolutionFields import SolutionFields fields = SolutionFields(mesh) fields.add("residual", "residual") fields.add("dispIncr(t->t+dt)", "displacement_increment") fields.add("disp(t)", "displacement") fields.add("velocity(t)", "velocity") fields.solutionName("dispIncr(t->t+dt)") residual = fields.get("residual") residual.subfieldAdd("displacement", cs.spaceDim(), residual.VECTOR) residual.subfieldAdd("lagrange_multiplier", cs.spaceDim(), residual.VECTOR) residual.subfieldsSetup() residual.setupSolnChart() residual.setupSolnDof(cs.spaceDim()) fault.setupSolnDof(residual) residual.allocate() residual.zero() fields.copyLayout("residual") return (mesh, fault, fields)