1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
|
---
:name: dopmtr
:md5sum: 663f65160cdb7949b61c331713b3a943
:category: :subroutine
:arguments:
- side:
:type: char
:intent: input
- uplo:
:type: char
:intent: input
- trans:
:type: char
:intent: input
- m:
:type: integer
:intent: input
- n:
:type: integer
:intent: input
- ap:
:type: doublereal
:intent: input
:dims:
- m*(m+1)/2
- tau:
:type: doublereal
:intent: input
:dims:
- m-1
- c:
:type: doublereal
:intent: input/output
:dims:
- ldc
- n
- ldc:
:type: integer
:intent: input
- work:
:type: doublereal
:intent: workspace
:dims:
- "lsame_(&side,\"L\") ? n : lsame_(&side,\"R\") ? m : 0"
- info:
:type: integer
:intent: output
:substitutions: {}
:fortran_help: " SUBROUTINE DOPMTR( SIDE, UPLO, TRANS, M, N, AP, TAU, C, LDC, WORK, INFO )\n\n\
* Purpose\n\
* =======\n\
*\n\
* DOPMTR overwrites the general real M-by-N matrix C with\n\
*\n\
* SIDE = 'L' SIDE = 'R'\n\
* TRANS = 'N': Q * C C * Q\n\
* TRANS = 'T': Q**T * C C * Q**T\n\
*\n\
* where Q is a real orthogonal matrix of order nq, with nq = m if\n\
* SIDE = 'L' and nq = n if SIDE = 'R'. Q is defined as the product of\n\
* nq-1 elementary reflectors, as returned by DSPTRD using packed\n\
* storage:\n\
*\n\
* if UPLO = 'U', Q = H(nq-1) . . . H(2) H(1);\n\
*\n\
* if UPLO = 'L', Q = H(1) H(2) . . . H(nq-1).\n\
*\n\n\
* Arguments\n\
* =========\n\
*\n\
* SIDE (input) CHARACTER*1\n\
* = 'L': apply Q or Q**T from the Left;\n\
* = 'R': apply Q or Q**T from the Right.\n\
*\n\
* UPLO (input) CHARACTER*1\n\
* = 'U': Upper triangular packed storage used in previous\n\
* call to DSPTRD;\n\
* = 'L': Lower triangular packed storage used in previous\n\
* call to DSPTRD.\n\
*\n\
* TRANS (input) CHARACTER*1\n\
* = 'N': No transpose, apply Q;\n\
* = 'T': Transpose, apply Q**T.\n\
*\n\
* M (input) INTEGER\n\
* The number of rows of the matrix C. M >= 0.\n\
*\n\
* N (input) INTEGER\n\
* The number of columns of the matrix C. N >= 0.\n\
*\n\
* AP (input) DOUBLE PRECISION array, dimension\n\
* (M*(M+1)/2) if SIDE = 'L'\n\
* (N*(N+1)/2) if SIDE = 'R'\n\
* The vectors which define the elementary reflectors, as\n\
* returned by DSPTRD. AP is modified by the routine but\n\
* restored on exit.\n\
*\n\
* TAU (input) DOUBLE PRECISION array, dimension (M-1) if SIDE = 'L'\n\
* or (N-1) if SIDE = 'R'\n\
* TAU(i) must contain the scalar factor of the elementary\n\
* reflector H(i), as returned by DSPTRD.\n\
*\n\
* C (input/output) DOUBLE PRECISION array, dimension (LDC,N)\n\
* On entry, the M-by-N matrix C.\n\
* On exit, C is overwritten by Q*C or Q**T*C or C*Q**T or C*Q.\n\
*\n\
* LDC (input) INTEGER\n\
* The leading dimension of the array C. LDC >= max(1,M).\n\
*\n\
* WORK (workspace) DOUBLE PRECISION array, dimension\n\
* (N) if SIDE = 'L'\n\
* (M) if SIDE = 'R'\n\
*\n\
* INFO (output) INTEGER\n\
* = 0: successful exit\n\
* < 0: if INFO = -i, the i-th argument had an illegal value\n\
*\n\n\
* =====================================================================\n\
*\n"
|