void VU_mprodqt_f(
     vsip_mview_f *C,
     vsip_mview_f *H,
     vsip_scalar_f *beta)
{
     vsip_mattr_f attr_C,attr_C0;
     vsip_mattr_f attr_H0;
     vsip_vattr_f attr_h,attr_v0;
     vsip_vview_f *h = vsip_mcolview_f(H,0);
     vsip_length m,n;
     vsip_length j;
     vsip_stride k;
     vsip_vview_f *v, *w;
     vsip_mgetattrib_f(C,&attr_C);
     vsip_vgetattrib_f(h,&attr_h);
     vsip_mgetattrib_f(H,&attr_H0);
     attr_C0 = attr_C;
     m = attr_C.col_length;
     n = attr_C.row_length;
     v = vsip_vcreate_f(n,0);
     vsip_vgetattrib_f(v,&attr_v0);
     w = vsip_vcreate_f(m,0);
     vsip_vfill_f(0,v);
     for(k= attr_H0.row_length - 1; k >= 0; k--){
         j = (vsip_length)k;
         attr_h.offset = j * attr_H0.row_stride +
                         j * attr_H0.col_stride + attr_H0.offset;
         attr_h.length = attr_H0.col_length - j;
         vsip_vputlength_f(v,attr_h.length);
         vsip_vputoffset_f(v,n - attr_h.length);
         vsip_vputattrib_f(h,&attr_h);
         vsip_vcopy_f_f(h,v);
         vsip_vput_f(v,0,1);
         vsip_vputattrib_f(v,&attr_v0);
         VU_smvprod_f(-beta[j],C,v,w);
         VU_opu_f(C,w,v);              
     }
     printf("here 2\n");
     vsip_mputattrib_f(C,&attr_C0);
     vsip_vdestroy_f(h);
     vsip_valldestroy_f(v);
     vsip_valldestroy_f(w);
     return;
}
void VU_qtprodm_f(
     vsip_mview_f *C,
     vsip_mview_f *H,
     vsip_scalar_f *beta)
{
     vsip_mattr_f attr_C,attr_C0;
     vsip_mattr_f attr_H0;
     vsip_vattr_f attr_h,attr_v0;
     vsip_vview_f *h = vsip_mcolview_f(H,0);
     vsip_length m,n;
     vsip_length j;
     vsip_stride k;
     vsip_vview_f *v, *w;
     vsip_mgetattrib_f(C,&attr_C);
     vsip_vgetattrib_f(h,&attr_h);
     vsip_mgetattrib_f(H,&attr_H0);
     attr_C0 = attr_C;
     m = attr_C.col_length;
     n = attr_C.row_length;
     v = vsip_vcreate_f(m,0);
     vsip_vgetattrib_f(v,&attr_v0);
     w = vsip_vcreate_f(n,0);
     for(k= 0; k < attr_H0.row_length; k++){
         j = (vsip_length)k;
         attr_h.offset = j * attr_H0.row_stride +
                         j * attr_H0.col_stride + attr_H0.offset;
         attr_h.length = attr_H0.col_length -j;
         vsip_vputlength_f(v,attr_h.length);
         vsip_vputoffset_f(v,m - attr_h.length);
         vsip_vputattrib_f(h,&attr_h);
         vsip_vcopy_f_f(h,v);
         vsip_vput_f(v,0,1);
         vsip_vputattrib_f(v,&attr_v0);
         VU_svmprod_f(-beta[j],v,C,w);
         VU_opu_f(C,v,w);
         vsip_vput_f(v,k,0);
     }
     vsip_mputattrib_f(C,&attr_C0);
     vsip_vdestroy_f(h);
     vsip_valldestroy_f(v);
     vsip_valldestroy_f(w);
     return;
}
Exemplo n.º 3
0
Arquivo: svd_f.c Projeto: rrjudd/jvsip
static vsip_vview_f *row_sv_f(vsip_mview_f*Am,vsip_vview_f* vv,vsip_index row)
{
    vsip_mattr_f A; vsip_vattr_f v;
    vsip_mgetattrib_f(Am,&A);
    v.offset = A.offset + row * A.col_stride;
    v.stride = A.row_stride;
    v.length = A.row_length;
    vsip_vputattrib_f(vv,&v);
    return vv;
}
Exemplo n.º 4
0
Arquivo: svd_f.c Projeto: rrjudd/jvsip
static vsip_mview_f* msv_f(vsip_mview_f *B,vsip_mview_f *BS, vsip_index i,vsip_index j)
{
    vsip_mattr_f attr;
    vsip_mgetattrib_f(B,&attr);
    attr.row_length -= j;
    attr.col_length -= i;
    attr.offset += j * attr.row_stride + i * attr.col_stride;
    vsip_mputattrib_f(BS,&attr);
    return BS;
}
Exemplo n.º 5
0
Arquivo: svd_f.c Projeto: rrjudd/jvsip
static vsip_mview_f* imsv_f( vsip_mview_f *B, vsip_mview_f *BS, vsip_index i1,vsip_index j1,
                                                                vsip_index i2, vsip_index j2)
{
    vsip_mattr_f attr;
    vsip_mgetattrib_f(B,&attr);
    if(j1 == 0) j1 =attr.col_length;
    if(j2 == 0) j2 =attr.row_length;
    attr.col_length = (j1 - i1);
    attr.row_length = (j2 - i2);
    attr.offset += i2 * attr.row_stride + i1 * attr.col_stride;
    vsip_mputattrib_f(BS,&attr);
    return BS;
}
Exemplo n.º 6
0
Arquivo: svd_f.c Projeto: rrjudd/jvsip
/* sign function as defined in http://www.netlib.org/lapack/lawnspdf/lawn148.pdf */
static vsip_scalar_f sign_f(vsip_scalar_f a_in)
{
    if(a_in < 0.0)
       return -1.0;
    else 
       return 1.0;
} /* same */
static void biDiagPhaseToZero_f( svdObj_f *svd)
{
    vsip_mview_f *L = svd->L;
    vsip_vview_f *d = svd->d;
    vsip_vview_f *f = svd->f;
    vsip_mview_f *R = svd->R;
    vsip_scalar_f eps0 = svd->eps0;
    vsip_length n_d=vsip_vgetlength_f(d);
    vsip_length n_f=vsip_vgetlength_f(f);
    vsip_index i,j;
    vsip_scalar_f ps;
    vsip_scalar_f m;
    vsip_vview_f *l = svd->ls_one;
    vsip_vview_f *r = svd->rs_one;
    for(i=0; i<n_d; i++){
        ps=vsip_vget_f(d,i);
        m = vsip_mag_f(ps);
        ps=sign_f(ps);
        if(m > eps0){
            col_sv_f(L,l,i);vsip_svmul_f(ps,l,l);
            vsip_vput_f(d,i,m);
            if (i < n_f)
                vsip_vput_f(f,i,ps*vsip_vget_f(f,i));
        } else {
            vsip_vput_f(d,i,0.0);
        }
    }
    svdZeroCheckAndSet_f(eps0,d,f);          
    for (i=0; i<n_f-1; i++){
        j=i+1;
        ps = vsip_vget_f(f,i);
        m = vsip_mag_f(ps);
        ps=sign_f(ps);
        col_sv_f(L, l, j);vsip_svmul_f(ps,l,l);
        row_sv_f(R,r,j);vsip_svmul_f(ps,r,r);
        vsip_vput_f(f,i,m);
        vsip_vput_f(f,j,ps * vsip_vget_f(f,j));
    }
    j=n_f;
    i=j-1;
    ps=vsip_vget_f(f,i);
    m=vsip_mag_f(ps);
    ps=sign_f(ps);
    vsip_vput_f(f,i,m);
    col_sv_f(L, l, j);vsip_svmul_f(ps,l,l);
    row_sv_f(R,r,j);vsip_svmul_f(ps,r,r);
} 
static void phaseCheck_f(svdObj_f *svd)
{
    biDiagPhaseToZero_f(svd);
} 

void houseProd_f(vsip_vview_f *v, vsip_mview_f *A)
{
    vsip_mattr_f a_atr; 
    vsip_vview_f *w;
    vsip_mview_f *B;
    vsip_mgetattrib_f(A,&a_atr);
    B=vsip_mcreate_f(a_atr.col_length,a_atr.row_length,VSIP_ROW,VSIP_MEM_NONE);
    w = vsip_vcreate_f(a_atr.row_length,VSIP_MEM_NONE);
    vsip_scalar_f beta = 2.0/vsip_vdot_f(v,v);
    vsip_vmprod_f(v,A,w);
    vsip_vouter_f(beta,v,w,B);
    vsip_msub_f(A,B,A);
    vsip_valldestroy_f(w);
    vsip_malldestroy_f(B);
} /* need to remove create */
void prodHouse_f(vsip_mview_f *A, vsip_vview_f *v)
{
    vsip_mattr_f a_atr; 
    vsip_vview_f *w;
    vsip_mview_f *B;
    vsip_mgetattrib_f(A,&a_atr);
    B=vsip_mcreate_f(a_atr.col_length,a_atr.row_length,VSIP_ROW,VSIP_MEM_NONE);
    w = vsip_vcreate_f(a_atr.col_length,VSIP_MEM_NONE);
    vsip_scalar_f beta = 2.0/vsip_vdot_f(v,v);
    vsip_mvprod_f(A,v,w);
    vsip_vouter_f(beta,w,v,B);
    vsip_msub_f(A,B,A);
    vsip_valldestroy_f(w);
    vsip_malldestroy_f(B);
} /* need to remove create */
Exemplo n.º 7
0
Arquivo: svd_f.c Projeto: rrjudd/jvsip
static vsip_vview_f *diag_sv_f(vsip_mview_f* Am,vsip_vview_f* a, vsip_stride i)
{
    vsip_mattr_f A; vsip_vattr_f v;
    vsip_mgetattrib_f(Am,&A);
    vsip_vgetattrib_f(a,&v);
    v.stride=A.row_stride + A.col_stride;
    if(i==0){
       v.length = A.row_length;
       v.offset = A.offset;
    } else if (i == 1){
        v.offset = A.offset + A.row_stride;
        v.length = A.row_length - 1;
    } else {
        printf("Failed in diag_sv_f\n");
        exit(0);
    }
    vsip_vputattrib_f(a,&v);
    return a;
}