vhandle.matrix

Contents

vhandle.matrix#

Purpose

Class constructor for matrix handle objects.

vhandle.matrix

The SDT supports handle objects, which act as pointers to variables various matrix forms that are optimized for storage. vhandle.matrix are a child class of the MATLAB handle and thus behave accordingly. In particular there is a single instance (b=a does not generate a copy of a).

  • vhandle.matrix.formNum lists currently implemented matrix forms.
  • MKLS and MKLSt are sparse or full and transposed sparse or full matrices stored for use with MKL. The inspector/executor routines of recent MKL are used to give better parallel implementation for matrix vector products. This is useful for time domain implementations of implicit and explicit algorithms.
  • MKLST.activeRow and MKLS.activeCol are used to predefine data associated with moving contacts. Initialization is supported with the contact token.
  • ZMatrix is used to support on the fly matrix assembly in zcoef calls. This is currently used for frequency domain formulations of perfectly matched layers in p_pml.
  • MBBryan multibody observation using Bryan angles. From the initial vector an active DOF vector is extracted using .iadof indices and assumed to start with 3 translations and 3 rotations leading to the Bryan rotation matrix
    RBody=cos rzsin rzsin  rzcos  rz1 cos  rysin ry1−sin rycos ry 1cos rxsin rxsin rxcos rx     (10.71)
    and be followed by NR generalized amplitudes (thus .iadof is of length 6+NR and associated with a reduction basis .def or dimensions 3 NBody × NR.

    The node position field X(t) in the body coordinate system is thus given by

    {XBody(t)}3× Np={xBody}+[T]{qR(t)}     (10.72)

    where the three position coordinates of a given node are stored consecutively and the initial positions in the body frame x are stored as field .p. The global position is then obtained by translating and rotating the positions in the the body frame

    {XGlobal(t)}3× Np={uBody(t)} + [RBody(t)] {XBody(t)}     (10.73)

    Finally XGlobal may be placed in a different order using the .idof renumbering field u(idof)=XGlobal.

    When requiring displacement rather than position (when .isPos=0), the result is {XGlobal(t)}−{xGlobal(RBody=I)}.

    Handling of rotations in the global frame is not currently handled.

  • Compound is an heterogenous block matrix object. It aims at generating matrices such as restitution bases that are combined in multilayer or multi components. Two types of representations are supported
    • Compound.cat(1) concatenated blocks: blocks form the matrix.
    • Compound.seq(2) sequential product blocks. The compound item is a row series of matrices whose product would produce the numeric matrix.
    • Compound.spcat(3) is the beginning of reimplementation of fesuper('sedef') products. The operator iterates on a vector of vhandle.matrix objects using the matrix multiplication and addition ci=ci−1+Ai*b (gemm method). For full matrix restitution, one will often need use a FullBlock.
  • Restit is the beginning of reimplementation of fesuper('sedef') products. The operator iterates on a vector of vhandle.matrix objects using the matrix multiplication and addition ci=ci−1+Ai*b (gemm method). For full matrix restitution, one will often need use a FullBlock.
  • FullBlock implements c(iout,:)=c(iout,:)+A*b(iin,:).
  • NLJac implements a non-linearity Jacobian implicit matrix k=b*diag(ki)*c. Internal fields for definition are
    • .b a command matrix, used in non-linearities;
    • .c an observation matrix, used in non-linearities.
    • .unllab labels associated to the observations (displacements)
    • .snllab labels associated to the commands (forces)
    • .kimp entry as a cell-array { unllist, snllist, locJac, mattype, label, (multi)} that defines a local Jacobian stiffness locJac vector associated to the unl labels selection from unllab and the snl labels selection from snllab. The Jacobian vector is then assembled to size for the matrix products. mattype and labels are used at assembly. multi is an optional entry specifying that the locJac is given in columns for several configurations points. An interpolation procedure is then implemented based in the design points provided in .RangeBuild.
    • .RangeBuild a Range structure that provides the parameter samples that were used to define the multiple locJac points.
    • .nmap an nmap holder to allow external input at higher level of parameter values to be used for interpolation.

mtimes #

Implements overloading the base Matlab matrix multiplication operator.

gemm #

Implements matrix matrix/vector multiplication and add c=A.gemm(b,c,coef) performs c:=coef(1)A*b+coef(2)*c. The interest is mostly due to the optimized implementation in the mkl_utils mex file where improved BLAS operations are possible. A.gemm(b,c,coef) performs in place modification of the c matrix.