xref: /phasta/phSolver/incompressible/lestools.c (revision 595995161822a203c8467e0e4a253d7bd7d6df32)
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