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