[FEM] extend displacement constraint

- add fields to specify a formula for the displacement, this is necessary to make transient deformation analyses with Elmer
- add option to set displacement from result of flow equation
- this way also a major overhaul -> simpler dialog logic etc.
This commit is contained in:
Uwe
2023-03-22 06:56:02 +01:00
parent 971785a160
commit dba00d44d0
8 changed files with 837 additions and 609 deletions

View File

@@ -107,21 +107,28 @@ class DeformationWriter:
for obj in self.write.getMember("Fem::ConstraintDisplacement"):
if obj.References:
for name in obj.References[0][1]:
if obj.useFlowSurfaceForce:
self.write.boundary(name, "FSI BC", obj.useFlowSurfaceForce)
# if useFlowSurfaceForce no displacements must be output
continue
if not obj.xFree:
self.write.boundary(
name, "Displacement 1", obj.xDisplacement * 0.001)
elif obj.xFix:
self.write.boundary(name, "Displacement 1", 0.0)
if not obj.hasXFormula:
displacement = obj.xDisplacement * 0.001
else:
displacement = obj.xDisplacementFormula
self.write.boundary(name, "Displacement 1", displacement)
if not obj.yFree:
self.write.boundary(
name, "Displacement 2", obj.yDisplacement * 0.001)
elif obj.yFix:
self.write.boundary(name, "Displacement 2", 0.0)
if not obj.hasYFormula:
displacement = obj.yDisplacement * 0.001
else:
displacement = obj.yDisplacementFormula
self.write.boundary(name, "Displacement 2", displacement)
if not obj.zFree:
self.write.boundary(
name, "Displacement 3", obj.zDisplacement * 0.001)
elif obj.zFix:
self.write.boundary(name, "Displacement 3", 0.0)
if not obj.hasZFormula:
displacement = obj.zDisplacement * 0.001
else:
displacement = obj.zDisplacementFormula
self.write.boundary(name, "Displacement 3", displacement)
self.write.handled(obj)
def handleDeformationInitial(self, bodies):

View File

@@ -323,21 +323,28 @@ class ElasticityWriter:
for obj in self.write.getMember("Fem::ConstraintDisplacement"):
if obj.References:
for name in obj.References[0][1]:
if obj.useFlowSurfaceForce:
self.write.boundary(name, "FSI BC", obj.useFlowSurfaceForce)
# if useFlowSurfaceForce no displacements must be output
continue
if not obj.xFree:
self.write.boundary(
name, "Displacement 1", obj.xDisplacement * 0.001)
elif obj.xFix:
self.write.boundary(name, "Displacement 1", 0.0)
if not obj.hasXFormula:
displacement = obj.xDisplacement * 0.001
else:
displacement = obj.xDisplacementFormula
self.write.boundary(name, "Displacement 1", displacement)
if not obj.yFree:
self.write.boundary(
name, "Displacement 2", obj.yDisplacement * 0.001)
elif obj.yFix:
self.write.boundary(name, "Displacement 2", 0.0)
if not obj.hasYFormula:
displacement = obj.yDisplacement * 0.001
else:
displacement = obj.yDisplacementFormula
self.write.boundary(name, "Displacement 2", displacement)
if not obj.zFree:
self.write.boundary(
name, "Displacement 3", obj.zDisplacement * 0.001)
elif obj.zFix:
self.write.boundary(name, "Displacement 3", 0.0)
if not obj.hasZFormula:
displacement = obj.zDisplacement * 0.001
else:
displacement = obj.zDisplacementFormula
self.write.boundary(name, "Displacement 3", displacement)
self.write.handled(obj)
def handleElasticityInitial(self, bodies):