xref: /phasta/phSolver/incompressible/ftools.f (revision 595995161822a203c8467e0e4a253d7bd7d6df32)
1*59599516SKenneth E. Jansenc---------------------------------------------------------------------
2*59599516SKenneth E. Jansenc
3*59599516SKenneth E. Jansenc ftools.f : Bundle of Fortran routines
4*59599516SKenneth E. Jansenc
5*59599516SKenneth E. Jansenc Each routine is to be called by drvftools.f
6*59599516SKenneth E. Jansenc
7*59599516SKenneth E. Jansenc Various operations run based on les**.c
8*59599516SKenneth E. Jansenc
9*59599516SKenneth E. Jansenc---------------------------------------------------------------------
10*59599516SKenneth E. Jansenc
11*59599516SKenneth E. Jansenc--------------
12*59599516SKenneth E. Jansenc flesPrepDiag
13*59599516SKenneth E. Jansenc--------------
14*59599516SKenneth E. Jansenc
15*59599516SKenneth E. Jansen 	subroutine flesPrepDiag ( ien, xKebe, xGoc, flowDiag )
16*59599516SKenneth E. Jansenc
17*59599516SKenneth E. Jansen        include "common.h"
18*59599516SKenneth E. Jansenc
19*59599516SKenneth E. Jansen        dimension xKebe(npro,3*nshl,3*nshl),
20*59599516SKenneth E. Jansen     &            xGoC(npro,4*nshl,nshl)
21*59599516SKenneth E. Jansen        dimension Diagl(npro,nshl,nflow),   flowDiag(nshg, 4)
22*59599516SKenneth E. Jansen        integer   ien(npro,nshl)
23*59599516SKenneth E. Jansenc
24*59599516SKenneth E. Jansenc
25*59599516SKenneth E. Jansenc.... monentum contribution to diagonal
26*59599516SKenneth E. Jansenc
27*59599516SKenneth E. Jansen        do i = 1, nshl
28*59599516SKenneth E. Jansen          i0 = (nsd) * (i - 1)
29*59599516SKenneth E. Jansen          Diagl(:,i,1) = xKebe(1:npro,i0+1,i0+1)
30*59599516SKenneth E. Jansen          Diagl(:,i,2) = xKebe(1:npro,i0+2,i0+2)
31*59599516SKenneth E. Jansen          Diagl(:,i,3) = xKebe(1:npro,i0+3,i0+3)
32*59599516SKenneth E. Jansen        enddo
33*59599516SKenneth E. Jansenc
34*59599516SKenneth E. Jansenc.... continuity contribution to diagonal
35*59599516SKenneth E. Jansenc
36*59599516SKenneth E. Jansen        nn2 = nshl * nsd
37*59599516SKenneth E. Jansen        do i = 1, nshl
38*59599516SKenneth E. Jansen          Diagl(:,i,4) = xGoC(1:npro,nn2+i,i)
39*59599516SKenneth E. Jansen        enddo
40*59599516SKenneth E. Jansen
41*59599516SKenneth E. Jansen        call local (flowDiag,  Diagl, ien, nflow, 'scatter ')
42*59599516SKenneth E. Jansenc
43*59599516SKenneth E. Jansen        return
44*59599516SKenneth E. Jansen        end
45*59599516SKenneth E. Jansenc
46*59599516SKenneth E. Jansenc--------------------------------
47*59599516SKenneth E. Jansenc fMtxVdimVecMult
48*59599516SKenneth E. Jansenc Farzin's implementation
49*59599516SKenneth E. Jansenc row and column index exchanged
50*59599516SKenneth E. Jansenc--------------------------------
51*59599516SKenneth E. Jansenc
52*59599516SKenneth E. Jansen        subroutine fMtxVdimVecMult( a, b, c, na, nb, nc, m, n )
53*59599516SKenneth E. Jansenc
54*59599516SKenneth E. Jansenc.... Data declaration
55*59599516SKenneth E. Jansenc
56*59599516SKenneth E. Jansen        implicit none
57*59599516SKenneth E. Jansen        integer na,     nb,     nc,     m,      n
58*59599516SKenneth E. Jansen        real*8  a(n,na),        b(n,nb),        c(n,nc)
59*59599516SKenneth E. Jansenc
60*59599516SKenneth E. Jansen        integer i,      j
61*59599516SKenneth E. Jansenc
62*59599516SKenneth E. Jansenc.... Do the work
63*59599516SKenneth E. Jansenc
64*59599516SKenneth E. JansenC WIP: change to F90
65*59599516SKenneth E. JansenC
66*59599516SKenneth E. Jansen        if ( m .eq. 1 ) then
67*59599516SKenneth E. Jansenc
68*59599516SKenneth E. Jansen            do i = 1, n
69*59599516SKenneth E. Jansen                c(i,1) = a(i,1) * b(i,1)
70*59599516SKenneth E. Jansen            enddo
71*59599516SKenneth E. Jansenc
72*59599516SKenneth E. Jansen        else if ( m .eq. 2 ) then
73*59599516SKenneth E. Jansenc
74*59599516SKenneth E. Jansen            do i = 1, n
75*59599516SKenneth E. Jansen                c(i,1) = a(i,1) * b(i,1)
76*59599516SKenneth E. Jansen                c(i,2) = a(i,2) * b(i,2)
77*59599516SKenneth E. Jansen            enddo
78*59599516SKenneth E. Jansenc
79*59599516SKenneth E. Jansen        else if ( m .eq. 3 ) then
80*59599516SKenneth E. Jansenc
81*59599516SKenneth E. Jansen            do i = 1, n
82*59599516SKenneth E. Jansen                c(i,1) = a(i,1) * b(i,1)
83*59599516SKenneth E. Jansen                c(i,2) = a(i,2) * b(i,2)
84*59599516SKenneth E. Jansen                c(i,3) = a(i,3) * b(i,3)
85*59599516SKenneth E. Jansen            enddo
86*59599516SKenneth E. Jansenc
87*59599516SKenneth E. Jansen        else if ( m .eq. 4 ) then
88*59599516SKenneth E. Jansenc
89*59599516SKenneth E. Jansen            do i = 1, n
90*59599516SKenneth E. Jansen                c(i,1) = a(i,1) * b(i,1)
91*59599516SKenneth E. Jansen                c(i,2) = a(i,2) * b(i,2)
92*59599516SKenneth E. Jansen                c(i,3) = a(i,3) * b(i,3)
93*59599516SKenneth E. Jansen                c(i,4) = a(i,4) * b(i,4)
94*59599516SKenneth E. Jansen            enddo
95*59599516SKenneth E. Jansenc
96*59599516SKenneth E. Jansen        else
97*59599516SKenneth E. Jansenc
98*59599516SKenneth E. Jansen            do i = 1, n
99*59599516SKenneth E. Jansen                do j = 1, m
100*59599516SKenneth E. Jansen                    c(i,j) = a(i,j) * b(i,j)
101*59599516SKenneth E. Jansen                enddo
102*59599516SKenneth E. Jansen            enddo
103*59599516SKenneth E. Jansenc
104*59599516SKenneth E. Jansen        endif
105*59599516SKenneth E. Jansenc
106*59599516SKenneth E. Jansen      return
107*59599516SKenneth E. Jansen      end
108*59599516SKenneth E. Jansenc
109*59599516SKenneth E. Jansenc----------
110*59599516SKenneth E. Jansenc flesZero
111*59599516SKenneth E. Jansenc----------
112*59599516SKenneth E. Jansenc
113*59599516SKenneth E. Jansen	subroutine flesZero ( a, m, n )
114*59599516SKenneth E. Jansenc
115*59599516SKenneth E. Jansen        implicit none
116*59599516SKenneth E. Jansen        integer  m, n, i, j
117*59599516SKenneth E. Jansen        real*8   a(n,m)
118*59599516SKenneth E. Jansenc
119*59599516SKenneth E. Jansen        do i = 1, n
120*59599516SKenneth E. Jansen          do j = 1, m
121*59599516SKenneth E. Jansen            a(i,j) = 0.0e-0
122*59599516SKenneth E. Jansen          enddo
123*59599516SKenneth E. Jansen        enddo
124*59599516SKenneth E. Jansenc
125*59599516SKenneth E. Jansen        return
126*59599516SKenneth E. Jansen        end
127*59599516SKenneth E. Jansenc
128*59599516SKenneth E. Jansenc--------
129*59599516SKenneth E. Jansenc flesCp
130*59599516SKenneth E. Jansenc--------
131*59599516SKenneth E. Jansenc
132*59599516SKenneth E. Jansen	subroutine flesCp ( a, b, m, n )
133*59599516SKenneth E. Jansenc
134*59599516SKenneth E. Jansen        implicit none
135*59599516SKenneth E. Jansen        integer  m, n, i, j
136*59599516SKenneth E. Jansen        real*8   a(n,m), b(n,m)
137*59599516SKenneth E. Jansenc
138*59599516SKenneth E. Jansen        do i = 1, n
139*59599516SKenneth E. Jansen          do j = 1, m
140*59599516SKenneth E. Jansen            b(i,j) = a(i,j)
141*59599516SKenneth E. Jansen          enddo
142*59599516SKenneth E. Jansen        enddo
143*59599516SKenneth E. Jansenc
144*59599516SKenneth E. Jansen        return
145*59599516SKenneth E. Jansen        end
146*59599516SKenneth E. Jansenc
147*59599516SKenneth E. Jansenc-----------
148*59599516SKenneth E. Jansenc flesScale
149*59599516SKenneth E. Jansenc-----------
150*59599516SKenneth E. Jansenc
151*59599516SKenneth E. Jansen 	subroutine flesScale ( a, s, m, n )
152*59599516SKenneth E. Jansenc
153*59599516SKenneth E. Jansen        implicit none
154*59599516SKenneth E. Jansen        integer  m, n, i, j
155*59599516SKenneth E. Jansen        real*8   a(n,m), s
156*59599516SKenneth E. Jansenc
157*59599516SKenneth E. Jansen        do i = 1, n
158*59599516SKenneth E. Jansen          do j = 1, m
159*59599516SKenneth E. Jansen            a(i,j) = a(i,j) * s
160*59599516SKenneth E. Jansen          enddo
161*59599516SKenneth E. Jansen        enddo
162*59599516SKenneth E. Jansenc
163*59599516SKenneth E. Jansen        return
164*59599516SKenneth E. Jansen        end
165*59599516SKenneth E. Jansenc
166*59599516SKenneth E. Jansenc-------------
167*59599516SKenneth E. Jansenc flesScaleCp
168*59599516SKenneth E. Jansenc-------------
169*59599516SKenneth E. Jansenc
170*59599516SKenneth E. Jansen	subroutine flesScaleCp ( a, b, s, m, n )
171*59599516SKenneth E. Jansenc
172*59599516SKenneth E. Jansen        implicit none
173*59599516SKenneth E. Jansen        integer  m, n, i, j
174*59599516SKenneth E. Jansen        real*8   a(n,m), b(n,m), s
175*59599516SKenneth E. Jansenc
176*59599516SKenneth E. Jansen        do i = 1, n
177*59599516SKenneth E. Jansen          do j = 1, m
178*59599516SKenneth E. Jansen            b(i,j) = a(i,j) * s
179*59599516SKenneth E. Jansen          enddo
180*59599516SKenneth E. Jansen        enddo
181*59599516SKenneth E. Jansenc
182*59599516SKenneth E. Jansen        return
183*59599516SKenneth E. Jansen        end
184*59599516SKenneth E. Jansenc
185*59599516SKenneth E. Jansenc---------
186*59599516SKenneth E. Jansenc flesAdd
187*59599516SKenneth E. Jansenc---------
188*59599516SKenneth E. Jansenc
189*59599516SKenneth E. Jansen	subroutine flesAdd ( a, b, m, n )
190*59599516SKenneth E. Jansenc
191*59599516SKenneth E. Jansen        implicit none
192*59599516SKenneth E. Jansen        integer  m, n, i, j
193*59599516SKenneth E. Jansen        real*8   a(n,m), b(n,m)
194*59599516SKenneth E. Jansenc
195*59599516SKenneth E. Jansen        do i = 1, n
196*59599516SKenneth E. Jansen          do j = 1, m
197*59599516SKenneth E. Jansen            b(i,j) = b(i,j) + a(i,j)
198*59599516SKenneth E. Jansen          enddo
199*59599516SKenneth E. Jansen        enddo
200*59599516SKenneth E. Jansenc
201*59599516SKenneth E. Jansen        return
202*59599516SKenneth E. Jansen        end
203*59599516SKenneth E. Jansenc
204*59599516SKenneth E. Jansenc---------
205*59599516SKenneth E. Jansenc flesSub
206*59599516SKenneth E. Jansenc---------
207*59599516SKenneth E. Jansenc
208*59599516SKenneth E. Jansen	subroutine flesSub ( a, b, m, n )
209*59599516SKenneth E. Jansenc
210*59599516SKenneth E. Jansen        implicit none
211*59599516SKenneth E. Jansen        integer  m, n, i, j
212*59599516SKenneth E. Jansen        real*8   a(n,m), b(n,m)
213*59599516SKenneth E. Jansenc
214*59599516SKenneth E. Jansen        do i = 1, n
215*59599516SKenneth E. Jansen          do j = 1, m
216*59599516SKenneth E. Jansen            b(i,j) = b(i,j) - a(i,j)
217*59599516SKenneth E. Jansen          enddo
218*59599516SKenneth E. Jansen        enddo
219*59599516SKenneth E. Jansenc
220*59599516SKenneth E. Jansen        return
221*59599516SKenneth E. Jansen        end
222*59599516SKenneth E. Jansenc
223*59599516SKenneth E. Jansenc----------
224*59599516SKenneth E. Jansenc flesDot1
225*59599516SKenneth E. Jansenc----------
226*59599516SKenneth E. Jansenc
227*59599516SKenneth E. Jansen 	real*8 function flesDot1 ( a, m, n )
228*59599516SKenneth E. Jansenc
229*59599516SKenneth E. Jansen        implicit none
230*59599516SKenneth E. Jansen        integer  m, n, i, j
231*59599516SKenneth E. Jansen        real*8   a(n,m)
232*59599516SKenneth E. Jansenc
233*59599516SKenneth E. Jansen	flesDot1 = 0
234*59599516SKenneth E. Jansen        do i = 1, n
235*59599516SKenneth E. Jansen          do j = 1, m
236*59599516SKenneth E. Jansen            flesDot1 = flesDot1 + a(i,j) * a(i,j)
237*59599516SKenneth E. Jansen          enddo
238*59599516SKenneth E. Jansen        enddo
239*59599516SKenneth E. Jansenc
240*59599516SKenneth E. Jansen        return
241*59599516SKenneth E. Jansen        end
242*59599516SKenneth E. Jansenc
243*59599516SKenneth E. Jansenc----------
244*59599516SKenneth E. Jansenc flesDot2
245*59599516SKenneth E. Jansenc----------
246*59599516SKenneth E. Jansenc
247*59599516SKenneth E. Jansen	real*8 function flesDot2 ( a, b, m, n )
248*59599516SKenneth E. Jansenc
249*59599516SKenneth E. Jansen        implicit none
250*59599516SKenneth E. Jansen        integer  m, n, i, j
251*59599516SKenneth E. Jansen        real*8   a(n,m), b(n,m)
252*59599516SKenneth E. Jansenc
253*59599516SKenneth E. Jansen	flesDot2 = 0
254*59599516SKenneth E. Jansen        do i = 1, n
255*59599516SKenneth E. Jansen          do j = 1, m
256*59599516SKenneth E. Jansen            flesDot2 = flesDot2 + a(i,j) * b(i,j)
257*59599516SKenneth E. Jansen          enddo
258*59599516SKenneth E. Jansen        enddo
259*59599516SKenneth E. Jansenc
260*59599516SKenneth E. Jansen        return
261*59599516SKenneth E. Jansen        end
262*59599516SKenneth E. Jansenc
263*59599516SKenneth E. Jansenc-----------
264*59599516SKenneth E. Jansenc flesDaxpy
265*59599516SKenneth E. Jansenc-----------
266*59599516SKenneth E. Jansenc
267*59599516SKenneth E. Jansen	subroutine flesDaxpy ( x, y, a, m, n )
268*59599516SKenneth E. Jansenc
269*59599516SKenneth E. Jansen        implicit none
270*59599516SKenneth E. Jansen        integer  m, n, i, j
271*59599516SKenneth E. Jansen        real*8   x(n,m), y(n,m)
272*59599516SKenneth E. Jansen        real*8   a
273*59599516SKenneth E. Jansenc
274*59599516SKenneth E. Jansen        do i = 1, n
275*59599516SKenneth E. Jansen          do j= 1, m
276*59599516SKenneth E. Jansen            y(i,j) = y(i,j) + a * x(i,j)
277*59599516SKenneth E. Jansen          enddo
278*59599516SKenneth E. Jansen        enddo
279*59599516SKenneth E. Jansenc
280*59599516SKenneth E. Jansen        return
281*59599516SKenneth E. Jansen        end
282*59599516SKenneth E. Jansenc
283*59599516SKenneth E. Jansenc-----------
284*59599516SKenneth E. Jansenc flesDxpay
285*59599516SKenneth E. Jansenc-----------
286*59599516SKenneth E. Jansenc
287*59599516SKenneth E. Jansen	subroutine flesDxpay ( x, y, a, m, n )
288*59599516SKenneth E. Jansenc
289*59599516SKenneth E. Jansen        implicit none
290*59599516SKenneth E. Jansen        integer  m, n, i, j
291*59599516SKenneth E. Jansen        real*8   x(n,m), y(n,m)
292*59599516SKenneth E. Jansen        real*8   a
293*59599516SKenneth E. Jansenc
294*59599516SKenneth E. Jansen        do i = 1, n
295*59599516SKenneth E. Jansen          do j = 1, m
296*59599516SKenneth E. Jansen            y(i,j) = a * y(i,j) + x(i,j)
297*59599516SKenneth E. Jansen          enddo
298*59599516SKenneth E. Jansen        enddo
299*59599516SKenneth E. Jansenc
300*59599516SKenneth E. Jansen        return
301*59599516SKenneth E. Jansen        end
302*59599516SKenneth E. Jansenc
303*59599516SKenneth E. Jansenc---------
304*59599516SKenneth E. Jansenc flesInv
305*59599516SKenneth E. Jansenc---------
306*59599516SKenneth E. Jansenc
307*59599516SKenneth E. Jansen	subroutine flesInv ( x, m, n )
308*59599516SKenneth E. Jansenc
309*59599516SKenneth E. Jansen        implicit none
310*59599516SKenneth E. Jansen        integer  m, n, i, j
311*59599516SKenneth E. Jansen        real*8   x(n,m)
312*59599516SKenneth E. Jansenc
313*59599516SKenneth E. Jansen        do i = 1, n
314*59599516SKenneth E. Jansen          do j = 1, m
315*59599516SKenneth E. Jansen            if ( x(i,j) .ne. 0 ) x(i,j) = 1. / x(i,j)
316*59599516SKenneth E. Jansen          enddo
317*59599516SKenneth E. Jansen        enddo
318*59599516SKenneth E. Jansenc
319*59599516SKenneth E. Jansen        return
320*59599516SKenneth E. Jansen        end
321*59599516SKenneth E. Jansenc
322*59599516SKenneth E. Jansenc--------------------------
323*59599516SKenneth E. Jansenc fMtxBlkDot2
324*59599516SKenneth E. Jansenc Farzin's implementation
325*59599516SKenneth E. Jansenc row and column exchanged
326*59599516SKenneth E. Jansenc--------------------------
327*59599516SKenneth E. Jansenc
328*59599516SKenneth E. Jansen        subroutine fMtxBlkDot2( x, y, c, m, n )
329*59599516SKenneth E. Jansenc
330*59599516SKenneth E. Jansenc.... Data declaration
331*59599516SKenneth E. Jansenc
332*59599516SKenneth E. Jansen        implicit none
333*59599516SKenneth E. Jansen        integer m,      n
334*59599516SKenneth E. Jansen        real*8  x(n,m), y(n),   c(m)
335*59599516SKenneth E. Jansenc
336*59599516SKenneth E. Jansen        real*8  tmp1,   tmp2,   tmp3,   tmp4
337*59599516SKenneth E. Jansen        real*8  tmp5,   tmp6,   tmp7,   tmp8
338*59599516SKenneth E. Jansen        integer i,      j,      m1
339*59599516SKenneth E. Jansenc
340*59599516SKenneth E. Jansenc.... Determine the left overs
341*59599516SKenneth E. Jansenc
342*59599516SKenneth E. Jansen        m1 = mod(m,8) + 1
343*59599516SKenneth E. Jansen
344*59599516SKenneth E. Jansenc
345*59599516SKenneth E. Jansenc.... Do the small pieces
346*59599516SKenneth E. Jansenc
347*59599516SKenneth E. Jansen        goto ( 8000, 1000, 2000, 3000, 4000, 5000, 6000, 7000 ) m1
348*59599516SKenneth E. Jansenc
349*59599516SKenneth E. Jansen1000    continue
350*59599516SKenneth E. Jansen        tmp1 = 0
351*59599516SKenneth E. Jansen        do i = 1, n
352*59599516SKenneth E. Jansen            tmp1 = tmp1 + x(i,1) * y(i)
353*59599516SKenneth E. Jansen        enddo
354*59599516SKenneth E. Jansen        c(1) = tmp1
355*59599516SKenneth E. Jansen        goto 8000
356*59599516SKenneth E. Jansenc
357*59599516SKenneth E. Jansen2000    continue
358*59599516SKenneth E. Jansen        tmp1 = 0
359*59599516SKenneth E. Jansen        tmp2 = 0
360*59599516SKenneth E. Jansen        do i = 1, n
361*59599516SKenneth E. Jansen            tmp1 = tmp1 + x(i,1) * y(i)
362*59599516SKenneth E. Jansen            tmp2 = tmp2 + x(i,2) * y(i)
363*59599516SKenneth E. Jansen        enddo
364*59599516SKenneth E. Jansen        c(1) = tmp1
365*59599516SKenneth E. Jansen        c(2) = tmp2
366*59599516SKenneth E. Jansen        goto 8000
367*59599516SKenneth E. Jansenc
368*59599516SKenneth E. Jansen3000    continue
369*59599516SKenneth E. Jansen        tmp1 = 0
370*59599516SKenneth E. Jansen        tmp2 = 0
371*59599516SKenneth E. Jansen        tmp3 = 0
372*59599516SKenneth E. Jansen        do i = 1, n
373*59599516SKenneth E. Jansen            tmp1 = tmp1 + x(i,1) * y(i)
374*59599516SKenneth E. Jansen            tmp2 = tmp2 + x(i,2) * y(i)
375*59599516SKenneth E. Jansen            tmp3 = tmp3 + x(i,3) * y(i)
376*59599516SKenneth E. Jansen        enddo
377*59599516SKenneth E. Jansen        c(1) = tmp1
378*59599516SKenneth E. Jansen        c(2) = tmp2
379*59599516SKenneth E. Jansen        c(3) = tmp3
380*59599516SKenneth E. Jansen        goto 8000
381*59599516SKenneth E. Jansenc
382*59599516SKenneth E. Jansen4000    continue
383*59599516SKenneth E. Jansen        tmp1 = 0
384*59599516SKenneth E. Jansen        tmp2 = 0
385*59599516SKenneth E. Jansen        tmp3 = 0
386*59599516SKenneth E. Jansen        tmp4 = 0
387*59599516SKenneth E. Jansen        do i = 1, n
388*59599516SKenneth E. Jansen            tmp1 = tmp1 + x(i,1) * y(i)
389*59599516SKenneth E. Jansen            tmp2 = tmp2 + x(i,2) * y(i)
390*59599516SKenneth E. Jansen            tmp3 = tmp3 + x(i,3) * y(i)
391*59599516SKenneth E. Jansen            tmp4 = tmp4 + x(i,4) * y(i)
392*59599516SKenneth E. Jansen        enddo
393*59599516SKenneth E. Jansen        c(1) = tmp1
394*59599516SKenneth E. Jansen        c(2) = tmp2
395*59599516SKenneth E. Jansen        c(3) = tmp3
396*59599516SKenneth E. Jansen        c(4) = tmp4
397*59599516SKenneth E. Jansen        goto 8000
398*59599516SKenneth E. Jansenc
399*59599516SKenneth E. Jansen5000    continue
400*59599516SKenneth E. Jansen        tmp1 = 0
401*59599516SKenneth E. Jansen        tmp2 = 0
402*59599516SKenneth E. Jansen        tmp3 = 0
403*59599516SKenneth E. Jansen        tmp4 = 0
404*59599516SKenneth E. Jansen        tmp5 = 0
405*59599516SKenneth E. Jansen        do i = 1, n
406*59599516SKenneth E. Jansen            tmp1 = tmp1 + x(i,1) * y(i)
407*59599516SKenneth E. Jansen            tmp2 = tmp2 + x(i,2) * y(i)
408*59599516SKenneth E. Jansen            tmp3 = tmp3 + x(i,3) * y(i)
409*59599516SKenneth E. Jansen            tmp4 = tmp4 + x(i,4) * y(i)
410*59599516SKenneth E. Jansen            tmp5 = tmp5 + x(i,5) * y(i)
411*59599516SKenneth E. Jansen        enddo
412*59599516SKenneth E. Jansen        c(1) = tmp1
413*59599516SKenneth E. Jansen        c(2) = tmp2
414*59599516SKenneth E. Jansen        c(3) = tmp3
415*59599516SKenneth E. Jansen        c(4) = tmp4
416*59599516SKenneth E. Jansen        c(5) = tmp5
417*59599516SKenneth E. Jansen        goto 8000
418*59599516SKenneth E. Jansenc
419*59599516SKenneth E. Jansen6000    continue
420*59599516SKenneth E. Jansen        tmp1 = 0
421*59599516SKenneth E. Jansen        tmp2 = 0
422*59599516SKenneth E. Jansen        tmp3 = 0
423*59599516SKenneth E. Jansen        tmp4 = 0
424*59599516SKenneth E. Jansen        tmp5 = 0
425*59599516SKenneth E. Jansen        tmp6 = 0
426*59599516SKenneth E. Jansen        do i = 1, n
427*59599516SKenneth E. Jansen            tmp1 = tmp1 + x(i,1) * y(i)
428*59599516SKenneth E. Jansen            tmp2 = tmp2 + x(i,2) * y(i)
429*59599516SKenneth E. Jansen            tmp3 = tmp3 + x(i,3) * y(i)
430*59599516SKenneth E. Jansen            tmp4 = tmp4 + x(i,4) * y(i)
431*59599516SKenneth E. Jansen            tmp5 = tmp5 + x(i,5) * y(i)
432*59599516SKenneth E. Jansen            tmp6 = tmp6 + x(i,6) * y(i)
433*59599516SKenneth E. Jansen        enddo
434*59599516SKenneth E. Jansen        c(1) = tmp1
435*59599516SKenneth E. Jansen        c(2) = tmp2
436*59599516SKenneth E. Jansen        c(3) = tmp3
437*59599516SKenneth E. Jansen        c(4) = tmp4
438*59599516SKenneth E. Jansen        c(5) = tmp5
439*59599516SKenneth E. Jansen        c(6) = tmp6
440*59599516SKenneth E. Jansen        goto 8000
441*59599516SKenneth E. Jansenc
442*59599516SKenneth E. Jansen7000    continue
443*59599516SKenneth E. Jansen        tmp1 = 0
444*59599516SKenneth E. Jansen        tmp2 = 0
445*59599516SKenneth E. Jansen        tmp3 = 0
446*59599516SKenneth E. Jansen        tmp4 = 0
447*59599516SKenneth E. Jansen        tmp5 = 0
448*59599516SKenneth E. Jansen        tmp6 = 0
449*59599516SKenneth E. Jansen        tmp7 = 0
450*59599516SKenneth E. Jansen        do i = 1, n
451*59599516SKenneth E. Jansen            tmp1 = tmp1 + x(i,1) * y(i)
452*59599516SKenneth E. Jansen            tmp2 = tmp2 + x(i,2) * y(i)
453*59599516SKenneth E. Jansen            tmp3 = tmp3 + x(i,3) * y(i)
454*59599516SKenneth E. Jansen            tmp4 = tmp4 + x(i,4) * y(i)
455*59599516SKenneth E. Jansen            tmp5 = tmp5 + x(i,5) * y(i)
456*59599516SKenneth E. Jansen            tmp6 = tmp6 + x(i,6) * y(i)
457*59599516SKenneth E. Jansen            tmp7 = tmp7 + x(i,7) * y(i)
458*59599516SKenneth E. Jansen        enddo
459*59599516SKenneth E. Jansen        c(1) = tmp1
460*59599516SKenneth E. Jansen        c(2) = tmp2
461*59599516SKenneth E. Jansen        c(3) = tmp3
462*59599516SKenneth E. Jansen        c(4) = tmp4
463*59599516SKenneth E. Jansen        c(5) = tmp5
464*59599516SKenneth E. Jansen        c(6) = tmp6
465*59599516SKenneth E. Jansen        c(7) = tmp7
466*59599516SKenneth E. Jansen        goto 8000
467*59599516SKenneth E. Jansenc
468*59599516SKenneth E. Jansenc.... Do the remaining part
469*59599516SKenneth E. Jansenc
470*59599516SKenneth E. Jansen8000    continue
471*59599516SKenneth E. Jansenc
472*59599516SKenneth E. Jansen        do j = m1, m, 8
473*59599516SKenneth E. Jansen            tmp1 = 0
474*59599516SKenneth E. Jansen            tmp2 = 0
475*59599516SKenneth E. Jansen            tmp3 = 0
476*59599516SKenneth E. Jansen            tmp4 = 0
477*59599516SKenneth E. Jansen            tmp5 = 0
478*59599516SKenneth E. Jansen            tmp6 = 0
479*59599516SKenneth E. Jansen            tmp7 = 0
480*59599516SKenneth E. Jansen            tmp8 = 0
481*59599516SKenneth E. Jansen            do i = 1, n
482*59599516SKenneth E. Jansen                tmp1 = tmp1 + x(i,j+0) * y(i)
483*59599516SKenneth E. Jansen                tmp2 = tmp2 + x(i,j+1) * y(i)
484*59599516SKenneth E. Jansen                tmp3 = tmp3 + x(i,j+2) * y(i)
485*59599516SKenneth E. Jansen                tmp4 = tmp4 + x(i,j+3) * y(i)
486*59599516SKenneth E. Jansen                tmp5 = tmp5 + x(i,j+4) * y(i)
487*59599516SKenneth E. Jansen                tmp6 = tmp6 + x(i,j+5) * y(i)
488*59599516SKenneth E. Jansen                tmp7 = tmp7 + x(i,j+6) * y(i)
489*59599516SKenneth E. Jansen                tmp8 = tmp8 + x(i,j+7) * y(i)
490*59599516SKenneth E. Jansen            enddo
491*59599516SKenneth E. Jansen            c(j+0) = tmp1
492*59599516SKenneth E. Jansen            c(j+1) = tmp2
493*59599516SKenneth E. Jansen            c(j+2) = tmp3
494*59599516SKenneth E. Jansen            c(j+3) = tmp4
495*59599516SKenneth E. Jansen            c(j+4) = tmp5
496*59599516SKenneth E. Jansen            c(j+5) = tmp6
497*59599516SKenneth E. Jansen            c(j+6) = tmp7
498*59599516SKenneth E. Jansen            c(j+7) = tmp8
499*59599516SKenneth E. Jansen        enddo
500*59599516SKenneth E. Jansenc
501*59599516SKenneth E. Jansen        return
502*59599516SKenneth E. Jansen        end
503*59599516SKenneth E. Jansenc
504*59599516SKenneth E. Jansenc--------------------------
505*59599516SKenneth E. Jansenc fMtxBlkDaxpy
506*59599516SKenneth E. Jansenc Farzin's implementation
507*59599516SKenneth E. Jansenc row and column exchanged
508*59599516SKenneth E. Jansenc--------------------------
509*59599516SKenneth E. Jansenc
510*59599516SKenneth E. Jansen        subroutine fMtxBlkDaxpy( x, y, c, m, n )
511*59599516SKenneth E. Jansenc
512*59599516SKenneth E. Jansenc.... Data declaration
513*59599516SKenneth E. Jansenc
514*59599516SKenneth E. Jansen        implicit none
515*59599516SKenneth E. Jansen        integer m,      n
516*59599516SKenneth E. Jansen        real*8  x(n,m), y(n),   c(m)
517*59599516SKenneth E. Jansenc
518*59599516SKenneth E. Jansen        real*8  tmp1,   tmp2,   tmp3,   tmp4
519*59599516SKenneth E. Jansen        real*8  tmp5,   tmp6,   tmp7,   tmp8
520*59599516SKenneth E. Jansen        integer i,      j,      m1
521*59599516SKenneth E. Jansenc
522*59599516SKenneth E. Jansenc.... Determine the left overs
523*59599516SKenneth E. Jansenc
524*59599516SKenneth E. Jansen        m1 = mod(m,8) + 1
525*59599516SKenneth E. Jansenc
526*59599516SKenneth E. Jansenc.... Do the small pieces
527*59599516SKenneth E. Jansenc
528*59599516SKenneth E. Jansen        goto ( 8000, 1000, 2000, 3000, 4000, 5000, 6000, 7000 ) m1
529*59599516SKenneth E. Jansenc
530*59599516SKenneth E. Jansen1000    continue
531*59599516SKenneth E. Jansen        tmp1 = c(1)
532*59599516SKenneth E. Jansen        do i = 1, n
533*59599516SKenneth E. Jansen            y(i) = y(i)
534*59599516SKenneth E. Jansen     1           + tmp1 * x(i,1)
535*59599516SKenneth E. Jansen        enddo
536*59599516SKenneth E. Jansen        goto 8000
537*59599516SKenneth E. Jansenc
538*59599516SKenneth E. Jansen2000    continue
539*59599516SKenneth E. Jansen        tmp1 = c(1)
540*59599516SKenneth E. Jansen        tmp2 = c(2)
541*59599516SKenneth E. Jansen        do i = 1, n
542*59599516SKenneth E. Jansen            y(i) = y(i)
543*59599516SKenneth E. Jansen     1           + tmp1 * x(i,1) + tmp2 * x(i,2)
544*59599516SKenneth E. Jansen        enddo
545*59599516SKenneth E. Jansen        goto 8000
546*59599516SKenneth E. Jansenc
547*59599516SKenneth E. Jansen3000    continue
548*59599516SKenneth E. Jansen        tmp1 = c(1)
549*59599516SKenneth E. Jansen        tmp2 = c(2)
550*59599516SKenneth E. Jansen        tmp3 = c(3)
551*59599516SKenneth E. Jansen
552*59599516SKenneth E. Jansen        do i = 1, n
553*59599516SKenneth E. Jansen            y(i) = y(i)
554*59599516SKenneth E. Jansen     1           + tmp1 * x(i,1) + tmp2 * x(i,2)
555*59599516SKenneth E. Jansen     2           + tmp3 * x(i,3)
556*59599516SKenneth E. Jansen        enddo
557*59599516SKenneth E. Jansen        goto 8000
558*59599516SKenneth E. Jansenc
559*59599516SKenneth E. Jansen4000    continue
560*59599516SKenneth E. Jansen        tmp1 = c(1)
561*59599516SKenneth E. Jansen        tmp2 = c(2)
562*59599516SKenneth E. Jansen        tmp3 = c(3)
563*59599516SKenneth E. Jansen        tmp4 = c(4)
564*59599516SKenneth E. Jansen        do i = 1, n
565*59599516SKenneth E. Jansen            y(i) = y(i)
566*59599516SKenneth E. Jansen     1           + tmp1 * x(i,1) + tmp2 * x(i,2)
567*59599516SKenneth E. Jansen     2           + tmp3 * x(i,3) + tmp4 * x(i,4)
568*59599516SKenneth E. Jansen        enddo
569*59599516SKenneth E. Jansen        goto 8000
570*59599516SKenneth E. Jansenc
571*59599516SKenneth E. Jansen5000    continue
572*59599516SKenneth E. Jansen        tmp1 = c(1)
573*59599516SKenneth E. Jansen        tmp2 = c(2)
574*59599516SKenneth E. Jansen        tmp3 = c(3)
575*59599516SKenneth E. Jansen        tmp4 = c(4)
576*59599516SKenneth E. Jansen        tmp5 = c(5)
577*59599516SKenneth E. Jansen        do i = 1, n
578*59599516SKenneth E. Jansen            y(i) = y(i)
579*59599516SKenneth E. Jansen     1           + tmp1 * x(i,1) + tmp2 * x(i,2)
580*59599516SKenneth E. Jansen     2           + tmp3 * x(i,3) + tmp4 * x(i,4)
581*59599516SKenneth E. Jansen     3           + tmp5 * x(i,5)
582*59599516SKenneth E. Jansen        enddo
583*59599516SKenneth E. Jansen        goto 8000
584*59599516SKenneth E. Jansenc
585*59599516SKenneth E. Jansen6000    continue
586*59599516SKenneth E. Jansen        tmp1 = c(1)
587*59599516SKenneth E. Jansen        tmp2 = c(2)
588*59599516SKenneth E. Jansen        tmp3 = c(3)
589*59599516SKenneth E. Jansen        tmp4 = c(4)
590*59599516SKenneth E. Jansen        tmp5 = c(5)
591*59599516SKenneth E. Jansen        tmp6 = c(6)
592*59599516SKenneth E. Jansen        do i = 1, n
593*59599516SKenneth E. Jansen            y(i) = y(i)
594*59599516SKenneth E. Jansen     1           + tmp1 * x(i,1) + tmp2 * x(i,2)
595*59599516SKenneth E. Jansen     2           + tmp3 * x(i,3) + tmp4 * x(i,4)
596*59599516SKenneth E. Jansen     3           + tmp5 * x(i,5) + tmp6 * x(i,6)
597*59599516SKenneth E. Jansen        enddo
598*59599516SKenneth E. Jansen        goto 8000
599*59599516SKenneth E. Jansenc
600*59599516SKenneth E. Jansen7000    continue
601*59599516SKenneth E. Jansen        tmp1 = c(1)
602*59599516SKenneth E. Jansen        tmp2 = c(2)
603*59599516SKenneth E. Jansen        tmp3 = c(3)
604*59599516SKenneth E. Jansen        tmp4 = c(4)
605*59599516SKenneth E. Jansen        tmp5 = c(5)
606*59599516SKenneth E. Jansen        tmp6 = c(6)
607*59599516SKenneth E. Jansen        tmp7 = c(7)
608*59599516SKenneth E. Jansen        do i = 1, n
609*59599516SKenneth E. Jansen            y(i) = y(i)
610*59599516SKenneth E. Jansen     1           + tmp1 * x(i,1) + tmp2 * x(i,2)
611*59599516SKenneth E. Jansen     2           + tmp3 * x(i,3) + tmp4 * x(i,4)
612*59599516SKenneth E. Jansen     3           + tmp5 * x(i,5) + tmp6 * x(i,6)
613*59599516SKenneth E. Jansen     4           + tmp7 * x(i,7)
614*59599516SKenneth E. Jansen        enddo
615*59599516SKenneth E. Jansen        goto 8000
616*59599516SKenneth E. Jansenc
617*59599516SKenneth E. Jansenc.... Do the remaining part
618*59599516SKenneth E. Jansenc
619*59599516SKenneth E. Jansen8000    continue
620*59599516SKenneth E. Jansenc
621*59599516SKenneth E. Jansen        do j = m1, m, 8
622*59599516SKenneth E. Jansen            tmp1 = c(j+0)
623*59599516SKenneth E. Jansen            tmp2 = c(j+1)
624*59599516SKenneth E. Jansen            tmp3 = c(j+2)
625*59599516SKenneth E. Jansen            tmp4 = c(j+3)
626*59599516SKenneth E. Jansen            tmp5 = c(j+4)
627*59599516SKenneth E. Jansen            tmp6 = c(j+5)
628*59599516SKenneth E. Jansen            tmp7 = c(j+6)
629*59599516SKenneth E. Jansen            tmp8 = c(j+7)
630*59599516SKenneth E. Jansen            do i = 1, n
631*59599516SKenneth E. Jansen                y(i) = y(i)
632*59599516SKenneth E. Jansen     1               + tmp1 * x(i,j+0) + tmp2 * x(i,j+1)
633*59599516SKenneth E. Jansen     2               + tmp3 * x(i,j+2) + tmp4 * x(i,j+3)
634*59599516SKenneth E. Jansen     3               + tmp5 * x(i,j+4) + tmp6 * x(i,j+5)
635*59599516SKenneth E. Jansen     4               + tmp7 * x(i,j+6) + tmp8 * x(i,j+7)
636*59599516SKenneth E. Jansen            enddo
637*59599516SKenneth E. Jansen        enddo
638*59599516SKenneth E. Jansenc
639*59599516SKenneth E. Jansen        return
640*59599516SKenneth E. Jansen        end
641*59599516SKenneth E. Jansenc
642*59599516SKenneth E. Jansenc--------------------------
643*59599516SKenneth E. Jansenc fMtxBlkDyeax
644*59599516SKenneth E. Jansenc Farzin's implementation
645*59599516SKenneth E. Jansenc row and column exchanged
646*59599516SKenneth E. Jansenc--------------------------
647*59599516SKenneth E. Jansenc
648*59599516SKenneth E. Jansen        subroutine fMtxBlkDyeax( x, y, c, m, n )
649*59599516SKenneth E. Jansenc
650*59599516SKenneth E. Jansenc.... Data declaration
651*59599516SKenneth E. Jansenc
652*59599516SKenneth E. Jansen        implicit none
653*59599516SKenneth E. Jansen        integer m,      n
654*59599516SKenneth E. Jansen        real*8  x(n,m), y(n),   c(m)
655*59599516SKenneth E. Jansenc
656*59599516SKenneth E. Jansen        real*8  tmp1,   tmp2,   tmp3,   tmp4
657*59599516SKenneth E. Jansen        real*8  tmp5,   tmp6,   tmp7,   tmp8
658*59599516SKenneth E. Jansen        integer i,      j,      m1
659*59599516SKenneth E. Jansenc
660*59599516SKenneth E. Jansenc.... Determine the left overs
661*59599516SKenneth E. Jansenc
662*59599516SKenneth E. Jansen        m1 = mod(m,8) + 1
663*59599516SKenneth E. Jansenc
664*59599516SKenneth E. Jansenc.... Do the small pieces
665*59599516SKenneth E. Jansenc
666*59599516SKenneth E. Jansen        goto ( 8000, 1000, 2000, 3000, 4000, 5000, 6000, 7000 ) m1
667*59599516SKenneth E. Jansenc
668*59599516SKenneth E. Jansen1000    continue
669*59599516SKenneth E. Jansen        tmp1 = c(1)
670*59599516SKenneth E. Jansen        do i = 1, n
671*59599516SKenneth E. Jansen            y(i) =
672*59599516SKenneth E. Jansen     1           + tmp1 * x(i,1)
673*59599516SKenneth E. Jansen        enddo
674*59599516SKenneth E. Jansen        goto 8001
675*59599516SKenneth E. Jansenc
676*59599516SKenneth E. Jansen2000    continue
677*59599516SKenneth E. Jansen        tmp1 = c(1)
678*59599516SKenneth E. Jansen        tmp2 = c(2)
679*59599516SKenneth E. Jansen        do i = 1, n
680*59599516SKenneth E. Jansen            y(i) =
681*59599516SKenneth E. Jansen     1           + tmp1 * x(i,1) + tmp2 * x(i,2)
682*59599516SKenneth E. Jansen        enddo
683*59599516SKenneth E. Jansen        goto 8001
684*59599516SKenneth E. Jansenc
685*59599516SKenneth E. Jansen3000    continue
686*59599516SKenneth E. Jansen        tmp1 = c(1)
687*59599516SKenneth E. Jansen        tmp2 = c(2)
688*59599516SKenneth E. Jansen        tmp3 = c(3)
689*59599516SKenneth E. Jansen        do i = 1, n
690*59599516SKenneth E. Jansen            y(i) =
691*59599516SKenneth E. Jansen     1           + tmp1 * x(i,1) + tmp2 * x(i,2)
692*59599516SKenneth E. Jansen     2           + tmp3 * x(i,3)
693*59599516SKenneth E. Jansen        enddo
694*59599516SKenneth E. Jansen        goto 8001
695*59599516SKenneth E. Jansenc
696*59599516SKenneth E. Jansen4000    continue
697*59599516SKenneth E. Jansen        tmp1 = c(1)
698*59599516SKenneth E. Jansen        tmp2 = c(2)
699*59599516SKenneth E. Jansen        tmp3 = c(3)
700*59599516SKenneth E. Jansen        tmp4 = c(4)
701*59599516SKenneth E. Jansen        do i = 1, n
702*59599516SKenneth E. Jansen            y(i) =
703*59599516SKenneth E. Jansen     1           + tmp1 * x(i,1) + tmp2 * x(i,2)
704*59599516SKenneth E. Jansen     2           + tmp3 * x(i,3) + tmp4 * x(i,4)
705*59599516SKenneth E. Jansen        enddo
706*59599516SKenneth E. Jansen        goto 8001
707*59599516SKenneth E. Jansenc
708*59599516SKenneth E. Jansen5000    continue
709*59599516SKenneth E. Jansen        tmp1 = c(1)
710*59599516SKenneth E. Jansen        tmp2 = c(2)
711*59599516SKenneth E. Jansen        tmp3 = c(3)
712*59599516SKenneth E. Jansen        tmp4 = c(4)
713*59599516SKenneth E. Jansen        tmp5 = c(5)
714*59599516SKenneth E. Jansen        do i = 1, n
715*59599516SKenneth E. Jansen            y(i) =
716*59599516SKenneth E. Jansen     1           + tmp1 * x(i,1) + tmp2 * x(i,2)
717*59599516SKenneth E. Jansen     2           + tmp3 * x(i,3) + tmp4 * x(i,4)
718*59599516SKenneth E. Jansen     3           + tmp5 * x(i,5)
719*59599516SKenneth E. Jansen        enddo
720*59599516SKenneth E. Jansen        goto 8001
721*59599516SKenneth E. Jansenc
722*59599516SKenneth E. Jansen6000    continue
723*59599516SKenneth E. Jansen        tmp1 = c(1)
724*59599516SKenneth E. Jansen        tmp2 = c(2)
725*59599516SKenneth E. Jansen        tmp3 = c(3)
726*59599516SKenneth E. Jansen        tmp4 = c(4)
727*59599516SKenneth E. Jansen        tmp5 = c(5)
728*59599516SKenneth E. Jansen        tmp6 = c(6)
729*59599516SKenneth E. Jansen        do i = 1, n
730*59599516SKenneth E. Jansen            y(i) =
731*59599516SKenneth E. Jansen     1           + tmp1 * x(i,1) + tmp2 * x(i,2)
732*59599516SKenneth E. Jansen     2           + tmp3 * x(i,3) + tmp4 * x(i,4)
733*59599516SKenneth E. Jansen     3           + tmp5 * x(i,5) + tmp6 * x(i,6)
734*59599516SKenneth E. Jansen       enddo
735*59599516SKenneth E. Jansen        goto 8001
736*59599516SKenneth E. Jansenc
737*59599516SKenneth E. Jansen7000    continue
738*59599516SKenneth E. Jansen        tmp1 = c(1)
739*59599516SKenneth E. Jansen        tmp2 = c(2)
740*59599516SKenneth E. Jansen        tmp3 = c(3)
741*59599516SKenneth E. Jansen        tmp4 = c(4)
742*59599516SKenneth E. Jansen        tmp5 = c(5)
743*59599516SKenneth E. Jansen        tmp6 = c(6)
744*59599516SKenneth E. Jansen        tmp7 = c(7)
745*59599516SKenneth E. Jansen        do i = 1, n
746*59599516SKenneth E. Jansen            y(i) =
747*59599516SKenneth E. Jansen     1           + tmp1 * x(i,1) + tmp2 * x(i,2)
748*59599516SKenneth E. Jansen     2           + tmp3 * x(i,3) + tmp4 * x(i,4)
749*59599516SKenneth E. Jansen     3           + tmp5 * x(i,5) + tmp6 * x(i,6)
750*59599516SKenneth E. Jansen     4           + tmp7 * x(i,7)
751*59599516SKenneth E. Jansen        enddo
752*59599516SKenneth E. Jansen        goto 8001
753*59599516SKenneth E. Jansenc
754*59599516SKenneth E. Jansen8000    continue
755*59599516SKenneth E. Jansen        do i = 1, n
756*59599516SKenneth E. Jansen            y(i) = 0
757*59599516SKenneth E. Jansen        enddo
758*59599516SKenneth E. Jansen        goto 8001
759*59599516SKenneth E. Jansenc
760*59599516SKenneth E. Jansenc.... Do the remaining part
761*59599516SKenneth E. Jansenc
762*59599516SKenneth E. Jansen8001    continue
763*59599516SKenneth E. Jansenc
764*59599516SKenneth E. Jansen        do j = m1, m, 8
765*59599516SKenneth E. Jansen            tmp1 = c(j+0)
766*59599516SKenneth E. Jansen            tmp2 = c(j+1)
767*59599516SKenneth E. Jansen            tmp3 = c(j+2)
768*59599516SKenneth E. Jansen            tmp4 = c(j+3)
769*59599516SKenneth E. Jansen            tmp5 = c(j+4)
770*59599516SKenneth E. Jansen            tmp6 = c(j+5)
771*59599516SKenneth E. Jansen            tmp7 = c(j+6)
772*59599516SKenneth E. Jansen            tmp8 = c(j+7)
773*59599516SKenneth E. Jansen            do i = 1, n
774*59599516SKenneth E. Jansen                y(i) = y(i)
775*59599516SKenneth E. Jansen     1               + tmp1 * x(i,j+0) + tmp2 * x(i,j+1)
776*59599516SKenneth E. Jansen     2               + tmp3 * x(i,j+2) + tmp4 * x(i,j+3)
777*59599516SKenneth E. Jansen     3               + tmp5 * x(i,j+4) + tmp6 * x(i,j+5)
778*59599516SKenneth E. Jansen     4               + tmp7 * x(i,j+6) + tmp8 * x(i,j+7)
779*59599516SKenneth E. Jansen            enddo
780*59599516SKenneth E. Jansen        enddo
781*59599516SKenneth E. Jansenc
782*59599516SKenneth E. Jansen        return
783*59599516SKenneth E. Jansen        end
784*59599516SKenneth E. Jansenc
785*59599516SKenneth E. Jansenc--------------------------
786*59599516SKenneth E. Jansenc fMtxBlkDmaxpy
787*59599516SKenneth E. Jansenc Farzin's implementation
788*59599516SKenneth E. Jansenc row and column exchanged
789*59599516SKenneth E. Jansenc--------------------------
790*59599516SKenneth E. Jansenc
791*59599516SKenneth E. Jansen       subroutine fMtxBlkDmaxpy( x, y, c, m, n )
792*59599516SKenneth E. Jansenc
793*59599516SKenneth E. Jansenc.... Data declaration
794*59599516SKenneth E. Jansenc
795*59599516SKenneth E. Jansen        implicit none
796*59599516SKenneth E. Jansen        integer m,      n
797*59599516SKenneth E. Jansen        real*8  x(n,m), y(n),   c(m)
798*59599516SKenneth E. Jansenc
799*59599516SKenneth E. Jansen        real*8  tmp1,   tmp2,   tmp3,   tmp4
800*59599516SKenneth E. Jansen        real*8  tmp5,   tmp6,   tmp7,   tmp8
801*59599516SKenneth E. Jansen        integer i,      j,      m1
802*59599516SKenneth E. Jansenc
803*59599516SKenneth E. Jansenc.... Determine the left overs
804*59599516SKenneth E. Jansenc
805*59599516SKenneth E. Jansen        m1 = mod(m,8) + 1
806*59599516SKenneth E. Jansenc
807*59599516SKenneth E. Jansenc.... Do the small pieces
808*59599516SKenneth E. Jansenc
809*59599516SKenneth E. Jansen        goto ( 8000, 1000, 2000, 3000, 4000, 5000, 6000, 7000 ) m1
810*59599516SKenneth E. Jansenc
811*59599516SKenneth E. Jansen1000    continue
812*59599516SKenneth E. Jansen        tmp1 = c(1)
813*59599516SKenneth E. Jansen        do i = 1, n
814*59599516SKenneth E. Jansen            y(i) = y(i)
815*59599516SKenneth E. Jansen     1           - tmp1 * x(i,1)
816*59599516SKenneth E. Jansen        enddo
817*59599516SKenneth E. Jansen        goto 8000
818*59599516SKenneth E. Jansenc
819*59599516SKenneth E. Jansen2000    continue
820*59599516SKenneth E. Jansen        tmp1 = c(1)
821*59599516SKenneth E. Jansen        tmp2 = c(2)
822*59599516SKenneth E. Jansen        do i = 1, n
823*59599516SKenneth E. Jansen            y(i) = y(i)
824*59599516SKenneth E. Jansen     1           - tmp1 * x(i,1) - tmp2 * x(i,2)
825*59599516SKenneth E. Jansen        enddo
826*59599516SKenneth E. Jansen        goto 8000
827*59599516SKenneth E. Jansenc
828*59599516SKenneth E. Jansen3000    continue
829*59599516SKenneth E. Jansen        tmp1 = c(1)
830*59599516SKenneth E. Jansen        tmp2 = c(2)
831*59599516SKenneth E. Jansen        tmp3 = c(3)
832*59599516SKenneth E. Jansen        do i = 1, n
833*59599516SKenneth E. Jansen            y(i) = y(i)
834*59599516SKenneth E. Jansen     1           - tmp1 * x(i,1) - tmp2 * x(i,2)
835*59599516SKenneth E. Jansen     2           - tmp3 * x(i,3)
836*59599516SKenneth E. Jansen        enddo
837*59599516SKenneth E. Jansen        goto 8000
838*59599516SKenneth E. Jansenc
839*59599516SKenneth E. Jansen4000    continue
840*59599516SKenneth E. Jansen        tmp1 = c(1)
841*59599516SKenneth E. Jansen        tmp2 = c(2)
842*59599516SKenneth E. Jansen        tmp3 = c(3)
843*59599516SKenneth E. Jansen        tmp4 = c(4)
844*59599516SKenneth E. Jansen        do i = 1, n
845*59599516SKenneth E. Jansen            y(i) = y(i)
846*59599516SKenneth E. Jansen     1           - tmp1 * x(i,1) - tmp2 * x(i,2)
847*59599516SKenneth E. Jansen     2           - tmp3 * x(i,3) - tmp4 * x(i,4)
848*59599516SKenneth E. Jansen        enddo
849*59599516SKenneth E. Jansen        goto 8000
850*59599516SKenneth E. Jansenc
851*59599516SKenneth E. Jansen5000    continue
852*59599516SKenneth E. Jansen        tmp1 = c(1)
853*59599516SKenneth E. Jansen        tmp2 = c(2)
854*59599516SKenneth E. Jansen        tmp3 = c(3)
855*59599516SKenneth E. Jansen        tmp4 = c(4)
856*59599516SKenneth E. Jansen        tmp5 = c(5)
857*59599516SKenneth E. Jansen        do i = 1, n
858*59599516SKenneth E. Jansen            y(i) = y(i)
859*59599516SKenneth E. Jansen     1           - tmp1 * x(i,1) - tmp2 * x(i,2)
860*59599516SKenneth E. Jansen     2           - tmp3 * x(i,3) - tmp4 * x(i,4)
861*59599516SKenneth E. Jansen     3           - tmp5 * x(i,5)
862*59599516SKenneth E. Jansen        enddo
863*59599516SKenneth E. Jansen        goto 8000
864*59599516SKenneth E. Jansenc
865*59599516SKenneth E. Jansen6000    continue
866*59599516SKenneth E. Jansen        tmp1 = c(1)
867*59599516SKenneth E. Jansen        tmp2 = c(2)
868*59599516SKenneth E. Jansen        tmp3 = c(3)
869*59599516SKenneth E. Jansen        tmp4 = c(4)
870*59599516SKenneth E. Jansen        tmp5 = c(5)
871*59599516SKenneth E. Jansen        tmp6 = c(6)
872*59599516SKenneth E. Jansen        do i = 1, n
873*59599516SKenneth E. Jansen            y(i) = y(i)
874*59599516SKenneth E. Jansen     1           - tmp1 * x(i,1) - tmp2 * x(i,2)
875*59599516SKenneth E. Jansen     2           - tmp3 * x(i,3) - tmp4 * x(i,4)
876*59599516SKenneth E. Jansen     3           - tmp5 * x(i,5) - tmp6 * x(i,6)
877*59599516SKenneth E. Jansen        enddo
878*59599516SKenneth E. Jansen        goto 8000
879*59599516SKenneth E. Jansen
880*59599516SKenneth E. Jansen7000    continue
881*59599516SKenneth E. Jansen        tmp1 = c(1)
882*59599516SKenneth E. Jansen        tmp2 = c(2)
883*59599516SKenneth E. Jansen        tmp3 = c(3)
884*59599516SKenneth E. Jansen        tmp4 = c(4)
885*59599516SKenneth E. Jansen        tmp5 = c(5)
886*59599516SKenneth E. Jansen        tmp6 = c(6)
887*59599516SKenneth E. Jansen        tmp7 = c(7)
888*59599516SKenneth E. Jansen        do i = 1, n
889*59599516SKenneth E. Jansen            y(i) = y(i)
890*59599516SKenneth E. Jansen     1           - tmp1 * x(i,1) - tmp2 * x(i,2)
891*59599516SKenneth E. Jansen     2           - tmp3 * x(i,3) - tmp4 * x(i,4)
892*59599516SKenneth E. Jansen     3           - tmp5 * x(i,5) - tmp6 * x(i,6)
893*59599516SKenneth E. Jansen     4           - tmp7 * x(i,7)
894*59599516SKenneth E. Jansen        enddo
895*59599516SKenneth E. Jansen        goto 8000
896*59599516SKenneth E. Jansenc
897*59599516SKenneth E. Jansenc.... Do the remaining part
898*59599516SKenneth E. Jansenc
899*59599516SKenneth E. Jansen8000    continue
900*59599516SKenneth E. Jansenc
901*59599516SKenneth E. Jansen        do j = m1, m, 8
902*59599516SKenneth E. Jansen            tmp1 = c(j+0)
903*59599516SKenneth E. Jansen            tmp2 = c(j+1)
904*59599516SKenneth E. Jansen            tmp3 = c(j+2)
905*59599516SKenneth E. Jansen            tmp4 = c(j+3)
906*59599516SKenneth E. Jansen            tmp5 = c(j+4)
907*59599516SKenneth E. Jansen            tmp6 = c(j+5)
908*59599516SKenneth E. Jansen            tmp7 = c(j+6)
909*59599516SKenneth E. Jansen            tmp8 = c(j+7)
910*59599516SKenneth E. Jansen            do i = 1, n
911*59599516SKenneth E. Jansen                y(i) = y(i)
912*59599516SKenneth E. Jansen     1               - tmp1 * x(i,j+0) - tmp2 * x(i,j+1)
913*59599516SKenneth E. Jansen     2               - tmp3 * x(i,j+2) - tmp4 * x(i,j+3)
914*59599516SKenneth E. Jansen     3               - tmp5 * x(i,j+4) - tmp6 * x(i,j+5)
915*59599516SKenneth E. Jansen     4               - tmp7 * x(i,j+6) - tmp8 * x(i,j+7)
916*59599516SKenneth E. Jansen            enddo
917*59599516SKenneth E. Jansen        enddo
918*59599516SKenneth E. Jansenc
919*59599516SKenneth E. Jansen        return
920*59599516SKenneth E. Jansen        end
921*59599516SKenneth E. Jansenc
922*59599516SKenneth E. Jansenc--------------------------
923*59599516SKenneth E. Jansenc fMtxVdimVecCp
924*59599516SKenneth E. Jansenc Farzin's implementation
925*59599516SKenneth E. Jansenc row and column exchanged
926*59599516SKenneth E. Jansenc--------------------------
927*59599516SKenneth E. Jansenc
928*59599516SKenneth E. Jansen        subroutine fMtxVdimVecCp( a, b, na, nb, m, n )
929*59599516SKenneth E. Jansenc
930*59599516SKenneth E. Jansenc.... Data declaration
931*59599516SKenneth E. Jansenc
932*59599516SKenneth E. Jansen        implicit none
933*59599516SKenneth E. Jansen        integer na,     nb,     m,      n
934*59599516SKenneth E. Jansen        real*8  a(n,na),        b(n,nb)
935*59599516SKenneth E. Jansenc
936*59599516SKenneth E. Jansen        integer i,      j
937*59599516SKenneth E. Jansenc
938*59599516SKenneth E. Jansenc.... Do the work
939*59599516SKenneth E. Jansenc
940*59599516SKenneth E. Jansen        if ( m .eq. 1 ) then
941*59599516SKenneth E. Jansen
942*59599516SKenneth E. Jansen            do i = 1, n
943*59599516SKenneth E. Jansen                b(i,1) = a(i,1)
944*59599516SKenneth E. Jansen            enddo
945*59599516SKenneth E. Jansen
946*59599516SKenneth E. Jansen        else if ( m .eq. 2 ) then
947*59599516SKenneth E. Jansen
948*59599516SKenneth E. Jansen            do i = 1, n
949*59599516SKenneth E. Jansen                b(i,1) = a(i,1)
950*59599516SKenneth E. Jansen                b(i,2) = a(i,2)
951*59599516SKenneth E. Jansen            enddo
952*59599516SKenneth E. Jansen
953*59599516SKenneth E. Jansen        else if ( m .eq. 3 ) then
954*59599516SKenneth E. Jansen
955*59599516SKenneth E. Jansen            do i = 1, n
956*59599516SKenneth E. Jansen                b(i,1) = a(i,1)
957*59599516SKenneth E. Jansen                b(i,2) = a(i,2)
958*59599516SKenneth E. Jansen                b(i,3) = a(i,3)
959*59599516SKenneth E. Jansen            enddo
960*59599516SKenneth E. Jansen
961*59599516SKenneth E. Jansen        else if ( m .eq. 4 ) then
962*59599516SKenneth E. Jansen
963*59599516SKenneth E. Jansen            do i = 1, n
964*59599516SKenneth E. Jansen                b(i,1) = a(i,1)
965*59599516SKenneth E. Jansen                b(i,2) = a(i,2)
966*59599516SKenneth E. Jansen                b(i,3) = a(i,3)
967*59599516SKenneth E. Jansen                b(i,4) = a(i,4)
968*59599516SKenneth E. Jansen            enddo
969*59599516SKenneth E. Jansen
970*59599516SKenneth E. Jansen        else
971*59599516SKenneth E. Jansen
972*59599516SKenneth E. Jansen            do i = 1, n
973*59599516SKenneth E. Jansen                do j = 1, m
974*59599516SKenneth E. Jansen                    b(i,j) = a(i,j)
975*59599516SKenneth E. Jansen                enddo
976*59599516SKenneth E. Jansen            enddo
977*59599516SKenneth E. Jansen
978*59599516SKenneth E. Jansen        endif
979*59599516SKenneth E. Jansenc
980*59599516SKenneth E. Jansen        return
981*59599516SKenneth E. Jansen        end
982*59599516SKenneth E. Jansenc
983*59599516SKenneth E. Jansenc--------------------------
984*59599516SKenneth E. Jansenc fMtxVdimVecDot2
985*59599516SKenneth E. Jansenc Farzin's implementation
986*59599516SKenneth E. Jansenc row and column exchanged
987*59599516SKenneth E. Jansenc--------------------------
988*59599516SKenneth E. Jansenc
989*59599516SKenneth E. Jansen        subroutine fMtxVdimVecDot2( a, b, c, na, nb, m, n )
990*59599516SKenneth E. Jansenc
991*59599516SKenneth E. Jansenc.... Data declaration
992*59599516SKenneth E. Jansenc
993*59599516SKenneth E. Jansen        implicit none
994*59599516SKenneth E. Jansen        integer na,     nb,     m,      n
995*59599516SKenneth E. Jansen        real*8  a(n,na),        b(n,nb),        c(m)
996*59599516SKenneth E. Jansenc
997*59599516SKenneth E. Jansen        integer i,      j
998*59599516SKenneth E. Jansenc
999*59599516SKenneth E. Jansenc.... Do the work
1000*59599516SKenneth E. Jansenc
1001*59599516SKenneth E. Jansen        if ( m .eq. 1 ) then
1002*59599516SKenneth E. Jansen
1003*59599516SKenneth E. Jansen            c(1) = 0
1004*59599516SKenneth E. Jansen            do i = 1, n
1005*59599516SKenneth E. Jansen                c(1) = c(1) + a(i,1) * b(i,1)
1006*59599516SKenneth E. Jansen            enddo
1007*59599516SKenneth E. Jansen
1008*59599516SKenneth E. Jansen        else if ( m .eq. 2 ) then
1009*59599516SKenneth E. Jansen
1010*59599516SKenneth E. Jansen            c(1) = 0
1011*59599516SKenneth E. Jansen            c(2) = 0
1012*59599516SKenneth E. Jansen            do i = 1, n
1013*59599516SKenneth E. Jansen                c(1) = c(1) + a(i,1) * b(i,1)
1014*59599516SKenneth E. Jansen                c(2) = c(2) + a(i,2) * b(i,2)
1015*59599516SKenneth E. Jansen            enddo
1016*59599516SKenneth E. Jansen
1017*59599516SKenneth E. Jansen        else if ( m .eq. 3 ) then
1018*59599516SKenneth E. Jansen
1019*59599516SKenneth E. Jansen            c(1) = 0
1020*59599516SKenneth E. Jansen            c(2) = 0
1021*59599516SKenneth E. Jansen            c(3) = 0
1022*59599516SKenneth E. Jansen            do i = 1, n
1023*59599516SKenneth E. Jansen                c(1) = c(1) + a(i,1) * b(i,1)
1024*59599516SKenneth E. Jansen                c(2) = c(2) + a(i,2) * b(i,2)
1025*59599516SKenneth E. Jansen                c(3) = c(3) + a(i,3) * b(i,3)
1026*59599516SKenneth E. Jansen            enddo
1027*59599516SKenneth E. Jansen
1028*59599516SKenneth E. Jansen        else if ( m .eq. 4 ) then
1029*59599516SKenneth E. Jansen
1030*59599516SKenneth E. Jansen            c(1) = 0
1031*59599516SKenneth E. Jansen            c(2) = 0
1032*59599516SKenneth E. Jansen            c(3) = 0
1033*59599516SKenneth E. Jansen            c(4) = 0
1034*59599516SKenneth E. Jansen            do i = 1, n
1035*59599516SKenneth E. Jansen                c(1) = c(1) + a(i,1) * b(i,1)
1036*59599516SKenneth E. Jansen                c(2) = c(2) + a(i,2) * b(i,2)
1037*59599516SKenneth E. Jansen                c(3) = c(3) + a(i,3) * b(i,3)
1038*59599516SKenneth E. Jansen                c(4) = c(4) + a(i,4) * b(i,4)
1039*59599516SKenneth E. Jansen            enddo
1040*59599516SKenneth E. Jansen
1041*59599516SKenneth E. Jansen        else
1042*59599516SKenneth E. Jansen
1043*59599516SKenneth E. Jansen            do j = 1, m
1044*59599516SKenneth E. Jansen                c(j) = 0
1045*59599516SKenneth E. Jansen                do i = 1, n
1046*59599516SKenneth E. Jansen                    c(j) = c(j) + a(i,j) * b(i,j)
1047*59599516SKenneth E. Jansen                enddo
1048*59599516SKenneth E. Jansen            enddo
1049*59599516SKenneth E. Jansen
1050*59599516SKenneth E. Jansen        endif
1051*59599516SKenneth E. Jansenc
1052*59599516SKenneth E. Jansen        return
1053*59599516SKenneth E. Jansen        end
1054*59599516SKenneth E. Jansenc
1055*59599516SKenneth E. Jansenc--------------------------
1056*59599516SKenneth E. Jansenc fMtxVdimVecDaxpy
1057*59599516SKenneth E. Jansenc Farzin's implementation
1058*59599516SKenneth E. Jansenc row and column exchanged
1059*59599516SKenneth E. Jansenc--------------------------
1060*59599516SKenneth E. Jansenc
1061*59599516SKenneth E. Jansen        subroutine fMtxVdimVecDaxpy( a, b, c, na, nb, m, n )
1062*59599516SKenneth E. Jansenc
1063*59599516SKenneth E. Jansenc.... Data declaration
1064*59599516SKenneth E. Jansenc
1065*59599516SKenneth E. Jansen        implicit none
1066*59599516SKenneth E. Jansen        integer na,     nb,     m,      n
1067*59599516SKenneth E. Jansen        real*8  a(n,na),        b(n,nb),        c(m)
1068*59599516SKenneth E. Jansenc
1069*59599516SKenneth E. Jansen        integer i,      j
1070*59599516SKenneth E. Jansenc
1071*59599516SKenneth E. Jansenc.... Do the work
1072*59599516SKenneth E. Jansenc
1073*59599516SKenneth E. Jansen        if ( m .eq. 1 ) then
1074*59599516SKenneth E. Jansen
1075*59599516SKenneth E. Jansen            do i = 1, n
1076*59599516SKenneth E. Jansen                b(i,1) = b(i,1) + c(1) * a(i,1)
1077*59599516SKenneth E. Jansen            enddo
1078*59599516SKenneth E. Jansen
1079*59599516SKenneth E. Jansen        else if ( m .eq. 2 ) then
1080*59599516SKenneth E. Jansen
1081*59599516SKenneth E. Jansen            do i = 1, n
1082*59599516SKenneth E. Jansen                b(i,1) = b(i,1) + c(1) * a(i,1)
1083*59599516SKenneth E. Jansen                b(i,2) = b(i,2) + c(2) * a(i,2)
1084*59599516SKenneth E. Jansen            enddo
1085*59599516SKenneth E. Jansen
1086*59599516SKenneth E. Jansen        else if ( m .eq. 3 ) then
1087*59599516SKenneth E. Jansen
1088*59599516SKenneth E. Jansen            do i = 1, n
1089*59599516SKenneth E. Jansen                b(i,1) = b(i,1) + c(1) * a(i,1)
1090*59599516SKenneth E. Jansen                b(i,2) = b(i,2) + c(2) * a(i,2)
1091*59599516SKenneth E. Jansen                b(i,3) = b(i,3) + c(3) * a(i,3)
1092*59599516SKenneth E. Jansen            enddo
1093*59599516SKenneth E. Jansen
1094*59599516SKenneth E. Jansen        else if ( m .eq. 4 ) then
1095*59599516SKenneth E. Jansen
1096*59599516SKenneth E. Jansen            do i = 1, n
1097*59599516SKenneth E. Jansen                b(i,1) = b(i,1) + c(1) * a(i,1)
1098*59599516SKenneth E. Jansen                b(i,2) = b(i,2) + c(2) * a(i,2)
1099*59599516SKenneth E. Jansen                b(i,3) = b(i,3) + c(3) * a(i,3)
1100*59599516SKenneth E. Jansen                b(i,4) = b(i,4) + c(4) * a(i,4)
1101*59599516SKenneth E. Jansen            enddo
1102*59599516SKenneth E. Jansen
1103*59599516SKenneth E. Jansen        else
1104*59599516SKenneth E. Jansen
1105*59599516SKenneth E. Jansen            do j = 1, m
1106*59599516SKenneth E. Jansen                do i = 1, n
1107*59599516SKenneth E. Jansen                    b(i,j) = b(i,j) + c(j) * a(i,j)
1108*59599516SKenneth E. Jansen                enddo
1109*59599516SKenneth E. Jansen            enddo
1110*59599516SKenneth E. Jansen
1111*59599516SKenneth E. Jansen        endif
1112*59599516SKenneth E. Jansenc
1113*59599516SKenneth E. Jansen        return
1114*59599516SKenneth E. Jansen        end
1115*59599516SKenneth E. Jansenc
1116*59599516SKenneth E. Jansenc---------
1117*59599516SKenneth E. Jansenc flesApG
1118*59599516SKenneth E. Jansenc---------
1119*59599516SKenneth E. Jansenc
1120*59599516SKenneth E. Jansen	subroutine flesApG ( ien, xGoC, lesP, lesQ, nPs, nQs )
1121*59599516SKenneth E. Jansenc
1122*59599516SKenneth E. Jansen        include "common.h"
1123*59599516SKenneth E. Jansenc
1124*59599516SKenneth E. Jansen        dimension xGoC(npro,4*nshl,nshl)
1125*59599516SKenneth E. Jansen        real*8 lesP(nshg,nPs), lesQ(nshg,nQs)
1126*59599516SKenneth E. Jansen        dimension ien(npro,nshl)
1127*59599516SKenneth E. Jansen        dimension Ptemp(npro,nshl,nPs), Qtemp(npro,nshl,nQs)
1128*59599516SKenneth E. Jansenc
1129*59599516SKenneth E. Jansenc.... zero Qtemp
1130*59599516SKenneth E. Jansenc
1131*59599516SKenneth E. Jansen	Qtemp = zero
1132*59599516SKenneth E. Jansenc
1133*59599516SKenneth E. Jansenc.... localize the lesP for the EBE product
1134*59599516SKenneth E. Jansenc
1135*59599516SKenneth E. Jansen        call local ( lesP, Ptemp, ien, nPs, 'gather  ' )
1136*59599516SKenneth E. Jansenc
1137*59599516SKenneth E. Jansenc.... Now, product operation
1138*59599516SKenneth E. Jansenc
1139*59599516SKenneth E. Jansen    	do i = 1, nshl
1140*59599516SKenneth E. Jansen           i0 = (nsd) * (i - 1)
1141*59599516SKenneth E. Jansen           do j = 1, nshl
1142*59599516SKenneth E. Jansenc
1143*59599516SKenneth E. Jansen             Qtemp(:,i,1) = Qtemp(:,i,1)
1144*59599516SKenneth E. Jansen     &                    + xGoC(1:npro,i0+1,j) * Ptemp(:,j,nPs)
1145*59599516SKenneth E. Jansenc
1146*59599516SKenneth E. Jansen             Qtemp(:,i,2) = Qtemp(:,i,2)
1147*59599516SKenneth E. Jansen     &                    + xGoC(1:npro,i0+2,j) * Ptemp(:,j,nPs)
1148*59599516SKenneth E. Jansenc
1149*59599516SKenneth E. Jansen             Qtemp(:,i,3) = Qtemp(:,i,3)
1150*59599516SKenneth E. Jansen     &                    + xGoC(1:npro,i0+3,j) * Ptemp(:,j,nPs)
1151*59599516SKenneth E. Jansenc
1152*59599516SKenneth E. Jansen           enddo
1153*59599516SKenneth E. Jansen        enddo
1154*59599516SKenneth E. Jansenc
1155*59599516SKenneth E. Jansenc... assemble the result of the product
1156*59599516SKenneth E. Jansenc
1157*59599516SKenneth E. Jansen        call local ( lesQ, Qtemp, ien, nQs, 'scatter ' )
1158*59599516SKenneth E. Jansenc
1159*59599516SKenneth E. Jansen        return
1160*59599516SKenneth E. Jansen        end
1161*59599516SKenneth E. Jansenc
1162*59599516SKenneth E. Jansenc----------
1163*59599516SKenneth E. Jansenc flesApKG
1164*59599516SKenneth E. Jansenc----------
1165*59599516SKenneth E. Jansenc
1166*59599516SKenneth E. Jansen 	subroutine flesApKG ( ien, xKebe, xGoC, lesP, lesQ, nPs, nQs )
1167*59599516SKenneth E. Jansenc
1168*59599516SKenneth E. Jansen        include "common.h"
1169*59599516SKenneth E. Jansenc
1170*59599516SKenneth E. Jansen        dimension xKebe(npro,3*nshl,3*nshl),
1171*59599516SKenneth E. Jansen     &       xGoC(npro,4*nshl,nshl)
1172*59599516SKenneth E. Jansen        dimension ien(npro,nshl)
1173*59599516SKenneth E. Jansen        real*8 lesP(nshg,nPs), lesQ(nshg,nQs)
1174*59599516SKenneth E. Jansen        dimension Ptemp(npro,nshl,nPs), Qtemp(npro,nshl,nQs)
1175*59599516SKenneth E. Jansenc
1176*59599516SKenneth E. Jansenc.... zero Qtemp
1177*59599516SKenneth E. Jansenc
1178*59599516SKenneth E. Jansen	Qtemp = zero
1179*59599516SKenneth E. Jansenc
1180*59599516SKenneth E. Jansenc.... localize the lesP for the EBE product
1181*59599516SKenneth E. Jansenc
1182*59599516SKenneth E. Jansen        call local ( lesP, Ptemp, ien, nPs, 'gather  ' )
1183*59599516SKenneth E. Jansenc
1184*59599516SKenneth E. Jansenc.... Now, product operation
1185*59599516SKenneth E. Jansenc
1186*59599516SKenneth E. Jansenc.... K contribution
1187*59599516SKenneth E. Jansenc
1188*59599516SKenneth E. Jansen        do i = 1, nshl
1189*59599516SKenneth E. Jansen           i0 = (nsd) * (i - 1)
1190*59599516SKenneth E. Jansen          do j = 1, nshl
1191*59599516SKenneth E. Jansen             j0 = (nsd) * (j - 1)
1192*59599516SKenneth E. Jansenc
1193*59599516SKenneth E. Jansen            Qtemp(:,i,1) = Qtemp(:,i,1)
1194*59599516SKenneth E. Jansen     &                   + xKebe(1:npro,i0+1,j0+1) * Ptemp(:,j,1)
1195*59599516SKenneth E. Jansen     &                   + xKebe(1:npro,i0+1,j0+2) * Ptemp(:,j,2)
1196*59599516SKenneth E. Jansen     &                   + xKebe(1:npro,i0+1,j0+3) * Ptemp(:,j,3)
1197*59599516SKenneth E. Jansenc
1198*59599516SKenneth E. Jansen            Qtemp(:,i,2) = Qtemp(:,i,2)
1199*59599516SKenneth E. Jansen     &                   + xKebe(1:npro,i0+2,j0+1) * Ptemp(:,j,1)
1200*59599516SKenneth E. Jansen     &                   + xKebe(1:npro,i0+2,j0+2) * Ptemp(:,j,2)
1201*59599516SKenneth E. Jansen     &                   + xKebe(1:npro,i0+2,j0+3) * Ptemp(:,j,3)
1202*59599516SKenneth E. Jansen            Qtemp(:,i,3) = Qtemp(:,i,3)
1203*59599516SKenneth E. Jansen     &                   + xKebe(1:npro,i0+3,j0+1) * Ptemp(:,j,1)
1204*59599516SKenneth E. Jansen     &                   + xKebe(1:npro,i0+3,j0+2) * Ptemp(:,j,2)
1205*59599516SKenneth E. Jansen     &                   + xKebe(1:npro,i0+3,j0+3) * Ptemp(:,j,3)
1206*59599516SKenneth E. Jansenc
1207*59599516SKenneth E. Jansen          enddo
1208*59599516SKenneth E. Jansen     	enddo
1209*59599516SKenneth E. Jansenc
1210*59599516SKenneth E. Jansenc.... G contribution
1211*59599516SKenneth E. Jansenc
1212*59599516SKenneth E. Jansen        do i = 1, nshl
1213*59599516SKenneth E. Jansen           i0 = (nsd) * (i - 1)
1214*59599516SKenneth E. Jansen          do j = 1, nshl
1215*59599516SKenneth E. Jansenc
1216*59599516SKenneth E. Jansen            Qtemp(:,i,1) = Qtemp(:,i,1)
1217*59599516SKenneth E. Jansen     &                   + xGoC(1:npro,i0+1,j) * Ptemp(:,j,nPs)
1218*59599516SKenneth E. Jansen            Qtemp(:,i,2) = Qtemp(:,i,2)
1219*59599516SKenneth E. Jansen     &                   + xGoC(1:npro,i0+2,j) * Ptemp(:,j,nPs)
1220*59599516SKenneth E. Jansen            Qtemp(:,i,3) = Qtemp(1:,i,3)
1221*59599516SKenneth E. Jansen     &                   + xGoC(1:npro,i0+3,j) * Ptemp(:,j,nPs)
1222*59599516SKenneth E. Jansenc
1223*59599516SKenneth E. Jansen          enddo
1224*59599516SKenneth E. Jansen        enddo
1225*59599516SKenneth E. Jansenc
1226*59599516SKenneth E. Jansenc.... assemble the result of the product
1227*59599516SKenneth E. Jansenc
1228*59599516SKenneth E. Jansen        call local ( lesQ, Qtemp, ien, nQs, 'scatter ' )
1229*59599516SKenneth E. Jansenc
1230*59599516SKenneth E. Jansen        return
1231*59599516SKenneth E. Jansen        end
1232*59599516SKenneth E. Jansenc
1233*59599516SKenneth E. Jansenc-----------
1234*59599516SKenneth E. Jansenc flesApNGt
1235*59599516SKenneth E. Jansenc-----------
1236*59599516SKenneth E. Jansenc
1237*59599516SKenneth E. Jansen	subroutine flesApNGt ( ien, xGoC, lesP, lesQ, nPs, nQs )
1238*59599516SKenneth E. Jansenc
1239*59599516SKenneth E. Jansen        include "common.h"
1240*59599516SKenneth E. Jansenc
1241*59599516SKenneth E. Jansen        dimension ien(npro,nshl), xGoC(npro,4*nshl,nshl)
1242*59599516SKenneth E. Jansen        real*8 lesP(nshg,nPs), lesQ(nshg,nQs)
1243*59599516SKenneth E. Jansen        dimension Ptemp(npro,nshl,nPs), Qtemp(npro,nshl,nQs)
1244*59599516SKenneth E. Jansenc
1245*59599516SKenneth E. Jansenc.... zero Qtemp
1246*59599516SKenneth E. Jansenc
1247*59599516SKenneth E. Jansen	Qtemp = zero
1248*59599516SKenneth E. Jansenc
1249*59599516SKenneth E. Jansenc.... localize the lesP for the EBE product
1250*59599516SKenneth E. Jansenc
1251*59599516SKenneth E. Jansen        call local ( lesP, Ptemp, ien, nPs, 'gather  ' )
1252*59599516SKenneth E. Jansenc
1253*59599516SKenneth E. Jansenc.... Now, product operation
1254*59599516SKenneth E. Jansenc
1255*59599516SKenneth E. Jansenc.... Negative G^t contribution ( not explicitly formed )
1256*59599516SKenneth E. Jansenc
1257*59599516SKenneth E. Jansen        do i = 1, nshl
1258*59599516SKenneth E. Jansen           do j = 1, nshl
1259*59599516SKenneth E. Jansen              i0 = (nsd) * (j - 1)
1260*59599516SKenneth E. Jansenc
1261*59599516SKenneth E. Jansen             Qtemp(:,i,nQs) = Qtemp(:,i,nQs)
1262*59599516SKenneth E. Jansen     &                      - xGoC(1:npro,i0+1,i) * Ptemp(:,j,1)
1263*59599516SKenneth E. Jansen     &                      - xGoC(1:npro,i0+2,i) * Ptemp(:,j,2)
1264*59599516SKenneth E. Jansen     &                      - xGoC(1:npro,i0+3,i) * Ptemp(:,j,3)
1265*59599516SKenneth E. Jansenc
1266*59599516SKenneth E. Jansen           enddo
1267*59599516SKenneth E. Jansen        enddo
1268*59599516SKenneth E. Jansenc
1269*59599516SKenneth E. Jansenc... assemble the result of the product
1270*59599516SKenneth E. Jansenc
1271*59599516SKenneth E. Jansen        call local ( lesQ, Qtemp, ien, nQs, 'scatter  ' )
1272*59599516SKenneth E. Jansenc
1273*59599516SKenneth E. Jansen        return
1274*59599516SKenneth E. Jansen        end
1275*59599516SKenneth E. Jansenc
1276*59599516SKenneth E. Jansenc------------
1277*59599516SKenneth E. Jansenc flesApNGtC
1278*59599516SKenneth E. Jansenc------------
1279*59599516SKenneth E. Jansenc
1280*59599516SKenneth E. Jansen	subroutine flesApNGtC ( ien, xGoC, lesP, lesQ, nPs, nQs )
1281*59599516SKenneth E. Jansenc
1282*59599516SKenneth E. Jansen        include "common.h"
1283*59599516SKenneth E. Jansenc
1284*59599516SKenneth E. Jansen        dimension ien(npro,nshl), xGoC(npro,4*nshl,nshl)
1285*59599516SKenneth E. Jansen        real*8 lesP(nshg,nPs), lesQ(nshg,nQs)
1286*59599516SKenneth E. Jansen        dimension Ptemp(npro,nshl,nPs), Qtemp(npro,nshl,nQs)
1287*59599516SKenneth E. Jansenc
1288*59599516SKenneth E. Jansenc.... zero Qtemp
1289*59599516SKenneth E. Jansenc
1290*59599516SKenneth E. Jansen	Qtemp = zero
1291*59599516SKenneth E. Jansenc
1292*59599516SKenneth E. Jansenc.... localize the lesP for the EBE product
1293*59599516SKenneth E. Jansenc
1294*59599516SKenneth E. Jansen	call local ( lesP, Ptemp, ien, nPs, 'gather  ')
1295*59599516SKenneth E. Jansenc
1296*59599516SKenneth E. Jansenc.... Now, product operation
1297*59599516SKenneth E. Jansenc
1298*59599516SKenneth E. Jansenc.... Negative G^t contribution ( not explicitly formed )
1299*59599516SKenneth E. Jansenc
1300*59599516SKenneth E. Jansen        do i = 1, nshl
1301*59599516SKenneth E. Jansen           do j = 1, nshl
1302*59599516SKenneth E. Jansen           i0 = (nsd) * (j - 1)
1303*59599516SKenneth E. Jansenc
1304*59599516SKenneth E. Jansen             Qtemp(:,i,nQs) = Qtemp(:,i,nQs)
1305*59599516SKenneth E. Jansen     &                      - xGoC(1:npro,i0+1,i) * Ptemp(:,j,1)
1306*59599516SKenneth E. Jansen     &                      - xGoC(1:npro,i0+2,i) * Ptemp(:,j,2)
1307*59599516SKenneth E. Jansen     &                      - xGoC(1:npro,i0+3,i) * Ptemp(:,j,3)
1308*59599516SKenneth E. Jansenc
1309*59599516SKenneth E. Jansen           enddo
1310*59599516SKenneth E. Jansen        enddo
1311*59599516SKenneth E. Jansenc
1312*59599516SKenneth E. Jansenc.... C contribution
1313*59599516SKenneth E. Jansenc
1314*59599516SKenneth E. Jansen        nnm2 = nshl * (nsd)
1315*59599516SKenneth E. Jansenc
1316*59599516SKenneth E. Jansen        do i = 1, nshl
1317*59599516SKenneth E. Jansen           i0 = nnm2 + i
1318*59599516SKenneth E. Jansen          do j = 1, nshl
1319*59599516SKenneth E. Jansenc
1320*59599516SKenneth E. Jansen             Qtemp(:,i,nQs) = Qtemp(:,i,nQs)
1321*59599516SKenneth E. Jansen     &                      + xGoC(1:npro,i0,j) * Ptemp(:,j,nPs)
1322*59599516SKenneth E. Jansenc
1323*59599516SKenneth E. Jansen          enddo
1324*59599516SKenneth E. Jansen        enddo
1325*59599516SKenneth E. Jansenc
1326*59599516SKenneth E. Jansenc... assemble the result of the product
1327*59599516SKenneth E. Jansenc
1328*59599516SKenneth E. Jansen        call local ( lesQ, Qtemp, ien, nQs, 'scatter  ' )
1329*59599516SKenneth E. Jansenc
1330*59599516SKenneth E. Jansen        return
1331*59599516SKenneth E. Jansen        end
1332*59599516SKenneth E. Jansenc
1333*59599516SKenneth E. Jansenc------------
1334*59599516SKenneth E. Jansenc flesApFull
1335*59599516SKenneth E. Jansenc------------
1336*59599516SKenneth E. Jansenc
1337*59599516SKenneth E. Jansen	subroutine flesApFull ( ien, xKebe, xGoC, lesP, lesQ, nPs, nQs )
1338*59599516SKenneth E. Jansenc
1339*59599516SKenneth E. Jansen        include "common.h"
1340*59599516SKenneth E. Jansenc
1341*59599516SKenneth E. Jansen        dimension ien(npro,nshl)
1342*59599516SKenneth E. Jansen        dimension xKebe(npro,3*nshl,3*nshl),
1343*59599516SKenneth E. Jansen     &       xGoC(npro,4*nshl,nshl)
1344*59599516SKenneth E. Jansen        real*8 lesP(nshg,nPs), lesQ(nshg,nQs)
1345*59599516SKenneth E. Jansen        dimension Ptemp(npro,nshl,nPs), Qtemp(npro,nshl,nQs)
1346*59599516SKenneth E. Jansenc
1347*59599516SKenneth E. Jansenc.... zero Qtemp
1348*59599516SKenneth E. Jansenc
1349*59599516SKenneth E. Jansen	Qtemp = zero
1350*59599516SKenneth E. Jansenc
1351*59599516SKenneth E. Jansenc.... localize the lesP for the EBE product
1352*59599516SKenneth E. Jansenc
1353*59599516SKenneth E. Jansen 	call local ( lesP, Ptemp, ien, nPs, 'gather  ' )
1354*59599516SKenneth E. Jansenc
1355*59599516SKenneth E. Jansenc.... Now, product operation
1356*59599516SKenneth E. Jansenc
1357*59599516SKenneth E. Jansenc.... K * Du contribution
1358*59599516SKenneth E. Jansenc
1359*59599516SKenneth E. Jansen        do i = 1, nshl
1360*59599516SKenneth E. Jansen           i0 = (nsd) * (i - 1)
1361*59599516SKenneth E. Jansen          do j = 1, nshl
1362*59599516SKenneth E. Jansen             j0 = (nsd) * (j - 1)
1363*59599516SKenneth E. Jansenc
1364*59599516SKenneth E. Jansen            Qtemp(:,i,1) = Qtemp(:,i,1)
1365*59599516SKenneth E. Jansen     &                   + xKebe(1:npro,i0+1,j0+1) * Ptemp(:,j,1)
1366*59599516SKenneth E. Jansen     &                   + xKebe(1:npro,i0+1,j0+2) * Ptemp(:,j,2)
1367*59599516SKenneth E. Jansen     &                   + xKebe(1:npro,i0+1,j0+3) * Ptemp(:,j,3)
1368*59599516SKenneth E. Jansenc
1369*59599516SKenneth E. Jansen            Qtemp(:,i,2) = Qtemp(:,i,2)
1370*59599516SKenneth E. Jansen     &                   + xKebe(1:npro,i0+2,j0+1) * Ptemp(:,j,1)
1371*59599516SKenneth E. Jansen     &                   + xKebe(1:npro,i0+2,j0+2) * Ptemp(:,j,2)
1372*59599516SKenneth E. Jansen     &                   + xKebe(1:npro,i0+2,j0+3) * Ptemp(:,j,3)
1373*59599516SKenneth E. Jansen            Qtemp(:,i,3) = Qtemp(:,i,3)
1374*59599516SKenneth E. Jansen     &                   + xKebe(1:npro,i0+3,j0+1) * Ptemp(:,j,1)
1375*59599516SKenneth E. Jansen     &                   + xKebe(1:npro,i0+3,j0+2) * Ptemp(:,j,2)
1376*59599516SKenneth E. Jansen     &                   + xKebe(1:npro,i0+3,j0+3) * Ptemp(:,j,3)
1377*59599516SKenneth E. Jansenc
1378*59599516SKenneth E. Jansen          enddo
1379*59599516SKenneth E. Jansen        enddo
1380*59599516SKenneth E. Jansenc
1381*59599516SKenneth E. Jansenc.... G * Dp contribution
1382*59599516SKenneth E. Jansenc
1383*59599516SKenneth E. Jansen       do i = 1, nshl
1384*59599516SKenneth E. Jansen           i0 = (nsd) * (i - 1)
1385*59599516SKenneth E. Jansen          do j = 1, nshl
1386*59599516SKenneth E. Jansenc
1387*59599516SKenneth E. Jansen            Qtemp(:,i,1) = Qtemp(:,i,1)
1388*59599516SKenneth E. Jansen     &                   + xGoC(1:npro,i0+1,j) * Ptemp(:,j,nPs)
1389*59599516SKenneth E. Jansen            Qtemp(:,i,2) = Qtemp(:,i,2)
1390*59599516SKenneth E. Jansen     &                   + xGoC(1:npro,i0+2,j) * Ptemp(:,j,nPs)
1391*59599516SKenneth E. Jansen            Qtemp(:,i,3) = Qtemp(:,i,3)
1392*59599516SKenneth E. Jansen     &                   + xGoC(1:npro,i0+3,j) * Ptemp(:,j,nPs)
1393*59599516SKenneth E. Jansenc
1394*59599516SKenneth E. Jansen          enddo
1395*59599516SKenneth E. Jansen        enddo
1396*59599516SKenneth E. Jansenc
1397*59599516SKenneth E. Jansenc.... -G^t * Du contribution
1398*59599516SKenneth E. Jansenc
1399*59599516SKenneth E. Jansen       do i = 1, nshl
1400*59599516SKenneth E. Jansen           do j = 1, nshl
1401*59599516SKenneth E. Jansen              i0 = (nsd) * (j - 1)
1402*59599516SKenneth E. Jansenc
1403*59599516SKenneth E. Jansen             Qtemp(:,i,nQs) = Qtemp(:,i,nQs)
1404*59599516SKenneth E. Jansen     &                      - xGoC(1:npro,i0+1,i) * Ptemp(:,j,1)
1405*59599516SKenneth E. Jansen     &                      - xGoC(1:npro,i0+2,i) * Ptemp(:,j,2)
1406*59599516SKenneth E. Jansen     &                      - xGoC(1:npro,i0+3,i) * Ptemp(:,j,3)
1407*59599516SKenneth E. Jansenc
1408*59599516SKenneth E. Jansen           enddo
1409*59599516SKenneth E. Jansen        enddo
1410*59599516SKenneth E. Jansenc
1411*59599516SKenneth E. Jansenc.... C * Dp contribution
1412*59599516SKenneth E. Jansenc
1413*59599516SKenneth E. Jansen        nnm2 = nshl * (nsd)
1414*59599516SKenneth E. Jansenc
1415*59599516SKenneth E. Jansen        do i = 1, nshl
1416*59599516SKenneth E. Jansen           i0 = nnm2 + i
1417*59599516SKenneth E. Jansen          do j = 1, nshl
1418*59599516SKenneth E. Jansenc
1419*59599516SKenneth E. Jansen             Qtemp(:,i,nQs) = Qtemp(:,i,nQs)
1420*59599516SKenneth E. Jansen     &                      + xGoC(1:npro,i0,j) * Ptemp(:,j,nPs)
1421*59599516SKenneth E. Jansenc
1422*59599516SKenneth E. Jansen          enddo
1423*59599516SKenneth E. Jansen        enddo
1424*59599516SKenneth E. Jansen
1425*59599516SKenneth E. Jansen
1426*59599516SKenneth E. Jansen
1427*59599516SKenneth E. Jansenc
1428*59599516SKenneth E. Jansenc... assemble the result of the product
1429*59599516SKenneth E. Jansenc
1430*59599516SKenneth E. Jansen        call local ( lesQ, Qtemp, ien, nQs, 'scatter ' )
1431*59599516SKenneth E. Jansenc
1432*59599516SKenneth E. Jansen        return
1433*59599516SKenneth E. Jansen        end
1434*59599516SKenneth E. Jansenc
1435*59599516SKenneth E. Jansenc-----------
1436*59599516SKenneth E. Jansenc fsclrDiag
1437*59599516SKenneth E. Jansenc-----------
1438*59599516SKenneth E. Jansenc
1439*59599516SKenneth E. Jansen	subroutine fsclrDiag ( ien, xTe, sclrDiag )
1440*59599516SKenneth E. Jansenc
1441*59599516SKenneth E. Jansen        include "common.h"
1442*59599516SKenneth E. Jansenc
1443*59599516SKenneth E. Jansen        dimension xTe(npro,nshl,nshl)
1444*59599516SKenneth E. Jansen        dimension sclrDiag(nshg,1), Diagl(npro,nshl,1)
1445*59599516SKenneth E. Jansen        dimension ien(npro,nshl)
1446*59599516SKenneth E. Jansenc
1447*59599516SKenneth E. Jansen        do i = 1, nshl
1448*59599516SKenneth E. Jansen           Diagl(:,i,1) = xTe(1:npro,i,i)
1449*59599516SKenneth E. Jansen        enddo
1450*59599516SKenneth E. Jansenc
1451*59599516SKenneth E. Jansen        call local (sclrDiag, Diagl, ien, 1, 'scatter ')
1452*59599516SKenneth E. Jansenc
1453*59599516SKenneth E. Jansen        return
1454*59599516SKenneth E. Jansen        end
1455*59599516SKenneth E. Jansenc
1456*59599516SKenneth E. Jansenc------------
1457*59599516SKenneth E. Jansenc flesApSclr
1458*59599516SKenneth E. Jansenc------------
1459*59599516SKenneth E. Jansenc
1460*59599516SKenneth E. Jansen	subroutine flesApSclr ( ien, xTe, lesP, lesQ, nPs, nQs )
1461*59599516SKenneth E. Jansenc
1462*59599516SKenneth E. Jansen        include "common.h"
1463*59599516SKenneth E. Jansenc
1464*59599516SKenneth E. Jansen        dimension xTe(npro,nshl,nshl)
1465*59599516SKenneth E. Jansen        dimension ien(npro,nshl)
1466*59599516SKenneth E. Jansen        real*8 lesP(nshg,nPs), lesQ(nshg,nQs)
1467*59599516SKenneth E. Jansen        dimension Ptemp(npro,nshl,nPs), Qtemp(npro,nshl,nQs)
1468*59599516SKenneth E. Jansenc
1469*59599516SKenneth E. Jansenc.... zero Qtemp
1470*59599516SKenneth E. Jansenc
1471*59599516SKenneth E. Jansen        Qtemp = zero
1472*59599516SKenneth E. Jansenc
1473*59599516SKenneth E. Jansenc.... localize the lesP for the EBE product
1474*59599516SKenneth E. Jansenc
1475*59599516SKenneth E. Jansen        call local ( lesP, Ptemp, ien, nPs, 'gather  ')
1476*59599516SKenneth E. Jansenc
1477*59599516SKenneth E. Jansenc.... Now, product operation
1478*59599516SKenneth E. Jansenc
1479*59599516SKenneth E. Jansen        do i = 1, nshl
1480*59599516SKenneth E. Jansen          do j = 1, nshl
1481*59599516SKenneth E. Jansenc
1482*59599516SKenneth E. Jansen            Qtemp(:,i,nQs) = Qtemp(:,i,nQs)
1483*59599516SKenneth E. Jansen     &                     + xTe(1:npro,i,j) * Ptemp(:,j,nPs)
1484*59599516SKenneth E. Jansenc
1485*59599516SKenneth E. Jansen          enddo
1486*59599516SKenneth E. Jansen        enddo
1487*59599516SKenneth E. Jansenc
1488*59599516SKenneth E. Jansenc.... assemble the result of the product
1489*59599516SKenneth E. Jansenc
1490*59599516SKenneth E. Jansen  	call local ( lesQ, Qtemp, ien, nQs, 'scatter ' )
1491*59599516SKenneth E. Jansenc
1492*59599516SKenneth E. Jansen        return
1493*59599516SKenneth E. Jansen        end
1494