Source code for pycalculix.material

"""This module stores material classes.
"""

from . import base_classes

[docs]class Material(base_classes.Idobj): """Makes a linear elastic meterial. Args: name (str): a unique matl name Attributes: - id (int): material id number - mechtype (str): defines mechanical material type: linear or non-linear material - density (float): density in mass/volume units - pratio (float): poisson's ratio (unitless) - youngs (float): young's modulus in Force/area = stress units - mechtpye (str): mechanical material type options: 'linear' or 'nonlinear' - exponent (float): exponent of Ramberg-Osgood stress-strain equation - yield_stress (float): yield stress of material - yield_offset (float): yield offset of Ramberg-Osgood stress-strain equation - conductivity (float): thermal conductivity, Power / (distance-temp) - spec_heat (float): specific heat (energy/(mass-temp) - thermal_exp (dict): a dict storing temperature dependent thermal -- expansion properties -- Thermal expansion is in strain per temperature - dict['data'] = zip of (temp, thermal_expansion) - dict['tzero'] = the temperature zero point """ def __init__(self, name): self.name = name base_classes.Idobj.__init__(self) # mechanical self.mechtype = None self.density = None self.youngs = None self.pratio = None self.exponent = None self.yield_stress = None self.yield_offset = None # thermal self.conductivity = None self.spec_heat = None # thermal growth self.thermal_exp = {}
[docs] def set_mech_props(self, density, youngs, pratio, mechtype='linear', exponent=0., yield_stress=0., yield_offset=0.): """Sets the mechanical properties: density, youngs, poisson_ratio. Args: - density (float): density in mass/volume units - pratio (float): poisson's ratio (unitless) - youngs (float): young's modulus in Force/area = stress units Kargs: - mechtpye (str): mechanical material type options: 'linear' or 'nonlinear' - exponent (float): exponent of Ramberg-Osgood stress-strain equation - yield_stress (float): yield stress of material - yield_offset (float): yield offset of Ramberg-Osgood stress-strain equation """ self.density = density self.youngs = youngs self.pratio = pratio self.mechtype = mechtype self.exponent = exponent self.yield_stress = yield_stress self.yield_offset = yield_offset
[docs] def set_therm_props(self, conductivity, spec_heat): """Sets the thermal properties: conductivity, specifc_heat. Args: - conductivity (float): Power / (distance-temp) - spec_heat (float): specific heat (energy/(mass-temp) """ self.conductivity = conductivity self.spec_heat = spec_heat
[docs] def set_therm_expan(self, alphas, temps=None, tzero=None): """Sets the thermal expansion of the material. Args: - alphas (float or list): list of thermal expansion alphas length must be the same as the passed temps - temps (list): list of temperatures - tzero (float): temperature zero point """ self.thermal_exp = {} isnum = (isinstance(alphas, float) or isinstance(alphas, int)) if isinstance(alphas, list) and isinstance(temps, list): self.thermal_exp['data'] = zip(temps, alphas) elif temps == None and isnum: self.thermal_exp['data'] = [alphas] if tzero != None: self.thermal_exp['tzero'] = tzero
[docs] def ccx(self): """Returns a list of text strings for ccx defining the material.""" res = [] res.append('*MATERIAL,NAME='+self.name) if self.mechtype == 'linear': res.append('*ELASTIC') res.append(str(self.youngs)+','+str(self.pratio)) elif self.mechtype == 'nonlinear': res.append('*DEFORMATION PLASTICITY') res.append(','.join([str(self.youngs),str(self.pratio),str(self.yield_stress),str(self.exponent),str(self.yield_offset)])) if self.density != None: res.append('*DENSITY') res.append(str(self.density)) if self.conductivity != None: res.append('*CONDUCTIVITY') res.append(str(self.conductivity)) if self.spec_heat != None: res.append('*SPECIFIC HEAT') res.append(str(self.spec_heat)) if self.thermal_exp != {}: if 'tzero' in self.thermal_exp: res.append('*EXPANSION,ZERO='+str(self.thermal_exp['tzero'])) else: res.append('*EXPANSION') for pair in self.thermal_exp['data']: if len(pair) == 1: res.append(str(pair[0])) else: # temp, val res.append('%f %f' % (pair[0], pair[1])) return res