Ejemplo n.º 1
0
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 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.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 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
Ejemplo n.º 5
0
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