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 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 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 _initialize(self, mesh, integrator): """ Initialize integrator. """ dt = 2.3 from spatialdata.units.Nondimensional import Nondimensional normalizer = Nondimensional() normalizer._configure() from pyre.units.time import s integrator.initialize(totalTime=0.0*s, numTimeSteps=1, normalizer=normalizer) integrator.timeStep(dt) # Setup fields from pylith.topology.SolutionFields import SolutionFields fields = SolutionFields(mesh) fields.add("residual", "residual") fields.add("disp(t+dt)", "displacement") fields.add("disp(t)", "displacement") fields.add("disp(t-dt)", "displacement") fields.add("velocity(t)", "velocity") fields.add("acceleration(t)", "acceleration") fields.solutionName("disp(t+dt)") residual = fields.get("residual") residual.newSection(residual.VERTICES_FIELD, mesh.coordsys().spaceDim()) residual.allocate() fields.copyLayout("residual") residual.zero() return fields
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 _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_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 test_temperatureScale(self): dim = Nondimensional() dim._configure() dim.setTemperatureScale(2.0 * kelvin) self.assertEqual(1.0 * meter, dim.getLengthScale()) self.assertEqual(1.0 * pascal, dim.getPressureScale()) self.assertEqual(1.0 * second, dim.getTimeScale()) self.assertEqual(2.0 * kelvin, dim.getTemperatureScale())
def test_dimensionalize(self): dim = Nondimensional() dim._configure() scale = 8.0 * meter value = 0.25 valueE = 2.0 * meter self.assertEqual(valueE, dim.dimensionalize(value, scale))
def test_densityScale(self): dim = Nondimensional() dim._configure() dim.setDensityScale(2.0 * kilogram / meter**3) self.assertEqual(1.0 * meter, dim.getLengthScale()) self.assertEqual(1.0 * pascal, dim.getPressureScale()) self.assertEqual(1.0 * second, dim.getTimeScale()) self.assertEqual(2.0 * kilogram / meter**3, dim.getDensityScale())
def test_dimensionalize(self): dim = Nondimensional() dim._configure() scale = 8.0*meter value = 0.25 valueE = 2.0*meter self.assertEqual(valueE, dim.dimensionalize(value, scale)) return
def test_timeScale(self): dim = Nondimensional() dim._configure() dim.setTimeScale(2.0 * second) self.assertEqual(1.0 * meter, dim.lengthScale()) self.assertEqual(1.0 * pascal, dim.pressureScale()) self.assertEqual(2.0 * second, dim.timeScale()) self.assertEqual(1.0 * kilogram / meter**3, dim.densityScale()) 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 testNormalizer(self): """ Test normalizer(). """ from spatialdata.units.Nondimensional import Nondimensional normalizer = Nondimensional() normalizer._configure() self.material.normalizer(normalizer) # No test of result. return
def setUp(self): from spatialdata.units.Nondimensional import Nondimensional normalizer = Nondimensional() normalizer._configure() normalizer.setTimeScale(2.0*second) tstep = TimeStep() tstep._configure() tstep.preinitialize() tstep.initialize(normalizer) self.tstep = tstep return
def test_constructor(self): dim = Nondimensional() dim._configure() self.assertEqual(1.0 * meter, dim.getLengthScale()) self.assertEqual(1.0 * pascal, dim.getPressureScale()) self.assertEqual(1.0 * second, dim.getTimeScale()) self.assertEqual(1.0 * kilogram / meter**3, dim.getDensityScale()) self.assertEqual(1.0 * kelvin, dim.getTemperatureScale())
def setUp(self): from spatialdata.units.Nondimensional import Nondimensional normalizer = Nondimensional() normalizer._configure() normalizer.setTimeScale(0.5*year) tstep = TimeStepUser() tstep._configure() tstep.filename = "data/timesteps.txt" tstep.preinitialize() tstep.initialize(normalizer) self.tstep = tstep return
def test_densityScale(self): dim = Nondimensional() dim._configure() dim.setDensityScale(2.0*kilogram/meter**3) self.assertEqual(1.0*meter, dim.lengthScale()) self.assertEqual(1.0*pascal, dim.pressureScale()) self.assertEqual(1.0*second, dim.timeScale()) self.assertEqual(2.0*kilogram/meter**3, dim.densityScale()) return
def test_temperatureScale(self): dim = Nondimensional() dim._configure() dim.setTemperatureScale(2.0*kelvin) self.assertEqual(1.0*meter, dim.lengthScale()) self.assertEqual(1.0*pascal, dim.pressureScale()) self.assertEqual(1.0*second, dim.timeScale()) self.assertEqual(2.0*kelvin, dim.temperatureScale()) return
def setUp(self): """ Setup time step object. """ normalizer = Nondimensional() normalizer._configure() tstep = TimeStepUniform() tstep._configure() tstep.preinitialize() tstep.verifyConfiguration() tstep.initialize(normalizer) self.tstep = tstep 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 test_constructor(self): dim = Nondimensional() dim._configure() self.assertEqual(1.0*meter, dim.lengthScale()) self.assertEqual(1.0*pascal, dim.pressureScale()) self.assertEqual(1.0*second, dim.timeScale()) self.assertEqual(1.0*kilogram/meter**3, dim.densityScale()) self.assertEqual(1.0*kelvin, dim.temperatureScale()) return
def _initialize(self, mesh, integrator): """ Initialize integrator. """ dt = 2.3 from spatialdata.units.Nondimensional import Nondimensional normalizer = Nondimensional() normalizer._configure() from pyre.units.time import s integrator.initialize(totalTime=0.0 * s, numTimeSteps=1, normalizer=normalizer) integrator.timeStep(dt) # Setup fields from pylith.topology.SolutionFields import SolutionFields fields = SolutionFields(mesh) fields.add("residual", "residual") fields.add("disp(t+dt)", "displacement") fields.add("disp(t)", "displacement") fields.add("disp(t-dt)", "displacement") fields.add("velocity(t)", "velocity") fields.add("acceleration(t)", "acceleration") fields.solutionName("disp(t+dt)") residual = fields.get("residual") spaceDim = mesh.coordsys().spaceDim() lengthScale = normalizer.lengthScale() residual.subfieldAdd("displacement", spaceDim, residual.VECTOR, lengthScale.value) residual.subfieldAdd("lagrange_multiplier", spaceDim, residual.VECTOR) residual.subfieldsSetup() residual.setupSolnChart() residual.setupSolnDof(spaceDim) residual.allocate() residual.zeroAll() fields.copyLayout("residual") return fields
def test_initialize(self): """ Test constructor. """ filter = DataWriterHDF5Ext() filter._configure() from spatialdata.units.Nondimensional import Nondimensional normalizer = Nondimensional() filter.initialize(normalizer) return
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 _initialize(self, mesh, integrator): """ Initialize integrator. """ dt = 2.3 from spatialdata.units.Nondimensional import Nondimensional normalizer = Nondimensional() normalizer._configure() from pyre.units.time import s integrator.initialize(totalTime=0.0*s, numTimeSteps=1, normalizer=normalizer) integrator.timeStep(dt) # Setup fields from pylith.topology.SolutionFields import SolutionFields fields = SolutionFields(mesh) fields.add("residual", "residual") fields.add("disp(t+dt)", "displacement") fields.add("disp(t)", "displacement") fields.add("disp(t-dt)", "displacement") fields.add("velocity(t)", "velocity") fields.add("acceleration(t)", "acceleration") fields.solutionName("disp(t+dt)") residual = fields.get("residual") spaceDim = mesh.coordsys().spaceDim() lengthScale = normalizer.lengthScale() residual.subfieldAdd("displacement", spaceDim, residual.VECTOR, lengthScale.value); residual.subfieldAdd("lagrange_multiplier", spaceDim, residual.VECTOR); residual.subfieldsSetup(); residual.setupSolnChart(); residual.setupSolnDof(spaceDim); residual.allocate(); residual.zeroAll(); fields.copyLayout("residual") return fields
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 setUp(self): from spatialdata.units.Nondimensional import Nondimensional normalizer = Nondimensional() normalizer._configure() normalizer.setTimeScale(2.0 * second) tstep = TimeStepAdapt() tstep._configure() tstep.preinitialize() tstep.initialize(normalizer) self.tstep = tstep return
def setUp(self): from spatialdata.units.Nondimensional import Nondimensional normalizer = Nondimensional() normalizer._configure() normalizer.setTimeScale(0.5 * year) tstep = TimeStepUser() tstep._configure() tstep.filename = "data/timesteps.txt" tstep.preinitialize() tstep.initialize(normalizer) self.tstep = tstep 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 _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 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 setUp(self): from spatialdata.units.Nondimensional import Nondimensional self.normalizer = Nondimensional() self.normalizer._configure() return
class TestOutputManagerMesh(unittest.TestCase): """ Unit testing of Python OutputManager object. """ def setUp(self): from spatialdata.units.Nondimensional import Nondimensional self.normalizer = Nondimensional() self.normalizer._configure() return def test_constructor(self): """ Test constructor. """ output = OutputManager() output.inventory.writer._configure() output._configure() return def test_preinitialize(self): """ Test preinitialize(). """ dataProvider = TestProvider() output = OutputManager() output.preinitialize(dataProvider) self.failIf(output.dataProvider is None) return def test_verifyConfiguration(self): """ Test verifyConfiguration(). """ dataProvider = TestProvider() output = OutputManager() output.preinitialize(dataProvider) output.vertexInfoFields = ["vertex info"] output.vertexDataFields = ["vertex data 2"] output.cellInfoFields = [] output.cellDataFields = ["cell data"] output.verifyConfiguration(dataProvider.getDataMesh()) return def test_initialize(self): """ Test initialize(). """ # No quadrature output = OutputManager() output.inventory.writer.inventory.filename = "test.vtk" output.inventory.writer._configure() output._configure() dataProvider = TestProvider() output.preinitialize(dataProvider) output.initialize(self.normalizer) # With quadrature from pylith.feassemble.FIATLagrange import FIATLagrange from pylith.feassemble.Quadrature import Quadrature cell = FIATLagrange() cell.inventory.dimension = 3 cell.inventory.degree = 2 cell.inventory.order = 2 cell._configure() quadrature = Quadrature() quadrature.inventory.cell = cell quadrature._configure() output = OutputManager() output.inventory.writer.inventory.filename = "test.vtk" output.inventory.writer._configure() output._configure() dataProvider = TestProvider() output.preinitialize(dataProvider) output.initialize(self.normalizer, quadrature) return def test_openclose(self): """ Test open() and close(). """ output = OutputManager() output.inventory.writer.inventory.filename = "output.vtk" output.inventory.writer._configure() output._configure() dataProvider = TestProvider() output.preinitialize(dataProvider) output.initialize(self.normalizer) output.open(totalTime=5.0, numTimeSteps=2) output.close() return def test_writeInfo(self): """ Test writeInfo(). """ output = OutputManager() output.inventory.writer.inventory.filename = "output.vtk" output.inventory.writer._configure() output.inventory.vertexInfoFields = ["vertex info"] output.inventory.cellInfoFields = ["cell info"] output._configure() dataProvider = TestProvider() output.preinitialize(dataProvider) output.initialize(self.normalizer) output.open(totalTime=5.0, numTimeSteps=2) output.writeInfo() output.close() return def test_writeData(self): """ Test writeData(). """ output = OutputManager() output.inventory.writer.inventory.filename = "output.vtk" output.inventory.writer.inventory.timeFormat = "%3.1f" output.inventory.writer._configure() output.inventory.vertexDataFields = ["vertex data 2", "vertex data 1"] output.inventory.cellDataFields = ["cell data"] output._configure() dataProvider = TestProvider() output.preinitialize(dataProvider) output.initialize(self.normalizer) output.open(totalTime=5.0, numTimeSteps=2) output.writeData(2.0, dataProvider.fields) output.close() return def test_estimateNumSteps(self): """ Test _estimateNumSteps(). """ from pyre.units.time import second output = OutputManager() output.inventory.outputFreq = "skip" output.inventory.skip = 2 output._configure() numTimeSteps = 0 totalTime = 1.0*second self.assertEqual(0, output._estimateNumSteps(totalTime, numTimeSteps)) numTimeSteps = 4 totalTime = 1.0*second self.assertEqual(2, output._estimateNumSteps(totalTime, numTimeSteps)) numTimeSteps = 2 totalTime = 1.0*second self.assertEqual(1, output._estimateNumSteps(totalTime, numTimeSteps)) output = OutputManager() output.inventory.outputFreq = "time_step" output.inventory.dt = 2.0*second output._configure() dataProvider = TestProvider() output.preinitialize(dataProvider) output.initialize(self.normalizer) numTimeSteps = 0 totalTime = 1.0*second self.assertEqual(0, output._estimateNumSteps(totalTime, numTimeSteps)) numTimeSteps = 4 totalTime = 1.0*second self.assertEqual(1, output._estimateNumSteps(totalTime, numTimeSteps)) numTimeSteps = 2 totalTime = 2.0*second self.assertEqual(2, output._estimateNumSteps(totalTime, numTimeSteps)) return def test_checkWrite(self): """ Test _checkWrite(). """ dataProvider = TestProvider() # Default values should be true output = OutputManager() output.inventory.writer._configure() output._configure() output.preinitialize(dataProvider) output.initialize(self.normalizer) self.assertEqual(True, output._checkWrite(0.0)) self.assertEqual(True, output._checkWrite(3.234e+8)) # Check writing based on time output = OutputManager() output.inventory.writer._configure() output._configure() output.preinitialize(dataProvider) output.initialize(self.normalizer) output.inventory.outputFreq = "time_step" t = 0.0 dt = output.dtN self.assertEqual(True, output._checkWrite(t)) self.assertEqual(False, output._checkWrite(t)) self.assertEqual(False, output._checkWrite(t + 0.8*dt)) t += dt self.assertEqual(True, output._checkWrite(t)) t = 2*dt self.assertEqual(True, output._checkWrite(t)) # Check writing based on number of steps output = OutputManager() output.inventory.writer._configure() output.inventory.outputFreq = "skip" output.inventory.skip = 1 output._configure() output.preinitialize(dataProvider) output.initialize(self.normalizer) t = 0.0 dt = 1.0 self.assertEqual(True, output._checkWrite(t)) t += dt self.assertEqual(False, output._checkWrite(t)) t += dt self.assertEqual(True, output._checkWrite(t)) output.inventory.skip = 2 t += dt self.assertEqual(False, output._checkWrite(t)) t += dt self.assertEqual(False, output._checkWrite(t)) t += dt self.assertEqual(True, output._checkWrite(t)) return def test_factory(self): """ Test factory method. """ from pylith.meshio.OutputManager import output_manager o = output_manager() 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 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 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)
class TestOutputManagerSubmesh(unittest.TestCase): """Unit testing of Python MeshOutputManager object. """ def setUp(self): from spatialdata.units.Nondimensional import Nondimensional self.normalizer = Nondimensional() self.normalizer._configure() return def test_constructor(self): """Test constructor. """ output = OutputManager() output.inventory.writer._configure() output._configure() return def test_preinitialize(self): """Test preinitialize(). """ dataProvider = TestProvider() output = OutputManager() output.preinitialize(dataProvider) self.failIf(output.dataProvider is None) return def test_verifyConfiguration(self): """Test verifyConfiguration(). """ dataProvider = TestProvider() output = OutputManager() output.preinitialize(dataProvider) output.vertexInfoFields = ["vertex info"] output.vertexDataFields = ["vertex data 2"] output.cellInfoFields = [] output.cellDataFields = ["cell data"] output.verifyConfiguration(dataProvider.getDataMesh()) return def test_initialize(self): """Test initialize(). """ # No quadrature output = OutputManager() output.inventory.writer.inventory.filename = "test.vtk" output.inventory.writer._configure() output._configure() dataProvider = TestProvider() output.preinitialize(dataProvider) output.initialize(self.normalizer) # With quadrature from pylith.feassemble.FIATLagrange import FIATLagrange from pylith.feassemble.Quadrature import Quadrature cell = FIATLagrange() cell.inventory.dimension = 2 cell.inventory.degree = 2 cell.inventory.order = 2 cell._configure() quadrature = Quadrature() quadrature.inventory.cell = cell quadrature._configure() output = OutputManager() output.inventory.writer.inventory.filename = "test.vtk" output.inventory.writer._configure() output._configure() dataProvider = TestProvider() output.preinitialize(dataProvider) output.initialize(self.normalizer, quadrature) return def test_openclose(self): """Test open() and close(). """ output = OutputManager() output.inventory.writer.inventory.filename = "output.vtk" output.inventory.writer._configure() output._configure() dataProvider = TestProvider() output.preinitialize(dataProvider) output.initialize(self.normalizer) output.open(totalTime=5.0, numTimeSteps=2) output.close() return def test_writeInfo(self): """Test writeInfo(). """ output = OutputManager() output.inventory.writer.inventory.filename = "output.vtk" output.inventory.writer._configure() output.inventory.vertexInfoFields = ["vertex info"] output.inventory.cellInfoFields = ["cell info"] output._configure() dataProvider = TestProvider() output.preinitialize(dataProvider) output.initialize(self.normalizer) output.open(totalTime=5.0, numTimeSteps=2) output.writeInfo() output.close() return def test_writeData(self): """Test writeData(). """ output = OutputManager() output.inventory.writer.inventory.filename = "output.vtk" output.inventory.writer.inventory.timeFormat = "%3.1f" output.inventory.writer._configure() output.inventory.vertexDataFields = ["vertex data 2", "vertex data 1"] output.inventory.cellDataFields = ["cell data"] output._configure() dataProvider = TestProvider() output.preinitialize(dataProvider) output.initialize(self.normalizer) output.open(totalTime=5.0, numTimeSteps=2) output.writeData(2.0, dataProvider.fields) output.close() return def test_checkWrite(self): """Test _checkWrite(). """ dataProvider = TestProvider() # Default values should be true output = OutputManager() output.inventory.writer._configure() output._configure() output.preinitialize(dataProvider) output.initialize(self.normalizer) self.assertEqual(True, output._checkWrite(0.0)) self.assertEqual(True, output._checkWrite(3.234e+8)) # Check writing based on time output = OutputManager() output.inventory.writer._configure() output._configure() output.preinitialize(dataProvider) output.initialize(self.normalizer) output.inventory.outputFreq = "time_step" t = 0.0 dt = output.dtN self.assertEqual(True, output._checkWrite(t)) self.assertEqual(False, output._checkWrite(t)) self.assertEqual(False, output._checkWrite(t + 0.8*dt)) t += dt self.assertEqual(True, output._checkWrite(t)) t = 2*dt self.assertEqual(True, output._checkWrite(t)) # Check writing based on number of steps output = OutputManager() output.inventory.writer._configure() output.inventory.outputFreq = "skip" output.inventory.skip = 1 output._configure() output.preinitialize(dataProvider) output.initialize(self.normalizer) t = 0.0 dt = 1.0 self.assertEqual(True, output._checkWrite(t)) t += dt self.assertEqual(False, output._checkWrite(t)) t += dt self.assertEqual(True, output._checkWrite(t)) output.inventory.skip = 2 t += dt self.assertEqual(False, output._checkWrite(t)) t += dt self.assertEqual(False, output._checkWrite(t)) t += dt self.assertEqual(True, output._checkWrite(t)) return def test_factory(self): """Test factory method. """ from pylith.meshio.OutputManager import output_manager o = output_manager() 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)