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 test_initialize(self): from spatialdata.geocoords.CSCart import CSCart cs = CSCart() cs.inventory.units = "km" cs.inventory.spaceDim = 2 cs._configure() cs.initialize() self.assertEqual(1.0e+3, cs.toMeters()) self.assertEqual(2, cs.spaceDim()) return
def test_coordsys(self): """ Test coordsys(). """ from spatialdata.geocoords.CSCart import CSCart cs = CSCart() cs.inventory.spaceDim = 2 cs._configure() mesh = Mesh() mesh.coordsys(cs) self.assertEqual(cs.spaceDim(), mesh.coordsys().spaceDim()) return
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 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)
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 _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.newSection(residual.VERTICES_FIELD, cs.spaceDim()) residual.allocate() residual.zero() fields.copyLayout("residual") return (mesh, fault, fields)