Go to the source code of this file.
Functions | |
FLA_Error | FLA_QR_UT_UD_blk_var1 (FLA_Obj U, FLA_Obj D, FLA_Obj T, fla_qrutud_t *cntl) |
FLA_Error | FLA_QR_UT_UD_blk_var2 (FLA_Obj U, FLA_Obj D, FLA_Obj T, fla_qrutud_t *cntl) |
FLA_Error | FLA_QR_UT_UD_Accum_T_unb_var1 (FLA_Obj U, FLA_Obj D, FLA_Obj T) |
FLA_Error | FLA_QR_UT_UD_Accum_T_opt_var1 (FLA_Obj U, FLA_Obj D, FLA_Obj T) |
FLA_Error | FLA_QR_UT_UD_Accum_T_opt_var1_float (FLA_Obj U, FLA_Obj D, FLA_Obj T) |
FLA_Error | FLA_QR_UT_UD_Accum_T_opt_var1_double (FLA_Obj U, FLA_Obj D, FLA_Obj T) |
FLA_Error | FLA_QR_UT_UD_Accum_T_opt_var1_scomplex (FLA_Obj U, FLA_Obj D, FLA_Obj T) |
FLA_Error | FLA_QR_UT_UD_Accum_T_opt_var1_dcomplex (FLA_Obj U, FLA_Obj D, FLA_Obj T) |
References FLA_Obj_datatype(), FLA_QR_UT_UD_Accum_T_opt_var1_dcomplex(), FLA_QR_UT_UD_Accum_T_opt_var1_double(), FLA_QR_UT_UD_Accum_T_opt_var1_float(), and FLA_QR_UT_UD_Accum_T_opt_var1_scomplex().
Referenced by FLA_QR_UT_UD_internal().
00037 { 00038 FLA_Datatype datatype; 00039 00040 datatype = FLA_Obj_datatype( U ); 00041 00042 switch ( datatype ) 00043 { 00044 case FLA_FLOAT: 00045 FLA_QR_UT_UD_Accum_T_opt_var1_float( U, 00046 D, T ); 00047 break; 00048 00049 case FLA_DOUBLE: 00050 FLA_QR_UT_UD_Accum_T_opt_var1_double( U, 00051 D, T ); 00052 break; 00053 00054 case FLA_COMPLEX: 00055 FLA_QR_UT_UD_Accum_T_opt_var1_scomplex( U, 00056 D, T ); 00057 break; 00058 00059 case FLA_DOUBLE_COMPLEX: 00060 FLA_QR_UT_UD_Accum_T_opt_var1_dcomplex( U, 00061 D, T ); 00062 break; 00063 } 00064 00065 return FLA_SUCCESS; 00066 }
References FLA_Apply_househ2_UT_opt_dcomplex(), FLA_Househ2_UT_opt_dcomplex(), FLA_Obj_ldim(), FLA_Obj_length(), FLA_ONE, FLA_ZERO, and zgemv().
Referenced by FLA_QR_UT_UD_Accum_T_opt_var1().
00297 { 00298 dcomplex* buff_U = FLA_DOUBLE_COMPLEX_PTR( U ); 00299 dcomplex* buff_D = FLA_DOUBLE_COMPLEX_PTR( D ); 00300 dcomplex* buff_T = FLA_DOUBLE_COMPLEX_PTR( T ); 00301 dcomplex* buff_1 = FLA_DOUBLE_COMPLEX_PTR( FLA_ONE ); 00302 dcomplex* buff_0 = FLA_DOUBLE_COMPLEX_PTR( FLA_ZERO ); 00303 00304 int m_UT = FLA_Obj_length( U ); 00305 int m_D = FLA_Obj_length( D ); 00306 int ldim_U = FLA_Obj_ldim( U ); 00307 int ldim_D = FLA_Obj_ldim( D ); 00308 int ldim_T = FLA_Obj_ldim( T ); 00309 00310 char trans = 'C'; 00311 int inc_one = 1; 00312 int i; 00313 00314 for ( i = 0; i < m_UT; ++i ) 00315 { 00316 dcomplex* upsilon11 = buff_U + (i )*ldim_U + i; 00317 dcomplex* u12t = buff_U + (i+1)*ldim_U + i; 00318 00319 dcomplex* D0 = buff_D + (0 )*ldim_D; 00320 dcomplex* d1 = buff_D + (i )*ldim_D; 00321 dcomplex* D2 = buff_D + (i+1)*ldim_D; 00322 00323 dcomplex* tau11 = buff_T + (i )*ldim_T + i; 00324 dcomplex* t01 = buff_T + (i )*ldim_T; 00325 00326 int mn_ahead = m_UT - i - 1; 00327 int mn_behind = i; 00328 00329 //------------------------------------------------------------// 00330 00331 // FLA_Househ2_UT( upsilon11, 00332 // d1, tau11 ); 00333 FLA_Househ2_UT_opt_dcomplex( m_D, 00334 upsilon11, 00335 d1, inc_one, 00336 tau11 ); 00337 00338 if ( i > 0 ) 00339 { 00340 // FLA_Gemv_external( FLA_CONJ_TRANSPOSE, FLA_ONE, D0, d1, FLA_ZERO, t01 ); 00341 FLA_C2F( zgemv )( &trans, 00342 &m_D, &mn_behind, 00343 buff_1, 00344 D0, &ldim_D, 00345 d1, &inc_one, 00346 buff_0, 00347 t01, &inc_one ); 00348 } 00349 00350 if ( i < m_UT - 1 ) 00351 { 00352 // FLA_Apply_househ2_UT( tau11, d1, u12t, 00353 // D2 ); 00354 FLA_Apply_househ2_UT_opt_dcomplex( m_D, mn_ahead, 00355 tau11, 00356 d1, inc_one, 00357 u12t, ldim_U, 00358 D2, ldim_D ); 00359 } 00360 00361 //------------------------------------------------------------// 00362 00363 } 00364 00365 return FLA_SUCCESS; 00366 }
References dgemv(), FLA_Apply_househ2_UT_opt_double(), FLA_Househ2_UT_opt_double(), FLA_Obj_ldim(), FLA_Obj_length(), FLA_ONE, and FLA_ZERO.
Referenced by FLA_QR_UT_UD_Accum_T_opt_var1().
00147 { 00148 double* buff_U = FLA_DOUBLE_PTR( U ); 00149 double* buff_D = FLA_DOUBLE_PTR( D ); 00150 double* buff_T = FLA_DOUBLE_PTR( T ); 00151 double* buff_1 = FLA_DOUBLE_PTR( FLA_ONE ); 00152 double* buff_0 = FLA_DOUBLE_PTR( FLA_ZERO ); 00153 00154 int m_UT = FLA_Obj_length( U ); 00155 int m_D = FLA_Obj_length( D ); 00156 int ldim_U = FLA_Obj_ldim( U ); 00157 int ldim_D = FLA_Obj_ldim( D ); 00158 int ldim_T = FLA_Obj_ldim( T ); 00159 00160 char trans = 'T'; 00161 int inc_one = 1; 00162 int i; 00163 00164 for ( i = 0; i < m_UT; ++i ) 00165 { 00166 double* upsilon11 = buff_U + (i )*ldim_U + i; 00167 double* u12t = buff_U + (i+1)*ldim_U + i; 00168 00169 double* D0 = buff_D + (0 )*ldim_D; 00170 double* d1 = buff_D + (i )*ldim_D; 00171 double* D2 = buff_D + (i+1)*ldim_D; 00172 00173 double* tau11 = buff_T + (i )*ldim_T + i; 00174 double* t01 = buff_T + (i )*ldim_T; 00175 00176 int mn_ahead = m_UT - i - 1; 00177 int mn_behind = i; 00178 00179 //------------------------------------------------------------// 00180 00181 // FLA_Househ2_UT( upsilon11, 00182 // d1, tau11 ); 00183 FLA_Househ2_UT_opt_double( m_D, 00184 upsilon11, 00185 d1, inc_one, 00186 tau11 ); 00187 00188 if ( i > 0 ) 00189 { 00190 // FLA_Gemv_external( FLA_CONJ_TRANSPOSE, FLA_ONE, D0, d1, FLA_ZERO, t01 ); 00191 FLA_C2F( dgemv )( &trans, 00192 &m_D, &mn_behind, 00193 buff_1, 00194 D0, &ldim_D, 00195 d1, &inc_one, 00196 buff_0, 00197 t01, &inc_one ); 00198 } 00199 00200 if ( i < m_UT - 1 ) 00201 { 00202 // FLA_Apply_househ2_UT( tau11, d1, u12t, 00203 // D2 ); 00204 FLA_Apply_househ2_UT_opt_double( m_D, mn_ahead, 00205 tau11, 00206 d1, inc_one, 00207 u12t, ldim_U, 00208 D2, ldim_D ); 00209 } 00210 00211 //------------------------------------------------------------// 00212 00213 } 00214 00215 return FLA_SUCCESS; 00216 }
References FLA_Apply_househ2_UT_opt_float(), FLA_Househ2_UT_opt_float(), FLA_Obj_ldim(), FLA_Obj_length(), FLA_ONE, FLA_ZERO, and sgemv().
Referenced by FLA_QR_UT_UD_Accum_T_opt_var1().
00072 { 00073 float* buff_U = FLA_FLOAT_PTR( U ); 00074 float* buff_D = FLA_FLOAT_PTR( D ); 00075 float* buff_T = FLA_FLOAT_PTR( T ); 00076 float* buff_1 = FLA_FLOAT_PTR( FLA_ONE ); 00077 float* buff_0 = FLA_FLOAT_PTR( FLA_ZERO ); 00078 00079 int m_UT = FLA_Obj_length( U ); 00080 int m_D = FLA_Obj_length( D ); 00081 int ldim_U = FLA_Obj_ldim( U ); 00082 int ldim_D = FLA_Obj_ldim( D ); 00083 int ldim_T = FLA_Obj_ldim( T ); 00084 00085 char trans = 'T'; 00086 int inc_one = 1; 00087 int i; 00088 00089 for ( i = 0; i < m_UT; ++i ) 00090 { 00091 float* upsilon11 = buff_U + (i )*ldim_U + i; 00092 float* u12t = buff_U + (i+1)*ldim_U + i; 00093 00094 float* D0 = buff_D + (0 )*ldim_D; 00095 float* d1 = buff_D + (i )*ldim_D; 00096 float* D2 = buff_D + (i+1)*ldim_D; 00097 00098 float* tau11 = buff_T + (i )*ldim_T + i; 00099 float* t01 = buff_T + (i )*ldim_T; 00100 00101 int mn_ahead = m_UT - i - 1; 00102 int mn_behind = i; 00103 00104 //------------------------------------------------------------// 00105 00106 // FLA_Househ2_UT( upsilon11, 00107 // d1, tau11 ); 00108 FLA_Househ2_UT_opt_float( m_D, 00109 upsilon11, 00110 d1, inc_one, 00111 tau11 ); 00112 00113 if ( i > 0 ) 00114 { 00115 // FLA_Gemv_external( FLA_CONJ_TRANSPOSE, FLA_ONE, D0, d1, FLA_ZERO, t01 ); 00116 FLA_C2F( sgemv )( &trans, 00117 &m_D, &mn_behind, 00118 buff_1, 00119 D0, &ldim_D, 00120 d1, &inc_one, 00121 buff_0, 00122 t01, &inc_one ); 00123 } 00124 00125 if ( i < m_UT - 1 ) 00126 { 00127 // FLA_Apply_househ2_UT( tau11, d1, u12t, 00128 // D2 ); 00129 FLA_Apply_househ2_UT_opt_float( m_D, mn_ahead, 00130 tau11, 00131 d1, inc_one, 00132 u12t, ldim_U, 00133 D2, ldim_D ); 00134 } 00135 00136 //------------------------------------------------------------// 00137 00138 } 00139 00140 return FLA_SUCCESS; 00141 }
References cgemv(), FLA_Apply_househ2_UT_opt_scomplex(), FLA_Househ2_UT_opt_scomplex(), FLA_Obj_ldim(), FLA_Obj_length(), FLA_ONE, and FLA_ZERO.
Referenced by FLA_QR_UT_UD_Accum_T_opt_var1().
00222 { 00223 scomplex* buff_U = FLA_COMPLEX_PTR( U ); 00224 scomplex* buff_D = FLA_COMPLEX_PTR( D ); 00225 scomplex* buff_T = FLA_COMPLEX_PTR( T ); 00226 scomplex* buff_1 = FLA_COMPLEX_PTR( FLA_ONE ); 00227 scomplex* buff_0 = FLA_COMPLEX_PTR( FLA_ZERO ); 00228 00229 int m_UT = FLA_Obj_length( U ); 00230 int m_D = FLA_Obj_length( D ); 00231 int ldim_U = FLA_Obj_ldim( U ); 00232 int ldim_D = FLA_Obj_ldim( D ); 00233 int ldim_T = FLA_Obj_ldim( T ); 00234 00235 char trans = 'C'; 00236 int inc_one = 1; 00237 int i; 00238 00239 for ( i = 0; i < m_UT; ++i ) 00240 { 00241 scomplex* upsilon11 = buff_U + (i )*ldim_U + i; 00242 scomplex* u12t = buff_U + (i+1)*ldim_U + i; 00243 00244 scomplex* D0 = buff_D + (0 )*ldim_D; 00245 scomplex* d1 = buff_D + (i )*ldim_D; 00246 scomplex* D2 = buff_D + (i+1)*ldim_D; 00247 00248 scomplex* tau11 = buff_T + (i )*ldim_T + i; 00249 scomplex* t01 = buff_T + (i )*ldim_T; 00250 00251 int mn_ahead = m_UT - i - 1; 00252 int mn_behind = i; 00253 00254 //------------------------------------------------------------// 00255 00256 // FLA_Househ2_UT( upsilon11, 00257 // d1, tau11 ); 00258 FLA_Househ2_UT_opt_scomplex( m_D, 00259 upsilon11, 00260 d1, inc_one, 00261 tau11 ); 00262 00263 if ( i > 0 ) 00264 { 00265 // FLA_Gemv_external( FLA_CONJ_TRANSPOSE, FLA_ONE, D0, d1, FLA_ZERO, t01 ); 00266 FLA_C2F( cgemv )( &trans, 00267 &m_D, &mn_behind, 00268 buff_1, 00269 D0, &ldim_D, 00270 d1, &inc_one, 00271 buff_0, 00272 t01, &inc_one ); 00273 } 00274 00275 if ( i < m_UT - 1 ) 00276 { 00277 // FLA_Apply_househ2_UT( tau11, d1, u12t, 00278 // D2 ); 00279 FLA_Apply_househ2_UT_opt_scomplex( m_D, mn_ahead, 00280 tau11, 00281 d1, inc_one, 00282 u12t, ldim_U, 00283 D2, ldim_D ); 00284 } 00285 00286 //------------------------------------------------------------// 00287 00288 } 00289 00290 return FLA_SUCCESS; 00291 }
References FLA_Apply_househ2_UT(), FLA_Cont_with_1x3_to_1x2(), FLA_Cont_with_3x3_to_2x2(), FLA_Gemv_external(), FLA_Househ2_UT(), FLA_Obj_min_dim(), FLA_ONE, FLA_Part_1x2(), FLA_Part_2x2(), FLA_Repart_1x2_to_1x3(), FLA_Repart_2x2_to_3x3(), and FLA_ZERO.
Referenced by FLA_QR_UT_UD_internal().
00037 { 00038 FLA_Obj UTL, UTR, U00, u01, U02, 00039 UBL, UBR, u10t, upsilon11, u12t, 00040 U20, u21, U22; 00041 00042 FLA_Obj DL, DR, D0, d1, D2; 00043 00044 FLA_Obj TTL, TTR, T00, t01, T02, 00045 TBL, TBR, t10t, tau11, t12t, 00046 T20, t21, T22; 00047 00048 00049 FLA_Part_2x2( U, &UTL, &UTR, 00050 &UBL, &UBR, 0, 0, FLA_TL ); 00051 00052 FLA_Part_1x2( D, &DL, &DR, 0, FLA_LEFT ); 00053 00054 FLA_Part_2x2( T, &TTL, &TTR, 00055 &TBL, &TBR, 0, 0, FLA_TL ); 00056 00057 while ( FLA_Obj_min_dim( UBR ) > 0 ){ 00058 00059 FLA_Repart_2x2_to_3x3( UTL, /**/ UTR, &U00, /**/ &u01, &U02, 00060 /* ************* */ /* ************************** */ 00061 &u10t, /**/ &upsilon11, &u12t, 00062 UBL, /**/ UBR, &U20, /**/ &u21, &U22, 00063 1, 1, FLA_BR ); 00064 00065 FLA_Repart_1x2_to_1x3( DL, /**/ DR, &D0, /**/ &d1, &D2, 00066 1, FLA_RIGHT ); 00067 00068 FLA_Repart_2x2_to_3x3( TTL, /**/ TTR, &T00, /**/ &t01, &T02, 00069 /* ************* */ /* ************************ */ 00070 &t10t, /**/ &tau11, &t12t, 00071 TBL, /**/ TBR, &T20, /**/ &t21, &T22, 00072 1, 1, FLA_BR ); 00073 00074 /*------------------------------------------------------------*/ 00075 00076 // [ upsilon11, ... 00077 // d1, tau11 ] = FLA_Househ2_UT( upsilon11, ... 00078 // d1 ); 00079 FLA_Househ2_UT( upsilon11, 00080 d1, tau11 ); 00081 00082 // t01 = D0' * d1; 00083 FLA_Gemv_external( FLA_CONJ_TRANSPOSE, FLA_ONE, D0, d1, FLA_ZERO, t01 ); 00084 00085 // [ u12t, ... 00086 // D2 ] = FLA_Apply_househ2_UT( tau11, d1, u12t, ... 00087 // D2 ); 00088 FLA_Apply_househ2_UT( tau11, d1, u12t, 00089 D2 ); 00090 00091 /*------------------------------------------------------------*/ 00092 00093 FLA_Cont_with_3x3_to_2x2( &UTL, /**/ &UTR, U00, u01, /**/ U02, 00094 u10t, upsilon11, /**/ u12t, 00095 /* ************** */ /* ************************ */ 00096 &UBL, /**/ &UBR, U20, u21, /**/ U22, 00097 FLA_TL ); 00098 00099 FLA_Cont_with_1x3_to_1x2( &DL, /**/ &DR, D0, d1, /**/ D2, 00100 FLA_LEFT ); 00101 00102 FLA_Cont_with_3x3_to_2x2( &TTL, /**/ &TTR, T00, t01, /**/ T02, 00103 t10t, tau11, /**/ t12t, 00104 /* ************** */ /* ********************** */ 00105 &TBL, /**/ &TBR, T20, t21, /**/ T22, 00106 FLA_TL ); 00107 } 00108 00109 return FLA_SUCCESS; 00110 }
FLA_Error FLA_QR_UT_UD_blk_var1 | ( | FLA_Obj | U, | |
FLA_Obj | D, | |||
FLA_Obj | T, | |||
fla_qrutud_t * | cntl | |||
) |
References FLA_Axpy_internal(), FLA_Cont_with_1x3_to_1x2(), FLA_Cont_with_3x3_to_2x2(), FLA_Copy_internal(), FLA_Determine_blocksize(), FLA_Gemm_internal(), FLA_MINUS_ONE, FLA_Obj_min_dim(), FLA_Obj_set_to_scalar(), FLA_Obj_width(), FLA_ONE, FLA_Part_1x2(), FLA_Part_2x1(), FLA_Part_2x2(), FLA_QR_UT_UD_internal(), FLA_Repart_1x2_to_1x3(), FLA_Repart_2x2_to_3x3(), FLA_Trsm_internal(), and FLA_ZERO.
Referenced by FLA_QR_UT_UD_internal().
00037 { 00038 FLA_Obj UTL, UTR, U00, U01, U02, 00039 UBL, UBR, U10, U11, U12, 00040 U20, U21, U22; 00041 00042 FLA_Obj DL, DR, D0, D1, D2; 00043 00044 FLA_Obj TL, TR, T0, T1, W12; 00045 00046 FLA_Obj W12T, W12B; 00047 00048 FLA_Obj T1T, T2B; 00049 00050 dim_t b; 00051 00052 FLA_Part_2x2( U, &UTL, &UTR, 00053 &UBL, &UBR, 0, 0, FLA_TL ); 00054 00055 FLA_Part_1x2( D, &DL, &DR, 0, FLA_LEFT ); 00056 00057 FLA_Part_1x2( T, &TL, &TR, 0, FLA_LEFT ); 00058 00059 while ( FLA_Obj_min_dim( UBR ) > 0 ){ 00060 00061 b = FLA_Determine_blocksize( UBR, FLA_BR, FLA_Cntl_blocksize( cntl ) ); 00062 00063 FLA_Repart_2x2_to_3x3( UTL, /**/ UTR, &U00, /**/ &U01, &U02, 00064 /* ************* */ /* ******************** */ 00065 &U10, /**/ &U11, &U12, 00066 UBL, /**/ UBR, &U20, /**/ &U21, &U22, 00067 b, b, FLA_BR ); 00068 00069 FLA_Repart_1x2_to_1x3( DL, /**/ DR, &D0, /**/ &D1, &D2, 00070 b, FLA_RIGHT ); 00071 00072 FLA_Repart_1x2_to_1x3( TL, /**/ TR, &T0, /**/ &T1, &W12, 00073 b, FLA_RIGHT ); 00074 00075 /*------------------------------------------------------------*/ 00076 00077 /* 00078 T1T = FLA_Top_part( T1, b ); 00079 */ 00080 00081 FLA_Part_2x1( T1, &T1T, 00082 &T2B, b, FLA_TOP ); 00083 00084 /* 00085 [ U11, ... 00086 D1, T1 ] = FLA_QR_UT_UD_internal( U11 00087 D1, T1T ); 00088 */ 00089 00090 FLA_QR_UT_UD_internal( U11, 00091 D1, T1T, 00092 FLA_Cntl_sub_qrutud( cntl ) ); 00093 00094 00095 if ( FLA_Obj_width( U12 ) > 0 ) 00096 { 00097 /* 00098 W12T = FLA_Top_part( W12, b ); 00099 */ 00100 00101 FLA_Part_2x1( W12, &W12T, 00102 &W12B, b, FLA_TOP ); 00103 00104 /* 00105 W12T = inv( triu( T1T ) )' * ( U12 + D1' * D2 ); 00106 */ 00107 00108 FLA_Copy_internal( U12, W12T, 00109 FLA_Cntl_sub_copy( cntl ) ); 00110 00111 FLA_Gemm_internal( FLA_CONJ_TRANSPOSE, FLA_NO_TRANSPOSE, 00112 FLA_ONE, D1, D2, FLA_ONE, W12T, 00113 FLA_Cntl_sub_gemm1( cntl ) ); 00114 00115 FLA_Trsm_internal( FLA_LEFT, FLA_UPPER_TRIANGULAR, 00116 FLA_CONJ_TRANSPOSE, FLA_NONUNIT_DIAG, 00117 FLA_ONE, T1T, W12T, 00118 FLA_Cntl_sub_trsm( cntl ) ); 00119 00120 /* 00121 U12 = U12 - W12T; 00122 D2 = D2 - D1 * W12T; 00123 */ 00124 00125 FLA_Axpy_internal( FLA_MINUS_ONE, W12T, U12, 00126 FLA_Cntl_sub_axpy( cntl ) ); 00127 00128 FLA_Gemm_internal( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE, 00129 FLA_MINUS_ONE, D1, W12T, FLA_ONE, D2, 00130 FLA_Cntl_sub_gemm2( cntl ) ); 00131 00132 FLA_Obj_set_to_scalar( FLA_ZERO, W12T ); 00133 } 00134 00135 /*------------------------------------------------------------*/ 00136 00137 FLA_Cont_with_3x3_to_2x2( &UTL, /**/ &UTR, U00, U01, /**/ U02, 00138 U10, U11, /**/ U12, 00139 /* ************** */ /* ****************** */ 00140 &UBL, /**/ &UBR, U20, U21, /**/ U22, 00141 FLA_TL ); 00142 00143 FLA_Cont_with_1x3_to_1x2( &DL, /**/ &DR, D0, D1, /**/ D2, 00144 FLA_LEFT ); 00145 00146 FLA_Cont_with_1x3_to_1x2( &TL, /**/ &TR, T0, T1, /**/ W12, 00147 FLA_LEFT ); 00148 00149 } 00150 00151 return FLA_SUCCESS; 00152 }
FLA_Error FLA_QR_UT_UD_blk_var2 | ( | FLA_Obj | U, | |
FLA_Obj | D, | |||
FLA_Obj | T, | |||
fla_qrutud_t * | cntl | |||
) |
References FLA_Cont_with_3x1_to_2x1(), FLA_Determine_blocksize(), FLA_Obj_length(), FLA_Part_2x1(), FLA_QR_UT_UD_internal(), and FLA_Repart_2x1_to_3x1().
Referenced by FLA_QR_UT_UD_internal().
00037 { 00038 FLA_Obj DT, D0, 00039 DB, D1, 00040 D2; 00041 00042 FLA_Obj TT, T0, 00043 TB, T1, 00044 T2; 00045 00046 dim_t b; 00047 00048 FLA_Part_2x1( D, &DT, 00049 &DB, 0, FLA_TOP ); 00050 00051 FLA_Part_2x1( T, &TT, 00052 &TB, 0, FLA_TOP ); 00053 00054 while ( FLA_Obj_length( DT ) < FLA_Obj_length( D ) ){ 00055 00056 b = FLA_Determine_blocksize( DB, FLA_BOTTOM, FLA_Cntl_blocksize( cntl ) ); 00057 00058 FLA_Repart_2x1_to_3x1( DT, &D0, 00059 /* ** */ /* ****** */ 00060 &D1, 00061 DB, &D2, b, FLA_BOTTOM ); 00062 00063 FLA_Repart_2x1_to_3x1( TT, &T0, 00064 /* ** */ /* ****** */ 00065 &T1, 00066 TB, &T2, b, FLA_BOTTOM ); 00067 00068 /*------------------------------------------------------------*/ 00069 00070 /* 00071 [ U, ... 00072 D1, T ] = FLA_QR_UT_UD_internal( U 00073 D1, T1 ); 00074 */ 00075 00076 FLA_QR_UT_UD_internal( U, 00077 D1, T1, 00078 FLA_Cntl_sub_qrutud( cntl ) ); 00079 00080 /*------------------------------------------------------------*/ 00081 00082 FLA_Cont_with_3x1_to_2x1( &DT, D0, 00083 D1, 00084 /* ** */ /* ****** */ 00085 &DB, D2, FLA_TOP ); 00086 00087 FLA_Cont_with_3x1_to_2x1( &TT, T0, 00088 T1, 00089 /* ** */ /* ****** */ 00090 &TB, T2, FLA_TOP ); 00091 } 00092 00093 return FLA_SUCCESS; 00094 }