def test_wedge(self): logging.debug('') logging.debug('test_wedge') wedge = create_wedge_3d((30, 20, 100), 5., 0.5, 2., 30.) # I face. regions = (('xyzzy', 2, 2, 0, -1, 0, -1),) variables = (('area', 'inch**2'),) metrics = mesh_probe(wedge, regions, variables) area = metrics[0] expected = (((pi*2.**2.) - (pi*0.5**2.)) * 30./360.) * 144. logging.debug('area = %g (%g ft**2), expected %g', area, area / 144., expected) assert_rel_error(self, area, expected, 0.00001) # J face. regions = (('xyzzy', 0, -1, 0, 0, 0, -1),) variables = (('area', 'inch**2'),) metrics = mesh_probe(wedge, regions, variables) area = metrics[0] expected = (2.*pi*0.5 * 30./360.) * 5. * 144. logging.debug('area = %g (%g ft**2), expected %g', area, area / 144., expected) assert_rel_error(self, area, expected, 0.00001) regions = (('xyzzy', 0, -1, -1, -1, 0, -1),) variables = (('area', 'inch**2'),) metrics = mesh_probe(wedge, regions, variables) area = metrics[0] expected = (2.* pi*2. * 30./360.) * 5. * 144. logging.debug('area = %g (%g ft**2), expected %g', area, area / 144., expected) assert_rel_error(self, area, expected, 0.00001) # K face. regions = (('xyzzy', 0, -1, 0, -1, 2, 2),) variables = (('area', 'inch**2'),) metrics = mesh_probe(wedge, regions, variables) area = metrics[0] expected = 5. * (2. - 0.5) * 144. logging.debug('area = %g (%g ft**2), expected %g', area, area / 144., expected) assert_rel_error(self, area, expected, 0.000001)
def evaluate_probe_requests(self): """ Evaluates all surface probe requests. """ domain = restart.read(self.input.casename, self._logger) for req in self.mesh_probes: surfaces = [] for block, imin, imax, jmin, jmax, kmin, kmax in req.surfaces: zone = 'zone_%d' % block imin = imin-1 if imin > 0 else imin # Allow end-relative imax = imax-1 if imax > 0 else imax jmin = jmin-1 if jmin > 0 else jmin jmax = jmax-1 if jmax > 0 else jmax kmin = kmin-1 if kmin > 0 else kmin kmax = kmax-1 if kmax > 0 else kmax surfaces.append((zone, imin, imax, jmin, jmax, kmin, kmax)) variables = [] for attr, metric, units in req.variables: variables.append((metric, units)) metrics = mesh_probe(domain, surfaces, variables, req.scheme) for i, (attr, metric, units) in enumerate(req.variables): setattr(self, attr, metrics[i])
def test_overflow(self): # Verify correct metric values for data from real scenario. # However, exit plane values are repeated in 'J' direction. logging.debug('') logging.debug('test_overflow') domain = overflow.read_q('grid.in', 'q.save', multiblock=False, logger=logging.getLogger()) variables = [('pressure_stagnation', None),] # Exit surface (3D index space). regions = [('zone_1', -1, -1, 0, -1, 0, -1)] pt_area_3d, = mesh_probe(domain, regions, variables, 'area') pt_mass_3d, = mesh_probe(domain, regions, variables, 'mass') logging.debug('surface pt_area_3d %r, pt_mass_3d %r', pt_area_3d, pt_mass_3d) assert_rel_error(self, pt_area_3d, 10.1090358495, 0.000001) assert_rel_error(self, pt_mass_3d, 10.489294904, 0.000001) # Exit surface (2D index space). surface = domain.extract([(-1, -1, 0, -1, 0, -1)]) surface.demote() regions = [('zone_1', 0, -1, 0, -1)] pt_area_2d, = mesh_probe(surface, regions, variables, 'area') pt_mass_2d, = mesh_probe(surface, regions, variables, 'mass') logging.debug('surface pt_area_2d %r, pt_mass_2d %r', pt_area_2d, pt_mass_2d) self.assertEqual(pt_area_2d, pt_area_3d) # FIXME: why is this only really close and not exact? assert_rel_error(self, pt_mass_2d, pt_mass_3d, 0.0000000001) # Exit curve (3D index space). regions = [('zone_1', -1, -1, 1, 1, 0, -1)] pt_area_3d, = mesh_probe(domain, regions, variables, 'area') logging.debug('curve pt_area_3d %r', pt_area_3d) assert_rel_error(self, pt_area_3d, 10.1090358495, 0.000001) # Exit curve (2D index space). regions = [('zone_1', 1, 1, 0, -1)] pt_area_2d, = mesh_probe(surface, regions, variables, 'area') logging.debug('curve pt_area_2d %r', pt_area_2d) self.assertEqual(pt_area_2d, pt_area_3d) # Exit curve (1D index space). curve = surface.extract([(1, 1, 0, -1)]) curve.demote() regions = [('zone_1', 0, -1)] pt_area_1d, = mesh_probe(curve, regions, variables, 'area') logging.debug('curve pt_area_1d %r', pt_area_1d) self.assertEqual(pt_area_1d, pt_area_3d) # Exit point (3D index space). regions = [('zone_1', -1, -1, 1, 1, 50, 50)] pt_area_3d, = mesh_probe(domain, regions, variables, 'area') logging.debug('point pt_area_3d %r', pt_area_3d) # Exit point (2D index space). regions = [('zone_1', 1, 1, 50, 50)] pt_area_2d, = mesh_probe(surface, regions, variables, 'area') logging.debug('point pt_area_2d %r', pt_area_2d) self.assertEqual(pt_area_2d, pt_area_3d) # Exit point (1D index space). regions = [('zone_1', 50, 50)] pt_area_1d, = mesh_probe(curve, regions, variables, 'area') logging.debug('point pt_area_1d %r', pt_area_1d) self.assertEqual(pt_area_1d, pt_area_3d)
def test_cube(self): logging.debug('') logging.debug('test_cube') cube = create_cube((41, 17, 9), 5., 4., 3.) # I face. regions = (('xyzzy', 2, 2, 0, -1, 0, -1),) variables = (('area', 'inch**2'), ('density', None)) area, density = mesh_probe(cube, regions, variables) logging.debug('I area = %g (%g ft**2)', area, area / 144.) logging.debug('I density = %g', density) self.assertEqual(area, 4. * 3. * 144.) self.assertEqual(density, 0.25) surface = cube.extract([(2, 2, 0, -1, 0, -1)]) surface.demote() regions = (('xyzzy', 0, -1, 0, -1),) area, density = mesh_probe(surface, regions, variables) self.assertEqual(area, 4. * 3. * 144.) self.assertEqual(density, 0.25) # J face. regions = (('xyzzy', 0, -1, 2, 2, 0, -1),) area, density = mesh_probe(cube, regions, variables) logging.debug('J area = %g (%g ft**2)', area, area / 144.) logging.debug('J density = %g', density) self.assertEqual(area, 5. * 3. * 144.) self.assertEqual(density, 2.5) surface = cube.extract([(0, -1, 2, 2, 0, -1)]) surface.demote() regions = (('xyzzy', 0, -1, 0, -1),) area, density = mesh_probe(surface, regions, variables) self.assertEqual(area, 5. * 3. * 144.) self.assertEqual(density, 2.5) # K face. regions = (('xyzzy', 0, -1, 0, -1, 2, 2),) area, density = mesh_probe(cube, regions, variables) logging.debug('K area = %g (%g ft**2)', area, area / 144.) logging.debug('K density = %g', density) self.assertEqual(area, 5. * 4. * 144.) self.assertEqual(density, 2.5) surface = cube.extract([(0, -1, 0, -1, 2, 2)]) surface.demote() regions = (('xyzzy', 0, -1, 0, -1),) area, density = mesh_probe(surface, regions, variables) self.assertEqual(area, 5. * 4. * 144.) self.assertEqual(density, 2.5) # 1D curve. variables = (('length', 'inch'), ('density', None)) curve = surface.extract([(0, -1, 5, 5)]) curve.demote() regions = (('xyzzy', 0, -1),) length, density = mesh_probe(curve, regions, variables) # It seems turning the value into a PhysicalQuantity isn't exact. assert_rel_error(self, length, 5. * 12., 0.00000001) self.assertEqual(density, 2.5) # 2D curves. regions = (('xyzzy', 0, -1, 5, 5),) length, density = mesh_probe(surface, regions, variables) assert_rel_error(self, length, 5. * 12., 0.00000001) self.assertEqual(density, 2.5) regions = (('xyzzy', 5, 5, 0, -1),) length, density = mesh_probe(surface, regions, variables) assert_rel_error(self, length, 4. * 12., 0.00000001) self.assertEqual(density, 0.625) # 3D curves. regions = (('xyzzy', 0, -1, 5, 5, 5, 5),) length, density = mesh_probe(cube, regions, variables) assert_rel_error(self, length, 5. * 12., 0.00000001) self.assertEqual(density, 2.5) regions = (('xyzzy', 5, 5, 0, -1, 5, 5),) length, density = mesh_probe(cube, regions, variables) assert_rel_error(self, length, 4. * 12., 0.00000001) self.assertEqual(density, 0.625) regions = (('xyzzy', 5, 5, 5, 5, 0, -1),) length, density = mesh_probe(cube, regions, variables) assert_rel_error(self, length, 3. * 12., 0.00000001) self.assertEqual(density, 0.625)
def test_adpac(self): # Verify correct metric values for data from real scenario. logging.debug('') logging.debug('test_adpac') domain = restart.read('lpc-test', logging.getLogger()) regions = [('zone_1', 2, 2, 0, -1, 0, -1), ('zone_2', 2, 2, 0, -1, 0, -1)] variables = [('area', 'inch**2'), ('pressure_stagnation', 'psi'), ('pressure', 'psi'), ('temperature_stagnation', 'degR'), ('temperature', 'degR'), ('mass_flow', 'lbm/s'), ('corrected_mass_flow', 'lbm/s')] metrics = mesh_probe(domain, regions, variables, 'mass') logging.debug('lpc-test I face data:') for i, (name, units) in enumerate(variables): logging.debug(' %s = %g %s' % (name, metrics[i], units)) assert_rel_error(self, metrics[0], 830.494, 0.00001) assert_rel_error(self, metrics[1], 8.95673, 0.00001) assert_rel_error(self, metrics[2], 6.97191, 0.00001) assert_rel_error(self, metrics[3], 547.784, 0.00001) assert_rel_error(self, metrics[4], 509.909, 0.00001) assert_rel_error(self, metrics[5], 120.092, 0.00001) assert_rel_error(self, metrics[6], 202.570, 0.00001) regions = [('zone_1', 0, -1, 2, 2, 0, -1)] metrics = mesh_probe(domain, regions, variables, 'mass') logging.debug('lpc-test J face data:') for i, (name, units) in enumerate(variables): logging.debug(' %s = %g %s' % (name, metrics[i], units)) assert_rel_error(self, metrics[0], 1089.77, 0.00001) assert_rel_error(self, metrics[1], 7.09975, 0.00001) assert_rel_error(self, metrics[2], 6.52045, 0.00001) assert_rel_error(self, metrics[3], 554.000, 0.00001) assert_rel_error(self, metrics[4], 540.770, 0.00001) assert_rel_error(self, metrics[5], 0.421583, 0.00001) assert_rel_error(self, metrics[6], 0.898204, 0.00001) regions = [('zone_1', 0, -1, 0, -1, 2, 2)] metrics = mesh_probe(domain, regions, variables, 'mass') logging.debug('lpc-test K face data:') for i, (name, units) in enumerate(variables): logging.debug(' %s = %g %s' % (name, metrics[i], units)) assert_rel_error(self, metrics[0], 2870.64, 0.00001) assert_rel_error(self, metrics[1], 8.70534, 0.00001) assert_rel_error(self, metrics[2], 6.89906, 0.00001) assert_rel_error(self, metrics[3], 546.989, 0.00001) assert_rel_error(self, metrics[4], 511.875, 0.00001) assert_rel_error(self, metrics[5], -156.175, 0.00001) assert_rel_error(self, metrics[6], -270.858, 0.00001) surface = domain.extract([(0, -1, 0, -1, 2, 2)]) surface.demote() regions = [('zone_1', 0, -1, 0, -1)] metrics = mesh_probe(surface, regions, variables, 'mass') # These are different than the above metrics since the extraction # doesn't average cell values on either side of the surface. assert_rel_error(self, metrics[0], 2870.64, 0.00001) assert_rel_error(self, metrics[1], 8.56340, 0.00001) assert_rel_error(self, metrics[2], 6.92024, 0.00001) assert_rel_error(self, metrics[3], 541.789, 0.00001) assert_rel_error(self, metrics[4], 509.850, 0.00001) assert_rel_error(self, metrics[5], -149.525, 0.00001) assert_rel_error(self, metrics[6], -262.976, 0.00001)