From 61cca14de8a281c6e31c945a95036c79d43d570c Mon Sep 17 00:00:00 2001 From: shankinsMechEng <134628078+shankinsMechEng@users.noreply.github.com> Date: Fri, 3 Jan 2025 12:38:30 -0700 Subject: [PATCH] added ability to write input files --- python/FIERRO-GUI/fierro_gui/Bulk_Forming.py | 33 + python/FIERRO-GUI/fierro_gui/FIERRO_GUI.ui | 1070 ++++++++++------- .../FIERRO-GUI/fierro_gui/Homogenization.py | 36 + python/FIERRO-GUI/fierro_gui/ui_FIERRO_GUI.py | 184 ++- 4 files changed, 849 insertions(+), 474 deletions(-) diff --git a/python/FIERRO-GUI/fierro_gui/Bulk_Forming.py b/python/FIERRO-GUI/fierro_gui/Bulk_Forming.py index 81b8288cc..be29792ba 100644 --- a/python/FIERRO-GUI/fierro_gui/Bulk_Forming.py +++ b/python/FIERRO-GUI/fierro_gui/Bulk_Forming.py @@ -1125,6 +1125,10 @@ def boundary_conditions(): self.TCstress.setItem(1,1,QTableWidgetItem("0.")) self.INbulkBC.currentIndexChanged.connect(boundary_conditions) + # Select to run locally or write the input files + self.INBFRunLocally.toggled.connect(lambda: self.BFRunWrite.setCurrentIndex(0)) + self.INBFWriteFiles.toggled.connect(lambda: self.BFRunWrite.setCurrentIndex(1)) + # Select serial or parallel run type self.INBFSerial.toggled.connect(lambda: self.BFRunType.setCurrentIndex(0)) self.INBFParallel.toggled.connect(lambda: self.BFRunType.setCurrentIndex(1)) @@ -1133,6 +1137,35 @@ def boundary_conditions(): num_cores = os.cpu_count() self.INBFmpiRanks.setMaximum(num_cores) + # Write input files + def Write_Input_Files(): + # Ask user to select a folder + selected_directory = QFileDialog.getExistingDirectory(None, "Select Folder") + # Create input files + self.BULK_FORMING_ELASTIC_PARAMETERS = os.path.join(selected_directory, 'elastic_parameters.txt') + self.BULK_FORMING_PLASTIC_PARAMETERS = os.path.join(selected_directory, 'plastic_parameters.txt') + self.BULK_FORMING_INPUT = os.path.join(selected_directory, 'bulk_forming_input.txt') + Bulk_Forming_WInput(self) + # Write a readme file + readme = os.path.join(selected_directory, 'README.txt') + wreadme = open(readme,"w") + about = 'ABOUT: \n' \ + 'elastic_parameters.txt -> these files contain the elastic material properties\n' \ + 'plastic_parameters.txt -> this file contains the plastic material properties\n' \ + 'bulk_forming_input.txt -> this file is the input file to the evpfft solver\n' \ + ' -> ** Ensure you go into this file and properly specify file paths\n' + wreadme.write(about) + run = 'TO RUN: \n' \ + 'flags -> Please set the flags: export OMP_PROC_BIND=spread and export OMP_NUM_THREADS=1\n' \ + 'parallel run -> (.txt input): mpirun -np # evpfft -f bulk_forming_input.txt\n' \ + ' -> (.vtk input): mpirun -np # evpfft -f bulk_forming_input.txt -m 2\n' \ + 'serial run -> (.txt input): evpfft -f bulk_forming_input.txt\n' \ + ' -> (.vtk input): evpfft -f bulk_forming_input.txt -m 2\n' \ + 'help -> evpfft --help' + wreadme.write(run) + wreadme.close() + self.BBFWriteFiles.clicked.connect(Write_Input_Files) + # Run Bulk Formation self.run = 0 self.ConvergenceError = False diff --git a/python/FIERRO-GUI/fierro_gui/FIERRO_GUI.ui b/python/FIERRO-GUI/fierro_gui/FIERRO_GUI.ui index 44084154e..fc25826a0 100644 --- a/python/FIERRO-GUI/fierro_gui/FIERRO_GUI.ui +++ b/python/FIERRO-GUI/fierro_gui/FIERRO_GUI.ui @@ -10359,32 +10359,19 @@ li.checked::marker { content: "\2612"; } - - - - true - true - - - - Job Type - - - - - + QFrame::NoFrame QFrame::Raised - + 0 - 5 + 0 0 @@ -10393,9 +10380,9 @@ li.checked::marker { content: "\2612"; } 5 - + - Single Job + Run Locally true @@ -10403,90 +10390,272 @@ li.checked::marker { content: "\2612"; } - + - Batch Job + Write Input Files - - + + 1 - - - - - 0 - - - 0 - - - 0 - - - 0 - - - + + + + + + + true + true + + + + Job Type + + + + + QFrame::NoFrame QFrame::Raised - + 0 - 0 + 5 0 - 0 + 5 - + - Batch Type: + Single Job + + + true - - - - Geometry - - + + + Batch Job + + + + + 1 + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + QFrame::NoFrame + + + QFrame::Raised + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Batch Type: + + + + + + + + Geometry + + + + + + + + + + + + 0 + 0 + + + + QFrame::NoFrame + + + QFrame::Raised + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Save Material Constants Files + + + true + + + + + + + Save All Files + + + + + + + + + + Select Geometry Files + + + + + + + QFrame::NoFrame + + + QFrame::Raised + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + false + + + + true + + + + Homogenizing File: + + + + + + + false + + + 1/1 + + + + + + + + + + false + + + + + + + - - - - 0 - 0 - + + + + true + true + + + Run Type + + + + + QFrame::NoFrame QFrame::Raised - + 0 @@ -10497,12 +10666,12 @@ li.checked::marker { content: "\2612"; } 0 - 0 + 5 - + - Save Material Constants Files + Serial true @@ -10510,31 +10679,166 @@ li.checked::marker { content: "\2612"; } - + - Save All Files + Parallel - - + + + + + 0 + 0 + + + + + 0 + 75 + + + + + 16777215 + 75 + + + + 1 + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + QFrame::NoFrame + + + QFrame::Raised + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + QFrame::NoFrame + + + QFrame::Raised + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + MPI Ranks: + + + + + + + false + + + QAbstractSpinBox::UpDownArrows + + + 1 + + + 1 + + + + + + + + + + <html><head/><body><p><span style=" color:#797979;">Warning: mpi could be slower than serial for small models due to initialization and overhead.</span></p></body></html> + + + true + + + + + + + + + + + + + + + true + true + + - Select Geometry Files + Convergence Tuning - + QFrame::NoFrame QFrame::Raised - + 0 @@ -10545,30 +10849,28 @@ li.checked::marker { content: "\2612"; } 0 - 0 + 5 - - - - false - - - - true - + + + + Automatically adjust model parameters if solution convergence is not met. - Homogenizing File: + Automatic + + + true - - - - false + + + + Outputs a convergence warning. Requires manual parameter adjustment and manual re-run. - 1/1 + Manual @@ -10576,105 +10878,14 @@ li.checked::marker { content: "\2612"; } - - - false - - - - - - - - - - - - true - true - - - - Run Type - - - - - - - QFrame::NoFrame - - - QFrame::Raised - - - - 0 - - - 0 - - - 0 - - - 5 - - - - - Serial - - - true - - - - - - - Parallel - - - - - - - - - - - 0 - 0 - - - - 1 - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - + QFrame::NoFrame QFrame::Raised - + 0 @@ -10687,197 +10898,91 @@ li.checked::marker { content: "\2612"; } 0 - - - - MPI Ranks: - - - - - - - false - - - QAbstractSpinBox::UpDownArrows - - - 1 - - - 1 + + + + + true + - - - - - - - - - <html><head/><body><p><span style=" color:#797979;">Warning: mpi could be slower than serial for small models due to initialization and overhead.</span></p></body></html> - - - true - - - - - - - - - - - - true - true - - - - Convergence Tuning - - - - - - - QFrame::NoFrame - - - QFrame::Raised - - - - 0 - - - 0 - - - 0 - - - 5 - - - - - Automatically adjust model parameters if solution convergence is not met. - - - Automatic - - - true - - - - - - - Outputs a convergence warning. Requires manual parameter adjustment and manual re-run. - - - Manual - - - - - - - - - - QFrame::NoFrame - - - QFrame::Raised - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - true - - - - Run Homogenization - - - true - - - - - - - Terminate - - - false - - - false - - - - + + Run Homogenization + + + true + + + + + + + Terminate + + + false + + + false + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + Write Input Files + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - true - true - - - - Run Type - - - - - + QFrame::NoFrame QFrame::Raised - + 0 @@ -10891,9 +10996,9 @@ li.checked::marker { content: "\2612"; } 5 - + - Serial + Run Locally true @@ -10901,9 +11006,9 @@ li.checked::marker { content: "\2612"; } - + - Parallel + Write Input Files @@ -10911,104 +11016,193 @@ li.checked::marker { content: "\2612"; } - - - - 0 - 0 - - + 1 - - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - false + + + + + + + true + true + - - QAbstractSpinBox::UpDownArrows + + Run Type - - 1 + + + + + + QFrame::NoFrame + + + QFrame::Raised + + + + 0 + + + 0 + + + 0 + + + 5 + + + + + Serial + + + true + + + + + + + Parallel + + + + + + + + + + + 0 + 0 + - + 1 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + false + + + QAbstractSpinBox::UpDownArrows + + + 1 + + + 1 + + + + + + + MPI Ranks: + + + + + + + + + + + QFrame::NoFrame + + + QFrame::Raised + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + true + + + + Run Bulk Forming Simulation + + + true + + + + + + + Terminate + + + + - - + + + + + + - MPI Ranks: + Write Input Files + + + + Qt::Vertical + + + + 20 + 40 + + + + - - - - QFrame::NoFrame - - - QFrame::Raised - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - true - - - - Run Bulk Forming Simulation - - - true - - - - - - - Terminate - - - - - - @@ -11089,7 +11283,7 @@ li.checked::marker { content: "\2612"; } - 2 + 1 diff --git a/python/FIERRO-GUI/fierro_gui/Homogenization.py b/python/FIERRO-GUI/fierro_gui/Homogenization.py index 29000d9c3..7c79b11de 100644 --- a/python/FIERRO-GUI/fierro_gui/Homogenization.py +++ b/python/FIERRO-GUI/fierro_gui/Homogenization.py @@ -956,6 +956,42 @@ def batch_geometry(): self.INHomogenizationBatchFile.setText(f'{self.file_paths[0]}') self.BSelectGeometryFiles.clicked.connect(batch_geometry) + # Write input files + def Write_Input_Files(): + # Ask user to select a folder + selected_directory = QFileDialog.getExistingDirectory(None, "Select Folder") + # Create input files + self.ELASTIC_PARAMETERS_0 = os.path.join(selected_directory, 'elastic_parameters_0.txt') + self.ELASTIC_PARAMETERS_1 = os.path.join(selected_directory, 'elastic_parameters_1.txt') + self.PLASTIC_PARAMETERS = os.path.join(selected_directory, 'plastic_parameters.txt') + self.EVPFFT_INPUT = os.path.join(selected_directory, 'evpfft_lattice_input.txt') + for BC_index in range(6): + self.EVPFFT_INPUT = os.path.join(selected_directory, f'evpfft_lattice_input_{BC_index}.txt') + Homogenization_WInput(self,BC_index) + # Write a readme file + readme = os.path.join(selected_directory, 'README.txt') + wreadme = open(readme,"w") + about = 'ABOUT: \n' \ + 'elastic_parameters_#.txt -> these files contain the elastic material properties\n' \ + 'plastic_parameters.txt -> this file contains null plastic material properties\n' \ + 'input_#.txt -> this file is your input file for each of the 6 homogenization steps\n' \ + ' -> ** Ensure you go into these files and properly specify file paths\n' + wreadme.write(about) + run = 'TO RUN: \n' \ + 'flags -> Please set the flags: export OMP_PROC_BIND=spread and export OMP_NUM_THREADS=1\n' \ + 'parallel run -> (.txt input): mpirun -np # evpfft -f input_#.txt\n' \ + ' -> (.vtk input): mpirun -np # evpfft -f input_#.txt -m 2\n' \ + 'serial run -> (.txt input): evpfft -f input_#.txt\n' \ + ' -> (.vtk input): evpfft -f input_#.txt -m 2\n' \ + 'help -> evpfft --help' + wreadme.write(run) + wreadme.close() + self.BHWriteFiles.clicked.connect(Write_Input_Files) + + # Select to run locally or write the input files + self.INHRunLocally.toggled.connect(lambda: self.HomogenizationRunWrite.setCurrentIndex(0)) + self.INHWriteFiles.toggled.connect(lambda: self.HomogenizationRunWrite.setCurrentIndex(1)) + # Select single job or batch job self.INSingleJob.toggled.connect(lambda: self.HomogenizationBatch.setCurrentIndex(0)) self.INBatchJob.toggled.connect(lambda: self.HomogenizationBatch.setCurrentIndex(1)) diff --git a/python/FIERRO-GUI/fierro_gui/ui_FIERRO_GUI.py b/python/FIERRO-GUI/fierro_gui/ui_FIERRO_GUI.py index b1b793ae5..de676a2cc 100644 --- a/python/FIERRO-GUI/fierro_gui/ui_FIERRO_GUI.py +++ b/python/FIERRO-GUI/fierro_gui/ui_FIERRO_GUI.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- ################################################################################ -## Form generated from reading UI file 'FIERRO_GUIYaKUPn.ui' +## Form generated from reading UI file 'FIERRO_GUIGbeDCJ.ui' ## ## Created by: Qt User Interface Compiler version 6.6.0 ## @@ -5344,13 +5344,40 @@ def setupUi(self, MainWindow): self.page_21.setObjectName(u"page_21") self.verticalLayout_13 = QVBoxLayout(self.page_21) self.verticalLayout_13.setObjectName(u"verticalLayout_13") - self.label_53 = QLabel(self.page_21) + self.frame_71 = QFrame(self.page_21) + self.frame_71.setObjectName(u"frame_71") + self.frame_71.setFrameShape(QFrame.NoFrame) + self.frame_71.setFrameShadow(QFrame.Raised) + self.formLayout_26 = QFormLayout(self.frame_71) + self.formLayout_26.setObjectName(u"formLayout_26") + self.formLayout_26.setContentsMargins(0, 0, 0, 5) + self.INHRunLocally = QRadioButton(self.frame_71) + self.INHRunLocally.setObjectName(u"INHRunLocally") + self.INHRunLocally.setChecked(True) + + self.formLayout_26.setWidget(0, QFormLayout.LabelRole, self.INHRunLocally) + + self.INHWriteFiles = QRadioButton(self.frame_71) + self.INHWriteFiles.setObjectName(u"INHWriteFiles") + + self.formLayout_26.setWidget(0, QFormLayout.FieldRole, self.INHWriteFiles) + + + self.verticalLayout_13.addWidget(self.frame_71, 0, Qt.AlignHCenter) + + self.HomogenizationRunWrite = QStackedWidget(self.page_21) + self.HomogenizationRunWrite.setObjectName(u"HomogenizationRunWrite") + self.page_37 = QWidget() + self.page_37.setObjectName(u"page_37") + self.verticalLayout_73 = QVBoxLayout(self.page_37) + self.verticalLayout_73.setObjectName(u"verticalLayout_73") + self.label_53 = QLabel(self.page_37) self.label_53.setObjectName(u"label_53") self.label_53.setFont(font14) - self.verticalLayout_13.addWidget(self.label_53, 0, Qt.AlignHCenter) + self.verticalLayout_73.addWidget(self.label_53, 0, Qt.AlignHCenter) - self.frame_16 = QFrame(self.page_21) + self.frame_16 = QFrame(self.page_37) self.frame_16.setObjectName(u"frame_16") self.frame_16.setFrameShape(QFrame.NoFrame) self.frame_16.setFrameShadow(QFrame.Raised) @@ -5369,9 +5396,9 @@ def setupUi(self, MainWindow): self.formLayout.setWidget(0, QFormLayout.FieldRole, self.INBatchJob) - self.verticalLayout_13.addWidget(self.frame_16, 0, Qt.AlignHCenter) + self.verticalLayout_73.addWidget(self.frame_16, 0, Qt.AlignHCenter) - self.HomogenizationBatch = QStackedWidget(self.page_21) + self.HomogenizationBatch = QStackedWidget(self.page_37) self.HomogenizationBatch.setObjectName(u"HomogenizationBatch") self.page_5 = QWidget() self.page_5.setObjectName(u"page_5") @@ -5463,15 +5490,15 @@ def setupUi(self, MainWindow): self.HomogenizationBatch.addWidget(self.page_6) - self.verticalLayout_13.addWidget(self.HomogenizationBatch, 0, Qt.AlignTop) + self.verticalLayout_73.addWidget(self.HomogenizationBatch, 0, Qt.AlignTop) - self.label_54 = QLabel(self.page_21) + self.label_54 = QLabel(self.page_37) self.label_54.setObjectName(u"label_54") self.label_54.setFont(font14) - self.verticalLayout_13.addWidget(self.label_54, 0, Qt.AlignHCenter) + self.verticalLayout_73.addWidget(self.label_54, 0, Qt.AlignHCenter) - self.frame_59 = QFrame(self.page_21) + self.frame_59 = QFrame(self.page_37) self.frame_59.setObjectName(u"frame_59") self.frame_59.setFrameShape(QFrame.NoFrame) self.frame_59.setFrameShadow(QFrame.Raised) @@ -5490,12 +5517,14 @@ def setupUi(self, MainWindow): self.formLayout_6.setWidget(0, QFormLayout.FieldRole, self.INHParallel) - self.verticalLayout_13.addWidget(self.frame_59, 0, Qt.AlignHCenter) + self.verticalLayout_73.addWidget(self.frame_59, 0, Qt.AlignHCenter) - self.HomogenizationRunType = QStackedWidget(self.page_21) + self.HomogenizationRunType = QStackedWidget(self.page_37) self.HomogenizationRunType.setObjectName(u"HomogenizationRunType") - sizePolicy6.setHeightForWidth(self.HomogenizationRunType.sizePolicy().hasHeightForWidth()) - self.HomogenizationRunType.setSizePolicy(sizePolicy6) + sizePolicy8.setHeightForWidth(self.HomogenizationRunType.sizePolicy().hasHeightForWidth()) + self.HomogenizationRunType.setSizePolicy(sizePolicy8) + self.HomogenizationRunType.setMinimumSize(QSize(0, 75)) + self.HomogenizationRunType.setMaximumSize(QSize(16777215, 75)) self.page_31 = QWidget() self.page_31.setObjectName(u"page_31") self.HomogenizationRunType.addWidget(self.page_31) @@ -5508,15 +5537,24 @@ def setupUi(self, MainWindow): self.frame_65.setObjectName(u"frame_65") self.frame_65.setFrameShape(QFrame.NoFrame) self.frame_65.setFrameShadow(QFrame.Raised) - self.formLayout_9 = QFormLayout(self.frame_65) + self.verticalLayout_74 = QVBoxLayout(self.frame_65) + self.verticalLayout_74.setObjectName(u"verticalLayout_74") + self.verticalLayout_74.setContentsMargins(0, 0, 0, 0) + self.frame_70 = QFrame(self.frame_65) + self.frame_70.setObjectName(u"frame_70") + sizePolicy8.setHeightForWidth(self.frame_70.sizePolicy().hasHeightForWidth()) + self.frame_70.setSizePolicy(sizePolicy8) + self.frame_70.setFrameShape(QFrame.NoFrame) + self.frame_70.setFrameShadow(QFrame.Raised) + self.formLayout_9 = QFormLayout(self.frame_70) self.formLayout_9.setObjectName(u"formLayout_9") self.formLayout_9.setContentsMargins(0, 0, 0, 0) - self.label_58 = QLabel(self.frame_65) + self.label_58 = QLabel(self.frame_70) self.label_58.setObjectName(u"label_58") self.formLayout_9.setWidget(0, QFormLayout.LabelRole, self.label_58) - self.INmpiRanks = QSpinBox(self.frame_65) + self.INmpiRanks = QSpinBox(self.frame_70) self.INmpiRanks.setObjectName(u"INmpiRanks") self.INmpiRanks.setReadOnly(False) self.INmpiRanks.setButtonSymbols(QAbstractSpinBox.UpDownArrows) @@ -5526,25 +5564,28 @@ def setupUi(self, MainWindow): self.formLayout_9.setWidget(0, QFormLayout.FieldRole, self.INmpiRanks) - self.verticalLayout_72.addWidget(self.frame_65) + self.verticalLayout_74.addWidget(self.frame_70) - self.label_65 = QLabel(self.page_32) + self.label_65 = QLabel(self.frame_65) self.label_65.setObjectName(u"label_65") self.label_65.setWordWrap(True) - self.verticalLayout_72.addWidget(self.label_65) + self.verticalLayout_74.addWidget(self.label_65, 0, Qt.AlignTop) + + + self.verticalLayout_72.addWidget(self.frame_65) self.HomogenizationRunType.addWidget(self.page_32) - self.verticalLayout_13.addWidget(self.HomogenizationRunType, 0, Qt.AlignTop) + self.verticalLayout_73.addWidget(self.HomogenizationRunType, 0, Qt.AlignTop) - self.label_64 = QLabel(self.page_21) + self.label_64 = QLabel(self.page_37) self.label_64.setObjectName(u"label_64") self.label_64.setFont(font14) - self.verticalLayout_13.addWidget(self.label_64, 0, Qt.AlignHCenter) + self.verticalLayout_73.addWidget(self.label_64, 0, Qt.AlignHCenter) - self.frame_64 = QFrame(self.page_21) + self.frame_64 = QFrame(self.page_37) self.frame_64.setObjectName(u"frame_64") self.frame_64.setFrameShape(QFrame.NoFrame) self.frame_64.setFrameShadow(QFrame.Raised) @@ -5563,9 +5604,9 @@ def setupUi(self, MainWindow): self.formLayout_19.setWidget(0, QFormLayout.FieldRole, self.INHManual) - self.verticalLayout_13.addWidget(self.frame_64, 0, Qt.AlignHCenter) + self.verticalLayout_73.addWidget(self.frame_64, 0, Qt.AlignHCenter) - self.frame_68 = QFrame(self.page_21) + self.frame_68 = QFrame(self.page_37) self.frame_68.setObjectName(u"frame_68") self.frame_68.setFrameShape(QFrame.NoFrame) self.frame_68.setFrameShadow(QFrame.Raised) @@ -5585,24 +5626,69 @@ def setupUi(self, MainWindow): self.horizontalLayout_25.addWidget(self.BKillEVPFFT2) - self.verticalLayout_13.addWidget(self.frame_68) + self.verticalLayout_73.addWidget(self.frame_68) self.verticalSpacer_9 = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) - self.verticalLayout_13.addItem(self.verticalSpacer_9) + self.verticalLayout_73.addItem(self.verticalSpacer_9) + + self.HomogenizationRunWrite.addWidget(self.page_37) + self.page_38 = QWidget() + self.page_38.setObjectName(u"page_38") + self.verticalLayout_75 = QVBoxLayout(self.page_38) + self.verticalLayout_75.setObjectName(u"verticalLayout_75") + self.BHWriteFiles = QPushButton(self.page_38) + self.BHWriteFiles.setObjectName(u"BHWriteFiles") + + self.verticalLayout_75.addWidget(self.BHWriteFiles) + + self.verticalSpacer_21 = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) + + self.verticalLayout_75.addItem(self.verticalSpacer_21) + + self.HomogenizationRunWrite.addWidget(self.page_38) + + self.verticalLayout_13.addWidget(self.HomogenizationRunWrite) self.RunOptions.addWidget(self.page_21) self.page_24 = QWidget() self.page_24.setObjectName(u"page_24") self.verticalLayout_39 = QVBoxLayout(self.page_24) self.verticalLayout_39.setObjectName(u"verticalLayout_39") - self.label_62 = QLabel(self.page_24) + self.frame_72 = QFrame(self.page_24) + self.frame_72.setObjectName(u"frame_72") + self.frame_72.setFrameShape(QFrame.NoFrame) + self.frame_72.setFrameShadow(QFrame.Raised) + self.formLayout_29 = QFormLayout(self.frame_72) + self.formLayout_29.setObjectName(u"formLayout_29") + self.formLayout_29.setContentsMargins(0, 0, 0, 5) + self.INBFRunLocally = QRadioButton(self.frame_72) + self.INBFRunLocally.setObjectName(u"INBFRunLocally") + self.INBFRunLocally.setChecked(True) + + self.formLayout_29.setWidget(0, QFormLayout.LabelRole, self.INBFRunLocally) + + self.INBFWriteFiles = QRadioButton(self.frame_72) + self.INBFWriteFiles.setObjectName(u"INBFWriteFiles") + + self.formLayout_29.setWidget(0, QFormLayout.FieldRole, self.INBFWriteFiles) + + + self.verticalLayout_39.addWidget(self.frame_72, 0, Qt.AlignHCenter) + + self.BFRunWrite = QStackedWidget(self.page_24) + self.BFRunWrite.setObjectName(u"BFRunWrite") + self.page_39 = QWidget() + self.page_39.setObjectName(u"page_39") + self.verticalLayout_76 = QVBoxLayout(self.page_39) + self.verticalLayout_76.setObjectName(u"verticalLayout_76") + self.label_62 = QLabel(self.page_39) self.label_62.setObjectName(u"label_62") self.label_62.setFont(font14) - self.verticalLayout_39.addWidget(self.label_62, 0, Qt.AlignHCenter) + self.verticalLayout_76.addWidget(self.label_62, 0, Qt.AlignHCenter) - self.frame_63 = QFrame(self.page_24) + self.frame_63 = QFrame(self.page_39) self.frame_63.setObjectName(u"frame_63") self.frame_63.setFrameShape(QFrame.NoFrame) self.frame_63.setFrameShadow(QFrame.Raised) @@ -5621,9 +5707,9 @@ def setupUi(self, MainWindow): self.formLayout_11.setWidget(0, QFormLayout.FieldRole, self.INBFParallel) - self.verticalLayout_39.addWidget(self.frame_63, 0, Qt.AlignHCenter) + self.verticalLayout_76.addWidget(self.frame_63, 0, Qt.AlignHCenter) - self.BFRunType = QStackedWidget(self.page_24) + self.BFRunType = QStackedWidget(self.page_39) self.BFRunType.setObjectName(u"BFRunType") sizePolicy6.setHeightForWidth(self.BFRunType.sizePolicy().hasHeightForWidth()) self.BFRunType.setSizePolicy(sizePolicy6) @@ -5651,9 +5737,9 @@ def setupUi(self, MainWindow): self.BFRunType.addWidget(self.page_34) - self.verticalLayout_39.addWidget(self.BFRunType, 0, Qt.AlignTop) + self.verticalLayout_76.addWidget(self.BFRunType) - self.frame_69 = QFrame(self.page_24) + self.frame_69 = QFrame(self.page_39) self.frame_69.setObjectName(u"frame_69") self.frame_69.setFrameShape(QFrame.NoFrame) self.frame_69.setFrameShadow(QFrame.Raised) @@ -5672,7 +5758,25 @@ def setupUi(self, MainWindow): self.horizontalLayout_26.addWidget(self.BKillBulkForming) - self.verticalLayout_39.addWidget(self.frame_69) + self.verticalLayout_76.addWidget(self.frame_69) + + self.BFRunWrite.addWidget(self.page_39) + self.page_40 = QWidget() + self.page_40.setObjectName(u"page_40") + self.verticalLayout_77 = QVBoxLayout(self.page_40) + self.verticalLayout_77.setObjectName(u"verticalLayout_77") + self.BBFWriteFiles = QPushButton(self.page_40) + self.BBFWriteFiles.setObjectName(u"BBFWriteFiles") + + self.verticalLayout_77.addWidget(self.BBFWriteFiles, 0, Qt.AlignTop) + + self.verticalSpacer_31 = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) + + self.verticalLayout_77.addItem(self.verticalSpacer_31) + + self.BFRunWrite.addWidget(self.page_40) + + self.verticalLayout_39.addWidget(self.BFRunWrite, 0, Qt.AlignTop) self.verticalSpacer_29 = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) @@ -6427,10 +6531,12 @@ def setupUi(self, MainWindow): self.BoundaryConditionsOptions.setCurrentIndex(0) self.SolverSettingsOptions.setCurrentIndex(0) self.RunOptions.setCurrentIndex(0) + self.HomogenizationRunWrite.setCurrentIndex(0) self.HomogenizationBatch.setCurrentIndex(0) self.HomogenizationRunType.setCurrentIndex(0) self.BRunEVPFFT2.setDefault(True) self.BKillEVPFFT2.setDefault(False) + self.BFRunWrite.setCurrentIndex(0) self.BFRunType.setCurrentIndex(0) self.BRunBulkForming.setDefault(True) self.tabWidget_2.setCurrentIndex(0) @@ -7559,6 +7665,8 @@ def retranslateUi(self, MainWindow): self.INRunSelection.setItemText(2, QCoreApplication.translate("MainWindow", u"Bulk Forming", None)) self.BRunSGH.setText(QCoreApplication.translate("MainWindow", u"Run SGH Solver", None)) + self.INHRunLocally.setText(QCoreApplication.translate("MainWindow", u"Run Locally", None)) + self.INHWriteFiles.setText(QCoreApplication.translate("MainWindow", u"Write Input Files", None)) self.label_53.setText(QCoreApplication.translate("MainWindow", u"Job Type", None)) self.INSingleJob.setText(QCoreApplication.translate("MainWindow", u"Single Job", None)) self.INBatchJob.setText(QCoreApplication.translate("MainWindow", u"Batch Job", None)) @@ -7586,12 +7694,16 @@ def retranslateUi(self, MainWindow): self.INHManual.setText(QCoreApplication.translate("MainWindow", u"Manual", None)) self.BRunEVPFFT2.setText(QCoreApplication.translate("MainWindow", u"Run Homogenization", None)) self.BKillEVPFFT2.setText(QCoreApplication.translate("MainWindow", u"Terminate", None)) + self.BHWriteFiles.setText(QCoreApplication.translate("MainWindow", u"Write Input Files", None)) + self.INBFRunLocally.setText(QCoreApplication.translate("MainWindow", u"Run Locally", None)) + self.INBFWriteFiles.setText(QCoreApplication.translate("MainWindow", u"Write Input Files", None)) self.label_62.setText(QCoreApplication.translate("MainWindow", u"Run Type", None)) self.INBFSerial.setText(QCoreApplication.translate("MainWindow", u"Serial", None)) self.INBFParallel.setText(QCoreApplication.translate("MainWindow", u"Parallel", None)) self.label_63.setText(QCoreApplication.translate("MainWindow", u"MPI Ranks:", None)) self.BRunBulkForming.setText(QCoreApplication.translate("MainWindow", u"Run Bulk Forming Simulation", None)) self.BKillBulkForming.setText(QCoreApplication.translate("MainWindow", u"Terminate", None)) + self.BBFWriteFiles.setText(QCoreApplication.translate("MainWindow", u"Write Input Files", None)) self.LPostprocessing.setText(QCoreApplication.translate("MainWindow", u"

Postprocessing

", None)) self.INSelectPostprocessing.setItemText(0, QCoreApplication.translate("MainWindow", u"SGH", None)) self.INSelectPostprocessing.setItemText(1, QCoreApplication.translate("MainWindow", u"Homogenization", None))