def _typeset(self, val, dim, style='table', format='%f', step=None): sym = (dim + 1) * dim / 2 mode = None if val.ndim == 0: mode = 'scalar' elif val.ndim == 1: if val.shape[0] == 1: mode = 'scalar' elif val.shape[0] == dim: mode = 'vector' elif val.shape[0] == sym: mode = 'matrix_t1d' elif val.ndim == 2: if val.shape[0] == dim: mode = 'matrix_2D' elif val.shape[0] == sym: mode = 'matrix_t2d' out = '' if mode == 'scalar': out = format % val elif mode == 'vector': aux = ' \\\\\n'.join([ r'$_%d$ & %s' % (ir + 1, format % val[ir]) for ir in xrange(dim) ]) out = self._table_vector % aux elif mode == 'matrix_t1d': aux = ' \\\\\n'.join( [r'$_{%d%d}$ & %s' % (ir + 1, ic + 1, format % val[ii]) for ii, (ir, ic) \ in enumerate( iter_sym( dim ) )] ) out = self._table_matrix_1 % aux elif mode == 'matrix_2D': aux = ' \\\\\n'.join([ r'$_{%d%d}$ & %s' % (ir + 1, ic + 1, format % val[ir, ic]) for ir in xrange(dim) for ic in xrange(dim) ]) out = self._table_matrix_1 % aux elif mode == 'matrix_t2d': aux = ' \\\\\n'.join( [r'$_{%d%d%d%d}$ & %s' % (irr + 1, irc + 1, icr + 1, icc + 1, format % val[ii,jj]) for ii, (irr, irc) \ in enumerate( iter_sym( dim ) ) for jj, (icr, icc) \ in enumerate( iter_sym( dim ) )] ) out = self._table_matrix_2 % aux return out
def _typeset( self, val, dim, style = 'table', format = '%f', step = None ): sym = (dim + 1) * dim / 2 mode = None if val.ndim == 0: mode = 'scalar' elif val.ndim == 1: if val.shape[0] == 1: mode = 'scalar' elif val.shape[0] == dim: mode = 'vector' elif val.shape[0] == sym: mode = 'matrix_t1d' elif val.ndim == 2: if val.shape[0] == dim: mode = 'matrix_2D' elif val.shape[0] == sym: mode = 'matrix_t2d' print mode out = '' if mode == 'scalar': out = format % val elif mode == 'vector': aux = ' \\\\\n'.join( [r'$_%d$ & %s' % (ir + 1, format % val[ir]) for ir in xrange( dim )] ) out = self._table_vector % aux elif mode == 'matrix_t1d': aux = ' \\\\\n'.join( [r'$_{%d%d}$ & %s' % (ir + 1, ic + 1, format % val[ii]) for ii, (ir, ic) \ in enumerate( iter_sym( dim ) )] ) out = self._table_matrix_1 % aux elif mode == 'matrix_2D': aux = ' \\\\\n'.join( [r'$_{%d%d}$ & %s' % (ir + 1, ic + 1, format % val[ir,ic]) for ir in xrange( dim ) for ic in xrange( dim )] ) out = self._table_matrix_1 % aux elif mode == 'matrix_t2d': aux = ' \\\\\n'.join( [r'$_{%d%d%d%d}$ & %s' % (irr + 1, irc + 1, icr + 1, icc + 1, format % val[ii,jj]) for ii, (irr, irc) \ in enumerate( iter_sym( dim ) ) for jj, (icr, icc) \ in enumerate( iter_sym( dim ) )] ) out = self._table_matrix_2 % aux return out
def fibre_function(out, pars, green_strain, fmode): """ Depending on `fmode`, compute fibre stress (0) or tangent modulus (!= 0). """ fmax, eps_opt, s, fdir, act = pars eps = nm.zeros_like(fmax) omega = nm.empty_like(green_strain) for ii, (ir, ic) in enumerate(iter_sym(fdir.shape[2])): omega[..., ii, 0] = fdir[..., ir, 0] * fdir[..., ic, 0] eps[..., 0, 0] += omega[..., ii, 0] * green_strain[..., ii, 0] tau = act * fmax * nm.exp(-((eps - eps_opt) / s)**2.0) if fmode == 0: out[:] = omega * tau else: for ir in range(omega.shape[2]): for ic in range(omega.shape[2]): out[..., ir, ic] = omega[..., ir, 0] * omega[..., ic, 0] out[:] *= -2.0 * ((eps - eps_opt) / (s**2.0)) * tau return out
def compute_crt_data(self, family_data, mode, **kwargs): pars = self.get_args(["material_1", "material_2", "material_3", "material_4", "material_5"], **kwargs) fmax, eps_opt, s, fdir, act = pars strainE = family_data[0] eps = nm.zeros_like(fmax) omega = nm.empty_like(strainE) for ii, (ir, ic) in enumerate(iter_sym(fdir.shape[2])): omega[..., ii, 0] = fdir[..., ir, 0] * fdir[..., ic, 0] eps[..., 0, 0] += omega[..., ii, 0] * strainE[..., ii, 0] tau = act * fmax * nm.exp(-((eps - eps_opt) / s) ** 2.0) if mode == 0: out = omega * tau else: shape = list(strainE.shape) shape[-1] = shape[-2] out = nm.empty(shape, dtype=nm.float64) for ir in range(omega.shape[2]): for ic in range(omega.shape[2]): out[..., ir, ic] = omega[..., ir, 0] * omega[..., ic, 0] out[:] *= -2.0 * ((eps - eps_opt) / (s ** 2.0)) * tau return out
def get_fargs(self, mat1, mat2, virtual, mode=None, term_mode=None, diff_var=None, **kwargs): vg, _ = self.get_mapping(virtual) omega = nm.empty(mat1.shape[:3] + (1,), dtype=nm.float64) for ii, (ir, ic) in enumerate(iter_sym(mat2.shape[2])): omega[..., ii, 0] = mat2[..., ir, 0] * mat2[..., ic, 0] return mat1, omega, vg
def create_omega(fdir): r""" Create the fibre direction tensor :math:`\omega_{ij} = d_i d_j`. """ n_el, n_qp, dim, _ = fdir.shape sym = dim2sym(dim) omega = nm.empty((n_el, n_qp, sym, 1), dtype=nm.float64) for ii, (ir, ic) in enumerate(iter_sym(dim)): omega[..., ii, 0] = fdir[..., ir, 0] * fdir[..., ic, 0] return omega