def check_displacements(testcase, filename, mesh): """ Check displacements. """ h5 = h5py.File(filename, "r", driver="sec2") # Check vertices vertices = h5['geometry/vertices'][:] (nvertices, spaceDim) = vertices.shape testcase.assertEqual(mesh['nvertices'], nvertices) testcase.assertEqual(mesh['spaceDim'], spaceDim) # Check displacement solution toleranceAbsMask = 0.1 tolerance = 1.0e-5 dispE = testcase.calcDisplacements(vertices) disp = h5['vertex_fields/displacement'][:] (nstepsE, nverticesE, ncompsE) = dispE.shape (nsteps, nvertices, ncomps) = disp.shape testcase.assertEqual(nstepsE, nsteps) testcase.assertEqual(nverticesE, nvertices) testcase.assertEqual(ncompsE, ncomps) from spatialdata.units.NondimElasticQuasistatic import NondimElasticQuasistatic normalizer = NondimElasticQuasistatic() normalizer._configure() scale = 1.0 scale *= normalizer.lengthScale().value for istep in xrange(nsteps): for icomp in xrange(ncomps): okay = numpy.zeros((nvertices,), dtype=numpy.bool) maskR = numpy.abs(dispE[istep,:,icomp]) > toleranceAbsMask ratio = numpy.abs(1.0 - disp[istep,maskR,icomp] / dispE[istep,maskR,icomp]) if len(ratio) > 0: okay[maskR] = ratio < tolerance maskD = ~maskR diff = numpy.abs(disp[istep,maskD,icomp] - dispE[istep,maskD,icomp]) / scale if len(diff) > 0: okay[maskD] = diff < tolerance if numpy.sum(okay) != nvertices: print "Error in component %d of displacement field at time step %d." % (icomp, istep) print "Expected values: ",dispE[istep,:,:] print "Output values: ",disp[istep,:,:] print "Expected values (not okay): ",dispE[istep,~okay,icomp] print "Computed values (not okay): ",disp[istep,~okay,icomp] print "Relative diff (not okay): ",diff[~okay] print "Coordinates (not okay): ",vertices[~okay,:] h5.close() testcase.assertEqual(nvertices, numpy.sum(okay)) h5.close() return
def check_vertex_fields(testcase, filename, mesh, fieldNames): """ Check properties. """ h5 = h5py.File(filename, "r", driver="sec2") # Check cells cells = h5['topology/cells'][:] (ncells, ncorners) = cells.shape testcase.assertEqual(mesh['ncells'], ncells) testcase.assertEqual(mesh['ncorners'], ncorners) # Check vertices vertices = h5['geometry/vertices'][:] (nvertices, spaceDim) = vertices.shape testcase.assertEqual(mesh['nvertices'], nvertices) testcase.assertEqual(mesh['spaceDim'], spaceDim) # Check fault information tolerance = 1.0e-5 normalizer = NondimElasticQuasistatic() normalizer._configure() for name in fieldNames: valuesE = testcase.calcFaultField(name, vertices) values = h5['vertex_fields/%s' % name][:] (nstepsE, nverticesE, dimE) = valuesE.shape (nsteps, nvertices, dim) = values.shape testcase.assertEqual(nstepsE, nsteps) testcase.assertEqual(nverticesE, nvertices) testcase.assertEqual(dimE, dim) scale = 1.0 if name == "traction_change" or name == "traction": scale *= normalizer.pressureScale().value for istep in xrange(nsteps): for idim in xrange(dim): ratio = numpy.abs(1.0 - values[istep,:,idim]/valuesE[istep,:,idim]) diff = numpy.abs(values[istep,:,idim] - valuesE[istep,:,idim]) / scale mask = valuesE[istep,:,idim] != 0.0 okay = mask*(ratio < tolerance) + ~mask*(diff < tolerance) if numpy.sum(okay) != nvertices: print "Error in component %d of field '%s' for timestep %d." % (idim, name, istep) print "Expected values:",valuesE print "Output values:",values print "Coordinates: ",vertices testcase.assertEqual(nvertices, numpy.sum(okay)) h5.close() return
def check_state_variables(testcase, filename, mesh, stateVarNames): """ Check state variables. """ h5 = h5py.File(filename, "r", driver="sec2") # Check cells cells = h5['topology/cells'][:] (ncells, ncorners) = cells.shape testcase.assertEqual(mesh['ncells'], ncells) testcase.assertEqual(mesh['ncorners'], ncorners) # Check vertices vertices = h5['geometry/vertices'][:] (nvertices, spaceDim) = vertices.shape testcase.assertEqual(mesh['nvertices'], nvertices) testcase.assertEqual(mesh['spaceDim'], spaceDim) from spatialdata.units.NondimElasticQuasistatic import NondimElasticQuasistatic normalizer = NondimElasticQuasistatic() normalizer._configure() # Check state variables tolerance = 1.0e-6 for name in stateVarNames: valuesE = testcase.calcStateVar(name, vertices, cells) values = h5['cell_fields/%s' % name][:] (nstepsE, ncellsE, ncompsE) = valuesE.shape (nsteps, ncells, ncomps) = values.shape testcase.assertEqual(nstepsE, nsteps) testcase.assertEqual(ncellsE, ncells) testcase.assertEqual(ncompsE, ncomps) scale = 1.0 if name == "stress": scale *= normalizer.pressureScale().value for istep in xrange(nsteps): for icomp in xrange(ncomps): ratio = numpy.abs(1.0 - values[istep,:,icomp]/valuesE[istep,:,icomp]) diff = numpy.abs(values[istep,:,icomp] - valuesE[istep,:,icomp]) / scale mask = valuesE[istep,:,icomp] != 0.0 okay = mask*(ratio < tolerance) + ~mask*(diff < tolerance) if numpy.sum(okay) != ncells: print "Error in component %d of state variable '%s' at time step %d." % (icomp, name, istep) print "Expected values:",valuesE print "Output values:",values testcase.assertEqual(ncells, numpy.sum(okay)) h5.close() return
def test_constructor(self): dim = NondimElasticQuasistatic() dim._configure() self.assertEqual(1.0e+3*meter, dim.lengthScale()) self.assertEqual(3.0e+10*pascal, dim.pressureScale()) self.assertEqual(1.0*year, dim.timeScale()) vs = (1.0e+3*meter) / (1.0*year) rho = (3.0e+10*pascal) / (vs**2) self.assertEqual(rho, dim.densityScale()) return
def test_constructor(self): dim = NondimElasticQuasistatic() dim._configure() # Default values lengthScale = 1.0e+3 * meter pressureScale = 3.0e+10 * pascal timeScale = 1.0e+2 * year # Check defaults self.assertEqual(lengthScale, dim.getLengthScale()) self.assertEqual(pressureScale, dim.getPressureScale()) self.assertEqual(timeScale, dim.getTimeScale()) velocityScale = lengthScale / timeScale densityScale = pressureScale / velocityScale**2 self.assertEqual(densityScale, dim.getDensityScale()) return
def test_constructor(self): dim = NondimElasticQuasistatic() dim._configure() # Default values lengthScale = 1.0e+3 * meter pressureScale = 3.0e+10 * pascal timeScale = 1.0e+2 * year # Check defaults self.assertEqual(lengthScale, dim.lengthScale()) self.assertEqual(pressureScale, dim.pressureScale()) self.assertEqual(timeScale, dim.timeScale()) velocityScale = lengthScale / timeScale densityScale = pressureScale / velocityScale**2 self.assertEqual(densityScale, dim.densityScale()) return
def check_vertex_fields(testcase, filename, mesh, fieldNames): """ Check properties. """ h5 = h5py.File(filename, "r", driver="sec2") # Check cells cells = h5['topology/cells'][:] (ncells, ncorners) = cells.shape testcase.assertEqual(mesh['ncells'], ncells) testcase.assertEqual(mesh['ncorners'], ncorners) # Check vertices vertices = h5['geometry/vertices'][:] (nvertices, spaceDim) = vertices.shape testcase.assertEqual(mesh['nvertices'], nvertices) testcase.assertEqual(mesh['spaceDim'], spaceDim) # Check fault information tolerance = 1.0e-5 normalizer = NondimElasticQuasistatic() normalizer._configure() for name in fieldNames: valuesE = testcase.calcFaultField(name, vertices) values = h5['vertex_fields/%s' % name][:] (nstepsE, nverticesE, dimE) = valuesE.shape (nsteps, nvertices, dim) = values.shape testcase.assertEqual(nstepsE, nsteps) testcase.assertEqual(nverticesE, nvertices) testcase.assertEqual(dimE, dim) scale = 1.0 if name == "traction_change" or name == "traction": scale *= normalizer.pressureScale().value for istep in xrange(nsteps): for idim in xrange(dim): okay = numpy.zeros((nvertices,), dtype=numpy.bool) maskR = numpy.abs(valuesE[istep,:,idim]) > 0.0 ratio = numpy.abs(1.0 - values[istep,maskR,idim]/valuesE[istep,maskR,idim]) if len(ratio) > 0: okay[maskR] = ratio < tolerance maskD = ~maskR diff = numpy.abs(values[istep,maskD,idim] - valuesE[istep,maskD,idim]) / scale if len(diff) > 0: okay[maskD] = diff < tolerance if numpy.sum(okay) != nvertices: print "Error in component %d of field '%s' for timestep %d." % (idim, name, istep) print "Expected values:",valuesE print "Output values:",values print "Expected values (not okay): ",valuesE[istep,~okay,idim] print "Computed values (not okay): ",values[istep,~okay,idim] print "Coordinates (not okay): ",vertices[~okay,:] h5.close() testcase.assertEqual(nvertices, numpy.sum(okay)) h5.close() return
def check_displacements(testcase, filename, mesh): """ Check displacements. """ h5 = h5py.File(filename, "r", driver="sec2") # Check vertices vertices = h5['geometry/vertices'][:] (nvertices, spaceDim) = vertices.shape testcase.assertEqual(mesh['nvertices'], nvertices) testcase.assertEqual(mesh['spaceDim'], spaceDim) # Check displacement solution toleranceAbsMask = 0.1 tolerance = 1.0e-5 dispE = testcase.calcDisplacements(vertices) disp = h5['vertex_fields/displacement'][:] (nstepsE, nverticesE, ncompsE) = dispE.shape (nsteps, nvertices, ncomps) = disp.shape testcase.assertEqual(nstepsE, nsteps) testcase.assertEqual(nverticesE, nvertices) testcase.assertEqual(ncompsE, ncomps) from spatialdata.units.NondimElasticQuasistatic import NondimElasticQuasistatic normalizer = NondimElasticQuasistatic() normalizer._configure() scale = 1.0 scale *= normalizer.lengthScale().value for istep in xrange(nsteps): for icomp in xrange(ncomps): okay = numpy.zeros((nvertices, ), dtype=numpy.bool) maskR = numpy.abs(dispE[istep, :, icomp]) > toleranceAbsMask ratio = numpy.abs(1.0 - disp[istep, maskR, icomp] / dispE[istep, maskR, icomp]) if len(ratio) > 0: okay[maskR] = ratio < tolerance maskD = ~maskR diff = numpy.abs(disp[istep, maskD, icomp] - dispE[istep, maskD, icomp]) / scale if len(diff) > 0: okay[maskD] = diff < tolerance if numpy.sum(okay) != nvertices: print "Error in component %d of displacement field at time step %d." % ( icomp, istep) print "Expected values: ", dispE[istep, :, :] print "Output values: ", disp[istep, :, :] print "Expected values (not okay): ", dispE[istep, ~okay, icomp] print "Computed values (not okay): ", disp[istep, ~okay, icomp] print "Relative diff (not okay): ", diff[~okay] print "Coordinates (not okay): ", vertices[~okay, :] h5.close() testcase.assertEqual(nvertices, numpy.sum(okay)) h5.close() return