示例#1
0
    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
示例#2
0
    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
示例#3
0
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
示例#4
0
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
示例#5
0
    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
示例#6
0
    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
示例#7
0
    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
示例#8
0
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
示例#9
0
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