34
35
36
38
39
40
41#include "implicit_f.inc"
42
43
44
45#include "com01_c.inc"
46#include "com04_c.inc"
47
48
49
50 INTEGER,INTENT(IN) :: NALELK
51 INTEGER,INTENT(IN) :: LINALE(*), WEIGHT(*)
52 my_real,
INTENT(INOUT) :: w(3,numnod)
53 TYPE (GROUP_) , DIMENSION(NGRNOD) :: IGRNOD
54
55
56
57 INTEGER :: (3), K, JJ, M1, M2, N, IC, IM, N1, J, I, NI, GR_ID
58 INTEGER :: uID, II
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98 k=0
99 n=0
100 gr_id = -huge(gr_id)
101 DO jj=1,nalelk
102
103 wm1m2(1) = zero
104 wm1m2(2) = zero
105 wm1m2(3) = zero
106 wm1m2(4) = zero
107 wm1m2(5) = zero
108 wm1m2(6) = zero
109 k = k+iabs(n)+6
110 uid = linale(k-5)
111 m1 = linale(k-4)
112 m2 = linale(k-3)
113 n = linale(k-2)
114
115 IF(uid<0)cycle
116 IF(m1 > 0)THEN
117 IF(weight(m1) == 1)THEN
118 wm1m2(1) = w(1,m1)
119 wm1m2(2) = w(2,m1)
120 wm1m2(3) = w(3,m1)
121 END IF
122 END IF
123
124 IF(m2 > 0)THEN
125 IF(weight(m2) == 1)THEN
126 wm1m2(4) = w(1,m2)
127 wm1m2(5) = w(2,m2)
128 wm1m2(6) = w(3,m2)
129 END IF
130 END IF
131
132 IF(nspmd > 1) THEN
133
136 END IF
137
138 ic=linale(k-1)
139 im=linale(k)
144
145 IF(n>0)THEN
146 n1=n+1
147 ELSE
148 gr_id=linale(k+1)
149 n1=igrnod(gr_id)%NENTITY+1
150 n=1
151 ENDIF
152
153 DO j=1,3
155 IF(im == 0) THEN
156 IF(linale(k-2)>0)THEN
157 DO i=1,n
158 ni=linale(k+i)
159 IF(ni > 0)THEN
160 w(j,ni)=wm1m2(j)+(wm1m2(3+j)-wm1m2(j))*i/n1
161 ENDIF
162 ENDDO
163 ELSE
164 ii=0
165 DO i=1,igrnod(gr_id)%NENTITY
166 ni=igrnod(gr_id)%ENTITY(i)
167 ii=ii+1
168 w(j,ni)=wm1m2(j)+(wm1m2(3+j)-wm1m2(j))*ii/n1
169 ENDDO
170 endif
171
172 ELSE
173
174 IF(im*abs(wm1m2(j)) > im*abs(wm1m2(3+j)))THEN
175 ww=wm1m2(j)
176 ELSE
177 ww=wm1m2(3+j)
178 ENDIF
179
180 IF(linale(k-2)>0)THEN
181 DO i=1,n
182 ni=linale(k+i)
183 IF(ni > 0)THEN
184 w(j,ni)=ww
185 ENDIF
186 ENDDO
187 ELSE
188 gr_id=linale(k+1)
189 DO i=1,igrnod(gr_id)%NENTITY
190 ni=igrnod(gr_id)%ENTITY(i)
191 w(j,ni)=ww
192 ENDDO
193 endif
194
195 endif
196 endif
197 ENDDO
198 ENDDO
199
200 RETURN
subroutine spmd_rbcast(tabi, tabr, n1, n2, from, add)
subroutine spmd_glob_dsum9(v, len)