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 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 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 __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 _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_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_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 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_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_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 test_initialize(self): """ Test constructor. """ filter = DataWriterHDF5Ext() filter._configure() from spatialdata.units.Nondimensional import Nondimensional normalizer = Nondimensional() filter.initialize(normalizer) 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 _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(0.5 * year) tstep = TimeStepUser() tstep._configure() tstep.filename = "data/timesteps.txt" tstep.preinitialize() tstep.initialize(normalizer) self.tstep = tstep 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 _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_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 _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 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 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 self.normalizer = Nondimensional() self.normalizer._configure() 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 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)