Source code for pycalculix.connectors
"""This module stores connector classes, like Contact.
"""
from . import base_classes
[docs]class SurfaceInteraction(base_classes.Idobj):
"""Makes a surface interaction object.
Args:
int_type (str): interaction type
* 'EXPONENTIAL'
* 'LINEAR'
*args: following arguments
* int_type = 'EXPONENTIAL'
* c0, then p0 must be passed
* int_type = 'LINEAR'
* k must be passed
"""
def __init__(self, int_type, *args):
self.int_type = int_type
self.c0 = None
self.p0 = None
self.k = None
if self.int_type == 'EXPONENTIAL':
self.c0 = args[0]
self.p0 = args[1]
elif self.int_type == 'LINEAR':
self.k = args[0]
base_classes.Idobj.__init__(self)
@property
def name(self):
"""SurfaceInteraction name."""
return 'SI%i' % self.id
[docs] def ccx(self):
"""Writes the surface interaction for the ccx solver."""
res = ["*SURFACE INTERACTION,NAME=%s" % self.name]
res.append("*SURFACE BEHAVIOR,PRESSURE-OVERCLOSURE=%s" % self.int_type)
if self.int_type == 'EXPONENTIAL':
res.append("%f,%f" % (self.c0, self.p0))
elif self.int_type == 'LINEAR':
res.append("%e" % self.k)
#res.append("%e,1." % self.k)
return res
[docs]class Contact(base_classes.Idobj):
"""Makes a contact which will be between lines which have faces on them.
Args:
master_comp (Component): component of master element faces
slave_comp (Component): component of slave element faces
surf_int (SurfaceInteraction): object which stores closure behavior
surf_to_surf (bool): if True surface to surface is used, if False node
to surface is used
"""
def __init__(self, master_comp, slave_comp, surf_int, surf_to_surf=True):
self.master_comp = master_comp
self.slave_comp = slave_comp
self.surf_int = surf_int
self.surf_to_surf = surf_to_surf
base_classes.Idobj.__init__(self)
@property
def name(self):
"""Contact name."""
return 'CONT%i' % self.id
[docs] def ccx(self):
"""Writes the contact pair for the ccx solver."""
res = []
end = ''
int_name = self.surf_int.name
m_name = self.master_comp.name
s_name = self.slave_comp.name
if self.surf_to_surf:
end = ',TYPE=SURFACE TO SURFACE'
line = "*CONTACT PAIR,INTERACTION=%s%s" % (int_name, end)
res.append(line)
line = "%s,%s" % (s_name, m_name)
res.append(line)
return res