/openmdao.lib/src/openmdao/lib/datatypes/domain/test/test_plot3d.py

https://github.com/thearn/OpenMDAO-Framework
Python | 214 lines | 163 code | 36 blank | 15 comment | 10 complexity | 72f4b0f503bac557e563498260ddca25 MD5 | raw file
  1. """
  2. Test Plot3D operations on :class:`DomainObj` objects.
  3. """
  4. import logging
  5. import os.path
  6. import tempfile
  7. import shutil
  8. import unittest
  9. from openmdao.lib.datatypes.domain import read_plot3d_q, write_plot3d_q, \
  10. read_plot3d_f, write_plot3d_f, \
  11. read_plot3d_shape, write_plot3d_grid
  12. from openmdao.lib.datatypes.domain.test.wedge import create_wedge_2d, \
  13. create_wedge_3d
  14. from openmdao.util.testutil import assert_raises
  15. class TestCase(unittest.TestCase):
  16. """ Test Plot3D operations on :class:`DomainObj` objects. """
  17. def setUp(self):
  18. self.startdir = os.getcwd()
  19. self.tempdir = tempfile.mkdtemp(prefix='test_plot3d-')
  20. os.chdir(self.tempdir)
  21. def tearDown(self):
  22. """ Clean up generated files. """
  23. os.chdir(self.startdir)
  24. if not os.environ.get('OPENMDAO_KEEPDIRS', False):
  25. try:
  26. shutil.rmtree(self.tempdir)
  27. except OSError:
  28. pass
  29. def test_q_3d(self):
  30. logging.debug('')
  31. logging.debug('test_q_3d')
  32. logger = logging.getLogger()
  33. wedge = create_wedge_3d((30, 20, 10), 5., 0.5, 2., 30.)
  34. # Big-endian binary.
  35. write_plot3d_q(wedge, 'be-binary.xyz', 'be-binary.q', logger=logger,
  36. big_endian=True, unformatted=False)
  37. domain = read_plot3d_q('be-binary.xyz', 'be-binary.q', logger=logger,
  38. multiblock=False, big_endian=True,
  39. unformatted=False)
  40. self.assertFalse(domain.is_equivalent(wedge, logger=logger))
  41. domain.rename_zone('xyzzy', domain.zone_1)
  42. self.assertTrue(domain.is_equivalent(wedge, logger=logger))
  43. # Little-endian unformatted.
  44. write_plot3d_q(domain, 'unformatted.xyz', 'unformatted.q',
  45. logger=logger)
  46. domain = read_plot3d_q('unformatted.xyz', 'unformatted.q',
  47. logger=logger, multiblock=False)
  48. self.assertFalse(domain.is_equivalent(wedge, logger=logger))
  49. domain.rename_zone('xyzzy', domain.zone_1)
  50. self.assertTrue(domain.is_equivalent(wedge, logger=logger))
  51. # Multiblock.
  52. wedge2 = create_wedge_3d((29, 19, 9), 5., 2.5, 4., 30.)
  53. domain.add_domain(wedge2)
  54. write_plot3d_q(domain, 'unformatted.xyz', 'unformatted.q',
  55. logger=logger)
  56. domain = read_plot3d_q('unformatted.xyz', 'unformatted.q',
  57. logger=logger)
  58. shape = read_plot3d_shape('unformatted.xyz', logger=logger)
  59. self.assertEqual(shape, [(30, 20, 10), (29, 19, 9)])
  60. # Errors.
  61. try:
  62. read_plot3d_q('unformatted.xyz', 'unformatted.q', blanking=True,
  63. logger=logger, multiblock=False)
  64. except NotImplementedError as exc:
  65. self.assertEqual(str(exc), 'blanking not supported yet')
  66. else:
  67. self.fail('Expected NotImplementedError')
  68. try:
  69. read_plot3d_q('unformatted.xyz', 'unformatted.q', planes=True,
  70. logger=logger, multiblock=False)
  71. except NotImplementedError as exc:
  72. self.assertEqual(str(exc), 'planar format not supported yet')
  73. else:
  74. self.fail('Expected NotImplementedError')
  75. assert_raises(self, "write_plot3d_q(logger, 'u.xyz', 'u.q')",
  76. globals(), locals(), TypeError,
  77. "'domain' argument must be a DomainObj or Zone")
  78. assert_raises(self, "write_plot3d_f(logger, 'u.xyz', 'u.f')",
  79. globals(), locals(), TypeError,
  80. "'domain' argument must be a DomainObj or Zone")
  81. assert_raises(self, "write_plot3d_grid(logger, 'u.xyz')",
  82. globals(), locals(), TypeError,
  83. "'domain' argument must be a DomainObj or Zone")
  84. wedge = create_wedge_3d((30, 20, 10), 5., 0.5, 2., 30.)
  85. delattr(wedge.xyzzy.flow_solution, 'mach')
  86. assert_raises(self, "write_plot3d_q(wedge, 'u.xyz', 'u.q')",
  87. globals(), locals(), AttributeError,
  88. "zone xyzzy flow_solution is missing ['mach']")
  89. assert_raises(self, "write_plot3d_f(wedge, 'u.xyz', 'u.f', ['froboz'])",
  90. globals(), locals(), AttributeError,
  91. "zone xyzzy flow_solution is missing ['froboz']")
  92. def test_q_2d(self):
  93. logging.debug('')
  94. logging.debug('test_q_2d')
  95. logger = logging.getLogger()
  96. wedge = create_wedge_2d((20, 10), 0.5, 2., 30.)
  97. # Big-endian binary.
  98. write_plot3d_q(wedge, 'be-binary.xyz', 'be-binary.q', logger=logger,
  99. big_endian=True, unformatted=False)
  100. domain = read_plot3d_q('be-binary.xyz', 'be-binary.q', logger=logger,
  101. dim=2, multiblock=False, big_endian=True,
  102. unformatted=False)
  103. self.assertFalse(domain.is_equivalent(wedge, logger=logger))
  104. domain.rename_zone('xyzzy', domain.zone_1)
  105. self.assertTrue(domain.is_equivalent(wedge, logger=logger))
  106. # Little-endian unformatted.
  107. write_plot3d_q(domain, 'unformatted.xyz', 'unformatted.q',
  108. logger=logger)
  109. domain = read_plot3d_q('unformatted.xyz', 'unformatted.q',
  110. logger=logger, dim=2, multiblock=False)
  111. self.assertFalse(domain.is_equivalent(wedge, logger=logger))
  112. domain.rename_zone('xyzzy', domain.zone_1)
  113. self.assertTrue(domain.is_equivalent(wedge, logger=logger))
  114. def test_f_3d(self):
  115. logging.debug('')
  116. logging.debug('test_f_3d')
  117. logger = logging.getLogger()
  118. wedge = create_wedge_3d((30, 20, 10), 5., 0.5, 2., 30.)
  119. wedge_flow = wedge.xyzzy.flow_solution
  120. varnames = ('density', 'momentum', 'energy_stagnation_density')
  121. # Big-endian binary.
  122. write_plot3d_f(wedge, 'be-binary.xyz', 'be-binary.f', varnames,
  123. logger=logger, big_endian=True, unformatted=False)
  124. domain = read_plot3d_f('be-binary.xyz', 'be-binary.f', logger=logger,
  125. multiblock=False, big_endian=True,
  126. unformatted=False)
  127. test_flow = domain.zone_1.flow_solution
  128. self.assertTrue((test_flow.f_1 == wedge_flow.density).all())
  129. self.assertTrue((test_flow.f_2 == wedge_flow.momentum.x).all())
  130. self.assertTrue((test_flow.f_3 == wedge_flow.momentum.y).all())
  131. self.assertTrue((test_flow.f_4 == wedge_flow.momentum.z).all())
  132. self.assertTrue((test_flow.f_5 == wedge_flow.energy_stagnation_density).all())
  133. # Little-endian unformatted.
  134. write_plot3d_f(domain, 'unformatted.xyz', 'unformatted.f',
  135. logger=logger)
  136. domain = read_plot3d_f('unformatted.xyz', 'unformatted.f',
  137. logger=logger, multiblock=False)
  138. test_flow = domain.zone_1.flow_solution
  139. self.assertTrue((test_flow.f_1 == wedge_flow.density).all())
  140. self.assertTrue((test_flow.f_2 == wedge_flow.momentum.x).all())
  141. self.assertTrue((test_flow.f_3 == wedge_flow.momentum.y).all())
  142. self.assertTrue((test_flow.f_4 == wedge_flow.momentum.z).all())
  143. self.assertTrue((test_flow.f_5 == wedge_flow.energy_stagnation_density).all())
  144. def test_f_2d(self):
  145. logging.debug('')
  146. logging.debug('test_f_2d')
  147. logger = logging.getLogger()
  148. wedge = create_wedge_2d((20, 10), 0.5, 2., 30.)
  149. wedge_flow = wedge.xyzzy.flow_solution
  150. varnames = ('density', 'momentum', 'energy_stagnation_density')
  151. # Big-endian binary.
  152. write_plot3d_f(wedge, 'be-binary.xyz', 'be-binary.f', varnames,
  153. logger=logger, big_endian=True, unformatted=False)
  154. domain = read_plot3d_f('be-binary.xyz', 'be-binary.f', logger=logger,
  155. dim=2, multiblock=False, big_endian=True,
  156. unformatted=False)
  157. test_flow = domain.zone_1.flow_solution
  158. self.assertTrue((test_flow.f_1 == wedge_flow.density).all())
  159. self.assertTrue((test_flow.f_2 == wedge_flow.momentum.x).all())
  160. self.assertTrue((test_flow.f_3 == wedge_flow.momentum.y).all())
  161. self.assertTrue((test_flow.f_4 == wedge_flow.energy_stagnation_density).all())
  162. # Little-endian unformatted.
  163. write_plot3d_f(domain, 'unformatted.xyz', 'unformatted.f',
  164. logger=logger)
  165. varnames = ('density', 'momentum_x')
  166. domain = read_plot3d_f('unformatted.xyz', 'unformatted.f', varnames,
  167. logger=logger, dim=2, multiblock=False)
  168. test_flow = domain.zone_1.flow_solution
  169. self.assertTrue((test_flow.density == wedge_flow.density).all())
  170. self.assertTrue((test_flow.momentum_x == wedge_flow.momentum.x).all())
  171. self.assertTrue((test_flow.f_3 == wedge_flow.momentum.y).all())
  172. self.assertTrue((test_flow.f_4 == wedge_flow.energy_stagnation_density).all())
  173. if __name__ == '__main__':
  174. import nose
  175. import sys
  176. sys.argv.append('--cover-package=openmdao.lib.datatypes.domain')
  177. sys.argv.append('--cover-erase')
  178. nose.runmodule()