37
38
39
42
43
44
45
46
47
48
49
50
51
52
53
54#include "implicit_f.inc"
55
56
57
58#include "com01_c.inc"
59#include "com04_c.inc"
60#include "com08_c.inc"
61#include "tabsiz_c.inc"
62
63
64
65
66
67
68
69
70 INTEGER NALE(NUMNOD), NODFT, NODLT,
71 . NBRCVOIS(*),NBSDVOIS(*),
72 . LNRCVOIS(*),LNSDVOIS(*)
73 my_real d(3,sd/3), v(3,sv/3), w(3,sw/3)
74 TYPE(t_connectivity), INTENT(IN) :: ALE_NN_CONNECT
75
76
77
78 INTEGER I, LENCOM
80 INTEGER :: IAD, IAD1, IAD2, NODE_ID
84
85
86
87
88
89 IF(nspmd > 1)THEN
90
91 lencom = nbrcvois(nspmd+1)+nbsdvois(nspmd+1)
92 CALL spmd_xvois(d,nbrcvois,nbsdvois,lnrcvois,lnsdvois,lencom)
93
94 END IF
95 fac=one/dt2/three
96 DO i = nodft, nodlt
97 IF(iabs(nale(i)) == 1) THEN
98 iad1 = ale_nn_connect%IAD_CONNECT(i)
99 iad2 = ale_nn_connect%IAD_CONNECT(i + 1) - 1
100 dx_max = -huge(zero)
101 dx_min = huge(zero)
102 dy_max = -huge(zero)
103 dy_min = huge(zero)
104 dz_max = -huge(zero)
105 dz_min = huge(zero)
106 DO iad = iad1, iad2
107 node_id = ale_nn_connect%CONNECTED(iad)
108 dx_max =
max(dx_max, d(1, node_id))
109 dx_min =
min(dx_min, d(1, node_id))
110 dy_max =
max(dy_max, d(2, node_id))
111 dy_min =
min(dy_min, d(2, node_id))
112 dz_max =
max(dz_max, d(3, node_id))
113 dz_min =
min(dz_min, d(3, node_id))
114 ENDDO
115 dx = fac * (dx_max + dx_min - two * d(1, i))
116 dy = fac * (dy_max + dy_min - two * d(2, i))
117 dz = fac * (dz_max + dz_min - two * d(3, i))
118 w(1,i)=sign(one,dx)*
min(abs(dx),
ale%GRID%ALPHA)
119 w(2,i)=sign(one,dy)*
min(abs(dy),
ale%GRID%ALPHA)
120 w(3,i)=sign(one,dz)*
min(abs(dz),
ale%GRID%ALPHA)
121 ELSEIF(nale(i) == 0)THEN
122 w(1,i)=v(1,i)
123 w(2,i)=v(2,i)
124 w(3,i)=v(3,i)
125 ELSE
126 w(1,i)=zero
127 w(2,i)=zero
128 w(3,i)=zero
129 ENDIF
130
131 ENDDO
132
133 RETURN
subroutine spmd_xvois(x, nbrcvois, nbsdvois, lnrcvois, lnsdvois, lencom)