FEM: solver, improve analysis member tests
This commit is contained in:
@@ -52,8 +52,21 @@ class Check(run.Check):
|
||||
|
||||
def run(self):
|
||||
self.pushStatus("Checking analysis...\n")
|
||||
self.checkMesh()
|
||||
self.checkMaterial()
|
||||
self.check_mesh_exists()
|
||||
|
||||
# workaround use Calculix ccxtools pre checks
|
||||
from femtools.checksanalysis import check_member_for_solver_calculix
|
||||
message = check_member_for_solver_calculix(
|
||||
self.analysis,
|
||||
self.solver,
|
||||
membertools.get_mesh_to_solve(self.analysis)[0],
|
||||
membertools.AnalysisMember(self.analysis)
|
||||
)
|
||||
if message:
|
||||
text = "CalculiX can not be started...\n"
|
||||
self.report.error("{}{}".format(text, message))
|
||||
self.fail()
|
||||
return
|
||||
|
||||
|
||||
class Prepare(run.Prepare):
|
||||
|
||||
@@ -47,9 +47,9 @@ class Check(run.Check):
|
||||
|
||||
def run(self):
|
||||
self.pushStatus("Checking analysis...\n")
|
||||
if (self.checkMesh()):
|
||||
if (self.check_mesh_exists()):
|
||||
self.checkMeshType()
|
||||
self.checkMaterial()
|
||||
self.check_material_exists()
|
||||
self.checkEquations()
|
||||
|
||||
def checkMeshType(self):
|
||||
|
||||
@@ -418,11 +418,11 @@ class Machine(BaseTask):
|
||||
|
||||
class Check(BaseTask):
|
||||
|
||||
def checkMesh(self):
|
||||
meshes = membertools.get_member(
|
||||
self.analysis,
|
||||
"Fem::FemMeshObject"
|
||||
)
|
||||
def get_several_member(self, t):
|
||||
return membertools.get_several_member(self.analysis, t)
|
||||
|
||||
def check_mesh_exists(self):
|
||||
meshes = self.get_several_member("Fem::FemMeshObject")
|
||||
if len(meshes) == 0:
|
||||
self.report.error("Missing a mesh object.")
|
||||
self.fail()
|
||||
@@ -436,10 +436,9 @@ class Check(BaseTask):
|
||||
return False
|
||||
return True
|
||||
|
||||
def checkMaterial(self):
|
||||
matObjs = membertools.get_member(
|
||||
self.analysis, "App::MaterialObjectPython")
|
||||
if len(matObjs) == 0:
|
||||
def check_material_exists(self):
|
||||
objs = self.get_several_member("App::MaterialObjectPython")
|
||||
if len(objs) == 0:
|
||||
self.report.error(
|
||||
"Missing a material object. "
|
||||
"At least one material is required."
|
||||
@@ -448,6 +447,42 @@ class Check(BaseTask):
|
||||
return False
|
||||
return True
|
||||
|
||||
def check_material_single(self):
|
||||
objs = self.get_several_member("App::MaterialObjectPython")
|
||||
if len(objs) > 1:
|
||||
self.report.error("Only one Material allowed for this solver.")
|
||||
self.fail()
|
||||
return False
|
||||
return True
|
||||
|
||||
def check_geos_beamsection_single(self):
|
||||
objs = self.get_several_member("Fem::ElementGeometry1D")
|
||||
if len(objs) > 1:
|
||||
self.report.error("Only one beamsection allowed for this solver.")
|
||||
self.fail()
|
||||
return False
|
||||
return True
|
||||
|
||||
def check_geos_shellthickness_single(self):
|
||||
objs = self.get_several_member("Fem::ElementGeometry2D")
|
||||
if len(objs) > 1:
|
||||
self.report.error("Only one shellthickness allowed for this solver.")
|
||||
self.fail()
|
||||
return False
|
||||
return True
|
||||
|
||||
def check_geos_beamsection_and_shellthickness(self):
|
||||
beamsec_obj = self.get_several_member("Fem::ElementGeometry1D")
|
||||
shellth_obj = self.get_several_member("Fem::ElementGeometry2D")
|
||||
if len(beamsec_obj) > 0 and len(shellth_obj) > 0:
|
||||
self.report.error(
|
||||
"Either beamsection or shellthickness objects are allowed for this solver, "
|
||||
"but not both in one analysis."
|
||||
)
|
||||
self.fail()
|
||||
return False
|
||||
return True
|
||||
|
||||
def checkSupported(self, allSupported):
|
||||
for m in self.analysis.Group:
|
||||
if femutils.is_of_type(m, "Fem::Constraint"):
|
||||
|
||||
@@ -46,8 +46,12 @@ class Check(run.Check):
|
||||
|
||||
def run(self):
|
||||
self.pushStatus("Checking analysis...\n")
|
||||
self.checkMesh()
|
||||
self.checkMaterial()
|
||||
self.check_mesh_exists()
|
||||
self.check_material_exists()
|
||||
self.check_material_single() # no multiple material
|
||||
self.check_geos_beamsection_single() # no multiple beamsection
|
||||
self.check_geos_shellthickness_single() # no multiple shellsection
|
||||
self.check_geos_beamsection_and_shellthickness() # either beams or shells
|
||||
|
||||
|
||||
class Prepare(run.Prepare):
|
||||
|
||||
@@ -260,8 +260,8 @@ class FemToolsCcx(QtCore.QRunnable, QtCore.QObject):
|
||||
"Working directory \'{}\' doesn't exist."
|
||||
.format(self.working_dir)
|
||||
)
|
||||
from femtools.checksanalysis import check_analysismember
|
||||
message += check_analysismember(
|
||||
from femtools.checksanalysis import check_member_for_solver_calculix
|
||||
message += check_member_for_solver_calculix(
|
||||
self.analysis,
|
||||
self.solver,
|
||||
self.mesh,
|
||||
|
||||
@@ -37,7 +37,7 @@ from . import femutils
|
||||
from femsolver.calculix.solver import ANALYSIS_TYPES
|
||||
|
||||
|
||||
def check_analysismember(analysis, solver, mesh, member):
|
||||
def check_member_for_solver_calculix(analysis, solver, mesh, member):
|
||||
|
||||
message = ""
|
||||
|
||||
|
||||
Reference in New Issue
Block a user