FEM: make use of mesh data getter class for calculix solver and ccxtools
This commit is contained in:
@@ -40,6 +40,7 @@ from .. import run
|
||||
from .. import settings
|
||||
from feminout import importCcxDatResults
|
||||
from feminout import importCcxFrdResults
|
||||
from femmesh import meshsetsgetter
|
||||
from femtools import femutils
|
||||
from femtools import membertools
|
||||
|
||||
@@ -60,12 +61,28 @@ class Prepare(run.Prepare):
|
||||
def run(self):
|
||||
global _inputFileName
|
||||
self.pushStatus("Preparing input files...\n")
|
||||
|
||||
mesh_obj = membertools.get_mesh_to_solve(self.analysis)[0] # pre check done already
|
||||
|
||||
# get mesh set data
|
||||
# TODO evaluate if it makes sense to add new task
|
||||
# between check and prepare to the solver frame work
|
||||
meshdatagetter = meshsetsgetter.MeshSetsGetter(
|
||||
self.analysis,
|
||||
self.solver,
|
||||
mesh_obj,
|
||||
membertools.AnalysisMember(self.analysis),
|
||||
)
|
||||
meshdatagetter.get_mesh_sets()
|
||||
|
||||
# write input file
|
||||
w = writer.FemInputWriterCcx(
|
||||
self.analysis,
|
||||
self.solver,
|
||||
membertools.get_mesh_to_solve(self.analysis)[0], # pre check has been done already
|
||||
membertools.AnalysisMember(self.analysis),
|
||||
self.directory
|
||||
mesh_obj,
|
||||
meshdatagetter.member,
|
||||
self.directory,
|
||||
meshdatagetter.mat_geo_sets
|
||||
)
|
||||
path = w.write_calculix_input_file()
|
||||
# report to user if task succeeded
|
||||
|
||||
@@ -132,10 +132,8 @@ class FemInputWriterCcx(writerbase.FemInputWriter):
|
||||
# write calculix input
|
||||
def write_calculix_input_file(self):
|
||||
|
||||
FreeCAD.Console.PrintMessage("Get mesh sets.\n")
|
||||
time_start = time.process_time()
|
||||
if not self.mat_geo_sets:
|
||||
self.get_mesh_sets()
|
||||
time_getsets = time.process_time()
|
||||
|
||||
FreeCAD.Console.PrintMessage(
|
||||
|
||||
@@ -97,6 +97,7 @@ class FemInputWriter():
|
||||
"In rare cases this might not be an error. "
|
||||
)
|
||||
|
||||
# *************************************************
|
||||
# deprecated, leave for compatibility reasons
|
||||
# if these are calculated here they are calculated twice :-(
|
||||
self.femnodes_mesh = {}
|
||||
@@ -110,6 +111,9 @@ class FemInputWriter():
|
||||
self.femelement_edges_table = {}
|
||||
self.femelement_count_test = True
|
||||
|
||||
# deprecated, leave for compatibility reasons
|
||||
# do not add new objects
|
||||
# only the ones which exists on 0.19 release are kept
|
||||
# materials
|
||||
self.material_objects = member.mats_linear
|
||||
self.material_nonlinear_objects = member.mats_nonlinear
|
||||
@@ -119,7 +123,6 @@ class FemInputWriter():
|
||||
self.fluidsection_objects = member.geos_fluidsection
|
||||
self.shellthickness_objects = member.geos_shellthickness
|
||||
# constraints
|
||||
self.centrif_objects = member.cons_centrif
|
||||
self.contact_objects = member.cons_contact
|
||||
self.displacement_objects = member.cons_displacement
|
||||
self.fixed_objects = member.cons_fixed
|
||||
@@ -128,7 +131,6 @@ class FemInputWriter():
|
||||
self.initialtemperature_objects = member.cons_initialtemperature
|
||||
self.planerotation_objects = member.cons_planerotation
|
||||
self.pressure_objects = member.cons_pressure
|
||||
self.sectionprint_objects = member.cons_sectionprint
|
||||
self.selfweight_objects = member.cons_selfweight
|
||||
self.temperature_objects = member.cons_temperature
|
||||
self.tie_objects = member.cons_tie
|
||||
@@ -220,46 +222,8 @@ class FemInputWriter():
|
||||
f.write(write_after)
|
||||
|
||||
# ********************************************************************************************
|
||||
# ********************************************************************************************
|
||||
# use set for node sets to be sure all nodes are unique
|
||||
# use sorted to be sure the order is the same on different runs
|
||||
# be aware a sorted set returns a list, because set are not sorted by default
|
||||
# - done in return value of meshtools.get_femnodes_by_femobj_with_references
|
||||
# TODO FIXME might be appropriate for element sets and surfaceface sets too
|
||||
|
||||
# ********************************************************************************************
|
||||
# get all known sets
|
||||
def get_mesh_sets(self):
|
||||
FreeCAD.Console.PrintMessage(
|
||||
"Get mesh data for "
|
||||
"node sets (groups), surface sets (groups) and element sets (groups)\n"
|
||||
)
|
||||
|
||||
# materials and element geometry element sets getter
|
||||
self.get_element_sets_material_and_femelement_geometry()
|
||||
|
||||
# constraints element sets getter
|
||||
self.get_constraints_centrif_elements()
|
||||
|
||||
# constraints node sets getter
|
||||
self.get_constraints_fixed_nodes()
|
||||
self.get_constraints_displacement_nodes()
|
||||
self.get_constraints_planerotation_nodes()
|
||||
|
||||
# constraints surface sets getter
|
||||
self.get_constraints_contact_faces()
|
||||
self.get_constraints_tie_faces()
|
||||
self.get_constraints_sectionprint_faces()
|
||||
self.get_constraints_transform_nodes()
|
||||
self.get_constraints_temperature_nodes()
|
||||
|
||||
# constraints sets with constraint data
|
||||
self.get_constraints_force_nodeloads()
|
||||
self.get_constraints_pressure_faces()
|
||||
self.get_constraints_heatflux_faces()
|
||||
|
||||
# ********************************************************************************************
|
||||
# sets
|
||||
# deprecated, do not add new constraints
|
||||
# only the ones which exists on 0.19 release are kept
|
||||
def get_constraints_fixed_nodes(self):
|
||||
self.meshdatagetter.get_constraints_fixed_nodes()
|
||||
|
||||
@@ -290,18 +254,8 @@ class FemInputWriter():
|
||||
def get_constraints_tie_faces(self):
|
||||
self.meshdatagetter.get_constraints_tie_faces()
|
||||
|
||||
def get_constraints_sectionprint_faces(self):
|
||||
self.meshdatagetter.get_constraints_sectionprint_faces()
|
||||
|
||||
def get_constraints_heatflux_faces(self):
|
||||
self.meshdatagetter.get_constraints_heatflux_faces()
|
||||
|
||||
def get_constraints_centrif_elements(self):
|
||||
self.meshdatagetter.get_constraints_centrif_elements()
|
||||
|
||||
def get_element_sets_material_and_femelement_geometry(self):
|
||||
self.meshdatagetter.get_element_sets_material_and_femelement_geometry()
|
||||
self.mat_geo_sets = self.meshdatagetter.mat_geo_sets
|
||||
|
||||
|
||||
## @}
|
||||
|
||||
@@ -366,6 +366,20 @@ class FemToolsCcx(QtCore.QRunnable, QtCore.QObject):
|
||||
self.set_inp_file_name()
|
||||
|
||||
def write_inp_file(self):
|
||||
|
||||
# get mesh set data
|
||||
# TODO use separate method for getting the mesh set data
|
||||
from femmesh import meshsetsgetter
|
||||
meshdatagetter = meshsetsgetter.MeshSetsGetter(
|
||||
self.analysis,
|
||||
self.solver,
|
||||
self.mesh,
|
||||
membertools.AnalysisMember(self.analysis),
|
||||
)
|
||||
# save the sets into the member objects of the instanz meshdatagetter
|
||||
meshdatagetter.get_mesh_sets()
|
||||
|
||||
# write input file
|
||||
import femsolver.calculix.writer as iw
|
||||
self.inp_file_name = ""
|
||||
try:
|
||||
@@ -373,8 +387,9 @@ class FemToolsCcx(QtCore.QRunnable, QtCore.QObject):
|
||||
self.analysis,
|
||||
self.solver,
|
||||
self.mesh,
|
||||
self.member,
|
||||
self.working_dir
|
||||
meshdatagetter.member,
|
||||
self.working_dir,
|
||||
meshdatagetter.mat_geo_sets
|
||||
)
|
||||
self.inp_file_name = inp_writer.write_calculix_input_file()
|
||||
except Exception:
|
||||
|
||||
Reference in New Issue
Block a user