PURPOSE
Compute the matrix triple product, multiply it by a scalar and add it to a matrix:
[S] = [S] + W{B}T[D]{B} (Symmetric)
[S] = [S] + W{B}T[D]{A} (Nonsymmetric)
SYNOPSIS
CALL RSDWTP (W, B, D, S, N, M)
CALL RNDWTP (W, B, D, A, S, N, M)
INPUT PARAMETERS
- W = Real.
Scale Factor. - B(N,M) = Real array.
Matrix stored by columns. - D(N,N) = Real array.
Full matrix stored by columns. For symmetric problems (RSDWTP), [D] must be symmetric. - A(N,M) = Real array (RNDWTP only).
Matrix stored by columns. - N = Integer.
Number of rows in matrix [B] and [A] and the size of the square matrix [D] . The maximum value of N must be less than or equal to 32. This restriction on N results from the use of high-speed internal registers that store intermediate values for this calculation. For most problems, N is in the range 3 to 6. - M = Integer.
Number of columns in matrix [B] and [A].
OUTPUT PARAMETERS:
- S(M*(M+1)/2) = Real array (RSDWTP).
S(M,M) = Real array (RNDWTP).
For symmetric problems (RSDWTP), [S] is a lower triangular matrix stored by rows. For nonsymmetric problems, standard FORTRAN storage is used for [S].
DESCRIPTION:
This subroutine performs the matrix triple product that is typically used in finite element matrix generation. Before the first call in each element, the matrix values in [S] must be initialized to [0]. The matrix [B] is assumed full to provide for formulations including large deformation. If possible, the columns of matrix [B] should be ordered by increasing global equation number. This ordering produces a matrix [S] that is also ordered by increasing equation number and may be assembled into the global system with minimal computation. The matrix [D] is also full, which provides for orthotropic and rotated material relationships.For symmetric problems (RSDWTP), the calculation performed is equivalent to the following FORTRAN statements.
LS = 0 DO I=1,M DO J=1,I LS = LS + 1 DO K=1,N DO L=1,N S(LS) = S(LS) + W*B(K,I)*D(K,L)*B(L,J) END DO END DO END DO END DOFor nonsymmetric problems (RNDWTP), the calculation performed is equivalent to the following FORTRAN statements:
DO I=1,M DO J=1,I DO K=1,N DO L=1,N S(I,J) = S(I,J) + W*B(K,I)*D(K,L)*A(L,J) END DO END DO END DO END DOThe actual algorithm implemented uses an intermediate vector to reduce the number of operations performed and take advantage of high-speed hardware.