/contrib/drea_usecase/DREA_HSRnoise.py

https://github.com/thearn/OpenMDAO-Framework · Python · 131 lines · 94 code · 23 blank · 14 comment · 1 complexity · c644f21680057c67c7a21539e3d6b72a MD5 · raw file

  1. """
  2. DREA_HSRnoise.py - Code to run a DREA followed by HSRnoise for M-E off-design analysis
  3. """
  4. from openmdao.main.api import Assembly, Slot, Case, Instance
  5. from openmdao.main.datatypes.api import Float, Enum
  6. from openmdao.lib.casehandlers.api import ListCaseIterator, DBCaseRecorder
  7. from openmdao.lib.drivers.api import CaseIteratorDriver
  8. #from openmdao.lib.drivers.api import DOEdriver
  9. #from openmdao.lib.doegenerators.api import FullFactorial
  10. from DREA import DREA
  11. from hsrnoise import HSRNOISE
  12. from DREAprep import DREAprep
  13. from geometry import Geometry
  14. from ACDgen import ACDgen
  15. class DREA_HSRnoise(Assembly):
  16. """Assembly to execute on DREA followed by HSRnoise."""
  17. geo = Instance(Geometry, iotype='in')
  18. alt = Float(0.0, iotype='in', units='ft', desc='Altitude')
  19. point = Enum(1, [1,2,3], iotype='in', desc='Certification observer point')
  20. def __init__(self):
  21. """Creates an Assembly to run DREA and HSRnoise."""
  22. super(DREA_HSRnoise, self).__init__()
  23. FO1 = Case(inputs=[('point', 1),('dreaprep.Mach',0.28),('alt',2000.0),('dreaprep.PC',100.0),('hsrnoise.phi', 0.0)], outputs=[('drea.CFG',0.0),('hsrnoise.thetas',0.0),('hsrnoise.Freq',0.0),('hsrnoise.SPL_corr',0),('hsrnoise.OASPL30',0.0),('hsrnoise.OASPL60',0.0),('hsrnoise.OASPL90',0.0),('hsrnoise.OASPL120',0.0),('hsrnoise.OASPL150',0.0)])
  24. FO2 = Case(inputs=[('point', 1),('dreaprep.Mach',0.28),('alt',2000.0),('dreaprep.PC', 65.0),('hsrnoise.phi', 0.0)], outputs=[('drea.CFG',0.0),('hsrnoise.thetas',0.0),('hsrnoise.Freq',0.0),('hsrnoise.SPL_corr',0),('hsrnoise.OASPL30',0.0),('hsrnoise.OASPL60',0.0),('hsrnoise.OASPL90',0.0),('hsrnoise.OASPL120',0.0),('hsrnoise.OASPL150',0.0)])
  25. App = Case(inputs=[('point', 2),('dreaprep.Mach',0.20),('alt', 394.0),('dreaprep.PC', 30.0),('hsrnoise.phi', 0.0)], outputs=[('drea.CFG',0.0),('hsrnoise.thetas',0.0),('hsrnoise.Freq',0.0),('hsrnoise.SPL_corr',0),('hsrnoise.OASPL30',0.0),('hsrnoise.OASPL60',0.0),('hsrnoise.OASPL90',0.0),('hsrnoise.OASPL120',0.0),('hsrnoise.OASPL150',0.0)])
  26. SL1 = Case(inputs=[('point', 3),('dreaprep.Mach',0.25),('alt',1000.0),('dreaprep.PC',100.0),('hsrnoise.phi', 0.0)], outputs=[('drea.CFG',0.0),('hsrnoise.thetas',0.0),('hsrnoise.Freq',0.0),('hsrnoise.SPL_corr',0),('hsrnoise.OASPL30',0.0),('hsrnoise.OASPL60',0.0),('hsrnoise.OASPL90',0.0),('hsrnoise.OASPL120',0.0),('hsrnoise.OASPL150',0.0)])
  27. SL2 = Case(inputs=[('point', 3),('dreaprep.Mach',0.25),('alt',1000.0),('dreaprep.PC',100.0),('hsrnoise.phi',30.0)], outputs=[('drea.CFG',0.0),('hsrnoise.thetas',0.0),('hsrnoise.Freq',0.0),('hsrnoise.SPL_corr',0),('hsrnoise.OASPL30',0.0),('hsrnoise.OASPL60',0.0),('hsrnoise.OASPL90',0.0),('hsrnoise.OASPL120',0.0),('hsrnoise.OASPL150',0.0)])
  28. SL3 = Case(inputs=[('point', 3),('dreaprep.Mach',0.25),('alt',1000.0),('dreaprep.PC',100.0),('hsrnoise.phi',60.0)], outputs=[('drea.CFG',0.0),('hsrnoise.thetas',0.0),('hsrnoise.Freq',0.0),('hsrnoise.SPL_corr',0),('hsrnoise.OASPL30',0.0),('hsrnoise.OASPL60',0.0),('hsrnoise.OASPL90',0.0),('hsrnoise.OASPL120',0.0),('hsrnoise.OASPL150',0.0)])
  29. SL4 = Case(inputs=[('point', 3),('dreaprep.Mach',0.25),('alt',1000.0),('dreaprep.PC',100.0),('hsrnoise.phi',90.0)], outputs=[('drea.CFG',0.0),('hsrnoise.thetas',0.0),('hsrnoise.Freq',0.0),('hsrnoise.SPL_corr',0),('hsrnoise.OASPL30',0.0),('hsrnoise.OASPL60',0.0),('hsrnoise.OASPL90',0.0),('hsrnoise.OASPL120',0.0),('hsrnoise.OASPL150',0.0)])
  30. cases = ListCaseIterator([FO1,FO2,App,SL1,SL2,SL3,SL4])
  31. db_recorder = DBCaseRecorder()
  32. self.add('geo', Geometry())
  33. self.add('dreaprep', DREAprep())
  34. self.add('drea', DREA())
  35. self.add('hsrnoise', HSRNOISE())
  36. self.add('ACDgen', ACDgen())
  37. self.add('analysis',CaseIteratorDriver())
  38. self.analysis.iterator = cases
  39. self.analysis.recorders = [db_recorder]
  40. self.ACDgen.case_data = db_recorder.get_iterator()
  41. # Set up the workflows
  42. #---------------------------
  43. #self.analysis.workflow.add(['dreaprep', 'drea', 'hsrnoise'])
  44. #self.driver.workflow.add(['analysis','ACDgen'])
  45. self.driver.workflow.add(['dreaprep', 'drea', 'hsrnoise'])
  46. # Connections
  47. #---------------------------
  48. self.connect('geo',['drea.geo_in','hsrnoise.geo_in'])
  49. self.connect('alt',['dreaprep.alt','hsrnoise.ALTEVO'])
  50. self.connect('dreaprep.flow_out','drea.flow_in')
  51. self.connect('drea.flow_out','hsrnoise.flow_in')
  52. self.connect('drea.CFG','hsrnoise.CFG')
  53. if __name__ == "__main__":
  54. asy = DREA_HSRnoise()
  55. import time
  56. tt = time.time()
  57. asy.drea.mode = 'Subsonic'
  58. asy.dreaprep.dTs = 18.3
  59. asy.dreaprep.Mach = 0.0
  60. asy.alt = 0.0
  61. asy.hsrnoise.phi = 90.0
  62. asy.dreaprep.PC = 80
  63. asy.dreaprep.deltaPt = 0.0
  64. asy.dreaprep.deltaTt = 0.0
  65. asy.dreaprep.deltaM = 0.0
  66. asy.geo.Apri = 12.0
  67. asy.geo.AsAp = 1.75
  68. asy.geo.AR = 3.0
  69. asy.geo.AeAt = .95
  70. asy.geo.length = 8.0
  71. asy.geo.ChuteAngles = 10
  72. asy.geo.calc_geom(asy.geo.length,asy.geo.Apri,asy.geo.AsAp,asy.geo.AR,asy.geo.AeAt,asy.geo.LhMh,asy.geo.LhWave)
  73. asy.run()
  74. print '\n\n'
  75. print 'alt : ',asy.dreaprep.alt
  76. print 'Mach : ',asy.dreaprep.Mach
  77. print 'HMIC : ',asy.hsrnoise.HMIC
  78. print 'SL : ',asy.hsrnoise.SL
  79. print '\n'
  80. print 'INPUTS DREA HSRNoise'
  81. print 'Length : ',asy.drea.geo_in.length, ' ', asy.hsrnoise.geo_in.length
  82. print 'Width : ',asy.drea.geo_in.width, ' ', asy.hsrnoise.geo_in.width
  83. print 'Primary Area : ',asy.drea.geo_in.Apri, ' ', asy.hsrnoise.geo_in.Apri
  84. print 'Secondary Area : ',asy.drea.geo_in.Asec, ' ', asy.hsrnoise.geo_in.Asec
  85. print 'Exit Area : ',asy.drea.geo_in.Aexit, ' ', asy.hsrnoise.geo_in.Aexit
  86. print 'Primary Pressure: ',asy.drea.flow_in.pri.Pt, ' ', asy.hsrnoise.flow_in.pri.Pt
  87. print 'Primary Temp : ',asy.drea.flow_in.pri.Tt, ' ', asy.hsrnoise.flow_in.pri.Tt
  88. print 'Primary Mach : ',asy.drea.flow_in.pri.Mach, ' ', asy.hsrnoise.flow_in.pri.Mach
  89. print '\n'
  90. print 'RESULTS'
  91. print 'Gross Thrust : ',asy.drea.GrossThrust
  92. print 'Exit Velocity : ',asy.drea.ExitVelocity
  93. print 'Exit Mach : ',asy.drea.ExitMach
  94. print 'CFG: : ',asy.drea.CFG
  95. print 'Pumping Ratio : ',asy.drea.PumpingRatio
  96. print 'Mass Flow (Pri) : ',asy.drea.flow_out.pri.W
  97. print 'Mass Flow (Sec) : ',asy.drea.flow_out.sec.W
  98. print 'Secondary Mach : ',asy.drea.flow_out.sec.Mach
  99. print 'NPR : ',asy.drea.NPR
  100. print 'Degree of mixing: ',asy.drea.DegreeOfMixing
  101. print 'OASPL30 : ',asy.hsrnoise.OASPL30
  102. print 'OASPL60 : ',asy.hsrnoise.OASPL60
  103. print 'OASPL90 : ',asy.hsrnoise.OASPL90
  104. print 'OASPL120 : ',asy.hsrnoise.OASPL120
  105. print 'OASPL150 : ',asy.hsrnoise.OASPL150
  106. #print 'test: ', asy.hsrnoise.SPL_corr
  107. print "\n"
  108. print "Elapsed time: ", time.time()-tt, "seconds"