Wed 28 Aug 21:38:52 CEST 2024

This commit is contained in:
sbosse 2024-08-28 21:40:15 +02:00
parent b16f9eca0e
commit 927b56f263

View 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)