Source code for o3seespy.command.nd_material.other_material

from o3seespy.command.nd_material.base_material import NDMaterialBase
from o3seespy.command.common import update_material_stage


[docs]class PM4Sand(NDMaterialBase): op_type = "PM4Sand" def __init__(self, osi, d_r, g_o, h_po, den, p_atm, h_o=-1.0, e_max=0.8, e_min=0.5, n_b=0.5, n_d=0.1, a_do=None, z_max=None, c_z=250.0, c_e=None, phi_cv=33.0, nu=0.3, g_degr=2.0, c_dr=None, c_kaf=None, q_bolt=10.0, r_bolt=1.5, m_par=0.01, f_sed=None, p_sed=None): """ This command is used to construct a 2-dimensional PM4Sand material. Parameters ========== d_r: float Relative density, in fraction g_o: float Shear modulus constant h_po: float Contraction rate parameter den: float Mass density of the material p_atm: float, optional Atmospheric pressure h_o: float, optional Variable that adjusts the ratio of plastic modulus to elastic modulus e_max: float, optional Maximum and minimum void ratios e_min: float, optional Maximum and minimum void ratios n_b: float, optional Bounding surface parameter, :math:`nb \ge 0` n_d: float, optional Dilatancy surface parameter :math:`nd \ge 0` a_do: float, optional Dilatancy parameter, will be computed at the time of initialization if input value is negative z_max: float, optional Fabric-dilatancy tensor parameter c_z: float, optional Fabric-dilatancy tensor parameter c_e: float, optional Variable that adjusts the rate of strain accumulation in cyclic loading phi_cv: float, optional Critical state effective friction angle nu: float, optional Poisson's ratio c_gd: float, optional Variable that adjusts degradation of elastic modulus with accumulation of fabric c_dr: float, optional Variable that controls the rotated dilatancy surface c_kaf: float, optional Variable that controls the effect that sustained con shear stresses have on plastic modulus q_bolt: float, optional Critical state line parameter r_bolt: float, optional Critical state line parameter m_par: float, optional Yield surface constant (radius of yield surface in stress ratio space) f_sed: float, optional, Variable that controls the minimum value the reduction factor of the elastic moduli can get during reconsolidation p_sed: float, optional Mean effective stress up to which reconsolidation strains are enhanced """ self.osi = osi self.d_r = float(d_r) self.g_o = float(g_o) self.h_po = float(h_po) self.den = float(den) self.p_atm = float(p_atm) self.h_o = float(h_o) self.e_max = float(e_max) self.e_min = float(e_min) self.n_b = float(n_b) self.n_d = float(n_d) if a_do is None: self.a_do = -1.0 else: self.a_do = float(a_do) if z_max is None: self.z_max = -1.0 else: self.z_max = float(z_max) self.c_z = float(c_z) if c_e is None: self.c_e = -1.0 else: self.c_e = float(c_e) self.phi_cv = float(phi_cv) self.nu = float(nu) self.g_degr = float(g_degr) if c_dr is None: self.c_dr = -1.0 else: self.c_dr = float(c_dr) if c_kaf is None: self.c_kaf = -1.0 else: self.c_kaf = float(c_kaf) self.q_bolt = float(q_bolt) self.r_bolt = float(r_bolt) self.m_par = float(m_par) if f_sed is None: self.f_sed = -1.0 else: self.f_sed = float(f_sed) if p_sed is None: self.p_sed = -1.0 else: self.p_sed = float(p_sed) if osi is not None: osi.n_mat += 1 self._tag = osi.n_mat self._parameters = [self.op_type, self._tag, self.d_r, self.g_o, self.h_po, self.den, self.p_atm, self.h_o, self.e_max, self.e_min, self.n_b, self.n_d, self.a_do, self.z_max, self.c_z, self.c_e, self.phi_cv, self.nu, self.g_degr, self.c_dr, self.c_kaf, self.q_bolt, self.r_bolt, self.m_par, self.f_sed, self.p_sed] if osi is None: self.built = 0 if osi is not None: self.to_process(osi)
[docs] def pre_dynamic(self, osi): # deprecated update_material_stage(osi, self, stage=1)
# opw.set_parameter(osi, value=0, eles=[ele], args=['FirstCall', 1])
[docs] def update_to_linear(self): from o3seespy import update_material_stage update_material_stage(self.osi, self, 0)
[docs] def update_to_nonlinear(self): from o3seespy import update_material_stage update_material_stage(self.osi, self, 1)
[docs] def set_nu(self, nu, ele=None, eles=None): from o3seespy import set_parameter if ele is not None: set_parameter(self.osi, value=nu, eles=[ele], args=['poissonRatio', 1]) if eles is not None: set_parameter(self.osi, value=nu, eles=eles, args=['poissonRatio', 1])
[docs] def set_material_state(self, value, ele=None, eles=None): from o3seespy import set_parameter if ele is not None: set_parameter(self.osi, value=value, eles=[ele], args=['materialState', 1]) if eles is not None: set_parameter(self.osi, value=value, eles=eles, args=['materialState', 1])
[docs] def set_first_call(self, value, ele=None, eles=None): self.set_parameter(self.osi, pstr='FirstCall', pval=self.tag, value=value, ele=ele, eles=eles)