libflame revision_anchor
Functions
sorml2.c File Reference

(r)

Functions

int sorml2_fla (char *side, char *trans, integer *m, integer *n, integer *k, real *a, integer *lda, real *tau, real *c__, integer *ldc, real *work, integer *info)
 

Function Documentation

◆ sorml2_fla()

int sorml2_fla ( char side,
char trans,
integer m,
integer n,
integer k,
real a,
integer lda,
real tau,
real c__,
integer ldc,
real work,
integer info 
)
149{
150 /* System generated locals */
152 /* Local variables */
153 integer i__, i1, i2, i3, ic, jc, mi, ni, nq;
154 real aii;
156 extern logical lsame_(char *, char *);
157 extern /* Subroutine */
158 int slarf_(char *, integer *, integer *, real *, integer *, real *, real *, integer *, real *), xerbla_( char *, integer *);
160 /* -- LAPACK computational routine (version 3.4.2) -- */
161 /* -- LAPACK is a software package provided by Univ. of Tennessee, -- */
162 /* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- */
163 /* September 2012 */
164 /* .. Scalar Arguments .. */
165 /* .. */
166 /* .. Array Arguments .. */
167 /* .. */
168 /* ===================================================================== */
169 /* .. Parameters .. */
170 /* .. */
171 /* .. Local Scalars .. */
172 /* .. */
173 /* .. External Functions .. */
174 /* .. */
175 /* .. External Subroutines .. */
176 /* .. */
177 /* .. Intrinsic Functions .. */
178 /* .. */
179 /* .. Executable Statements .. */
180 /* Test the input arguments */
181 /* Parameter adjustments */
182 a_dim1 = *lda;
183 a_offset = 1 + a_dim1;
184 a -= a_offset;
185 --tau;
186 c_dim1 = *ldc;
187 c_offset = 1 + c_dim1;
188 c__ -= c_offset;
189 --work;
190 /* Function Body */
191 *info = 0;
192 left = lsame_(side, "L");
193 notran = lsame_(trans, "N");
194 /* NQ is the order of Q */
195 if (left)
196 {
197 nq = *m;
198 }
199 else
200 {
201 nq = *n;
202 }
203 if (! left && ! lsame_(side, "R"))
204 {
205 *info = -1;
206 }
207 else if (! notran && ! lsame_(trans, "T"))
208 {
209 *info = -2;
210 }
211 else if (*m < 0)
212 {
213 *info = -3;
214 }
215 else if (*n < 0)
216 {
217 *info = -4;
218 }
219 else if (*k < 0 || *k > nq)
220 {
221 *info = -5;
222 }
223 else if (*lda < max(1,*k))
224 {
225 *info = -7;
226 }
227 else if (*ldc < max(1,*m))
228 {
229 *info = -10;
230 }
231 if (*info != 0)
232 {
233 i__1 = -(*info);
234 xerbla_("SORML2", &i__1);
235 return 0;
236 }
237 /* Quick return if possible */
238 if (*m == 0 || *n == 0 || *k == 0)
239 {
240 return 0;
241 }
242 if (left && notran || ! left && ! notran)
243 {
244 i1 = 1;
245 i2 = *k;
246 i3 = 1;
247 }
248 else
249 {
250 i1 = *k;
251 i2 = 1;
252 i3 = -1;
253 }
254 if (left)
255 {
256 ni = *n;
257 jc = 1;
258 }
259 else
260 {
261 mi = *m;
262 ic = 1;
263 }
264 i__1 = i2;
265 i__2 = i3;
266 for (i__ = i1;
268 i__ += i__2)
269 {
270 if (left)
271 {
272 /* H(i) is applied to C(i:m,1:n) */
273 mi = *m - i__ + 1;
274 ic = i__;
275 }
276 else
277 {
278 /* H(i) is applied to C(1:m,i:n) */
279 ni = *n - i__ + 1;
280 jc = i__;
281 }
282 /* Apply H(i) */
283 aii = a[i__ + i__ * a_dim1];
284 a[i__ + i__ * a_dim1] = 1.f;
285 slarf_(side, &mi, &ni, &a[i__ + i__ * a_dim1], lda, &tau[i__], &c__[ ic + jc * c_dim1], ldc, &work[1]);
286 a[i__ + i__ * a_dim1] = aii;
287 /* L10: */
288 }
289 return 0;
290 /* End of SORML2 */
291}
int integer
Definition FLA_f2c.h:25
int logical
Definition FLA_f2c.h:36
float real
Definition FLA_f2c.h:30
int i
Definition bl1_axmyv2.c:145

References i.

Referenced by sormlq_fla().