libflame revision_anchor
Functions
zunm2r.c File Reference

(r)

Functions

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

Function Documentation

◆ zunm2r_fla()

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

References i.

Referenced by zunmqr_fla().