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