From 25de353599759f2cf3bb01021364167e2f9c8c55 Mon Sep 17 00:00:00 2001 From: Bernd Hahnebach Date: Fri, 7 Dec 2018 10:36:54 +0100 Subject: [PATCH] FEM: solver frame work ccx and z88, simplify member collection --- src/Mod/Fem/femsolver/calculix/tasks.py | 110 +++++------------------- src/Mod/Fem/femsolver/z88/tasks.py | 88 +++---------------- 2 files changed, 34 insertions(+), 164 deletions(-) diff --git a/src/Mod/Fem/femsolver/calculix/tasks.py b/src/Mod/Fem/femsolver/calculix/tasks.py index a4a9c15c47..f8a7df2ffa 100644 --- a/src/Mod/Fem/femsolver/calculix/tasks.py +++ b/src/Mod/Fem/femsolver/calculix/tasks.py @@ -157,100 +157,34 @@ class Results(run.Results): class _Container(object): def __init__(self, analysis): + self.analysis = analysis self.mesh = None - self.materials_linear = [] - self.materials_nonlinear = [] - self.fixed_constraints = [] - self.selfweight_constraints = [] - self.force_constraints = [] - self.pressure_constraints = [] - self.beam_sections = [] - self.beam_rotations = [] - self.fluid_sections = [] - self.shell_thicknesses = [] - self.displacement_constraints = [] - self.temperature_constraints = [] - self.heatflux_constraints = [] - self.initialtemperature_constraints = [] - self.planerotation_constraints = [] - self.contact_constraints = [] - self.transform_constraints = [] + self.materials_linear = self.get_several_member('Fem::Material') + self.materials_nonlinear = self.get_several_member('Fem::MaterialMechanicalNonlinear') + self.fixed_constraints = self.get_several_member('Fem::ConstraintFixed') + self.selfweight_constraints = self.get_several_member('Fem::ConstraintSelfWeight') + self.force_constraints = self.get_several_member('Fem::ConstraintForce') + self.pressure_constraints = self.get_several_member('Fem::ConstraintPressure') + self.beam_sections = self.get_several_member('Fem::FemElementGeometry1D') + self.beam_rotations = self.get_several_member('Fem::FemElementRotation1D') + self.fluid_sections = self.get_several_member('Fem::FemElementFluid1D') + self.shell_thicknesses = self.get_several_member('Fem::FemElementGeometry2D') + self.displacement_constraints = self.get_several_member('Fem::ConstraintDisplacement') + self.temperature_constraints = self.get_several_member('Fem::ConstraintTemperature') + self.heatflux_constraints = self.get_several_member('Fem::ConstraintHeatflux') + self.initialtemperature_constraints = self.get_several_member('Fem::ConstraintInitialTemperature') + self.planerotation_constraints = self.get_several_member('Fem::ConstraintPlaneRotation') + self.contact_constraints = self.get_several_member('Fem::ConstraintContact') + self.transform_constraints = self.get_several_member('Fem::ConstraintTransform') - for m in analysis.Group: + for m in self.analysis.Group: if m.isDerivedFrom("Fem::FemMeshObject"): if not self.mesh: self.mesh = m else: raise Exception('FEM: Multiple mesh in analysis not yet supported!') - elif m.isDerivedFrom("App::MaterialObjectPython"): - material_linear_dict = {} - material_linear_dict['Object'] = m - self.materials_linear.append(material_linear_dict) - elif hasattr(m, "Proxy") and m.Proxy.Type == "Fem::MaterialMechanicalNonlinear": - material_nonlinear_dict = {} - material_nonlinear_dict['Object'] = m - self.materials_nonlinear.append(material_nonlinear_dict) - elif m.isDerivedFrom("Fem::ConstraintFixed"): - fixed_constraint_dict = {} - fixed_constraint_dict['Object'] = m - self.fixed_constraints.append(fixed_constraint_dict) - elif hasattr(m, "Proxy") and m.Proxy.Type == "Fem::ConstraintSelfWeight": - selfweight_dict = {} - selfweight_dict['Object'] = m - self.selfweight_constraints.append(selfweight_dict) - elif m.isDerivedFrom("Fem::ConstraintForce"): - force_constraint_dict = {} - force_constraint_dict['Object'] = m - force_constraint_dict['RefShapeType'] = FemUtils.get_refshape_type(m) - self.force_constraints.append(force_constraint_dict) - elif m.isDerivedFrom("Fem::ConstraintPressure"): - PressureObjectDict = {} - PressureObjectDict['Object'] = m - self.pressure_constraints.append(PressureObjectDict) - elif m.isDerivedFrom("Fem::ConstraintDisplacement"): - displacement_constraint_dict = {} - displacement_constraint_dict['Object'] = m - self.displacement_constraints.append(displacement_constraint_dict) - elif m.isDerivedFrom("Fem::ConstraintTemperature"): - temperature_constraint_dict = {} - temperature_constraint_dict['Object'] = m - self.temperature_constraints.append(temperature_constraint_dict) - elif m.isDerivedFrom("Fem::ConstraintHeatflux"): - heatflux_constraint_dict = {} - heatflux_constraint_dict['Object'] = m - self.heatflux_constraints.append(heatflux_constraint_dict) - elif m.isDerivedFrom("Fem::ConstraintInitialTemperature"): - initialtemperature_constraint_dict = {} - initialtemperature_constraint_dict['Object'] = m - self.initialtemperature_constraints.append( - initialtemperature_constraint_dict) - elif m.isDerivedFrom("Fem::ConstraintPlaneRotation"): - planerotation_constraint_dict = {} - planerotation_constraint_dict['Object'] = m - self.planerotation_constraints.append(planerotation_constraint_dict) - elif m.isDerivedFrom("Fem::ConstraintContact"): - contact_constraint_dict = {} - contact_constraint_dict['Object'] = m - self.contact_constraints.append(contact_constraint_dict) - elif m.isDerivedFrom("Fem::ConstraintTransform"): - transform_constraint_dict = {} - transform_constraint_dict['Object'] = m - self.transform_constraints.append(transform_constraint_dict) - elif hasattr(m, "Proxy") and m.Proxy.Type == "Fem::FemElementGeometry1D": - beam_section_dict = {} - beam_section_dict['Object'] = m - self.beam_sections.append(beam_section_dict) - elif hasattr(m, "Proxy") and m.Proxy.Type == "Fem::FemElementRotation1D": - beam_rotation_dict = {} - beam_rotation_dict['Object'] = m - self.beam_rotations.append(beam_rotation_dict) - elif hasattr(m, "Proxy") and m.Proxy.Type == "Fem::FemElementFluid1D": - fluid_section_dict = {} - fluid_section_dict['Object'] = m - self.fluid_sections.append(fluid_section_dict) - elif hasattr(m, "Proxy") and m.Proxy.Type == "Fem::FemElementGeometry2D": - shell_thickness_dict = {} - shell_thickness_dict['Object'] = m - self.shell_thicknesses.append(shell_thickness_dict) + + def get_several_member(self, t): + return FemUtils.get_several_member(self.analysis, t) ## @} diff --git a/src/Mod/Fem/femsolver/z88/tasks.py b/src/Mod/Fem/femsolver/z88/tasks.py index ec0b962f34..82804e37c4 100644 --- a/src/Mod/Fem/femsolver/z88/tasks.py +++ b/src/Mod/Fem/femsolver/z88/tasks.py @@ -155,17 +155,20 @@ class Results(run.Results): class _Container(object): def __init__(self, analysis): + self.analysis = analysis self.mesh = None - self.materials_linear = [] + self.materials_linear = self.get_several_member('Fem::Material') + self.fixed_constraints = self.get_several_member('Fem::ConstraintFixed') + self.force_constraints = self.get_several_member('Fem::ConstraintForce') + self.beam_sections = self.get_several_member('Fem::FemElementGeometry1D') + self.shell_thicknesses = self.get_several_member('Fem::FemElementGeometry2D') + + # constraints not supported by z88 self.materials_nonlinear = [] - self.fixed_constraints = [] self.selfweight_constraints = [] - self.force_constraints = [] self.pressure_constraints = [] - self.beam_sections = [] self.beam_rotations = [] self.fluid_sections = [] - self.shell_thicknesses = [] self.displacement_constraints = [] self.temperature_constraints = [] self.heatflux_constraints = [] @@ -174,81 +177,14 @@ class _Container(object): self.contact_constraints = [] self.transform_constraints = [] - for m in analysis.Group: + for m in self.analysis.Group: if m.isDerivedFrom("Fem::FemMeshObject"): if not self.mesh: self.mesh = m else: raise Exception('FEM: Multiple mesh in analysis not yet supported!') - elif m.isDerivedFrom("App::MaterialObjectPython"): - material_linear_dict = {} - material_linear_dict['Object'] = m - self.materials_linear.append(material_linear_dict) - elif hasattr(m, "Proxy") and m.Proxy.Type == "Fem::MaterialMechanicalNonlinear": - material_nonlinear_dict = {} - material_nonlinear_dict['Object'] = m - self.materials_nonlinear.append(material_nonlinear_dict) - elif m.isDerivedFrom("Fem::ConstraintFixed"): - fixed_constraint_dict = {} - fixed_constraint_dict['Object'] = m - self.fixed_constraints.append(fixed_constraint_dict) - elif hasattr(m, "Proxy") and m.Proxy.Type == "Fem::ConstraintSelfWeight": - selfweight_dict = {} - selfweight_dict['Object'] = m - self.selfweight_constraints.append(selfweight_dict) - elif m.isDerivedFrom("Fem::ConstraintForce"): - force_constraint_dict = {} - force_constraint_dict['Object'] = m - force_constraint_dict['RefShapeType'] = FemUtils.get_refshape_type(m) - self.force_constraints.append(force_constraint_dict) - elif m.isDerivedFrom("Fem::ConstraintPressure"): - PressureObjectDict = {} - PressureObjectDict['Object'] = m - self.pressure_constraints.append(PressureObjectDict) - elif m.isDerivedFrom("Fem::ConstraintDisplacement"): - displacement_constraint_dict = {} - displacement_constraint_dict['Object'] = m - self.displacement_constraints.append(displacement_constraint_dict) - elif m.isDerivedFrom("Fem::ConstraintTemperature"): - temperature_constraint_dict = {} - temperature_constraint_dict['Object'] = m - self.temperature_constraints.append(temperature_constraint_dict) - elif m.isDerivedFrom("Fem::ConstraintHeatflux"): - heatflux_constraint_dict = {} - heatflux_constraint_dict['Object'] = m - self.heatflux_constraints.append(heatflux_constraint_dict) - elif m.isDerivedFrom("Fem::ConstraintInitialTemperature"): - initialtemperature_constraint_dict = {} - initialtemperature_constraint_dict['Object'] = m - self.initialtemperature_constraints.append( - initialtemperature_constraint_dict) - elif m.isDerivedFrom("Fem::ConstraintPlaneRotation"): - planerotation_constraint_dict = {} - planerotation_constraint_dict['Object'] = m - self.planerotation_constraints.append(planerotation_constraint_dict) - elif m.isDerivedFrom("Fem::ConstraintContact"): - contact_constraint_dict = {} - contact_constraint_dict['Object'] = m - self.contact_constraints.append(contact_constraint_dict) - elif m.isDerivedFrom("Fem::ConstraintTransform"): - transform_constraint_dict = {} - transform_constraint_dict['Object'] = m - self.transform_constraints.append(transform_constraint_dict) - elif hasattr(m, "Proxy") and m.Proxy.Type == "Fem::FemElementGeometry1D": - beam_section_dict = {} - beam_section_dict['Object'] = m - self.beam_sections.append(beam_section_dict) - elif hasattr(m, "Proxy") and m.Proxy.Type == "Fem::FemElementRotation1D": - beam_rotation_dict = {} - beam_rotation_dict['Object'] = m - self.beam_rotations.append(beam_rotation_dict) - elif hasattr(m, "Proxy") and m.Proxy.Type == "Fem::FemElementFluid1D": - fluid_section_dict = {} - fluid_section_dict['Object'] = m - self.fluid_sections.append(fluid_section_dict) - elif hasattr(m, "Proxy") and m.Proxy.Type == "Fem::FemElementGeometry2D": - shell_thickness_dict = {} - shell_thickness_dict['Object'] = m - self.shell_thicknesses.append(shell_thickness_dict) + + def get_several_member(self, t): + return FemUtils.get_several_member(self.analysis, t) ## @}