1*59599516SKenneth E. Jansen /*======================================================================
2*59599516SKenneth E. Jansen *
3*59599516SKenneth E. Jansen * lestools.c : Linear Algebra Solver Tools
4*59599516SKenneth E. Jansen *
5*59599516SKenneth E. Jansen * small single character : vector or matrix
6*59599516SKenneth E. Jansen *
7*59599516SKenneth E. Jansen *======================================================================
8*59599516SKenneth E. Jansen */
9*59599516SKenneth E. Jansen #include "les.h"
10*59599516SKenneth E. Jansen #include "usr.h"
11*59599516SKenneth E. Jansen #ifdef intel
12*59599516SKenneth E. Jansen void DRVSCLRDIAG( double *sclrDiag, int *ilwork, int *iBC,
13*59599516SKenneth E. Jansen double *BC, int *iper, int *rowp,
14*59599516SKenneth E. Jansen int *colm, double *lhsS);
15*59599516SKenneth E. Jansen
16*59599516SKenneth E. Jansen void FMTXBLKDAXPY(double *srcpnt, double *dstpnt, double *coef,
17*59599516SKenneth E. Jansen int *mDims, int *dim);
18*59599516SKenneth E. Jansen
19*59599516SKenneth E. Jansen void FMTXBLKDYEAX(double *srcpnt, double *dstpnt, double *coef,
20*59599516SKenneth E. Jansen int *mDims, int *dim);
21*59599516SKenneth E. Jansen
22*59599516SKenneth E. Jansen void FMTXBLKDMAXPY(double *srcpnt, double *dstpnt, double *coef,
23*59599516SKenneth E. Jansen int *mDims, int *dim);
24*59599516SKenneth E. Jansen
25*59599516SKenneth E. Jansen void FMTXVDIMVECCP(double *srcpnt, double *dstpnt, int *nSrcDims,
26*59599516SKenneth E. Jansen int *nDstDims, int *nDims, int *nNodes );
27*59599516SKenneth E. Jansen
28*59599516SKenneth E. Jansen void DRVLESPREPDIAG( double *flowDiag, int *ilwork, int *iBC,
29*59599516SKenneth E. Jansen double *BC, int *iper, int *rowp,
30*59599516SKenneth E. Jansen int *colm, double *lhsK, double *lhsP) ;
31*59599516SKenneth E. Jansen
32*59599516SKenneth E. Jansen void FMTXVDIMVECMULT( double* , double*,
33*59599516SKenneth E. Jansen double *dstpnt, int *nSrcDims,
34*59599516SKenneth E. Jansen int *nDofs, int *nDstDims,
35*59599516SKenneth E. Jansen int *nDims, int *nNodes);
36*59599516SKenneth E. Jansen
37*59599516SKenneth E. Jansen void FLESZERO( double *dstpnt, int *nDims, int *nNodes);
38*59599516SKenneth E. Jansen
39*59599516SKenneth E. Jansen void FLESCP( double *srcpnt, double *dstpnt, int *nDims,
40*59599516SKenneth E. Jansen int *dim ) ;
41*59599516SKenneth E. Jansen
42*59599516SKenneth E. Jansen void FLESSCALE( double *dstpnt,
43*59599516SKenneth E. Jansen double *coef,
44*59599516SKenneth E. Jansen int *nDims,
45*59599516SKenneth E. Jansen int *dim ) ;
46*59599516SKenneth E. Jansen
47*59599516SKenneth E. Jansen void FLESSCALECP( double *srcpnt,
48*59599516SKenneth E. Jansen double *dstpnt,
49*59599516SKenneth E. Jansen double *coef,
50*59599516SKenneth E. Jansen int *nDims,
51*59599516SKenneth E. Jansen int *dim ) ;
52*59599516SKenneth E. Jansen
53*59599516SKenneth E. Jansen void FLESADD( double *srcpnt,
54*59599516SKenneth E. Jansen double *dstpnt,
55*59599516SKenneth E. Jansen int *nDims,
56*59599516SKenneth E. Jansen int *dim ) ;
57*59599516SKenneth E. Jansen
58*59599516SKenneth E. Jansen void FLESSUB( double *srcpnt,
59*59599516SKenneth E. Jansen double *dstpnt,
60*59599516SKenneth E. Jansen int *nDims,
61*59599516SKenneth E. Jansen int *dim ) ;
62*59599516SKenneth E. Jansen
63*59599516SKenneth E. Jansen void DRVALLREDUCESCLR(double *tmpp, double *tmp);
64*59599516SKenneth E. Jansen
65*59599516SKenneth E. Jansen void DRVALLREDUCE(double *valuesp, double *values, int* mDims);
66*59599516SKenneth E. Jansen
67*59599516SKenneth E. Jansen double FLESDOT1( double *srcpnt, int* nDims, int* dim );
68*59599516SKenneth E. Jansen
69*59599516SKenneth E. Jansen double FLESDOT2(double *src1pnt, double *src2pnt, int* nDims, int* dim );
70*59599516SKenneth E. Jansen
71*59599516SKenneth E. Jansen void FLESDAXPY( double *srcpnt, double *lesP, double *sclrRegFct,
72*59599516SKenneth E. Jansen int *nDstDims, int *nNodes);
73*59599516SKenneth E. Jansen
74*59599516SKenneth E. Jansen void FLESDXPAY( double *srcpnt, double *dstpnt, double *coef,
75*59599516SKenneth E. Jansen int *nDims, int *dim);
76*59599516SKenneth E. Jansen
77*59599516SKenneth E. Jansen void FLESINV( double *dstpnt, int *nDims, int *dim ) ;
78*59599516SKenneth E. Jansen
79*59599516SKenneth E. Jansen
80*59599516SKenneth E. Jansen
81*59599516SKenneth E. Jansen void FMTXBLKDOT2 (double *src1pnt, double *src2pnt, double *valuesp,
82*59599516SKenneth E. Jansen int* mDims, int* dim);
83*59599516SKenneth E. Jansen
84*59599516SKenneth E. Jansen void COMMIN( double *lesQ, int *ilwork, int *nPs,
85*59599516SKenneth E. Jansen int *iper, int *iBC, double *BC);
86*59599516SKenneth E. Jansen
87*59599516SKenneth E. Jansen void COMMOUT( double *lesP, int *ilwork, int *nQs,
88*59599516SKenneth E. Jansen int *iper, int *iBC, double *BC);
89*59599516SKenneth E. Jansen
90*59599516SKenneth E. Jansen void FLESSPARSEAPFULL(int *colm, int *rowp, double *lhsK,
91*59599516SKenneth E. Jansen double *lhsP, double *lesP, double *lesQ,
92*59599516SKenneth E. Jansen int *nNodes, int *nnz);
93*59599516SKenneth E. Jansen
94*59599516SKenneth E. Jansen void FLESSPARSEAPSCLR(int *colm, int *rowp,
95*59599516SKenneth E. Jansen double *lhsS, double *lesP, double *lesQ,
96*59599516SKenneth E. Jansen int *nNodes, int *nnz);
97*59599516SKenneth E. Jansen
98*59599516SKenneth E. Jansen void FMTXVDIMVECDOT2 (double *src1pnt, double *src2pnt, double *coefp,
99*59599516SKenneth E. Jansen int *nSrc1Dims,int *nSrc2Dims, int *nDims, int *nNodes);
100*59599516SKenneth E. Jansen
101*59599516SKenneth E. Jansen void FMTXVDIMVECDAXPY ( double *srcpnt, double *dstpnt, double *coef,
102*59599516SKenneth E. Jansen int *nSrcDims, int *nDstDims, int *nDims,
103*59599516SKenneth E. Jansen int *nNodes);
104*59599516SKenneth E. Jansen
105*59599516SKenneth E. Jansen void FLESSPARSEAPG ( int *colm, int *rowp,
106*59599516SKenneth E. Jansen double *lhsP, double *lesP, double *lesQ,
107*59599516SKenneth E. Jansen int *nNodes, int *nnz);
108*59599516SKenneth E. Jansen
109*59599516SKenneth E. Jansen void FLESSPARSEAPNGT ( int *colm, int *rowp,
110*59599516SKenneth E. Jansen double *lhsP, double *lesP, double *lesQ,
111*59599516SKenneth E. Jansen int *nNodes, int *nnz);
112*59599516SKenneth E. Jansen
113*59599516SKenneth E. Jansen void FLESSPARSEAPNGTC ( int *colm, int *rowp,
114*59599516SKenneth E. Jansen double *lhsP, double *lesP, double *lesQ,
115*59599516SKenneth E. Jansen int *nNodes, int *nnz);
116*59599516SKenneth E. Jansen
117*59599516SKenneth E. Jansen void FLESSPARSEAPKG ( int *colm, int *rowp, double *lhsK,
118*59599516SKenneth E. Jansen double *lhsP, double *lesP, double *lesQ,
119*59599516SKenneth E. Jansen int *nNodes, int *nnz);
120*59599516SKenneth E. Jansen void RAMG_INTERFACE ( int *colm, int *rowp, double *lhsK,double *lhsP,
121*59599516SKenneth E. Jansen double *mcgR,double *mcgZ,
122*59599516SKenneth E. Jansen int *ilwork, double *BC, int *iBC,int *iper);
123*59599516SKenneth E. Jansen #endif
124*59599516SKenneth E. Jansen /*----------------------------------------------------------------------
125*59599516SKenneth E. Jansen *
126*59599516SKenneth E. Jansen * lesPreDiag
127*59599516SKenneth E. Jansen *
128*59599516SKenneth E. Jansen * operation : a = 1/sqrt(abs(a))
129*59599516SKenneth E. Jansen *
130*59599516SKenneth E. Jansen *----------------------------------------------------------------------
131*59599516SKenneth E. Jansen */
lesPrepDiag(UsrHd usrHd)132*59599516SKenneth E. Jansen void lesPrepDiag( UsrHd usrHd )
133*59599516SKenneth E. Jansen {
134*59599516SKenneth E. Jansen char* funcName = "lesPrepDiag" ; /* function name */
135*59599516SKenneth E. Jansen
136*59599516SKenneth E. Jansen if ( (usrHd->eqnType) == 1 ) { /* continuity & momentum */
137*59599516SKenneth E. Jansen
138*59599516SKenneth E. Jansen drvlesPrepDiag( usrHd->flowDiag,
139*59599516SKenneth E. Jansen usrHd->ilwork, usrHd->iBC,
140*59599516SKenneth E. Jansen usrHd->BC, usrHd->iper,
141*59599516SKenneth E. Jansen usrHd->rowp, usrHd->colm,
142*59599516SKenneth E. Jansen usrHd->lhsK, usrHd->lhsP) ;
143*59599516SKenneth E. Jansen }
144*59599516SKenneth E. Jansen
145*59599516SKenneth E. Jansen if ( (usrHd->eqnType) == 2 ) { /* temperature or scalar variable */
146*59599516SKenneth E. Jansen
147*59599516SKenneth E. Jansen drvsclrDiag ( usrHd->sclrDiag, usrHd->ilwork,
148*59599516SKenneth E. Jansen usrHd->iBC, usrHd->BC,
149*59599516SKenneth E. Jansen usrHd->iper, usrHd->rowp,
150*59599516SKenneth E. Jansen usrHd->colm, usrHd->lhsS ) ;
151*59599516SKenneth E. Jansen
152*59599516SKenneth E. Jansen }
153*59599516SKenneth E. Jansen
154*59599516SKenneth E. Jansen }
155*59599516SKenneth E. Jansen
156*59599516SKenneth E. Jansen /*----------------------------------------------------------------------
157*59599516SKenneth E. Jansen *
158*59599516SKenneth E. Jansen * lesDiagScaleCp
159*59599516SKenneth E. Jansen *
160*59599516SKenneth E. Jansen * operation : c = a * b
161*59599516SKenneth E. Jansen *
162*59599516SKenneth E. Jansen *----------------------------------------------------------------------
163*59599516SKenneth E. Jansen */
lesDiagScaleCp(UsrHd usrHd,Integer srcId,Integer dstId,Integer nSrcDims,Integer srcOff,Integer nDstDims,Integer dstOff,Integer diagOff,Integer nDims)164*59599516SKenneth E. Jansen void lesDiagScaleCp ( UsrHd usrHd,
165*59599516SKenneth E. Jansen Integer srcId,
166*59599516SKenneth E. Jansen Integer dstId,
167*59599516SKenneth E. Jansen Integer nSrcDims,
168*59599516SKenneth E. Jansen Integer srcOff,
169*59599516SKenneth E. Jansen Integer nDstDims,
170*59599516SKenneth E. Jansen Integer dstOff,
171*59599516SKenneth E. Jansen Integer diagOff,
172*59599516SKenneth E. Jansen Integer nDims )
173*59599516SKenneth E. Jansen {
174*59599516SKenneth E. Jansen char* funcName = "lesDiagScaleCp" ; /* function name */
175*59599516SKenneth E. Jansen Integer nDofs ; /* No. of Dofs */
176*59599516SKenneth E. Jansen Real* dstpnt ; /* destination */
177*59599516SKenneth E. Jansen Real* srcpnt ; /* source */
178*59599516SKenneth E. Jansen
179*59599516SKenneth E. Jansen if ( (usrHd->eqnType) == 1 ) {
180*59599516SKenneth E. Jansen
181*59599516SKenneth E. Jansen nDofs = 4 ;
182*59599516SKenneth E. Jansen
183*59599516SKenneth E. Jansen srcpnt = usrPointer ( usrHd, srcId, srcOff, nSrcDims ) ;
184*59599516SKenneth E. Jansen dstpnt = usrPointer ( usrHd, dstId, dstOff, nDstDims ) ;
185*59599516SKenneth E. Jansen
186*59599516SKenneth E. Jansen fMtxVdimVecMult( srcpnt,
187*59599516SKenneth E. Jansen usrHd->flowDiag+diagOff*usrHd->nNodes,
188*59599516SKenneth E. Jansen dstpnt,
189*59599516SKenneth E. Jansen &nSrcDims,
190*59599516SKenneth E. Jansen &nDofs,
191*59599516SKenneth E. Jansen &nDstDims,
192*59599516SKenneth E. Jansen &nDims,
193*59599516SKenneth E. Jansen &(usrHd->nNodes) ) ;
194*59599516SKenneth E. Jansen }
195*59599516SKenneth E. Jansen
196*59599516SKenneth E. Jansen if ( (usrHd->eqnType) == 2 ) {
197*59599516SKenneth E. Jansen
198*59599516SKenneth E. Jansen nDofs = 1 ;
199*59599516SKenneth E. Jansen
200*59599516SKenneth E. Jansen srcpnt = usrPointer ( usrHd, srcId, srcOff, nSrcDims ) ;
201*59599516SKenneth E. Jansen dstpnt = usrPointer ( usrHd, dstId, dstOff, nDstDims ) ;
202*59599516SKenneth E. Jansen
203*59599516SKenneth E. Jansen fMtxVdimVecMult( srcpnt,
204*59599516SKenneth E. Jansen usrHd->sclrDiag+diagOff*usrHd->nNodes,
205*59599516SKenneth E. Jansen dstpnt,
206*59599516SKenneth E. Jansen &nSrcDims,
207*59599516SKenneth E. Jansen &nDofs,
208*59599516SKenneth E. Jansen &nDstDims,
209*59599516SKenneth E. Jansen &nDims,
210*59599516SKenneth E. Jansen &(usrHd->nNodes) ) ;
211*59599516SKenneth E. Jansen }
212*59599516SKenneth E. Jansen
213*59599516SKenneth E. Jansen }
214*59599516SKenneth E. Jansen
215*59599516SKenneth E. Jansen /*----------------------------------------------------------------------
216*59599516SKenneth E. Jansen *
217*59599516SKenneth E. Jansen * lesZero
218*59599516SKenneth E. Jansen *
219*59599516SKenneth E. Jansen * operation : a = 0
220*59599516SKenneth E. Jansen *
221*59599516SKenneth E. Jansen *----------------------------------------------------------------------
222*59599516SKenneth E. Jansen */
lesZero(UsrHd usrHd,Integer dstId,Integer nDims)223*59599516SKenneth E. Jansen void lesZero ( UsrHd usrHd,
224*59599516SKenneth E. Jansen Integer dstId,
225*59599516SKenneth E. Jansen Integer nDims )
226*59599516SKenneth E. Jansen {
227*59599516SKenneth E. Jansen char* funcName = "lesZero" ; /* function namea */
228*59599516SKenneth E. Jansen Real* dstpnt ; /* destination */
229*59599516SKenneth E. Jansen Integer dstOff ; /* destination offset */
230*59599516SKenneth E. Jansen
231*59599516SKenneth E. Jansen
232*59599516SKenneth E. Jansen dstOff = 0 ;
233*59599516SKenneth E. Jansen
234*59599516SKenneth E. Jansen dstpnt = usrPointer ( usrHd, dstId, dstOff, nDims );
235*59599516SKenneth E. Jansen
236*59599516SKenneth E. Jansen flesZero( dstpnt, &nDims, &(usrHd->nNodes) );
237*59599516SKenneth E. Jansen }
238*59599516SKenneth E. Jansen
239*59599516SKenneth E. Jansen /*----------------------------------------------------------------------
240*59599516SKenneth E. Jansen *
241*59599516SKenneth E. Jansen * lesCp
242*59599516SKenneth E. Jansen *
243*59599516SKenneth E. Jansen * operation : b = a
244*59599516SKenneth E. Jansen *
245*59599516SKenneth E. Jansen *-----------------------------------------------------------------------
246*59599516SKenneth E. Jansen */
lesCp(UsrHd usrHd,Integer srcId,Integer dstId,Integer nDims)247*59599516SKenneth E. Jansen void lesCp ( UsrHd usrHd,
248*59599516SKenneth E. Jansen Integer srcId,
249*59599516SKenneth E. Jansen Integer dstId,
250*59599516SKenneth E. Jansen Integer nDims )
251*59599516SKenneth E. Jansen {
252*59599516SKenneth E. Jansen char* funcName = "lesCp" ; /* function name */
253*59599516SKenneth E. Jansen Real* srcpnt ; /* source */
254*59599516SKenneth E. Jansen Real* dstpnt ; /* destination */
255*59599516SKenneth E. Jansen Integer dim ; /* a simple dimension */
256*59599516SKenneth E. Jansen Integer srcOff ; /* source offset */
257*59599516SKenneth E. Jansen Integer dstOff ; /* destination offset */
258*59599516SKenneth E. Jansen
259*59599516SKenneth E. Jansen srcOff = 0 ;
260*59599516SKenneth E. Jansen dstOff = 0 ;
261*59599516SKenneth E. Jansen
262*59599516SKenneth E. Jansen srcpnt = usrPointer ( usrHd, srcId, srcOff, nDims ) ;
263*59599516SKenneth E. Jansen dstpnt = usrPointer ( usrHd, dstId, dstOff, nDims ) ;
264*59599516SKenneth E. Jansen
265*59599516SKenneth E. Jansen dim = usrHd->nNodes ;
266*59599516SKenneth E. Jansen
267*59599516SKenneth E. Jansen flesCp( srcpnt, dstpnt, &nDims, &dim ) ;
268*59599516SKenneth E. Jansen }
269*59599516SKenneth E. Jansen
270*59599516SKenneth E. Jansen /*-----------------------------------------------------------------------
271*59599516SKenneth E. Jansen *
272*59599516SKenneth E. Jansen * lesScale
273*59599516SKenneth E. Jansen *
274*59599516SKenneth E. Jansen * operation : a = a * coef
275*59599516SKenneth E. Jansen *
276*59599516SKenneth E. Jansen *-----------------------------------------------------------------------
277*59599516SKenneth E. Jansen */
lesScale(UsrHd usrHd,Integer dstId,Real coef,Integer nDims)278*59599516SKenneth E. Jansen void lesScale ( UsrHd usrHd,
279*59599516SKenneth E. Jansen Integer dstId,
280*59599516SKenneth E. Jansen Real coef,
281*59599516SKenneth E. Jansen Integer nDims )
282*59599516SKenneth E. Jansen {
283*59599516SKenneth E. Jansen char* funcName = "lesScale" ; /* function name */
284*59599516SKenneth E. Jansen Real* dstpnt ; /* destination */
285*59599516SKenneth E. Jansen Integer dstOff ; /* destination offset */
286*59599516SKenneth E. Jansen Integer dim ; /* a simple dimension */
287*59599516SKenneth E. Jansen
288*59599516SKenneth E. Jansen dstOff = 0 ;
289*59599516SKenneth E. Jansen
290*59599516SKenneth E. Jansen dim = usrHd->nNodes ;
291*59599516SKenneth E. Jansen
292*59599516SKenneth E. Jansen dstpnt = usrPointer( usrHd, dstId, dstOff, nDims ) ;
293*59599516SKenneth E. Jansen
294*59599516SKenneth E. Jansen flesScale( dstpnt,
295*59599516SKenneth E. Jansen &coef,
296*59599516SKenneth E. Jansen &nDims,
297*59599516SKenneth E. Jansen &dim ) ;
298*59599516SKenneth E. Jansen }
299*59599516SKenneth E. Jansen /*-----------------------------------------------------------------------
300*59599516SKenneth E. Jansen *
301*59599516SKenneth E. Jansen * lesScaleCp
302*59599516SKenneth E. Jansen *
303*59599516SKenneth E. Jansen * operation : b = a * coef
304*59599516SKenneth E. Jansen *
305*59599516SKenneth E. Jansen *-----------------------------------------------------------------------
306*59599516SKenneth E. Jansen */
lesScaleCp(UsrHd usrHd,Integer srcId,Integer dstId,Real coef,Integer nDims)307*59599516SKenneth E. Jansen void lesScaleCp ( UsrHd usrHd,
308*59599516SKenneth E. Jansen Integer srcId,
309*59599516SKenneth E. Jansen Integer dstId,
310*59599516SKenneth E. Jansen Real coef,
311*59599516SKenneth E. Jansen Integer nDims )
312*59599516SKenneth E. Jansen {
313*59599516SKenneth E. Jansen char* funcName = "lesScaleCp" ; /* function name */
314*59599516SKenneth E. Jansen Real* srcpnt ; /* source */
315*59599516SKenneth E. Jansen Real* dstpnt ; /* destination */
316*59599516SKenneth E. Jansen Integer dim ; /* a simple dimension */
317*59599516SKenneth E. Jansen Integer srcOff ; /* source offset */
318*59599516SKenneth E. Jansen Integer dstOff ; /* destination offset */
319*59599516SKenneth E. Jansen
320*59599516SKenneth E. Jansen srcOff = 0 ;
321*59599516SKenneth E. Jansen dstOff = 0 ;
322*59599516SKenneth E. Jansen
323*59599516SKenneth E. Jansen srcpnt = usrPointer ( usrHd, srcId, srcOff, nDims ) ;
324*59599516SKenneth E. Jansen dstpnt = usrPointer ( usrHd, dstId, dstOff, nDims ) ;
325*59599516SKenneth E. Jansen
326*59599516SKenneth E. Jansen dim = usrHd->nNodes ;
327*59599516SKenneth E. Jansen
328*59599516SKenneth E. Jansen flesScaleCp( srcpnt,
329*59599516SKenneth E. Jansen dstpnt,
330*59599516SKenneth E. Jansen &coef,
331*59599516SKenneth E. Jansen &nDims,
332*59599516SKenneth E. Jansen &dim ) ;
333*59599516SKenneth E. Jansen }
334*59599516SKenneth E. Jansen
335*59599516SKenneth E. Jansen /*-----------------------------------------------------------------------
336*59599516SKenneth E. Jansen *
337*59599516SKenneth E. Jansen * lesAdd
338*59599516SKenneth E. Jansen *
339*59599516SKenneth E. Jansen * operation : b = b + a
340*59599516SKenneth E. Jansen *
341*59599516SKenneth E. Jansen *-----------------------------------------------------------------------
342*59599516SKenneth E. Jansen */
lesAdd(UsrHd usrHd,Integer srcId,Integer dstId,Integer nDims)343*59599516SKenneth E. Jansen void lesAdd ( UsrHd usrHd,
344*59599516SKenneth E. Jansen Integer srcId,
345*59599516SKenneth E. Jansen Integer dstId,
346*59599516SKenneth E. Jansen Integer nDims )
347*59599516SKenneth E. Jansen {
348*59599516SKenneth E. Jansen char* funcName = "lesAdd" ; /* function name */
349*59599516SKenneth E. Jansen Real* srcpnt ; /* source */
350*59599516SKenneth E. Jansen Real* dstpnt ; /* destination */
351*59599516SKenneth E. Jansen Integer srcOff ; /* source offset */
352*59599516SKenneth E. Jansen Integer dstOff ; /* destination offset */
353*59599516SKenneth E. Jansen Integer dim ; /* a simple dimension */
354*59599516SKenneth E. Jansen
355*59599516SKenneth E. Jansen srcOff = 0 ;
356*59599516SKenneth E. Jansen dstOff = 0 ;
357*59599516SKenneth E. Jansen
358*59599516SKenneth E. Jansen srcpnt = usrPointer ( usrHd, srcId, srcOff, nDims ) ;
359*59599516SKenneth E. Jansen dstpnt = usrPointer ( usrHd, dstId, dstOff, nDims ) ;
360*59599516SKenneth E. Jansen
361*59599516SKenneth E. Jansen dim = usrHd->nNodes ;
362*59599516SKenneth E. Jansen
363*59599516SKenneth E. Jansen flesAdd( srcpnt,
364*59599516SKenneth E. Jansen dstpnt,
365*59599516SKenneth E. Jansen &nDims,
366*59599516SKenneth E. Jansen &dim ) ;
367*59599516SKenneth E. Jansen }
368*59599516SKenneth E. Jansen
369*59599516SKenneth E. Jansen /*-----------------------------------------------------------------------
370*59599516SKenneth E. Jansen *
371*59599516SKenneth E. Jansen * lesSub
372*59599516SKenneth E. Jansen *
373*59599516SKenneth E. Jansen * operation : b = b - a
374*59599516SKenneth E. Jansen *
375*59599516SKenneth E. Jansen *-----------------------------------------------------------------------
376*59599516SKenneth E. Jansen */
lesSub(UsrHd usrHd,Integer srcId,Integer dstId,Integer nDims)377*59599516SKenneth E. Jansen void lesSub ( UsrHd usrHd,
378*59599516SKenneth E. Jansen Integer srcId,
379*59599516SKenneth E. Jansen Integer dstId,
380*59599516SKenneth E. Jansen Integer nDims )
381*59599516SKenneth E. Jansen {
382*59599516SKenneth E. Jansen char* funcName = "lesSub" ; /* function name */
383*59599516SKenneth E. Jansen Real* srcpnt ; /* source */
384*59599516SKenneth E. Jansen Real* dstpnt ; /* destination */
385*59599516SKenneth E. Jansen Integer srcOff ; /* source offset */
386*59599516SKenneth E. Jansen Integer dstOff ; /* destination offset */
387*59599516SKenneth E. Jansen Integer dim ; /* a simple dimension */
388*59599516SKenneth E. Jansen
389*59599516SKenneth E. Jansen srcOff = 0 ;
390*59599516SKenneth E. Jansen dstOff = 0 ;
391*59599516SKenneth E. Jansen
392*59599516SKenneth E. Jansen srcpnt = usrPointer ( usrHd, srcId, srcOff, nDims ) ;
393*59599516SKenneth E. Jansen dstpnt = usrPointer ( usrHd, dstId, dstOff, nDims ) ;
394*59599516SKenneth E. Jansen
395*59599516SKenneth E. Jansen dim = usrHd->nNodes ;
396*59599516SKenneth E. Jansen
397*59599516SKenneth E. Jansen flesSub( srcpnt,
398*59599516SKenneth E. Jansen dstpnt,
399*59599516SKenneth E. Jansen &nDims,
400*59599516SKenneth E. Jansen &dim ) ;
401*59599516SKenneth E. Jansen }
402*59599516SKenneth E. Jansen
403*59599516SKenneth E. Jansen /*-----------------------------------------------------------------------
404*59599516SKenneth E. Jansen *
405*59599516SKenneth E. Jansen * lesDot1
406*59599516SKenneth E. Jansen *
407*59599516SKenneth E. Jansen * operation : tmp = tmp + a * a
408*59599516SKenneth E. Jansen *
409*59599516SKenneth E. Jansen *-----------------------------------------------------------------------
410*59599516SKenneth E. Jansen */
lesDot1(UsrHd usrHd,Integer srcId,Integer nDims)411*59599516SKenneth E. Jansen Real lesDot1 ( UsrHd usrHd,
412*59599516SKenneth E. Jansen Integer srcId,
413*59599516SKenneth E. Jansen Integer nDims )
414*59599516SKenneth E. Jansen {
415*59599516SKenneth E. Jansen char* funcName = "lesDot1" ; /* function name */
416*59599516SKenneth E. Jansen Real* srcpnt ; /* source */
417*59599516SKenneth E. Jansen Integer srcOff ; /* source offset */
418*59599516SKenneth E. Jansen Integer dim ; /* a simple dimension */
419*59599516SKenneth E. Jansen Real tmp ; /* a temporary value */
420*59599516SKenneth E. Jansen Real tmpp ; /* a temporary value on each proc. */
421*59599516SKenneth E. Jansen
422*59599516SKenneth E. Jansen srcOff = 0 ;
423*59599516SKenneth E. Jansen
424*59599516SKenneth E. Jansen srcpnt = usrPointer ( usrHd, srcId, srcOff, nDims ) ;
425*59599516SKenneth E. Jansen
426*59599516SKenneth E. Jansen dim = usrHd->nNodes ;
427*59599516SKenneth E. Jansen
428*59599516SKenneth E. Jansen tmpp = flesDot1( srcpnt,
429*59599516SKenneth E. Jansen &nDims,
430*59599516SKenneth E. Jansen &dim ) ;
431*59599516SKenneth E. Jansen
432*59599516SKenneth E. Jansen drvAllreducesclr ( &tmpp,
433*59599516SKenneth E. Jansen &tmp ) ;
434*59599516SKenneth E. Jansen #ifdef AMG
435*59599516SKenneth E. Jansen ramg_normcheck(&tmp);
436*59599516SKenneth E. Jansen #endif
437*59599516SKenneth E. Jansen return ( tmp ) ;
438*59599516SKenneth E. Jansen }
439*59599516SKenneth E. Jansen
440*59599516SKenneth E. Jansen /*-----------------------------------------------------------------------
441*59599516SKenneth E. Jansen *
442*59599516SKenneth E. Jansen * lesDot2
443*59599516SKenneth E. Jansen *
444*59599516SKenneth E. Jansen * operation : tmp = tmp + a * b
445*59599516SKenneth E. Jansen *
446*59599516SKenneth E. Jansen *-----------------------------------------------------------------------
447*59599516SKenneth E. Jansen */
lesDot2(UsrHd usrHd,Integer src1Id,Integer src2Id,Integer nDims)448*59599516SKenneth E. Jansen Real lesDot2 ( UsrHd usrHd,
449*59599516SKenneth E. Jansen Integer src1Id,
450*59599516SKenneth E. Jansen Integer src2Id,
451*59599516SKenneth E. Jansen Integer nDims )
452*59599516SKenneth E. Jansen {
453*59599516SKenneth E. Jansen char* funcName = "lesDot2" ; /* function name */
454*59599516SKenneth E. Jansen Real* src1pnt ; /* source 1 */
455*59599516SKenneth E. Jansen Real* src2pnt ; /* source 2 */
456*59599516SKenneth E. Jansen Integer src1Off ; /* source 1 offset */
457*59599516SKenneth E. Jansen Integer src2Off ; /* source 2 offset */
458*59599516SKenneth E. Jansen Integer dim ; /* a simple dimension */
459*59599516SKenneth E. Jansen Real tmp ; /* a temporary value */
460*59599516SKenneth E. Jansen Real tmpp ; /* a temporary value on each proc. */
461*59599516SKenneth E. Jansen
462*59599516SKenneth E. Jansen src1Off = 0 ;
463*59599516SKenneth E. Jansen src2Off = 0 ;
464*59599516SKenneth E. Jansen
465*59599516SKenneth E. Jansen src1pnt = usrPointer ( usrHd, src1Id, src1Off, nDims );
466*59599516SKenneth E. Jansen src2pnt = usrPointer ( usrHd, src2Id, src2Off, nDims );
467*59599516SKenneth E. Jansen
468*59599516SKenneth E. Jansen dim = usrHd->nNodes ;
469*59599516SKenneth E. Jansen
470*59599516SKenneth E. Jansen tmpp = flesDot2( src1pnt,
471*59599516SKenneth E. Jansen src2pnt,
472*59599516SKenneth E. Jansen &nDims,
473*59599516SKenneth E. Jansen &dim ) ;
474*59599516SKenneth E. Jansen
475*59599516SKenneth E. Jansen drvAllreducesclr ( &tmpp,
476*59599516SKenneth E. Jansen &tmp ) ;
477*59599516SKenneth E. Jansen
478*59599516SKenneth E. Jansen return ( tmp ) ;
479*59599516SKenneth E. Jansen }
480*59599516SKenneth E. Jansen
481*59599516SKenneth E. Jansen /*-----------------------------------------------------------------------
482*59599516SKenneth E. Jansen *
483*59599516SKenneth E. Jansen * lesDaxpy
484*59599516SKenneth E. Jansen *
485*59599516SKenneth E. Jansen * operation : y = y + coef * x
486*59599516SKenneth E. Jansen *
487*59599516SKenneth E. Jansen *-----------------------------------------------------------------------
488*59599516SKenneth E. Jansen */
lesDaxpy(UsrHd usrHd,Integer srcId,Integer dstId,Real coef,Integer nDims)489*59599516SKenneth E. Jansen void lesDaxpy ( UsrHd usrHd,
490*59599516SKenneth E. Jansen Integer srcId,
491*59599516SKenneth E. Jansen Integer dstId,
492*59599516SKenneth E. Jansen Real coef,
493*59599516SKenneth E. Jansen Integer nDims )
494*59599516SKenneth E. Jansen {
495*59599516SKenneth E. Jansen char* funcName = "lesDapxy" ; /* function name */
496*59599516SKenneth E. Jansen Real* srcpnt ; /* source */
497*59599516SKenneth E. Jansen Real* dstpnt ; /* destination */
498*59599516SKenneth E. Jansen Integer srcOff ; /* source offset */
499*59599516SKenneth E. Jansen Integer dstOff ; /* destination offset */
500*59599516SKenneth E. Jansen Integer dim ; /* a simple dimension */
501*59599516SKenneth E. Jansen
502*59599516SKenneth E. Jansen srcOff = 0 ;
503*59599516SKenneth E. Jansen dstOff = 0 ;
504*59599516SKenneth E. Jansen
505*59599516SKenneth E. Jansen srcpnt = usrPointer ( usrHd, srcId, srcOff, nDims ) ;
506*59599516SKenneth E. Jansen dstpnt = usrPointer ( usrHd, dstId, dstOff, nDims ) ;
507*59599516SKenneth E. Jansen
508*59599516SKenneth E. Jansen dim = usrHd->nNodes ;
509*59599516SKenneth E. Jansen
510*59599516SKenneth E. Jansen flesDaxpy( srcpnt,
511*59599516SKenneth E. Jansen dstpnt,
512*59599516SKenneth E. Jansen &coef,
513*59599516SKenneth E. Jansen &nDims,
514*59599516SKenneth E. Jansen &dim ) ;
515*59599516SKenneth E. Jansen }
516*59599516SKenneth E. Jansen
517*59599516SKenneth E. Jansen /*-----------------------------------------------------------------------
518*59599516SKenneth E. Jansen *
519*59599516SKenneth E. Jansen * lesDxpay
520*59599516SKenneth E. Jansen *
521*59599516SKenneth E. Jansen * operation : y = coef * y + x
522*59599516SKenneth E. Jansen *
523*59599516SKenneth E. Jansen *-----------------------------------------------------------------------
524*59599516SKenneth E. Jansen */
lesDxpay(UsrHd usrHd,Integer srcId,Integer dstId,Real coef,Integer nDims)525*59599516SKenneth E. Jansen void lesDxpay ( UsrHd usrHd,
526*59599516SKenneth E. Jansen Integer srcId,
527*59599516SKenneth E. Jansen Integer dstId,
528*59599516SKenneth E. Jansen Real coef,
529*59599516SKenneth E. Jansen Integer nDims )
530*59599516SKenneth E. Jansen {
531*59599516SKenneth E. Jansen char* funcName = "lesDxpay" ; /* function name */
532*59599516SKenneth E. Jansen Real* srcpnt ; /* source */
533*59599516SKenneth E. Jansen Real* dstpnt ; /* destination */
534*59599516SKenneth E. Jansen Integer srcOff ; /* source offset */
535*59599516SKenneth E. Jansen Integer dstOff ; /* destination offset */
536*59599516SKenneth E. Jansen Integer dim ; /* a simple dimension */
537*59599516SKenneth E. Jansen
538*59599516SKenneth E. Jansen srcOff = 0 ;
539*59599516SKenneth E. Jansen dstOff = 0 ;
540*59599516SKenneth E. Jansen
541*59599516SKenneth E. Jansen srcpnt = usrPointer ( usrHd, srcId, srcOff, nDims ) ;
542*59599516SKenneth E. Jansen dstpnt = usrPointer ( usrHd, dstId, dstOff, nDims ) ;
543*59599516SKenneth E. Jansen
544*59599516SKenneth E. Jansen dim = usrHd->nNodes ;
545*59599516SKenneth E. Jansen
546*59599516SKenneth E. Jansen flesDxpay( srcpnt,
547*59599516SKenneth E. Jansen dstpnt,
548*59599516SKenneth E. Jansen &coef,
549*59599516SKenneth E. Jansen &nDims,
550*59599516SKenneth E. Jansen &dim ) ;
551*59599516SKenneth E. Jansen }
552*59599516SKenneth E. Jansen
553*59599516SKenneth E. Jansen /*-----------------------------------------------------------------------
554*59599516SKenneth E. Jansen *
555*59599516SKenneth E. Jansen * lesInv
556*59599516SKenneth E. Jansen *
557*59599516SKenneth E. Jansen * operation : x = 1. / x
558*59599516SKenneth E. Jansen *
559*59599516SKenneth E. Jansen *-----------------------------------------------------------------------
560*59599516SKenneth E. Jansen */
lesInv(UsrHd usrHd,Integer dstId,Integer nDims)561*59599516SKenneth E. Jansen void lesInv ( UsrHd usrHd,
562*59599516SKenneth E. Jansen Integer dstId,
563*59599516SKenneth E. Jansen Integer nDims )
564*59599516SKenneth E. Jansen {
565*59599516SKenneth E. Jansen char* funcName = "lesInv" ; /* function name */
566*59599516SKenneth E. Jansen Integer dim ; /* a simple dimension */
567*59599516SKenneth E. Jansen Real* dstpnt ; /* destination */
568*59599516SKenneth E. Jansen Integer dstOff ; /* destination offset */
569*59599516SKenneth E. Jansen
570*59599516SKenneth E. Jansen dstOff = 0 ;
571*59599516SKenneth E. Jansen
572*59599516SKenneth E. Jansen dstpnt = usrPointer ( usrHd, dstId, dstOff, nDims ) ;
573*59599516SKenneth E. Jansen
574*59599516SKenneth E. Jansen dim = usrHd->nNodes ;
575*59599516SKenneth E. Jansen
576*59599516SKenneth E. Jansen flesInv( dstpnt, &nDims, &dim ) ;
577*59599516SKenneth E. Jansen }
578*59599516SKenneth E. Jansen
579*59599516SKenneth E. Jansen /*-----------------------------------------------------------------------
580*59599516SKenneth E. Jansen *
581*59599516SKenneth E. Jansen * lesBlkDot2
582*59599516SKenneth E. Jansen *
583*59599516SKenneth E. Jansen * operation :
584*59599516SKenneth E. Jansen *
585*59599516SKenneth E. Jansen *-----------------------------------------------------------------------
586*59599516SKenneth E. Jansen */
lesBlkDot2(UsrHd usrHd,Integer src1Id,Integer src2Id,Real * values,Integer mDims,Integer nDims)587*59599516SKenneth E. Jansen void lesBlkDot2 ( UsrHd usrHd,
588*59599516SKenneth E. Jansen Integer src1Id,
589*59599516SKenneth E. Jansen Integer src2Id,
590*59599516SKenneth E. Jansen Real* values,
591*59599516SKenneth E. Jansen Integer mDims,
592*59599516SKenneth E. Jansen Integer nDims )
593*59599516SKenneth E. Jansen {
594*59599516SKenneth E. Jansen char* funcName = "lesBlkDot2" ; /* function name */
595*59599516SKenneth E. Jansen Real* src1pnt ; /* source 1 */
596*59599516SKenneth E. Jansen Real* src2pnt ; /* source 2 */
597*59599516SKenneth E. Jansen Integer src1Off ; /* source 1 offset */
598*59599516SKenneth E. Jansen Integer src2Off ; /* source 2 offset */
599*59599516SKenneth E. Jansen Integer dim ; /* a simple dimension */
600*59599516SKenneth E. Jansen Real* valuesp ; /* temporary values on proc */
601*59599516SKenneth E. Jansen
602*59599516SKenneth E. Jansen if ( mDims * nDims == 0 ) {
603*59599516SKenneth E. Jansen return ;
604*59599516SKenneth E. Jansen }
605*59599516SKenneth E. Jansen
606*59599516SKenneth E. Jansen valuesp = (double *) malloc (mDims * sizeof(double)) ;
607*59599516SKenneth E. Jansen
608*59599516SKenneth E. Jansen src1Off = 0 ;
609*59599516SKenneth E. Jansen src2Off = 0 ;
610*59599516SKenneth E. Jansen
611*59599516SKenneth E. Jansen src1pnt = usrPointer ( usrHd, src1Id, src1Off, nDims ) ;
612*59599516SKenneth E. Jansen src2pnt = usrPointer ( usrHd, src2Id, src2Off, nDims ) ;
613*59599516SKenneth E. Jansen
614*59599516SKenneth E. Jansen dim = nDims * usrHd->nNodes ;
615*59599516SKenneth E. Jansen
616*59599516SKenneth E. Jansen fMtxBlkDot2( src1pnt,
617*59599516SKenneth E. Jansen src2pnt,
618*59599516SKenneth E. Jansen valuesp,
619*59599516SKenneth E. Jansen &mDims,
620*59599516SKenneth E. Jansen &dim ) ;
621*59599516SKenneth E. Jansen
622*59599516SKenneth E. Jansen drvAllreduce ( valuesp,
623*59599516SKenneth E. Jansen values,
624*59599516SKenneth E. Jansen &mDims ) ;
625*59599516SKenneth E. Jansen
626*59599516SKenneth E. Jansen free(valuesp);
627*59599516SKenneth E. Jansen }
628*59599516SKenneth E. Jansen
629*59599516SKenneth E. Jansen /*-----------------------------------------------------------------------
630*59599516SKenneth E. Jansen *
631*59599516SKenneth E. Jansen * lesBlkDaxpy
632*59599516SKenneth E. Jansen *
633*59599516SKenneth E. Jansen * operation :
634*59599516SKenneth E. Jansen *
635*59599516SKenneth E. Jansen *-----------------------------------------------------------------------
636*59599516SKenneth E. Jansen */
lesBlkDaxpy(UsrHd usrHd,Integer srcId,Integer dstId,Real * coef,Integer mDims,Integer nDims)637*59599516SKenneth E. Jansen void lesBlkDaxpy ( UsrHd usrHd,
638*59599516SKenneth E. Jansen Integer srcId,
639*59599516SKenneth E. Jansen Integer dstId,
640*59599516SKenneth E. Jansen Real* coef,
641*59599516SKenneth E. Jansen Integer mDims,
642*59599516SKenneth E. Jansen Integer nDims )
643*59599516SKenneth E. Jansen {
644*59599516SKenneth E. Jansen char* funcName = "lesBlkDaxpy" ; /* function name */
645*59599516SKenneth E. Jansen Real* srcpnt ; /* source */
646*59599516SKenneth E. Jansen Real* dstpnt ; /* destination */
647*59599516SKenneth E. Jansen Integer srcOff ; /* source offset */
648*59599516SKenneth E. Jansen Integer dstOff ; /* destination offset */
649*59599516SKenneth E. Jansen Integer dim ; /* a simple dimension */
650*59599516SKenneth E. Jansen
651*59599516SKenneth E. Jansen if ( mDims * nDims == 0 ) {
652*59599516SKenneth E. Jansen return ;
653*59599516SKenneth E. Jansen }
654*59599516SKenneth E. Jansen
655*59599516SKenneth E. Jansen srcOff = 0 ;
656*59599516SKenneth E. Jansen dstOff = 0 ;
657*59599516SKenneth E. Jansen
658*59599516SKenneth E. Jansen srcpnt = usrPointer ( usrHd, srcId, srcOff, nDims ) ;
659*59599516SKenneth E. Jansen dstpnt = usrPointer ( usrHd, dstId, dstOff, nDims ) ;
660*59599516SKenneth E. Jansen
661*59599516SKenneth E. Jansen dim = nDims * usrHd->nNodes ;
662*59599516SKenneth E. Jansen
663*59599516SKenneth E. Jansen fMtxBlkDaxpy( srcpnt,
664*59599516SKenneth E. Jansen dstpnt,
665*59599516SKenneth E. Jansen coef,
666*59599516SKenneth E. Jansen &mDims,
667*59599516SKenneth E. Jansen &dim );
668*59599516SKenneth E. Jansen }
669*59599516SKenneth E. Jansen
670*59599516SKenneth E. Jansen /*-----------------------------------------------------------------------
671*59599516SKenneth E. Jansen *
672*59599516SKenneth E. Jansen * lesBlkDyeax
673*59599516SKenneth E. Jansen *
674*59599516SKenneth E. Jansen * operation :
675*59599516SKenneth E. Jansen *
676*59599516SKenneth E. Jansen *-----------------------------------------------------------------------
677*59599516SKenneth E. Jansen */
lesBlkDyeax(UsrHd usrHd,Integer srcId,Integer dstId,Real * coef,Integer mDims,Integer nDims)678*59599516SKenneth E. Jansen void lesBlkDyeax ( UsrHd usrHd,
679*59599516SKenneth E. Jansen Integer srcId,
680*59599516SKenneth E. Jansen Integer dstId,
681*59599516SKenneth E. Jansen Real* coef,
682*59599516SKenneth E. Jansen Integer mDims,
683*59599516SKenneth E. Jansen Integer nDims )
684*59599516SKenneth E. Jansen {
685*59599516SKenneth E. Jansen char* funcName = "lesBlkDyeax" ; /* function name */
686*59599516SKenneth E. Jansen Real* srcpnt ; /* source */
687*59599516SKenneth E. Jansen Real* dstpnt ; /* destination */
688*59599516SKenneth E. Jansen Integer srcOff ; /* source offset */
689*59599516SKenneth E. Jansen Integer dstOff ; /* destination offset */
690*59599516SKenneth E. Jansen Integer dim ; /* a simple dimension */
691*59599516SKenneth E. Jansen
692*59599516SKenneth E. Jansen if ( mDims * nDims == 0 ) {
693*59599516SKenneth E. Jansen lesZero ( usrHd, dstId, nDims ) ;
694*59599516SKenneth E. Jansen return ;
695*59599516SKenneth E. Jansen }
696*59599516SKenneth E. Jansen
697*59599516SKenneth E. Jansen srcOff = 0 ;
698*59599516SKenneth E. Jansen dstOff = 0 ;
699*59599516SKenneth E. Jansen
700*59599516SKenneth E. Jansen srcpnt = usrPointer ( usrHd, srcId, srcOff, nDims ) ;
701*59599516SKenneth E. Jansen dstpnt = usrPointer ( usrHd, dstId, dstOff, nDims ) ;
702*59599516SKenneth E. Jansen
703*59599516SKenneth E. Jansen dim = nDims * usrHd->nNodes ;
704*59599516SKenneth E. Jansen
705*59599516SKenneth E. Jansen fMtxBlkDyeax( srcpnt,
706*59599516SKenneth E. Jansen dstpnt,
707*59599516SKenneth E. Jansen coef,
708*59599516SKenneth E. Jansen &mDims,
709*59599516SKenneth E. Jansen &dim ) ;
710*59599516SKenneth E. Jansen }
711*59599516SKenneth E. Jansen
712*59599516SKenneth E. Jansen /*-----------------------------------------------------------------------
713*59599516SKenneth E. Jansen *
714*59599516SKenneth E. Jansen * lesBlkDmaxpy
715*59599516SKenneth E. Jansen *
716*59599516SKenneth E. Jansen * operation :
717*59599516SKenneth E. Jansen *
718*59599516SKenneth E. Jansen *-----------------------------------------------------------------------
719*59599516SKenneth E. Jansen */
lesBlkDmaxpy(UsrHd usrHd,Integer srcId,Integer dstId,Real * coef,Integer mDims,Integer nDims)720*59599516SKenneth E. Jansen void lesBlkDmaxpy ( UsrHd usrHd,
721*59599516SKenneth E. Jansen Integer srcId,
722*59599516SKenneth E. Jansen Integer dstId,
723*59599516SKenneth E. Jansen Real* coef,
724*59599516SKenneth E. Jansen Integer mDims,
725*59599516SKenneth E. Jansen Integer nDims )
726*59599516SKenneth E. Jansen {
727*59599516SKenneth E. Jansen char* funcName = "lesBlkDmaxpy" ; /* function name */
728*59599516SKenneth E. Jansen Real* srcpnt ; /* source */
729*59599516SKenneth E. Jansen Real* dstpnt ; /* destination */
730*59599516SKenneth E. Jansen Integer srcOff ; /* source offset */
731*59599516SKenneth E. Jansen Integer dstOff ; /* destination offset */
732*59599516SKenneth E. Jansen Integer dim ; /* a simple dimension */
733*59599516SKenneth E. Jansen
734*59599516SKenneth E. Jansen if ( mDims * nDims == 0 ) {
735*59599516SKenneth E. Jansen return ;
736*59599516SKenneth E. Jansen }
737*59599516SKenneth E. Jansen
738*59599516SKenneth E. Jansen srcOff = 0 ;
739*59599516SKenneth E. Jansen dstOff = 0 ;
740*59599516SKenneth E. Jansen
741*59599516SKenneth E. Jansen srcpnt = usrPointer ( usrHd, srcId, srcOff, nDims ) ;
742*59599516SKenneth E. Jansen dstpnt = usrPointer ( usrHd, dstId, dstOff, nDims ) ;
743*59599516SKenneth E. Jansen
744*59599516SKenneth E. Jansen dim = nDims * usrHd->nNodes ;
745*59599516SKenneth E. Jansen
746*59599516SKenneth E. Jansen fMtxBlkDmaxpy( srcpnt,
747*59599516SKenneth E. Jansen dstpnt,
748*59599516SKenneth E. Jansen coef,
749*59599516SKenneth E. Jansen &mDims,
750*59599516SKenneth E. Jansen &dim );
751*59599516SKenneth E. Jansen }
752*59599516SKenneth E. Jansen
753*59599516SKenneth E. Jansen /*-----------------------------------------------------------------------
754*59599516SKenneth E. Jansen *
755*59599516SKenneth E. Jansen * lesVdimCp
756*59599516SKenneth E. Jansen *
757*59599516SKenneth E. Jansen * operation :
758*59599516SKenneth E. Jansen *
759*59599516SKenneth E. Jansen *-----------------------------------------------------------------------
760*59599516SKenneth E. Jansen */
lesVdimCp(UsrHd usrHd,Integer srcId,Integer dstId,Integer nSrcDims,Integer srcOff,Integer nDstDims,Integer dstOff,Integer nDims)761*59599516SKenneth E. Jansen void lesVdimCp ( UsrHd usrHd,
762*59599516SKenneth E. Jansen Integer srcId,
763*59599516SKenneth E. Jansen Integer dstId,
764*59599516SKenneth E. Jansen Integer nSrcDims,
765*59599516SKenneth E. Jansen Integer srcOff,
766*59599516SKenneth E. Jansen Integer nDstDims,
767*59599516SKenneth E. Jansen Integer dstOff,
768*59599516SKenneth E. Jansen Integer nDims )
769*59599516SKenneth E. Jansen {
770*59599516SKenneth E. Jansen char* funcName = "lesVdimCp"; /* function name */
771*59599516SKenneth E. Jansen Real* srcpnt ; /* source */
772*59599516SKenneth E. Jansen Real* dstpnt ; /* destination */
773*59599516SKenneth E. Jansen
774*59599516SKenneth E. Jansen srcpnt = usrPointer ( usrHd, srcId, srcOff, nSrcDims ) ;
775*59599516SKenneth E. Jansen dstpnt = usrPointer ( usrHd, dstId, dstOff, nDstDims ) ;
776*59599516SKenneth E. Jansen
777*59599516SKenneth E. Jansen fMtxVdimVecCp( srcpnt,
778*59599516SKenneth E. Jansen dstpnt,
779*59599516SKenneth E. Jansen &nSrcDims,
780*59599516SKenneth E. Jansen &nDstDims,
781*59599516SKenneth E. Jansen &nDims,
782*59599516SKenneth E. Jansen &(usrHd->nNodes) );
783*59599516SKenneth E. Jansen }
784*59599516SKenneth E. Jansen
785*59599516SKenneth E. Jansen /*-----------------------------------------------------------------------
786*59599516SKenneth E. Jansen *
787*59599516SKenneth E. Jansen * lesVdimDot2
788*59599516SKenneth E. Jansen *
789*59599516SKenneth E. Jansen * operation :
790*59599516SKenneth E. Jansen *
791*59599516SKenneth E. Jansen *-----------------------------------------------------------------------
792*59599516SKenneth E. Jansen */
lesVdimDot2(UsrHd usrHd,Integer src1Id,Integer src2Id,Real * coef,Integer nSrc1Dims,Integer src1Off,Integer nSrc2Dims,Integer src2Off,Integer nDims)793*59599516SKenneth E. Jansen void lesVdimDot2 ( UsrHd usrHd,
794*59599516SKenneth E. Jansen Integer src1Id,
795*59599516SKenneth E. Jansen Integer src2Id,
796*59599516SKenneth E. Jansen Real* coef,
797*59599516SKenneth E. Jansen Integer nSrc1Dims,
798*59599516SKenneth E. Jansen Integer src1Off,
799*59599516SKenneth E. Jansen Integer nSrc2Dims,
800*59599516SKenneth E. Jansen Integer src2Off,
801*59599516SKenneth E. Jansen Integer nDims )
802*59599516SKenneth E. Jansen {
803*59599516SKenneth E. Jansen char* funcName = "lesVdimDot2" ; /* function name */
804*59599516SKenneth E. Jansen Real* src1pnt ; /* source 1 */
805*59599516SKenneth E. Jansen Real* src2pnt ; /* source 2 */
806*59599516SKenneth E. Jansen Real* coefp ; /* temporary coef on proc */
807*59599516SKenneth E. Jansen
808*59599516SKenneth E. Jansen
809*59599516SKenneth E. Jansen if ( nDims == 0 ) {
810*59599516SKenneth E. Jansen return ;
811*59599516SKenneth E. Jansen }
812*59599516SKenneth E. Jansen
813*59599516SKenneth E. Jansen coefp = (double *) malloc (nDims * sizeof(double)) ;
814*59599516SKenneth E. Jansen
815*59599516SKenneth E. Jansen src1pnt = usrPointer ( usrHd, src1Id, src1Off, nSrc1Dims ) ;
816*59599516SKenneth E. Jansen src2pnt = usrPointer ( usrHd, src2Id, src2Off, nSrc2Dims ) ;
817*59599516SKenneth E. Jansen
818*59599516SKenneth E. Jansen fMtxVdimVecDot2( src1pnt,
819*59599516SKenneth E. Jansen src2pnt,
820*59599516SKenneth E. Jansen coefp,
821*59599516SKenneth E. Jansen &nSrc1Dims,
822*59599516SKenneth E. Jansen &nSrc2Dims,
823*59599516SKenneth E. Jansen &nDims,
824*59599516SKenneth E. Jansen &(usrHd->nNodes) );
825*59599516SKenneth E. Jansen
826*59599516SKenneth E. Jansen drvAllreduce ( coefp,
827*59599516SKenneth E. Jansen coef,
828*59599516SKenneth E. Jansen &nDims ) ;
829*59599516SKenneth E. Jansen }
830*59599516SKenneth E. Jansen
831*59599516SKenneth E. Jansen /*-----------------------------------------------------------------------
832*59599516SKenneth E. Jansen *
833*59599516SKenneth E. Jansen * lesVdimDaxpy
834*59599516SKenneth E. Jansen *
835*59599516SKenneth E. Jansen * operation :
836*59599516SKenneth E. Jansen *
837*59599516SKenneth E. Jansen *-----------------------------------------------------------------------
838*59599516SKenneth E. Jansen */
lesVdimDaxpy(UsrHd usrHd,Integer srcId,Integer dstId,Real * coef,Integer nSrcDims,Integer srcOff,Integer nDstDims,Integer dstOff,Integer nDims)839*59599516SKenneth E. Jansen void lesVdimDaxpy ( UsrHd usrHd,
840*59599516SKenneth E. Jansen Integer srcId,
841*59599516SKenneth E. Jansen Integer dstId,
842*59599516SKenneth E. Jansen Real* coef,
843*59599516SKenneth E. Jansen Integer nSrcDims,
844*59599516SKenneth E. Jansen Integer srcOff,
845*59599516SKenneth E. Jansen Integer nDstDims,
846*59599516SKenneth E. Jansen Integer dstOff,
847*59599516SKenneth E. Jansen Integer nDims )
848*59599516SKenneth E. Jansen {
849*59599516SKenneth E. Jansen char* funcName = "lesVdimDaxpy" ; /* function name */
850*59599516SKenneth E. Jansen Real* srcpnt ; /* source */
851*59599516SKenneth E. Jansen Real* dstpnt ; /* destination */
852*59599516SKenneth E. Jansen
853*59599516SKenneth E. Jansen if ( nDims == 0 ) {
854*59599516SKenneth E. Jansen return ;
855*59599516SKenneth E. Jansen }
856*59599516SKenneth E. Jansen
857*59599516SKenneth E. Jansen srcpnt = usrPointer ( usrHd, srcId, srcOff, nSrcDims ) ;
858*59599516SKenneth E. Jansen dstpnt = usrPointer ( usrHd, dstId, dstOff, nDstDims ) ;
859*59599516SKenneth E. Jansen
860*59599516SKenneth E. Jansen fMtxVdimVecDaxpy( srcpnt,
861*59599516SKenneth E. Jansen dstpnt,
862*59599516SKenneth E. Jansen coef,
863*59599516SKenneth E. Jansen &nSrcDims,
864*59599516SKenneth E. Jansen &nDstDims,
865*59599516SKenneth E. Jansen &nDims,
866*59599516SKenneth E. Jansen &(usrHd->nNodes) ) ;
867*59599516SKenneth E. Jansen }
868*59599516SKenneth E. Jansen
869*59599516SKenneth E. Jansen /*-----------------------------------------------------------------------
870*59599516SKenneth E. Jansen *
871*59599516SKenneth E. Jansen * lesApG
872*59599516SKenneth E. Jansen *
873*59599516SKenneth E. Jansen * operation : G(:,3*nenl,nenl) * Dp(:,nenl,1) = lesQ(;,nenl,3)
874*59599516SKenneth E. Jansen *
875*59599516SKenneth E. Jansen *-----------------------------------------------------------------------
876*59599516SKenneth E. Jansen */
lesApG(UsrHd usrHd,Integer srcId,Integer dstId,Integer nSrcDims,Integer srcOff,Integer nDstDims,Integer dstOff)877*59599516SKenneth E. Jansen void lesApG ( UsrHd usrHd,
878*59599516SKenneth E. Jansen Integer srcId,
879*59599516SKenneth E. Jansen Integer dstId,
880*59599516SKenneth E. Jansen Integer nSrcDims,
881*59599516SKenneth E. Jansen Integer srcOff,
882*59599516SKenneth E. Jansen Integer nDstDims,
883*59599516SKenneth E. Jansen Integer dstOff )
884*59599516SKenneth E. Jansen {
885*59599516SKenneth E. Jansen char* funcName = "lesApG" ; /* function name */
886*59599516SKenneth E. Jansen Integer nDofs ; /* No. of dofs */
887*59599516SKenneth E. Jansen Integer nPs ; /* No. of P dimension */
888*59599516SKenneth E. Jansen Integer nQs ; /* No. of Q dimension */
889*59599516SKenneth E. Jansen Integer pOff ; /* offset */
890*59599516SKenneth E. Jansen Integer qOff ; /* offset */
891*59599516SKenneth E. Jansen Real* srcpnt ; /* source */
892*59599516SKenneth E. Jansen Real* dstpnt ; /* destin */
893*59599516SKenneth E. Jansen
894*59599516SKenneth E. Jansen nDofs = 4 ;
895*59599516SKenneth E. Jansen nPs = 1 ;
896*59599516SKenneth E. Jansen nQs = 3 ;
897*59599516SKenneth E. Jansen pOff = 3 * usrHd->nNodes ;
898*59599516SKenneth E. Jansen qOff = 0 * usrHd->nNodes ;
899*59599516SKenneth E. Jansen
900*59599516SKenneth E. Jansen srcpnt = usrPointer ( usrHd, srcId, srcOff, nSrcDims ) ;
901*59599516SKenneth E. Jansen
902*59599516SKenneth E. Jansen fMtxVdimVecMult( srcpnt,
903*59599516SKenneth E. Jansen usrHd->flowDiag+pOff,
904*59599516SKenneth E. Jansen usrHd->lesP,
905*59599516SKenneth E. Jansen &nSrcDims,
906*59599516SKenneth E. Jansen &nDofs,
907*59599516SKenneth E. Jansen &nPs,
908*59599516SKenneth E. Jansen &nPs,
909*59599516SKenneth E. Jansen &(usrHd->nNodes) ) ;
910*59599516SKenneth E. Jansen
911*59599516SKenneth E. Jansen commOut ( usrHd->lesP, usrHd->ilwork, &nPs,
912*59599516SKenneth E. Jansen usrHd->iper, usrHd->iBC, usrHd->BC );
913*59599516SKenneth E. Jansen
914*59599516SKenneth E. Jansen fLesSparseApG( usrHd->colm, usrHd->rowp, usrHd->lhsP,
915*59599516SKenneth E. Jansen usrHd->lesP, usrHd->lesQ, &(usrHd->nNodes),
916*59599516SKenneth E. Jansen &(usrHd->nnz_tot));
917*59599516SKenneth E. Jansen
918*59599516SKenneth E. Jansen commIn ( usrHd->lesQ, usrHd->ilwork, &nQs,
919*59599516SKenneth E. Jansen usrHd->iper, usrHd->iBC, usrHd->BC );
920*59599516SKenneth E. Jansen
921*59599516SKenneth E. Jansen dstpnt = usrPointer ( usrHd, dstId, dstOff, nDstDims ) ;
922*59599516SKenneth E. Jansen
923*59599516SKenneth E. Jansen fMtxVdimVecMult( usrHd->lesQ,
924*59599516SKenneth E. Jansen usrHd->flowDiag+qOff,
925*59599516SKenneth E. Jansen dstpnt,
926*59599516SKenneth E. Jansen &nQs,
927*59599516SKenneth E. Jansen &nDofs,
928*59599516SKenneth E. Jansen &nDstDims,
929*59599516SKenneth E. Jansen &nQs,
930*59599516SKenneth E. Jansen &(usrHd->nNodes) ) ;
931*59599516SKenneth E. Jansen }
932*59599516SKenneth E. Jansen
933*59599516SKenneth E. Jansen /*-----------------------------------------------------------------------
934*59599516SKenneth E. Jansen *
935*59599516SKenneth E. Jansen * lesApKG
936*59599516SKenneth E. Jansen *
937*59599516SKenneth E. Jansen * operation : K(:,3*nenl,3*nenl) * Du(:,nenl,3) = lesQ(:,nenl,3)
938*59599516SKenneth E. Jansen * G(:,3*nenl, nenl) * Dp(:,nenl,1) = lesQ(:,nenl,3)
939*59599516SKenneth E. Jansen *
940*59599516SKenneth E. Jansen *-----------------------------------------------------------------------
941*59599516SKenneth E. Jansen */
lesApKG(UsrHd usrHd,Integer src1Id,Integer src2Id,Integer dstId,Integer nSrc1Dims,Integer src1Off,Integer nSrc2Dims,Integer src2Off,Integer nDstDims,Integer dstOff)942*59599516SKenneth E. Jansen void lesApKG ( UsrHd usrHd,
943*59599516SKenneth E. Jansen Integer src1Id,
944*59599516SKenneth E. Jansen Integer src2Id,
945*59599516SKenneth E. Jansen Integer dstId,
946*59599516SKenneth E. Jansen Integer nSrc1Dims,
947*59599516SKenneth E. Jansen Integer src1Off,
948*59599516SKenneth E. Jansen Integer nSrc2Dims,
949*59599516SKenneth E. Jansen Integer src2Off,
950*59599516SKenneth E. Jansen Integer nDstDims,
951*59599516SKenneth E. Jansen Integer dstOff )
952*59599516SKenneth E. Jansen {
953*59599516SKenneth E. Jansen char* funcName = "lesApKG" ; /* function name */
954*59599516SKenneth E. Jansen Integer nDofs ; /* No. of Dofs */
955*59599516SKenneth E. Jansen Integer p1Off ; /* Diag offset for P */
956*59599516SKenneth E. Jansen Integer p2Off ; /* Diag offset for Q */
957*59599516SKenneth E. Jansen Integer nP1s ; /* No. of P dimension */
958*59599516SKenneth E. Jansen Integer nP2s ; /* No. of P dimension */
959*59599516SKenneth E. Jansen Integer nPs ; /* No. of P dimension */
960*59599516SKenneth E. Jansen Integer nQs ; /* No. of Q dimension */
961*59599516SKenneth E. Jansen Integer qOff ; /* offset */
962*59599516SKenneth E. Jansen Real* src1pnt ; /* Source 1 */
963*59599516SKenneth E. Jansen Real* src2pnt ; /* Source 2 */
964*59599516SKenneth E. Jansen Real* dstpnt ; /* destination */
965*59599516SKenneth E. Jansen
966*59599516SKenneth E. Jansen nDofs = 4 ;
967*59599516SKenneth E. Jansen nP1s = 3 ;
968*59599516SKenneth E. Jansen nP2s = 1 ;
969*59599516SKenneth E. Jansen nPs = nP1s + nP2s ;
970*59599516SKenneth E. Jansen nQs = 3 ;
971*59599516SKenneth E. Jansen p1Off = 0 * usrHd->nNodes ;
972*59599516SKenneth E. Jansen p2Off = 3 * usrHd->nNodes ;
973*59599516SKenneth E. Jansen qOff = 0 * usrHd->nNodes ;
974*59599516SKenneth E. Jansen
975*59599516SKenneth E. Jansen src1pnt = usrPointer ( usrHd, src1Id, src1Off, nSrc1Dims ) ;
976*59599516SKenneth E. Jansen src2pnt = usrPointer ( usrHd, src2Id, src2Off, nSrc2Dims ) ;
977*59599516SKenneth E. Jansen
978*59599516SKenneth E. Jansen fMtxVdimVecMult( src1pnt,
979*59599516SKenneth E. Jansen usrHd->flowDiag+p1Off,
980*59599516SKenneth E. Jansen usrHd->lesP+p1Off,
981*59599516SKenneth E. Jansen &nSrc1Dims,
982*59599516SKenneth E. Jansen &nDofs,
983*59599516SKenneth E. Jansen &nPs,
984*59599516SKenneth E. Jansen &nP1s,
985*59599516SKenneth E. Jansen &(usrHd->nNodes) ) ;
986*59599516SKenneth E. Jansen
987*59599516SKenneth E. Jansen fMtxVdimVecMult( src2pnt,
988*59599516SKenneth E. Jansen usrHd->flowDiag+p2Off,
989*59599516SKenneth E. Jansen usrHd->lesP+p2Off,
990*59599516SKenneth E. Jansen &nSrc2Dims,
991*59599516SKenneth E. Jansen &nDofs,
992*59599516SKenneth E. Jansen &nPs,
993*59599516SKenneth E. Jansen &nP2s,
994*59599516SKenneth E. Jansen &(usrHd->nNodes) );
995*59599516SKenneth E. Jansen
996*59599516SKenneth E. Jansen commOut ( usrHd->lesP, usrHd->ilwork, &nPs,
997*59599516SKenneth E. Jansen usrHd->iper, usrHd->iBC, usrHd->BC );
998*59599516SKenneth E. Jansen
999*59599516SKenneth E. Jansen fLesSparseApKG( usrHd->colm, usrHd->rowp, usrHd->lhsK,
1000*59599516SKenneth E. Jansen usrHd->lhsP, usrHd->lesP, usrHd->lesQ,
1001*59599516SKenneth E. Jansen &(usrHd->nNodes),&(usrHd->nnz_tot));
1002*59599516SKenneth E. Jansen
1003*59599516SKenneth E. Jansen commIn ( usrHd->lesQ, usrHd->ilwork, &nQs,
1004*59599516SKenneth E. Jansen usrHd->iper, usrHd->iBC, usrHd->BC );
1005*59599516SKenneth E. Jansen
1006*59599516SKenneth E. Jansen
1007*59599516SKenneth E. Jansen dstpnt = usrPointer ( usrHd, dstId, dstOff, nDstDims ) ;
1008*59599516SKenneth E. Jansen
1009*59599516SKenneth E. Jansen fMtxVdimVecMult( usrHd->lesQ,
1010*59599516SKenneth E. Jansen usrHd->flowDiag+qOff,
1011*59599516SKenneth E. Jansen dstpnt,
1012*59599516SKenneth E. Jansen &nQs,
1013*59599516SKenneth E. Jansen &nDofs,
1014*59599516SKenneth E. Jansen &nDstDims,
1015*59599516SKenneth E. Jansen &nQs,
1016*59599516SKenneth E. Jansen &(usrHd->nNodes) ) ;
1017*59599516SKenneth E. Jansen }
1018*59599516SKenneth E. Jansen
1019*59599516SKenneth E. Jansen /*-----------------------------------------------------------------------
1020*59599516SKenneth E. Jansen *
1021*59599516SKenneth E. Jansen * lesApNGt
1022*59599516SKenneth E. Jansen *
1023*59599516SKenneth E. Jansen * operation : -G^t(:,nenl,3*nenl) * Du(:,nenl,3) = lesQ(:,nenl,1)
1024*59599516SKenneth E. Jansen *
1025*59599516SKenneth E. Jansen *-----------------------------------------------------------------------
1026*59599516SKenneth E. Jansen */
lesApNGt(UsrHd usrHd,Integer srcId,Integer dstId,Integer nSrcDims,Integer srcOff,Integer nDstDims,Integer dstOff)1027*59599516SKenneth E. Jansen void lesApNGt ( UsrHd usrHd,
1028*59599516SKenneth E. Jansen Integer srcId,
1029*59599516SKenneth E. Jansen Integer dstId,
1030*59599516SKenneth E. Jansen Integer nSrcDims,
1031*59599516SKenneth E. Jansen Integer srcOff,
1032*59599516SKenneth E. Jansen Integer nDstDims,
1033*59599516SKenneth E. Jansen Integer dstOff )
1034*59599516SKenneth E. Jansen {
1035*59599516SKenneth E. Jansen char* funcName = "lesApNGt" ; /* function name */
1036*59599516SKenneth E. Jansen Integer pOff ; /* Diag offset for P */
1037*59599516SKenneth E. Jansen Integer qOff ; /* Diag offset for Q */
1038*59599516SKenneth E. Jansen Integer nDofs ; /* No. of Dofs */
1039*59599516SKenneth E. Jansen Integer nPs ; /* No. of P dimension */
1040*59599516SKenneth E. Jansen Integer nQs ; /* No. of Q dimension */
1041*59599516SKenneth E. Jansen Real* srcpnt ; /* Source */
1042*59599516SKenneth E. Jansen Real* dstpnt ; /* Destination */
1043*59599516SKenneth E. Jansen
1044*59599516SKenneth E. Jansen nDofs = 4 ;
1045*59599516SKenneth E. Jansen nPs = 3 ;
1046*59599516SKenneth E. Jansen nQs = 1 ;
1047*59599516SKenneth E. Jansen pOff = 0 * usrHd->nNodes ;
1048*59599516SKenneth E. Jansen qOff = 3 * usrHd->nNodes ;
1049*59599516SKenneth E. Jansen
1050*59599516SKenneth E. Jansen srcpnt = usrPointer ( usrHd, srcId, srcOff, nSrcDims ) ;
1051*59599516SKenneth E. Jansen
1052*59599516SKenneth E. Jansen fMtxVdimVecMult( srcpnt,
1053*59599516SKenneth E. Jansen usrHd->flowDiag+pOff,
1054*59599516SKenneth E. Jansen usrHd->lesP,
1055*59599516SKenneth E. Jansen &nSrcDims,
1056*59599516SKenneth E. Jansen &nDofs,
1057*59599516SKenneth E. Jansen &nPs,
1058*59599516SKenneth E. Jansen &nPs,
1059*59599516SKenneth E. Jansen &(usrHd->nNodes) ) ;
1060*59599516SKenneth E. Jansen
1061*59599516SKenneth E. Jansen commOut ( usrHd->lesP, usrHd->ilwork, &nPs,
1062*59599516SKenneth E. Jansen usrHd->iper, usrHd->iBC, usrHd->BC );
1063*59599516SKenneth E. Jansen
1064*59599516SKenneth E. Jansen fLesSparseApNGt( usrHd->colm, usrHd->rowp,
1065*59599516SKenneth E. Jansen usrHd->lhsP, usrHd->lesP, usrHd->lesQ,
1066*59599516SKenneth E. Jansen &(usrHd->nNodes),&(usrHd->nnz_tot));
1067*59599516SKenneth E. Jansen
1068*59599516SKenneth E. Jansen commIn ( usrHd->lesQ, usrHd->ilwork, &nQs,
1069*59599516SKenneth E. Jansen usrHd->iper, usrHd->iBC, usrHd->BC );
1070*59599516SKenneth E. Jansen
1071*59599516SKenneth E. Jansen dstpnt = usrPointer ( usrHd, dstId, dstOff, nDstDims ) ;
1072*59599516SKenneth E. Jansen
1073*59599516SKenneth E. Jansen fMtxVdimVecMult( usrHd->lesQ,
1074*59599516SKenneth E. Jansen usrHd->flowDiag+qOff,
1075*59599516SKenneth E. Jansen dstpnt,
1076*59599516SKenneth E. Jansen &nQs,
1077*59599516SKenneth E. Jansen &nDofs,
1078*59599516SKenneth E. Jansen &nDstDims,
1079*59599516SKenneth E. Jansen &nQs,
1080*59599516SKenneth E. Jansen &(usrHd->nNodes) ) ;
1081*59599516SKenneth E. Jansen }
1082*59599516SKenneth E. Jansen
1083*59599516SKenneth E. Jansen /*-----------------------------------------------------------------------
1084*59599516SKenneth E. Jansen *
1085*59599516SKenneth E. Jansen * lesApNGtC
1086*59599516SKenneth E. Jansen *
1087*59599516SKenneth E. Jansen * operation : -G^t(:,nenl,3*nenl) * Du(:,nenl,3) = lesQ(:,nenl,1)
1088*59599516SKenneth E. Jansen * C(:,nenl, nenl) * Dp(:,nenl,1) = lesQ(:,nenl,1)
1089*59599516SKenneth E. Jansen *
1090*59599516SKenneth E. Jansen *-----------------------------------------------------------------------
1091*59599516SKenneth E. Jansen */
lesApNGtC(UsrHd usrHd,Integer src1Id,Integer src2Id,Integer dstId,Integer nSrc1Dims,Integer src1Off,Integer nSrc2Dims,Integer src2Off,Integer nDstDims,Integer dstOff)1092*59599516SKenneth E. Jansen void lesApNGtC ( UsrHd usrHd,
1093*59599516SKenneth E. Jansen Integer src1Id,
1094*59599516SKenneth E. Jansen Integer src2Id,
1095*59599516SKenneth E. Jansen Integer dstId,
1096*59599516SKenneth E. Jansen Integer nSrc1Dims,
1097*59599516SKenneth E. Jansen Integer src1Off,
1098*59599516SKenneth E. Jansen Integer nSrc2Dims,
1099*59599516SKenneth E. Jansen Integer src2Off,
1100*59599516SKenneth E. Jansen Integer nDstDims,
1101*59599516SKenneth E. Jansen Integer dstOff )
1102*59599516SKenneth E. Jansen {
1103*59599516SKenneth E. Jansen char* funcName = "lesApNGtC" ; /* function name */
1104*59599516SKenneth E. Jansen Integer p1Off ; /* Diag offset for P */
1105*59599516SKenneth E. Jansen Integer p2Off ; /* Diag offset for P */
1106*59599516SKenneth E. Jansen Integer qOff ; /* Diag offset for Q */
1107*59599516SKenneth E. Jansen Integer nDofs ; /* No. of Dofs */
1108*59599516SKenneth E. Jansen Integer nP1s ; /* No. of P dimension */
1109*59599516SKenneth E. Jansen Integer nP2s ; /* No. of P dimension */
1110*59599516SKenneth E. Jansen Integer nPs ; /* No. of P dimension */
1111*59599516SKenneth E. Jansen Integer nQs ; /* No. of Q dimension */
1112*59599516SKenneth E. Jansen Real* dstpnt ; /* Destination */
1113*59599516SKenneth E. Jansen Real* src1pnt ; /* Source 1 */
1114*59599516SKenneth E. Jansen Real* src2pnt ; /* Source 2 */
1115*59599516SKenneth E. Jansen
1116*59599516SKenneth E. Jansen nDofs = 4 ;
1117*59599516SKenneth E. Jansen nP1s = 3 ;
1118*59599516SKenneth E. Jansen nP2s = 1 ;
1119*59599516SKenneth E. Jansen nPs = nP1s + nP2s ;
1120*59599516SKenneth E. Jansen nQs = 1 ;
1121*59599516SKenneth E. Jansen p1Off = 0 * usrHd->nNodes ;
1122*59599516SKenneth E. Jansen p2Off = 3 * usrHd->nNodes ;
1123*59599516SKenneth E. Jansen qOff = 3 * usrHd->nNodes ;
1124*59599516SKenneth E. Jansen
1125*59599516SKenneth E. Jansen src1pnt = usrPointer ( usrHd, src1Id, src1Off, nSrc1Dims ) ;
1126*59599516SKenneth E. Jansen src2pnt = usrPointer ( usrHd, src2Id, src2Off, nSrc2Dims ) ;
1127*59599516SKenneth E. Jansen
1128*59599516SKenneth E. Jansen fMtxVdimVecMult( src1pnt,
1129*59599516SKenneth E. Jansen usrHd->flowDiag+p1Off,
1130*59599516SKenneth E. Jansen usrHd->lesP+p1Off,
1131*59599516SKenneth E. Jansen &nSrc1Dims,
1132*59599516SKenneth E. Jansen &nDofs,
1133*59599516SKenneth E. Jansen &nPs,
1134*59599516SKenneth E. Jansen &nP1s,
1135*59599516SKenneth E. Jansen &(usrHd->nNodes) ) ;
1136*59599516SKenneth E. Jansen
1137*59599516SKenneth E. Jansen fMtxVdimVecMult( src2pnt,
1138*59599516SKenneth E. Jansen usrHd->flowDiag+p2Off,
1139*59599516SKenneth E. Jansen usrHd->lesP+p2Off,
1140*59599516SKenneth E. Jansen &nSrc2Dims,
1141*59599516SKenneth E. Jansen &nDofs,
1142*59599516SKenneth E. Jansen &nPs,
1143*59599516SKenneth E. Jansen &nP2s,
1144*59599516SKenneth E. Jansen &(usrHd->nNodes) ) ;
1145*59599516SKenneth E. Jansen commOut ( usrHd->lesP, usrHd->ilwork, &nPs,
1146*59599516SKenneth E. Jansen usrHd->iper, usrHd->iBC, usrHd->BC );
1147*59599516SKenneth E. Jansen
1148*59599516SKenneth E. Jansen fLesSparseApNGtC( usrHd->colm, usrHd->rowp,
1149*59599516SKenneth E. Jansen usrHd->lhsP, usrHd->lesP, usrHd->lesQ,
1150*59599516SKenneth E. Jansen &(usrHd->nNodes),&(usrHd->nnz_tot));
1151*59599516SKenneth E. Jansen
1152*59599516SKenneth E. Jansen commIn ( usrHd->lesQ, usrHd->ilwork, &nQs,
1153*59599516SKenneth E. Jansen usrHd->iper, usrHd->iBC, usrHd->BC );
1154*59599516SKenneth E. Jansen
1155*59599516SKenneth E. Jansen dstpnt = usrPointer ( usrHd, dstId, dstOff, nDstDims ) ;
1156*59599516SKenneth E. Jansen
1157*59599516SKenneth E. Jansen fMtxVdimVecMult( usrHd->lesQ,
1158*59599516SKenneth E. Jansen usrHd->flowDiag+qOff,
1159*59599516SKenneth E. Jansen dstpnt,
1160*59599516SKenneth E. Jansen &nQs,
1161*59599516SKenneth E. Jansen &nDofs,
1162*59599516SKenneth E. Jansen &nDstDims,
1163*59599516SKenneth E. Jansen &nQs,
1164*59599516SKenneth E. Jansen &(usrHd->nNodes) ) ;
1165*59599516SKenneth E. Jansen }
1166*59599516SKenneth E. Jansen
1167*59599516SKenneth E. Jansen /*-----------------------------------------------------------------------
1168*59599516SKenneth E. Jansen *
1169*59599516SKenneth E. Jansen * lesApFull
1170*59599516SKenneth E. Jansen *
1171*59599516SKenneth E. Jansen * operation : K * Du + G * Dp = lesQ(:,nenl,1:3)
1172*59599516SKenneth E. Jansen * -G^t * Du + C * Dp = lesQ(:,nenl,4:4)
1173*59599516SKenneth E. Jansen *
1174*59599516SKenneth E. Jansen *-----------------------------------------------------------------------
1175*59599516SKenneth E. Jansen */
lesApFull(UsrHd usrHd,Integer srcId,Integer dstId,Integer nSrcDims,Integer srcOff,Integer nDstDims,Integer dstOff)1176*59599516SKenneth E. Jansen void lesApFull ( UsrHd usrHd,
1177*59599516SKenneth E. Jansen Integer srcId,
1178*59599516SKenneth E. Jansen Integer dstId,
1179*59599516SKenneth E. Jansen Integer nSrcDims,
1180*59599516SKenneth E. Jansen Integer srcOff,
1181*59599516SKenneth E. Jansen Integer nDstDims,
1182*59599516SKenneth E. Jansen Integer dstOff )
1183*59599516SKenneth E. Jansen {
1184*59599516SKenneth E. Jansen char* funcName = "lesApFull" ; /* function name */
1185*59599516SKenneth E. Jansen Integer pOff ; /* Diag offset for P */
1186*59599516SKenneth E. Jansen Integer qOff ; /* Diag offset for Q */
1187*59599516SKenneth E. Jansen Integer nDofs ; /* No. of Dofs */
1188*59599516SKenneth E. Jansen Integer nPs ; /* No. of P dimension */
1189*59599516SKenneth E. Jansen Integer nQs ; /* No. of Q dimension */
1190*59599516SKenneth E. Jansen Real* srcpnt ; /* Source */
1191*59599516SKenneth E. Jansen Real* dstpnt ; /* Destination */
1192*59599516SKenneth E. Jansen
1193*59599516SKenneth E. Jansen nDofs = 4 ;
1194*59599516SKenneth E. Jansen nPs = 4 ;
1195*59599516SKenneth E. Jansen nQs = 4 ;
1196*59599516SKenneth E. Jansen pOff = 0 * usrHd->nNodes ;
1197*59599516SKenneth E. Jansen qOff = 0 * usrHd->nNodes ;
1198*59599516SKenneth E. Jansen
1199*59599516SKenneth E. Jansen srcpnt = usrPointer ( usrHd, srcId, srcOff, nSrcDims ) ;
1200*59599516SKenneth E. Jansen
1201*59599516SKenneth E. Jansen fMtxVdimVecMult( srcpnt,
1202*59599516SKenneth E. Jansen usrHd->flowDiag+pOff,
1203*59599516SKenneth E. Jansen usrHd->lesP,
1204*59599516SKenneth E. Jansen &nSrcDims,
1205*59599516SKenneth E. Jansen &nDofs,
1206*59599516SKenneth E. Jansen &nPs,
1207*59599516SKenneth E. Jansen &nPs,
1208*59599516SKenneth E. Jansen &(usrHd->nNodes) ) ;
1209*59599516SKenneth E. Jansen commOut ( usrHd->lesP, usrHd->ilwork, &nPs,
1210*59599516SKenneth E. Jansen usrHd->iper, usrHd->iBC, usrHd->BC );
1211*59599516SKenneth E. Jansen
1212*59599516SKenneth E. Jansen fLesSparseApFull( usrHd->colm, usrHd->rowp, usrHd->lhsK,
1213*59599516SKenneth E. Jansen usrHd->lhsP, usrHd->lesP, usrHd->lesQ,
1214*59599516SKenneth E. Jansen &(usrHd->nNodes),&(usrHd->nnz_tot));
1215*59599516SKenneth E. Jansen
1216*59599516SKenneth E. Jansen commIn ( usrHd->lesQ, usrHd->ilwork, &nQs,
1217*59599516SKenneth E. Jansen usrHd->iper, usrHd->iBC, usrHd->BC );
1218*59599516SKenneth E. Jansen
1219*59599516SKenneth E. Jansen dstpnt = usrPointer ( usrHd, dstId, dstOff, nDstDims ) ;
1220*59599516SKenneth E. Jansen
1221*59599516SKenneth E. Jansen fMtxVdimVecMult( usrHd->lesQ,
1222*59599516SKenneth E. Jansen usrHd->flowDiag+qOff,
1223*59599516SKenneth E. Jansen dstpnt,
1224*59599516SKenneth E. Jansen &nQs,
1225*59599516SKenneth E. Jansen &nDofs,
1226*59599516SKenneth E. Jansen &nDstDims,
1227*59599516SKenneth E. Jansen &nQs,
1228*59599516SKenneth E. Jansen &(usrHd->nNodes) ) ;
1229*59599516SKenneth E. Jansen }
1230*59599516SKenneth E. Jansen
1231*59599516SKenneth E. Jansen /*-----------------------------------------------------------------------
1232*59599516SKenneth E. Jansen *
1233*59599516SKenneth E. Jansen * lesApSclr
1234*59599516SKenneth E. Jansen *
1235*59599516SKenneth E. Jansen * operation : M(:,nenl,nenl) * Ds(:,nenl,1) = lesQ(:,nenl,1)
1236*59599516SKenneth E. Jansen *
1237*59599516SKenneth E. Jansen *-----------------------------------------------------------------------
1238*59599516SKenneth E. Jansen */
lesApSclr(UsrHd usrHd,Integer srcId,Integer dstId,Integer nSrcDims,Integer srcOff,Integer nDstDims,Integer dstOff)1239*59599516SKenneth E. Jansen void lesApSclr ( UsrHd usrHd,
1240*59599516SKenneth E. Jansen Integer srcId,
1241*59599516SKenneth E. Jansen Integer dstId,
1242*59599516SKenneth E. Jansen Integer nSrcDims,
1243*59599516SKenneth E. Jansen Integer srcOff,
1244*59599516SKenneth E. Jansen Integer nDstDims,
1245*59599516SKenneth E. Jansen Integer dstOff )
1246*59599516SKenneth E. Jansen {
1247*59599516SKenneth E. Jansen char* funcName = "lesApSclr" ; /* function name */
1248*59599516SKenneth E. Jansen Integer pOff ; /* Diag offset for P */
1249*59599516SKenneth E. Jansen Integer qOff ; /* Diag offset for Q */
1250*59599516SKenneth E. Jansen Integer nDofs ; /* No. of Dofs */
1251*59599516SKenneth E. Jansen Integer nPs ; /* No. of P dimension */
1252*59599516SKenneth E. Jansen Integer nQs ; /* No. of Q dimension */
1253*59599516SKenneth E. Jansen Real* srcpnt ; /* Source */
1254*59599516SKenneth E. Jansen Real* dstpnt ; /* Destination */
1255*59599516SKenneth E. Jansen Integer lhsStiffFlag ;
1256*59599516SKenneth E. Jansen double sclrRegFct ;
1257*59599516SKenneth E. Jansen
1258*59599516SKenneth E. Jansen nDofs = 1 ;
1259*59599516SKenneth E. Jansen nPs = 1 ;
1260*59599516SKenneth E. Jansen nQs = 1 ;
1261*59599516SKenneth E. Jansen pOff = 0 ;
1262*59599516SKenneth E. Jansen qOff = 0 ;
1263*59599516SKenneth E. Jansen
1264*59599516SKenneth E. Jansen lhsStiffFlag = 0 ;
1265*59599516SKenneth E. Jansen sclrRegFct = 0 ;
1266*59599516SKenneth E. Jansen
1267*59599516SKenneth E. Jansen srcpnt = usrPointer ( usrHd, srcId, srcOff, nSrcDims ) ;
1268*59599516SKenneth E. Jansen dstpnt = usrPointer ( usrHd, dstId, dstOff, nDstDims ) ;
1269*59599516SKenneth E. Jansen
1270*59599516SKenneth E. Jansen
1271*59599516SKenneth E. Jansen fMtxVdimVecMult ( srcpnt,
1272*59599516SKenneth E. Jansen usrHd->sclrDiag+pOff,
1273*59599516SKenneth E. Jansen usrHd->lesP,
1274*59599516SKenneth E. Jansen &nSrcDims,
1275*59599516SKenneth E. Jansen &nDofs,
1276*59599516SKenneth E. Jansen &nPs,
1277*59599516SKenneth E. Jansen &nPs,
1278*59599516SKenneth E. Jansen &(usrHd->nNodes) ) ;
1279*59599516SKenneth E. Jansen commOut ( usrHd->lesP, usrHd->ilwork, &nPs,
1280*59599516SKenneth E. Jansen usrHd->iper, usrHd->iBC, usrHd->BC );
1281*59599516SKenneth E. Jansen
1282*59599516SKenneth E. Jansen fLesSparseApSclr( usrHd->colm, usrHd->rowp, usrHd->lhsS,
1283*59599516SKenneth E. Jansen usrHd->lesP, usrHd->lesQ,
1284*59599516SKenneth E. Jansen &(usrHd->nNodes),&(usrHd->nnz_tot));
1285*59599516SKenneth E. Jansen
1286*59599516SKenneth E. Jansen commIn ( usrHd->lesQ, usrHd->ilwork, &nQs,
1287*59599516SKenneth E. Jansen usrHd->iper, usrHd->iBC, usrHd->BC );
1288*59599516SKenneth E. Jansen
1289*59599516SKenneth E. Jansen
1290*59599516SKenneth E. Jansen if ( lhsStiffFlag && sclrRegFct != 0 ) {
1291*59599516SKenneth E. Jansen
1292*59599516SKenneth E. Jansen fMtxVdimVecMult ( usrHd->lesQ,
1293*59599516SKenneth E. Jansen usrHd->sclrDiag+qOff,
1294*59599516SKenneth E. Jansen usrHd->lesP,
1295*59599516SKenneth E. Jansen &nQs,
1296*59599516SKenneth E. Jansen &nDofs,
1297*59599516SKenneth E. Jansen &nDstDims,
1298*59599516SKenneth E. Jansen &nQs,
1299*59599516SKenneth E. Jansen &(usrHd->nNodes) ) ;
1300*59599516SKenneth E. Jansen
1301*59599516SKenneth E. Jansen flesDaxpy ( srcpnt,
1302*59599516SKenneth E. Jansen usrHd->lesP,
1303*59599516SKenneth E. Jansen &sclrRegFct,
1304*59599516SKenneth E. Jansen &nDstDims,
1305*59599516SKenneth E. Jansen &(usrHd->nNodes) ) ;
1306*59599516SKenneth E. Jansen
1307*59599516SKenneth E. Jansen flesCp ( usrHd->lesP,
1308*59599516SKenneth E. Jansen dstpnt,
1309*59599516SKenneth E. Jansen &nDstDims,
1310*59599516SKenneth E. Jansen &(usrHd->nNodes) ) ;
1311*59599516SKenneth E. Jansen
1312*59599516SKenneth E. Jansen } else {
1313*59599516SKenneth E. Jansen
1314*59599516SKenneth E. Jansen fMtxVdimVecMult ( usrHd->lesQ,
1315*59599516SKenneth E. Jansen usrHd->sclrDiag+qOff,
1316*59599516SKenneth E. Jansen dstpnt,
1317*59599516SKenneth E. Jansen &nQs,
1318*59599516SKenneth E. Jansen &nDofs,
1319*59599516SKenneth E. Jansen &nDstDims,
1320*59599516SKenneth E. Jansen &nQs,
1321*59599516SKenneth E. Jansen &(usrHd->nNodes) ) ;
1322*59599516SKenneth E. Jansen }
1323*59599516SKenneth E. Jansen
1324*59599516SKenneth E. Jansen }
1325*59599516SKenneth E. Jansen
1326*59599516SKenneth E. Jansen /*********************************************************************
1327*59599516SKenneth E. Jansen * lesPrecPPE
1328*59599516SKenneth E. Jansen * outer routine to solve PPE
1329*59599516SKenneth E. Jansen *******************************************************************/
1330*59599516SKenneth E. Jansen
lesPrecPPE(UsrHd usrHd,Integer srcId,Integer dstId,Integer nSrcDims,Integer srcOff,Integer nDstDims,Integer dstOff)1331*59599516SKenneth E. Jansen void lesPrecPPE(UsrHd usrHd,
1332*59599516SKenneth E. Jansen Integer srcId,
1333*59599516SKenneth E. Jansen Integer dstId,
1334*59599516SKenneth E. Jansen Integer nSrcDims,
1335*59599516SKenneth E. Jansen Integer srcOff,
1336*59599516SKenneth E. Jansen Integer nDstDims,
1337*59599516SKenneth E. Jansen Integer dstOff)
1338*59599516SKenneth E. Jansen {
1339*59599516SKenneth E. Jansen Real* srcpnt ; /* Source R */
1340*59599516SKenneth E. Jansen Real* dstpnt ; /* Destination Z */
1341*59599516SKenneth E. Jansen srcpnt = usrPointer ( usrHd, srcId, srcOff, nSrcDims ) ;
1342*59599516SKenneth E. Jansen dstpnt = usrPointer ( usrHd, dstId, dstOff, nDstDims ) ;
1343*59599516SKenneth E. Jansen #ifdef AMG
1344*59599516SKenneth E. Jansen ramg_interface( usrHd->colm,
1345*59599516SKenneth E. Jansen usrHd->rowp,usrHd->lhsK,usrHd->lhsP,usrHd->flowDiag,
1346*59599516SKenneth E. Jansen srcpnt,dstpnt,
1347*59599516SKenneth E. Jansen usrHd->ilwork,usrHd->BC,usrHd->iBC,usrHd->iper
1348*59599516SKenneth E. Jansen );
1349*59599516SKenneth E. Jansen #endif
1350*59599516SKenneth E. Jansen return;
1351*59599516SKenneth E. Jansen }
1352*59599516SKenneth E. Jansen
1353