FEM: elmer writer, only write denisty if really needed, partitially revert 2d73444a66, unit test fix in separate commit

This commit is contained in:
Bernd Hahnebach
2021-03-17 09:26:48 +01:00
committed by GitHub
parent 4561deb4fa
commit 3e1b16b198

View File

@@ -636,11 +636,24 @@ class Writer(object):
return None return None
def _handleElasticityMaterial(self, bodies): def _handleElasticityMaterial(self, bodies):
# density
# is needed for self weight constraints and frequency analysis
density_needed = False
for equation in self.solver.Group:
if femutils.is_of_type(equation, "Fem::EquationElmerElasticity"):
if equation.DoFrequencyAnalysis is True:
density_needed = True
break # there could be a second equation without frequency
gravObj = self._getSingleMember("Fem::ConstraintSelfWeight")
if gravObj is not None:
density_needed = True
# temperature
tempObj = self._getSingleMember("Fem::ConstraintInitialTemperature") tempObj = self._getSingleMember("Fem::ConstraintInitialTemperature")
if tempObj is not None: if tempObj is not None:
refTemp = self._getFromUi(tempObj.initialTemperature, "K", "O") refTemp = self._getFromUi(tempObj.initialTemperature, "K", "O")
for name in bodies: for name in bodies:
self._material(name, "Reference Temperature", refTemp) self._material(name, "Reference Temperature", refTemp)
# get the material data for all boddies
for obj in self._getMember("App::MaterialObject"): for obj in self._getMember("App::MaterialObject"):
m = obj.Material m = obj.Material
refs = ( refs = (
@@ -649,12 +662,11 @@ class Writer(object):
else self._getAllBodies() else self._getAllBodies()
) )
for name in (n for n in refs if n in bodies): for name in (n for n in refs if n in bodies):
# density has to be written even without self weight constraint if density_needed is True:
# https://forum.freecadweb.org/viewtopic.php?f=18&t=56590#p487117 self._material(
self._material( name, "Density",
name, "Density", self._getDensity(m)
self._getDensity(m) )
)
self._material( self._material(
name, "Youngs Modulus", name, "Youngs Modulus",
self._getYoungsModulus(m) self._getYoungsModulus(m)