31
32
33
34#include "implicit_f.inc"
35
36
37
38#include "com01_c.inc"
39
40
41
42 INTEGER NDIM, NNO, NEL, IFLOW(*), IBUF(*), ELEM(NDIM,*), IBUFL(*), CNP(*)
43 my_real a(3,*), normal(3,*), accf(nel)
44
45
46
47 INTEGER I, K, N, N1, N2, N3, N4
48 INTEGER II, JJ, KK, JFORM, NNO_L, LENBUF
49 my_real ax, ay, az, wi(4,2), pm1
51 my_real,
ALLOCATABLE :: sbuf(:), rbuf(:)
52
53 jform = iflow(4)
54
55 IF (nspmd == 1) THEN
56 DO i=1,nno
57 ii=ibuf(i)
58 al(1,i)=a(1,ii)
59 al(2,i)=a(2,ii)
60 al(3,i)=a(3,ii)
61 ENDDO
62 ELSE
63 nno_l = iflow(16)
64 lenbuf=3*nno
65 ALLOCATE(sbuf(lenbuf), rbuf(lenbuf))
66 sbuf(1:lenbuf)=zero
67 rbuf(1:lenbuf)=zero
68 DO i=1,nno_l
69 ii=ibufl(i)
70 jj=ibuf(ii)
71 kk=3*(ii-1)
72 sbuf(kk+1)=a(1,jj)/cnp(ii)
73 sbuf(kk+2)=a(2,jj)/cnp(ii)
74 sbuf(kk+3)=a(3,jj)/cnp(ii)
75 ENDDO
76
78
79 DO i=1,nno
80 k=3*(i-1)
81 al(1,i)=rbuf(k+1)
82 al(2,i)=rbuf(k+2)
83 al(3,i)=rbuf(k+3)
84 ENDDO
85 DEALLOCATE(sbuf, rbuf)
86 ENDIF
87
88 IF(jform == 1) THEN
89 DO i = 1,nel
90 n1 = elem(1,i)
91 n2 = elem(2,i)
92 n3 = elem(3,i)
93 ax = third * (al(1,n1) + al(1,n2) + al(1,n3))
94 ay = third * (al(2,n1) + al(2,n2) + al(2,n3))
95 az = third * (al(3,n1) + al(3,n2) + al(3,n3))
96 accf(i) = ax*normal(1,i)+ay*normal(2,i)+az*normal(3,i)
97 ENDDO
98 ELSEIF(jform == 2) THEN
99 wi(1,1)=fourth
100 wi(2,1)=fourth
101 wi(3,1)=fourth
102 wi(4,1)=fourth
103 wi(1,2)=third
104 wi(2,2)=third
105 wi(3,2)=one_over_6
106 wi(4,2)=one_over_6
107 DO i = 1,nel
108 n1 = elem(1,i)
109 n2 = elem(2,i)
110 n3 = elem(3,i)
111 n4 = elem(4,i)
112 k = elem(5,i)
113 ax = wi(1,k)*al(1,n1)+wi(2,k)*al(1,n2)+wi(3,k)*al(1,n3)+wi(4,k)*al(1,n4)
114 ay = wi(1,k)*al(2,n1)+wi(2,k)*al(2,n2)+wi(3,k)*al(2,n3)+wi(4,k)*al(2,n4)
115 az = wi(1,k)*al(3,n1)+wi(2,k)*al(3,n2)+wi(3,k)*al(3,n3)+wi(4,k)*al(3,n4)
116 accf(i) = ax*normal(1,i)+ay*normal(2,i)+az*normal(3,i)
117 ENDDO
118 ENDIF
119
120 RETURN
subroutine spmd_fl_sum(lsum, len, lsumt)