static void VI_solve_lt_d( vsip_mview_d *R, vsip_scalar_d alpha, vsip_mview_d *B) { vsip_length N = R->row_length; vsip_mview_d XX = *B; vsip_mview_d *X = &XX; vsip_vview_d xx, rr; vsip_vview_d *x = VI_mrowview_d(X,(vsip_index)0,&xx); vsip_vview_d *r_d = VI_mrowview_d(R,(vsip_index) 0,&rr); vsip_vview_d rr_m = rr; vsip_vview_d *r_m = &rr_m; vsip_stride d_s = R->row_stride + R->col_stride; r_d->length = 1; r_m->length = 0; X->col_length = 1; if(alpha == 0) return; vsip_svmul_d(alpha,x,x); vsip_svmul_d((vsip_scalar_d) 1.0/(VI_VGET_D(r_d,0)),x,x); N--; while(N-- >0){ r_d->offset += d_s; r_m->length++; r_m->offset += R->col_stride; x->offset += X->col_stride; vsip_svmul_d(alpha,x,x); VI_vsubvmprodIP_d(r_m,X,x); vsip_svmul_d((vsip_scalar_d) 1.0/(VI_VGET_D(r_d,0)),x,x); X->col_length++; } return; }
void vsip_mcumsum_d( const vsip_mview_d *a, vsip_major major, const vsip_mview_d *r) { { vsip_vview_d *va,vaa; vsip_vview_d *vr,vrr; vsip_index i; vsip_length m = a->col_length; vsip_length n = a->row_length; va = &vaa; vr = &vrr; if(major == VSIP_ROW){ for(i=0; i<m; i++){ VI_mrowview_d(a,i,va); VI_mrowview_d(r,i,vr); VI_vcumsum_d(va,vr); } } else { /* must be VSIP_COL */ for(i=0; i<n; i++){ VI_mcolview_d(a,i,va); VI_mcolview_d(r,i,vr); VI_vcumsum_d(va,vr); } } } return; }
void vsip_mpolar_d(const vsip_cmview_d* a, const vsip_mview_d* r, const vsip_mview_d* t){ vsip_index i; vsip_vview_d rv; vsip_vview_d tv; vsip_cvview_d av; if(a->row_stride < a->col_stride){ for(i=0; i < a->col_length; i++){ VI_mrowview_d(r,i,&rv); VI_mrowview_d(t,i,&tv);VI_cmrowview_d(a,i,&av); vpolar_d(&av,&rv,&tv); } } else { for(i=0; i < a->col_length; i++){ VI_mcolview_d(r,i,&rv); VI_mcolview_d(t,i,&tv);VI_cmcolview_d(a,i,&av); vpolar_d(&av,&rv,&tv); } } }