Indirect Addressing for Binary Operations

Various indexing schemes are supported. The table below elaborates the choices for the matrix-vector product example above, including the two illustrated above. In all cases it is assumed $i = 0\ldots{}n-1$.

  function name meaning
1 QLA_V_eq_M_times_V(c,u,b) c = u*b
2 QLA_V_veq_M_times_V(c,u,b,n) c[i] = u[i]*b[i]
3 QLA_V_xeq_M_times_V(c,u,b,j,n) c[j[i]] = u[j[i]]*b[j[i]]
4 QLA_V_eq_xM_times_V(c,u,ju,b,n) c[i] = u[ju[i]]*b[i]
5 QLA_V_eq_M_times_xV(c,u,b,jb,n) c[i] = u[i]*b[jb[i]]
6 QLA_xV_eq_M_times_V(c,jc,u,b,n) c[jc[i]] = u[i]*b[i]
7 QLA_V_eq_xM_times_xV(c,u,ju,b,jb,n) c[i] = u[ju[i]]*b[jb[i]]
8 QLA_xV_eq_M_times_xV(c,jc,u,b,jb,n) c[jc[i]] = u[i]*b[jb[i]]
9 QLA_xV_eq_xM_times_V(c,jc,u,b,jb,n) c[jc[i]] = u[ju[i]]*b[i]
10 QLA_xV_eq_xM_times_xV(c,jc,u,ju,b,jb,n) c[jc[i]] = u[ju[i]]*b[jb[i]]
11 QLA_V_veq_pM_times_V(c,u,b,n) c[i] = (*u[i])*b[i]
12 QLA_V_veq_M_times_pV(c,u,b,n) c[i] = u[i]*(*b[i])
13 QLA_V_veq_pM_times_pV(c,u,b,n) c[i] = (*u[i])*(*b[i])
14 QLA_V_xeq_pM_times_V(c,u,b,j,n) c[j[i]] = (*u[j[i]])*b[j[i]]
15 QLA_V_xeq_M_times_pV(c,u,b,j,n) c[j[i]] = (*u[i])*(*b[j[i]])
16 QLA_V_xeq_pM_times_pV(c,u,b,j,n) c[j[i]] = (*u[j[i]])*(*b[j[i]])

Gang-indexing variant 3 applies the same indexing scheme to all three arguments simultaneously. The convention is to place an ``x'' before the assignment operator. The indexing variants 4-10 apply an index to each of the operands separately in various combinations. In this case the convention places an ``x'' before the type abbreviation for the variable that is indexed. Variants 11-16 replace the array argument with an array of pointers. The symbol ``p'' before the type abbreviation identifies the affected variable.

James Osborn 2006-06-25