38
39
40
43
44
45
46
47
48
49
50
51
52
53
54
55#include "implicit_f.inc"
56
57
58
59#include "com01_c.inc"
60#include "com04_c.inc"
61#include "com08_c.inc"
62#include "tabsiz_c.inc"
63
64
65
66 INTEGER NALE(*), NODFT, NODLT,
67 . NBRCVOIS(*),NBSDVOIS(*),
68 . LNRCVOIS(*),LNSDVOIS(*)
69 my_real x(3,sx/3), d(3,sd/3), v(3,sv/3), w(3,sw/3), wa(3,*)
70 TYPE(t_connectivity), INTENT(IN) :: ALE_NN_CONNECT
71
72
73
74 INTEGER N, I, NCI, K, J, LENCOM, IAD1, IAD2
75 my_real lij, xlagr, fix, fiy, fiz, sli, wix, wiy, wiz, fac,lij2,lijsqr
76
77
78
79
80 DO n = nodft,nodlt
81 wa(1,n)=w(1,n)
82 wa(2,n)=w(2,n)
83 wa(3,n)=w(3,n)
84 ENDDO
85
87
88
89
90 IF(nspmd > 1)THEN
91
92 lencom=nbrcvois(nspmd+1)+nbsdvois(nspmd+1)
93 CALL spmd_wvois(x,d,wa,nbrcvois,nbsdvois,lnrcvois,lnsdvois,lencom)
94
95
96 END IF
97
98 DO n = nodft,nodlt
99 xlagr=
min(1,iabs(iabs(nale(n))-2))
100 w(1,n)=v(1,n)*xlagr
101 w(2,n)=v(2,n)*xlagr
102 w(3,n)=v(3,n)*xlagr
103 ENDDO
104
105 IF(
ale%GRID%ALPHA == zero)
THEN
106 DO i = nodft,nodlt
107 IF(nale(i) /= 0) THEN
108 nci=0
109 wix=zero
110 wiy=zero
111 wiz=zero
112 iad1 = ale_nn_connect%IAD_CONNECT(i)
113 iad2 = ale_nn_connect%IAD_CONNECT(i + 1) - 1
114 DO k = iad1, iad2
115 j = ale_nn_connect%CONNECTED(k)
116 IF (j > 0) THEN
117 nci = nci + 1
118 wix = wix + wa(1,j)
119 wiy = wiy + wa(2,j)
120 wiz = wiz + wa(3,j)
121 ENDIF
122 ENDDO
123
124 w(1,i) = wix / nci
125 w(2,i) = wiy / nci
126 w(3,i) = wiz / nci
127 ENDIF
128 ENDDO
129
130 ELSE
131 DO i = nodft,nodlt
132 IF(nale(i) /= 0) THEN
133 nci=0
134 fix=zero
135 fiy=zero
136 fiz=zero
137 sli=zero
138 wix=zero
139 wiy=zero
140 wiz=zero
141 iad1 = ale_nn_connect%IAD_CONNECT(i)
142 iad2 = ale_nn_connect%IAD_CONNECT(i + 1) - 1
143 DO k = iad1, iad2
144 j = ale_nn_connect%CONNECTED(k)
145 IF (j > 0) THEN
146 nci = nci + 1
147 lij2= (x(1,j)-x(1,i))*(x(1,j)-x(1,i))+ (x(2,j)-x(2,i))*(x(2,j)-x(2,i))+ (x(3,j)-x(3,i))*(x(3,j)-x(3,i))
148 lijsqr = sqrt(lij2)
150 IF(lij < ep20) THEN
151 sli=sli+lij
152 fix=fix+(d(1,j)-d(1,i))/lij
153 fiy=fiy+(d(2,j)-d(2,i))/lij
154 fiz=fiz+(d(3,j)-d(3,i))/lij
155 ENDIF
156 wix=wix+wa(1,j)
157 wiy=wiy+wa(2,j)
158 wiz=wiz+wa(3,j)
159 ENDIF
160 ENDDO
161
162 fac=
ale%GRID%ALPHA*sli/(nci*nci*dt2)
163 w(1,i) = wix/nci + fac*fix
164 w(2,i) = wiy/nci + fac*fiy
165 w(3,i) = wiz/nci + fac*fiz
166
167 ENDIF
168 ENDDO
169 ENDIF
170
171 IF(
ale%GRID%GAMMA < eighty19)
THEN
172 DO i = nodft,nodlt
173 IF(nale(i) /= 0) THEN
174 IF(v(1,i) /= zero) w(1,i)=
ale%GRID%VGX*v(1,i)*
max((one-
ale%GRID%GAMMA),
min((one+
ale%GRID%GAMMA),w(1,i)/v(1,i)))
175 IF(v(2,i) /= zero) w(2,i)=
ale%GRID%VGY*v(2,i)*
max((one-
ale%GRID%GAMMA),
min((one+
ale%GRID%GAMMA),w(2,i)/v(2,i)))
176 IF(v(3,i) /= zero) w(3,i)=
ale%GRID%VGZ*v(3,i)*
max((one-
ale%GRID%GAMMA),
min((one+
ale%GRID%GAMMA),w(3,i)/v(3,i)))
177 ENDIF
178 ENDDO
179 ENDIF
180
181 RETURN
subroutine spmd_wvois(x, d, w, nbrcvois, nbsdvois, lnrcvois, lnsdvois, lencom)