libflame revision_anchor
Functions
FLA_Bidiag_UT_u_unb_var3.c File Reference

(r)

Functions

FLA_Error FLA_Bidiag_UT_u_unb_var3 (FLA_Obj A, FLA_Obj TU, FLA_Obj TV)
 
FLA_Error FLA_Bidiag_UT_u_step_unb_var3 (FLA_Obj A, FLA_Obj T, FLA_Obj S)
 

Function Documentation

◆ FLA_Bidiag_UT_u_step_unb_var3()

FLA_Error FLA_Bidiag_UT_u_step_unb_var3 ( FLA_Obj  A,
FLA_Obj  T,
FLA_Obj  S 
)
19{
20 FLA_Obj ATL, ATR, A00, a01, A02,
22 A20, a21, A22;
23 FLA_Obj TTL, TTR, T00, t01, T02,
24 TBL, TBR, t10t, tau11, t12t,
25 T20, t21, T22;
26 FLA_Obj STL, STR, S00, s01, S02,
28 S20, s21, S22;
29 FLA_Obj wT, w01,
30 wB, omega11,
31 w21;
34 a12p;
35 FLA_Obj uT, u01,
37 u21;
40 u21p;
41 FLA_Obj vT, v01,
42 vB, nu11,
43 v21;
44 FLA_Obj yT, y01,
45 yB, psi11,
46 y21;
47 FLA_Obj zT, z01,
48 zB, zeta11,
49 z21;
50 FLA_Obj w, ap, u, up, v, y, z;
51
61
64 a12p_b;
67 v21_b;
68
70 dim_t m_A, n_A;
72
73
75
77 m_A = FLA_Obj_length( A );
78 n_A = FLA_Obj_width( A );
79
81 FLA_Obj_create( datatype_A, 1, 1, 0, 0, &beta );
82 FLA_Obj_create( datatype_A, 1, 1, 0, 0, &alpha12 );
88 FLA_Obj_create( datatype_A, 1, 1, 0, 0, &minus_zeta11 );
89 FLA_Obj_create( datatype_A, m_A, 1, 0, 0, &w );
90 FLA_Obj_create( datatype_A, n_A, 1, 0, 0, &ap );
91 FLA_Obj_create( datatype_A, m_A, 1, 0, 0, &u );
92 FLA_Obj_create( datatype_A, m_A, 1, 0, 0, &up );
93 FLA_Obj_create( datatype_A, n_A, 1, 0, 0, &v );
94 FLA_Obj_create( datatype_A, n_A, 1, 0, 0, &y );
95 FLA_Obj_create( datatype_A, m_A, 1, 0, 0, &z );
96
97 FLA_Part_2x2( A, &ATL, &ATR,
98 &ABL, &ABR, 0, 0, FLA_TL );
99 FLA_Part_2x2( T, &TTL, &TTR,
100 &TBL, &TBR, 0, 0, FLA_TL );
101 FLA_Part_2x2( S, &STL, &STR,
102 &SBL, &SBR, 0, 0, FLA_TL );
103 FLA_Part_2x1( w, &wT,
104 &wB, 0, FLA_TOP );
105 FLA_Part_2x1( ap, &apT,
106 &apB, 0, FLA_TOP );
107 FLA_Part_2x1( u, &uT,
108 &uB, 0, FLA_TOP );
109 FLA_Part_2x1( up, &uTp,
110 &uBp, 0, FLA_TOP );
111 FLA_Part_2x1( v, &vT,
112 &vB, 0, FLA_TOP );
113 FLA_Part_2x1( y, &yT,
114 &yB, 0, FLA_TOP );
115 FLA_Part_2x1( z, &zT,
116 &zB, 0, FLA_TOP );
117
118 while ( FLA_Obj_length( ATL ) < b_alg )
119 {
120 FLA_Repart_2x2_to_3x3( ATL, /**/ ATR, &A00, /**/ &a01, &A02,
121 /* ************* */ /* ************************** */
122 &a10t, /**/ &alpha11, &a12t,
123 ABL, /**/ ABR, &A20, /**/ &a21, &A22,
124 1, 1, FLA_BR );
125 FLA_Repart_2x2_to_3x3( TTL, /**/ TTR, &T00, /**/ &t01, &T02,
126 /* ************* */ /* ************************** */
127 &t10t, /**/ &tau11, &t12t,
128 TBL, /**/ TBR, &T20, /**/ &t21, &T22,
129 1, 1, FLA_BR );
130 FLA_Repart_2x2_to_3x3( STL, /**/ STR, &S00, /**/ &s01, &S02,
131 /* ************* */ /* ************************** */
132 &s10t, /**/ &sigma11, &s12t,
133 SBL, /**/ SBR, &S20, /**/ &s21, &S22,
134 1, 1, FLA_BR );
136 /* ** */ /* ***** */
137 &omega11,
138 wB, &w21, 1, FLA_BOTTOM );
140 /* ** */ /* ***** */
141 &alpha11p,
142 apB, &a12p, 1, FLA_BOTTOM );
144 /* ** */ /* ***** */
145 &upsilon11,
146 uB, &u21, 1, FLA_BOTTOM );
148 /* ** */ /* ***** */
149 &upsilon11p,
150 uBp, &u21p, 1, FLA_BOTTOM );
152 /* ** */ /* ***** */
153 &nu11,
154 vB, &v21, 1, FLA_BOTTOM );
156 /* ** */ /* ***** */
157 &psi11,
158 yB, &y21, 1, FLA_BOTTOM );
160 /* ** */ /* ***** */
161 &zeta11,
162 zB, &z21, 1, FLA_BOTTOM );
163
164 /*------------------------------------------------------------*/
165
166 if ( FLA_Obj_length( ATL ) > 0 )
167 {
170
173
176
179
180 // alpha11 = alpha11 - upsilon11 * conj(psi11) - zeta11 * conj(nu1);
183
184 // a21 = a21 - u21 * conj(psi11) - z21 * conj(nu11);
187
188 // a12t = a12t - upsilon11 * y21' - zeta11 * v21';
191 }
192
193 // [ alpha11, u21p, tau11 ] = House2( alpha11, a21 );
195 alpha11,
196 a21, tau11 );
197 FLA_Copy( a21, u21p );
198
199 if ( FLA_Obj_width( A22 ) > 0 )
200 {
201 // minus_inv_tau11 = - 1 / tau11;
204
205 // a12p = ( tau11 - 1 ) * a12t^T / tau11;
206 // = a12t^T - ( 1 / tau11 ) * a12t^T;
209 }
210
211 if ( FLA_Obj_length( ATL ) > 0 )
212 {
213 // A22 = A22 - u21 * y21' - z21 * v21';
216 }
217
218 if ( FLA_Obj_width( A22 ) > 0 )
219 {
220 // y21 = A22' * u21p;
222
223 // a12p = a12p - conj(y21) / tau11;
225
226 // w21 = A22 * conj(a12p);
228
229 // y21 = y21 + conj(a12t)^T;
231
234 &v21_b, 1, FLA_TOP );
236 &a12p_b, 1, FLA_TOP );
237
238 // [ alpha12, psi11_minus_alpha12, sigma11 ] = House2s( a12p_t, a12p_b );
240 a12p_t,
241 a12p_b,
243
244 // v21 = conj( ( a12p - alpha12 * e0 ) / ( psi11 - alpha12 ) );
245 FLA_Copy( a12p, v21 );
249
250 // a12t_l = alpha12;
251 // a12t_r = v21_b^T;
254 }
255
256 // u21 = u21p;
257 FLA_Copy( u21p, u21 );
258
259 if ( FLA_Obj_width( A22 ) > 0 )
260 {
261 // beta = - y21' * v21 / tau11;
265
267
268 // minus_conj_alpha12 = - conj(alpha12);
271
272 // z21 = ( w21 - conj(alpha12) * A22 * e0 ) / conj(psi11 - alpha12) + beta * u21;
273 FLA_Copy( w21, z21 );
276 FLA_Axpy( beta, u21, z21 );
277
278 // y21 = y21 / tau11;
279 // z21 = z21 / sigma11;
282
283 // s01 = conj(V02) * v21;
285 }
286
287 // t01 = a10t' + U20' * u21;
290
291 // Update A22 if this is the last iteration; this is needed when we're
292 // being called from the blocked routine so A22 is left in a valid state.
293 if ( FLA_Obj_length( ATL ) + 1 == b_alg &&
294 FLA_Obj_width( A22 ) > 0 )
295 {
296 // A22 = A22 - u21 * y21' - z21 * v21';
299 }
300
301 /*------------------------------------------------------------*/
302
303 FLA_Cont_with_3x3_to_2x2( &ATL, /**/ &ATR, A00, a01, /**/ A02,
304 a10t, alpha11, /**/ a12t,
305 /* ************** */ /* ************************ */
306 &ABL, /**/ &ABR, A20, a21, /**/ A22,
307 FLA_TL );
308 FLA_Cont_with_3x3_to_2x2( &TTL, /**/ &TTR, T00, t01, /**/ T02,
309 t10t, tau11, /**/ t12t,
310 /* ************** */ /* ************************ */
311 &TBL, /**/ &TBR, T20, t21, /**/ T22,
312 FLA_TL );
313 FLA_Cont_with_3x3_to_2x2( &STL, /**/ &STR, S00, s01, /**/ S02,
314 s10t, sigma11, /**/ s12t,
315 /* ************** */ /* ************************ */
316 &SBL, /**/ &SBR, S20, s21, /**/ S22,
317 FLA_TL );
319 omega11,
320 /* ** */ /* ***** */
321 &wB, w21, FLA_TOP );
323 alpha11p,
324 /* ** */ /* ***** */
325 &apB, a12p, FLA_TOP );
327 upsilon11,
328 /* ** */ /* ***** */
329 &uB, u21, FLA_TOP );
331 upsilon11p,
332 /* ** */ /* ***** */
333 &uBp, u21p, FLA_TOP );
335 nu11,
336 /* ** */ /* ***** */
337 &vB, v21, FLA_TOP );
339 psi11,
340 /* ** */ /* ***** */
341 &yB, y21, FLA_TOP );
343 zeta11,
344 /* ** */ /* ***** */
345 &zB, z21, FLA_TOP );
346 }
347
349 FLA_Obj_free( &beta );
357 FLA_Obj_free( &w );
358 FLA_Obj_free( &ap );
359 FLA_Obj_free( &u );
360 FLA_Obj_free( &up );
361 FLA_Obj_free( &v );
362 FLA_Obj_free( &y );
363 FLA_Obj_free( &z );
364
365 return FLA_SUCCESS;
366}
FLA_Error FLA_Copy(FLA_Obj A, FLA_Obj B)
Definition FLA_Copy.c:15
FLA_Error FLA_Scal(FLA_Obj alpha, FLA_Obj A)
Definition FLA_Scal.c:15
FLA_Error FLA_Dotc(FLA_Conj conj, FLA_Obj x, FLA_Obj y, FLA_Obj rho)
Definition FLA_Dotc.c:13
FLA_Error FLA_Axpy(FLA_Obj alpha, FLA_Obj A, FLA_Obj B)
Definition FLA_Axpy.c:15
FLA_Error FLA_Axpyt(FLA_Trans trans, FLA_Obj alpha, FLA_Obj A, FLA_Obj B)
Definition FLA_Axpyt.c:15
FLA_Error FLA_Copyt(FLA_Trans trans, FLA_Obj A, FLA_Obj B)
Definition FLA_Copyt.c:15
FLA_Error FLA_Inv_scalc(FLA_Conj conjalpha, FLA_Obj alpha, FLA_Obj A)
Definition FLA_Inv_scalc.c:13
FLA_Error FLA_Gerc(FLA_Conj conjx, FLA_Conj conjy, FLA_Obj alpha, FLA_Obj x, FLA_Obj y, FLA_Obj A)
Definition FLA_Gerc.c:13
FLA_Error FLA_Gemvc(FLA_Trans transa, FLA_Conj conjx, FLA_Obj alpha, FLA_Obj A, FLA_Obj x, FLA_Obj beta, FLA_Obj y)
Definition FLA_Gemvc.c:13
FLA_Error FLA_Gemv(FLA_Trans transa, FLA_Obj alpha, FLA_Obj A, FLA_Obj x, FLA_Obj beta, FLA_Obj y)
Definition FLA_Gemv.c:15
FLA_Obj FLA_MINUS_ONE
Definition FLA_Init.c:22
FLA_Obj FLA_ZERO
Definition FLA_Init.c:20
FLA_Obj FLA_ONE
Definition FLA_Init.c:18
FLA_Error FLA_Cont_with_3x3_to_2x2(FLA_Obj *ATL, FLA_Obj *ATR, FLA_Obj A00, FLA_Obj A01, FLA_Obj A02, FLA_Obj A10, FLA_Obj A11, FLA_Obj A12, FLA_Obj *ABL, FLA_Obj *ABR, FLA_Obj A20, FLA_Obj A21, FLA_Obj A22, FLA_Quadrant quadrant)
Definition FLA_View.c:304
FLA_Error FLA_Part_2x2(FLA_Obj A, FLA_Obj *A11, FLA_Obj *A12, FLA_Obj *A21, FLA_Obj *A22, dim_t mb, dim_t nb, FLA_Quadrant quadrant)
Definition FLA_View.c:17
FLA_Error FLA_Cont_with_3x1_to_2x1(FLA_Obj *AT, FLA_Obj A0, FLA_Obj A1, FLA_Obj *AB, FLA_Obj A2, FLA_Side side)
Definition FLA_View.c:428
FLA_Error FLA_Repart_2x1_to_3x1(FLA_Obj AT, FLA_Obj *A0, FLA_Obj *A1, FLA_Obj AB, FLA_Obj *A2, dim_t mb, FLA_Side side)
Definition FLA_View.c:226
dim_t FLA_Obj_width(FLA_Obj obj)
Definition FLA_Query.c:123
FLA_Error FLA_Obj_create(FLA_Datatype datatype, dim_t m, dim_t n, dim_t rs, dim_t cs, FLA_Obj *obj)
Definition FLA_Obj.c:55
FLA_Error FLA_Part_1x2(FLA_Obj A, FLA_Obj *A1, FLA_Obj *A2, dim_t nb, FLA_Side side)
Definition FLA_View.c:110
FLA_Error FLA_Part_2x1(FLA_Obj A, FLA_Obj *A1, FLA_Obj *A2, dim_t mb, FLA_Side side)
Definition FLA_View.c:76
dim_t FLA_Obj_length(FLA_Obj obj)
Definition FLA_Query.c:116
FLA_Error FLA_Repart_2x2_to_3x3(FLA_Obj ATL, FLA_Obj ATR, FLA_Obj *A00, FLA_Obj *A01, FLA_Obj *A02, FLA_Obj *A10, FLA_Obj *A11, FLA_Obj *A12, FLA_Obj ABL, FLA_Obj ABR, FLA_Obj *A20, FLA_Obj *A21, FLA_Obj *A22, dim_t mb, dim_t nb, FLA_Quadrant quadrant)
Definition FLA_View.c:142
FLA_Error FLA_Obj_free(FLA_Obj *obj)
Definition FLA_Obj.c:588
FLA_Datatype FLA_Obj_datatype(FLA_Obj obj)
Definition FLA_Query.c:13
int FLA_Datatype
Definition FLA_type_defs.h:49
unsigned long dim_t
Definition FLA_type_defs.h:71
FLA_Error FLA_Mult_add(FLA_Obj alpha, FLA_Obj beta, FLA_Obj gamma)
Definition FLA_Mult_add.c:13
FLA_Error FLA_Conjugate(FLA_Obj A)
Definition FLA_Conjugate.c:13
FLA_Error FLA_Househ2s_UT(FLA_Side side, FLA_Obj chi_1, FLA_Obj x2, FLA_Obj alpha, FLA_Obj chi_1_minus_alpha, FLA_Obj tau)
Definition FLA_Househ2s_UT.c:16
FLA_Error FLA_Househ2_UT(FLA_Side side, FLA_Obj chi_1, FLA_Obj x2, FLA_Obj tau)
Definition FLA_Househ2_UT.c:16
int i
Definition bl1_axmyv2.c:145
Definition FLA_type_defs.h:159

References FLA_Axpy(), FLA_Axpyt(), FLA_Conjugate(), FLA_Cont_with_3x1_to_2x1(), FLA_Cont_with_3x3_to_2x2(), FLA_Copy(), FLA_Copyt(), FLA_Dotc(), FLA_Gemv(), FLA_Gemvc(), FLA_Gerc(), FLA_Househ2_UT(), FLA_Househ2s_UT(), FLA_Inv_scalc(), FLA_MINUS_ONE, FLA_Mult_add(), FLA_Obj_create(), FLA_Obj_datatype(), FLA_Obj_free(), FLA_Obj_length(), FLA_Obj_width(), FLA_ONE, FLA_Part_1x2(), FLA_Part_2x1(), FLA_Part_2x2(), FLA_Repart_2x1_to_3x1(), FLA_Repart_2x2_to_3x3(), FLA_Scal(), FLA_ZERO, and i.

Referenced by FLA_Bidiag_UT_u_unb_var3().

◆ FLA_Bidiag_UT_u_unb_var3()

FLA_Error FLA_Bidiag_UT_u_unb_var3 ( FLA_Obj  A,
FLA_Obj  TU,
FLA_Obj  TV 
)
14{
16}
FLA_Error FLA_Bidiag_UT_u_step_unb_var3(FLA_Obj A, FLA_Obj T, FLA_Obj S)
Definition FLA_Bidiag_UT_u_unb_var3.c:18

References FLA_Bidiag_UT_u_step_unb_var3(), and i.

Referenced by FLA_Bidiag_UT_u().