Skip to content

Commit

Permalink
updated EVPFFT solver connections in GUI
Browse files Browse the repository at this point in the history
  • Loading branch information
shankinsMechEng committed Apr 8, 2024
1 parent b32e766 commit dc0e440
Show file tree
Hide file tree
Showing 10 changed files with 345 additions and 276 deletions.
1 change: 1 addition & 0 deletions python/FIERRO-GUI/fierro_gui/DeveloperInputs.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
fierro_mesh_builder_exe = '/Users/shankins/Documents/FY24/Github/XcodeFierro/Fierro/build-fierro-serial/bin/fierro-mesh-builder'
fierro_voxelizer_exe = '/Users/shankins/Documents/FY24/Github/XcodeFierro/Fierro/build-fierro-serial/bin/fierro-voxelizer'
fierro_parallel_explicit_exe = '/Users/shankins/Documents/FY24/Github/XcodeFierro/Fierro/build-fierro-serial/bin/fierro-parallel-explicit'
fierro_evpfft_exe = '/Users/shankins/Documents/FY24/Github/XcodeFierro/Fierro/src/EVPFFT/evpfft_fftw_serial/evpfft'
149 changes: 139 additions & 10 deletions python/FIERRO-GUI/fierro_gui/EVPFFT_Lattice.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,11 @@
import re
import csv
import numpy as np
import subprocess
#import paraview.simple as paraview.simple
from paraview.simple import *
from EVPFFT_Lattice_WInput import *
from DeveloperInputs import *

# ==============================================
# ======= EVPFFT SOLVER LATTICE PIPELINE =======
Expand Down Expand Up @@ -41,15 +45,29 @@ def material_type():

def material_region():
if str(self.INRegion.currentText()) == 'Void':
pvsimple.Hide(self.threshold)
self.threshold = pvsimple.Threshold(Input = self.voxel_reader, Scalars = "density", ThresholdMethod = "Below Lower Threshold", UpperThreshold = 1, LowerThreshold = 0, AllScalars = 1, UseContinuousCellRange = 0, Invert = 0)
pvsimple.Show(self.threshold, self.render_view)
# Remove all objects from window view
SetActiveView(self.render_view)
renderer = self.render_view.GetRenderer()
renderer.RemoveAllViewProps()
self.render_view.Update()
self.render_view.StillRender()

# Show void region only
self.threshold = paraview.simple.Threshold(Input = self.vtk_reader, Scalars = "density", ThresholdMethod = "Below Lower Threshold", UpperThreshold = 1, LowerThreshold = 0, AllScalars = 1, UseContinuousCellRange = 0, Invert = 0)
paraview.simple.Show(self.threshold, self.render_view)
self.render_view.ResetCamera()
self.render_view.StillRender()
else:
pvsimple.Hide(self.threshold)
self.threshold = pvsimple.Threshold(Input = self.voxel_reader, Scalars = "density", ThresholdMethod = "Above Upper Threshold", UpperThreshold = 1, LowerThreshold = 0, AllScalars = 1, UseContinuousCellRange = 0, Invert = 0)
pvsimple.Show(self.threshold, self.render_view)
# Remove all objects from window view
SetActiveView(self.render_view)
renderer = self.render_view.GetRenderer()
renderer.RemoveAllViewProps()
self.render_view.Update()
self.render_view.StillRender()

# Show material region only
self.threshold = paraview.simple.Threshold(Input = self.vtk_reader, Scalars = "density", ThresholdMethod = "Above Upper Threshold", UpperThreshold = 1, LowerThreshold = 0, AllScalars = 1, UseContinuousCellRange = 0, Invert = 0)
paraview.simple.Show(self.threshold, self.render_view)
self.render_view.ResetCamera()
self.render_view.StillRender()
self.INRegion.currentIndexChanged.connect(material_region)
Expand Down Expand Up @@ -553,14 +571,17 @@ def delete_bcs():
def single_EVPFFT(BC_index):
if self.p == None:
EVPFFT_Lattice_WInput(self,BC_index)
executable_path = fierro_evpfft_exe
arguments = ["-f", self.EVPFFT_INPUT, "-m", "2"]
self.p = QProcess()
self.p.readyReadStandardOutput.connect(handle_stdout)
self.p.readyReadStandardError.connect(handle_stderr)
self.p.stateChanged.connect(handle_state)
self.p.finished.connect(process_finished)
self.p.start("evpfft",["-f", self.EVPFFT_INPUT, "-m", "2"])
self.p.start(executable_path, arguments)
self.progress_re = re.compile(" Current Time STEP = (\\d+)")
self.run_cnt += 1
self.run_cnt += 1

def simple_percent_parser(output):
m = self.progress_re.search(output)
if m:
Expand All @@ -584,8 +605,8 @@ def handle_stderr():
def handle_state(state):
states = {
QProcess.NotRunning: 'Finished',
QProcess.Starting: 'Starting EVPFFT',
QProcess.Running: 'Running EVPFFT',
QProcess.Starting: 'Starting Fierro',
QProcess.Running: 'Running Fierro',
}
self.state_name = states[state]
self.RunOutputWindow.appendPlainText(f"{self.state_name}")
Expand Down Expand Up @@ -673,5 +694,113 @@ def homogenization_click():
self.THomogenization.setItem(10,0,QTableWidgetItem(str(self.HG13[0])))
self.THomogenization.setItem(11,0,QTableWidgetItem(str(self.HG23[0])))
self.BHomogenization.clicked.connect(homogenization_click)

# Preview Results
def preview_results_click():
# Remove all objects from window view
SetActiveView(self.render_view)
renderer = self.render_view.GetRenderer()
renderer.RemoveAllViewProps()
self.render_view.Update()
self.render_view.StillRender()
try:
self.display
except:
False
else:
self.display.SetScalarBarVisibility(self.render_view, False)

# Display .xdmf data
self.results_reader = paraview.simple.XDMFReader(FileNames="micro_state_timestep_10.xdmf")
paraview.simple.SetDisplayProperties(Representation="Surface")
self.display = Show(self.results_reader, self.render_view)

# Color by the selected variable
selected_variable = str(self.INPreviewResults.currentText())
paraview.simple.ColorBy(self.display, ('CELLS', selected_variable))
vmstressLUT = paraview.simple.GetColorTransferFunction(selected_variable)
self.display.SetScalarBarVisibility(self.render_view, True)
self.render_view.ResetCamera()
self.render_view.StillRender()
self.BPreviewResults.clicked.connect(preview_results_click)
self.BPreviewResults.clicked.connect(lambda: self.OutputWindows.setCurrentIndex(0))

# Open Paraview
def open_paraview_click():
command = ["paraview", "micro_state_timestep_10.xdmf"]
subprocess.Popen(command)
self.BOpenParaview.clicked.connect(open_paraview_click)

# # Stress vs Strain Plot
# def plot_ss_click():
# # Get the stress-strain data
# try:
# self.Plot.figure
# except:
# with open("str_str.out", newline='') as f:
# reader = csv.reader(f)
# self.ss_data = list(reader)
# x = [0 for i in range(int(self.INNumberOfSteps.text()))]
# y = [0 for i in range(int(self.INNumberOfSteps.text()))]
# for i in range(int(self.INNumberOfSteps.text())):
# if str(self.INPlotSS.currentText()) == 'S11 vs E11':
# xcol = 0
# ycol = 6
# elif str(self.INPlotSS.currentText()) == 'S22 vs E22':
# xcol = 1
# ycol = 7
# elif str(self.INPlotSS.currentText()) == 'S33 vs E33':
# xcol = 2
# ycol = 8
# x[i] = float(self.ss_data[i+1][xcol])
# y[i] = float(self.ss_data[i+1][ycol])
# # Plot data
# self.Plot.figure = Figure()
# self.Plot.ax = self.Plot.figure.add_subplot()
# print("(",x[1],",",y[1],")")
# self.Plot.ax.plot(x,y)
# self.Plot.ax.set_xlabel('STRAIN')
# self.Plot.ax.set_ylabel('STRESS')
# self.Plot.figure.tight_layout()
# # Display plot and toolbar
# layout = QVBoxLayout()
# self.Plot.setLayout(layout)
# self.Plot.canvas = FigureCanvasQTAgg(self.Plot.figure)
# layout.addWidget(self.Plot.canvas)
# self.toolbar = NavigationToolbar2QT(self.Plot.canvas,self.Plot)
# layout.addWidget(self.toolbar)
# else:
# self.timer = QTimer()
# self.timer.setInterval(100)
# self.timer.timeout.connect(update_plot)
# self.timer.start()
# def update_plot():
# if self.run_cnt > 1:
# with open("str_str.out", newline='') as f:
# reader = csv.reader(f)
# self.ss_data = list(reader)
# x = [0 for i in range(int(self.INNumberOfSteps.text()))]
# y = [0 for i in range(int(self.INNumberOfSteps.text()))]
# for i in range(int(self.INNumberOfSteps.text())):
# if str(self.INPlotSS.currentText()) == 'S11 vs E11':
# xcol = 0
# ycol = 6
# elif str(self.INPlotSS.currentText()) == 'S22 vs E22':
# xcol = 1
# ycol = 7
# elif str(self.INPlotSS.currentText()) == 'S33 vs E33':
# xcol = 2
# ycol = 8
# x[i] = float(self.ss_data[i+1][xcol])
# y[i] = float(self.ss_data[i+1][ycol])
# self.Plot.ax.cla()
# self.Plot.ax.plot(x,y)
# self.Plot.ax.set_xlabel('STRAIN')
# self.Plot.ax.set_ylabel('STRESS')
# self.Plot.figure.tight_layout()
# self.Plot.canvas.draw()
# self.timer.stop()
# self.BPlotSS.clicked.connect(plot_ss_click)
# self.BPlotSS.clicked.connect(lambda: self.OutputWindows.setCurrentIndex(1))


5 changes: 2 additions & 3 deletions python/FIERRO-GUI/fierro_gui/EVPFFT_Lattice_WInput.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,8 @@ def EVPFFT_Lattice_WInput(self, BC_index):
for i in range(self.TMaterials.rowCount()):
if self.TMaterials.item(i,2).text() == 'Isotropic' or 'Transversely Isotropic' in self.TMaterials.item(i,2).text() or self.TMaterials.item(i,2).text() == 'Orthotropic':
if i == 0:
print("generating EP0")
elastic_parameters = open(self.ELASTIC_PARAMETERS_0,"w")
else:
print("generating EP1")
elastic_parameters = open(self.ELASTIC_PARAMETERS_1,"w")
iso = '0\n'
elastic_parameters.write(iso)
Expand Down Expand Up @@ -63,7 +61,8 @@ def EVPFFT_Lattice_WInput(self, BC_index):
dz = float(self.TParts.item(0,6).text())/float(self.TParts.item(0,9).text())
nph_delt = '2 number of phases (nph)\n' + f'{dx:.4f} {dy:.4f} {dz:.4f} RVE dimensions (delt)\n' + '* name and path of microstructure file (filetext)\n'
evpfft_lattice_input.write(nph_delt)
vtkfile = f'{self.VTK_OUTPUT}\n'
vtkfile = self.voxelizer_dir + '/VTK_Geometry_' + str(self.TParts.item(0,0).text()) + '.vtk\n'
# vtkfile = f'{self.VTK_OUTPUT}\n'
evpfft_lattice_input.write(vtkfile)
for i in range(2):
if not self.TMaterials.item(i,2) or self.TMaterials.item(i,2).text() == 'Ideal Gas':
Expand Down
4 changes: 2 additions & 2 deletions python/FIERRO-GUI/fierro_gui/Explicit_SGH.py
Original file line number Diff line number Diff line change
Expand Up @@ -556,8 +556,8 @@ def handle_stderr():
def handle_state(state):
states = {
QProcess.NotRunning: 'Finished',
QProcess.Starting: 'Starting EVPFFT',
QProcess.Running: 'Running EVPFFT',
QProcess.Starting: 'Starting Fierro',
QProcess.Running: 'Running Fierro',
}
self.state_name = states[state]
self.RunOutputWindow.appendPlainText(f"{self.state_name}")
Expand Down
Loading

0 comments on commit dc0e440

Please sign in to comment.