FEM: make use of mesh data getter class for calculix solver and ccxtools

This commit is contained in:
Bernd Hahnebach
2021-07-16 07:44:08 +02:00
parent 895c817f56
commit fcb91f36af
4 changed files with 43 additions and 59 deletions

View File

@@ -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

View File

@@ -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(

View File

@@ -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
## @}

View File

@@ -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: