Wed 28 Aug 21:38:52 CEST 2024
This commit is contained in:
		
							parent
							
								
									b16f9eca0e
								
							
						
					
					
						commit
						927b56f263
					
				
							
								
								
									
										170
									
								
								src/SimNDT/gui/simulationSetupController.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										170
									
								
								src/SimNDT/gui/simulationSetupController.py
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,170 @@ | |||
| __author__ = 'Miguel Molero' | ||||
| 
 | ||||
| import sys | ||||
| import numpy as np | ||||
| from PySide.QtGui import * | ||||
| 
 | ||||
| from SimNDT.gui.ui_simulationsetup import Ui_simulationSetupDialog | ||||
| from SimNDT.gui.Warnings import WarningParms | ||||
| 
 | ||||
| from SimNDT.gui.advancedSimulationSetupController import AdvancedSimulationSetup | ||||
| import SimNDT.gui.constants as c | ||||
| 
 | ||||
| import SimNDT.engine.infoCL as infoCL | ||||
| from SimNDT.core.simulation import Simulation | ||||
| 
 | ||||
| 
 | ||||
| if infoCL.importCL(): | ||||
|     import pyopencl as cl | ||||
| 
 | ||||
| 
 | ||||
| class SimulationSetup(QDialog, Ui_simulationSetupDialog): | ||||
|     def __init__(self, Scenario, Materials, Transducers, | ||||
|                  Signal, Simulation, parent=None): | ||||
| 
 | ||||
| 
 | ||||
|         super(SimulationSetup, self).__init__(parent) | ||||
|         self.setupUi(self) | ||||
| 
 | ||||
|         self.simulationTimeLabel.setText("Simulation Time (%ss)" % c.MU) | ||||
|         self.advancedSimulationSetupPushButton.pressed.connect(self.advancedSetup) | ||||
| 
 | ||||
|         font = QFont() | ||||
|         font.setFamily("Helvetica") | ||||
|         if sys.platform == "darwin": | ||||
|             font.setPointSize(12*c.SCALE_UI) | ||||
|         else: | ||||
|             font.setPointSize(c.FONT_SIZE_1) | ||||
|         self.processingDeviceLabel.setFont(font) | ||||
|         self.deviceComboBox.setFont(font) | ||||
| 
 | ||||
|         self.timeScale = 1.0 | ||||
|         self.pointCycle = 10 | ||||
|         self.dx_user = None | ||||
|         self.dt_user = None | ||||
| 
 | ||||
|         if np.size(Scenario.Iabs) == 1: | ||||
|             msgBox = WarningParms("Please define the Boundaries Conditions!!!!") | ||||
|             if msgBox.exec_(): | ||||
|                 QDialog.reject(self) | ||||
| 
 | ||||
|         if infoCL.importCL(): | ||||
|             self.Platforms = infoCL.getPlatforms() | ||||
|         else: | ||||
|             self.Platforms = None | ||||
|             self.deviceComboBox.addItem("CPU [Serial Processing]") | ||||
|             self.processingDeviceLabel.setText("Processing Devices (Disable OpenCL)") | ||||
|             # self.processingDeviceLabel.setFont(font)  | ||||
| 
 | ||||
|         if self.Platforms is not None: | ||||
|             self.PlatformAndDevices = infoCL.getPlatformsAndDevices() | ||||
|             self.deviceComboBox.clear() | ||||
| 
 | ||||
|             info = [cl.device_type.to_string(device.type) + ": " + device.name + " OpenCL Platform: " + platform.name | ||||
|                     for platform, device in self.PlatformAndDevices] | ||||
|             self.deviceComboBox.addItems(info) | ||||
|             self.deviceComboBox.addItem("CPU [Serial Processing]") | ||||
|             self.processingDeviceLabel.setText("Processing Devices (Enable OpenCL)") | ||||
|             # self.processingDeviceLabel.setFont(font)  | ||||
| 
 | ||||
| 
 | ||||
|         self.Scenario = Scenario | ||||
|         self.Materials = Materials | ||||
|         self.Transducers = Transducers | ||||
|         self.Simulation = Simulation | ||||
| 
 | ||||
|         if self.Simulation is None: | ||||
|             self.MaxFreq = 2.0 * Signal.Frequency | ||||
| 
 | ||||
|         else: | ||||
|             self.MaxFreq = self.Simulation.MaxFreq | ||||
|             self.SimTime = self.Simulation.SimulationTime | ||||
| 
 | ||||
|             if self.Platforms is not None: | ||||
|                 for i, PlatformAndDevice in enumerate(self.PlatformAndDevices): | ||||
|                     if self.Simulation.Platform == PlatformAndDevice[0].name: | ||||
|                         if self.Simulation.Device == cl.device_type.to_string(PlatformAndDevice[1].type): | ||||
|                             print(i, cl.device_type.to_string(PlatformAndDevice[1].type)) | ||||
|                             self.deviceComboBox.setCurrentIndex(i) | ||||
| 
 | ||||
|             if self.Simulation.Platform == "Serial": | ||||
|                 self.deviceComboBox.setCurrentIndex(self.deviceComboBox.count() - 1) | ||||
|             self.simulationTimeLineEdit.setText("{0:.4f}".format(self.SimTime * 1e6)) | ||||
|         self.maxFrequencyLineEdit.setText(str(self.MaxFreq * 1e-6)) | ||||
| 
 | ||||
|     def advancedSetup(self): | ||||
|         font = QFont() | ||||
|         font.setFamily("Helvetica") | ||||
|         font.setPointSize(12*c.SCALE_UI) | ||||
| 
 | ||||
|         try: | ||||
|             self.MaxFreq = float(self.maxFrequencyLineEdit.text()) * 1e6 | ||||
|         except: | ||||
|             msgBox = WarningParms("Please give correctly the Maximum Frequency") | ||||
|             if msgBox.exec_(): | ||||
|                 return | ||||
| 
 | ||||
|         try: | ||||
|             self.SimTime = float(self.simulationTimeLineEdit.text()) * 1e-6 | ||||
|         except: | ||||
|             msgBox = WarningParms("Please give correctly the Simulation Time") | ||||
|             if msgBox.exec_(): | ||||
|                 return | ||||
| 
 | ||||
|         dlg = AdvancedSimulationSetup(self.SimTime, self.MaxFreq, | ||||
|                                       self.Scenario, self.Materials, self.Transducers, self.Simulation) | ||||
|         if dlg.exec_(): | ||||
|             self.pointCycle = dlg.PointCycle | ||||
|             self.timeScale = dlg.TimeScale | ||||
|             self.dx_user = dlg.dx | ||||
|             self.dt_user = dlg.dt | ||||
| 
 | ||||
|     def accept(self): | ||||
| 
 | ||||
|         try: | ||||
|             self.MaxFreq = float(self.maxFrequencyLineEdit.text()) * 1e6 | ||||
|         except: | ||||
|             msgBox = WarningParms("Please give correctly the Maximum Frequency") | ||||
|             if msgBox.exec_(): | ||||
|                 return | ||||
| 
 | ||||
|         try: | ||||
|             self.SimTime = float(self.simulationTimeLineEdit.text()) * 1e-6 | ||||
|         except: | ||||
|             msgBox = WarningParms("Please give correctly the Simulation Time") | ||||
|             if msgBox.exec_(): | ||||
|                 return | ||||
| 
 | ||||
|         pointCycle = self.pointCycle | ||||
|         timeScale = self.timeScale | ||||
| 
 | ||||
|         self.Simulation = Simulation(timeScale, self.MaxFreq, pointCycle, self.SimTime, Order=2) | ||||
| 
 | ||||
|         try: | ||||
|             self.Simulation.job_parameters(self.Materials, self.Transducers[0]) | ||||
| 
 | ||||
|         except: | ||||
|             msgBox = WarningParms("Please give correctly the Material Properties") | ||||
|             if msgBox.exec_(): | ||||
|                 return | ||||
| 
 | ||||
|         self.Simulation.create_numericalModel(self.Scenario) | ||||
| 
 | ||||
|         if self.dx_user is not None or self.dt_user is not None: | ||||
|             self.Simulation.jobByUser(self.dx_user, self.dt_user) | ||||
|             self.Simulation.create_numericalModel(self.Scenario) | ||||
| 
 | ||||
|         if self.Platforms is not None: | ||||
|             if self.deviceComboBox.currentText() == "CPU [Serial Processing]": | ||||
|                 self.Simulation.setPlatform("Serial") | ||||
|                 self.Simulation.setDevice("CPU") | ||||
|             else: | ||||
|                 PlatformDevice = self.PlatformAndDevices[self.deviceComboBox.currentIndex()] | ||||
|                 self.Simulation.setPlatform(PlatformDevice[0].name) | ||||
|                 self.Simulation.setDevice(cl.device_type.to_string(PlatformDevice[1].type)) | ||||
|                 print(PlatformDevice[0].name, cl.device_type.to_string(PlatformDevice[1].type)) | ||||
|         else: | ||||
|             self.Simulation.setPlatform("Serial") | ||||
|             self.Simulation.setDevice("CPU") | ||||
| 
 | ||||
|         QDialog.accept(self) | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user