#include #define PRECISION float /*************************************************************************** * * * DATA PARALLEL BLAS based on MPL * * * * Internal routine, this routine is not supposed to be * * called by user programs. * * * * Version 1.0 1/4-92 , * * For MasPar MP-1 computers * * * * para//ab, University of Bergen, NORWAY * * * * The calling sequence may be changed in a future version. * * Please report any BUGs, ideas for improvement or other * * comments to * * adm@parallab.uib.no * * * * Future versions may then reflect your suggestions. * * The most current version of this software is available * * from netlib@nac.no , send the message `send index from maspar' * * * * REVISIONS: * * * ***************************************************************************/ /* An upper triangularsolver for nxproc * nxproc Matrix on a rectangular MasPar MP-1 (nyproc = nxproc/2). The physical lay-out on the processor array, transposes the matrix. The algorithm is the straightforward column update algorithm, (but remember: Matrix columns = Physical rows of processors, Thus we update data on rows of processors) For 64 =0) {if (iy== mmod ) btemp = xnetpN[mmod].*b0; else btemp = 0.0;} else {if (iy== ny-1 ) btemp = xnetS[1].*b0; else btemp = 0.0;} iy2 = iy + ny; /* scaling by the diagonal */ if (ix == iy2) xnetcW[m].temp = a1; if (ix < iy2 && iy < m-ny) a1 = a1/temp; /* first half */ for (i=m-1; i>=ny; i--) { ii = i-ny; if (iy == ii) { if(ix ==i) xnetcW[i].temp = btemp; if (ix < i) { btemp -= a1*temp; xnetN[1].btemp = btemp; } } } /* if scaled, scale the results, spread it out and put into the pointer */ temp = btemp; if (diag != 'U' && diag != 'u') if ((ix == iy2)&&(iy=0; i--) { if (iy == i){ if( ix ==i) xnetcW[i].temp = btemp; if (ix < i){ btemp -= a0*temp; xnetN[1].btemp = btemp; } } } /* if scaled, scale the results */ if (diag != 'U' && diag != 'u') if ((ix == iy)&&(ix