37
38
39
40
41
42
43
44
45
51 use element_mod , only :nixq
52
53
54
55#include "implicit_f.inc"
56
57
58
59#include "spmd_c.inc"
60#include "vect01_c.inc"
61#include "com04_c.inc"
62
63
64
65 INTEGER, INTENT(IN) :: NV46
66 my_real,
INTENT(OUT) :: flux(nv46, *)
67 my_real,
INTENT(IN) :: x(3, numnod)
68 INTEGER, INTENT(IN) :: IXQ(NIXQ, NUMELQ)
69 my_real,
INTENT(OUT) :: flux_vois(numelq+nqvois, nv46)
70 INTEGER, INTENT(OUT) :: N4_VOIS(NUMELQ+NQVOIS,8)
71 INTEGER, INTENT(IN) :: ITAB(NUMNOD)
72 INTEGER, INTENT(IN) :: ITRIMAT
73 TYPE(t_segvar),INTENT(IN) :: SEGVAR
74 TYPE(t_ale_connectivity), INTENT(IN) :: ALE_CONNECT
75
76
77
78 INTEGER :: I, II, KK, JJ, IAD2, IAD3
79 INTEGER :: NEIGHBOOR_LIST(NV46), FACE_NEIGHBOOR(NV46)
83 INTEGER :: FACE_TO_NODE_LOCAL_ID(4, 2), NODEID1, NODEID2
84
85
86
87
88
89 face_to_node_local_id(1, 1) = 1 ; face_to_node_local_id(1, 2) = 2
90
91 face_to_node_local_id(2, 1) = 2 ; face_to_node_local_id(2, 2) = 3
92
93 face_to_node_local_id(3, 1) = 3 ; face_to_node_local_id(3, 2) = 4
94
95 face_to_node_local_id(4, 1) = 4 ; face_to_node_local_id(4, 2) = 1
96
97 DO i = lft, llt
98 ii = i + nft
99 iad2 = ale_connect%ee_connect%iad_connect(ii)
100
103
104 DO kk = 1, nv46
105
106 IF (flux(kk, ii) > zero) THEN
107
108 neighboor_list(kk) = ale_connect%ee_connect%connected(iad2 + kk - 1)
109 face_neighboor(kk) = kk
110 IF (neighboor_list(kk) <= 0) THEN
111 IF(neighboor_list(kk)==0)neighboor_list(kk) = ii
112
113 ELSEIF (neighboor_list(kk) <= numelq) THEN
114 iad3 = ale_connect%ee_connect%iad_connect(neighboor_list(kk))
115
116 DO jj = 1, nv46
117 IF (ale_connect%ee_connect%connected(iad3 + jj - 1) == ii) THEN
118 face_neighboor(kk) = jj
119 ENDIF
120 ENDDO
121 ENDIF
122
123 nodeid1 = ixq(1 + face_to_node_local_id(kk, 1), ii)
124 nodeid2 = ixq(1 + face_to_node_local_id(kk, 2), ii)
125
126 yf = half * (x(2, nodeid1) + x(2, nodeid2))
127 zf = half * (x(3, nodeid1) + x(3, nodeid2))
128
129
133
134
135 flux(kk, ii) = alphak * flux(kk, ii)
136 IF (neighboor_list(kk) > 0)THEN
137 IF (neighboor_list(kk) <= numelq) THEN
138
139 flux(face_neighboor(kk), neighboor_list(kk)) = -flux(kk, ii)
140 ELSE
141
142 flux_vois(ii, kk) = flux(kk, ii)
143 n4_vois(ii, 1) = itab(ixq(2, ii))
144 n4_vois(ii, 2) = itab(ixq(3, ii))
145 n4_vois(ii, 3) = itab(ixq(4, ii))
146 n4_vois(ii, 4) = itab(ixq(5, ii))
147 ENDIF
148 ENDIF
149 ENDIF
150 ENDDO
151 ENDDO
152
153
154
155
156 IF(nsegflu > 0)THEN
157 DO i = lft, llt
158 ii = i + nft
159 iad2 = ale_connect%ee_connect%iad_connect(ii)
160 DO kk=1,4
161 IF(flux(kk,ii) < zero .AND. ale_connect%ee_connect%connected(iad2 + kk - 1) < 0)THEN
162 flux(kk,ii) = segvar%PHASE_ALPHA(itrimat,-ale_connect%ee_connect%connected(iad2 + kk - 1))*flux(kk,ii)
163 ENDIF
164 ENDDO
165 ENDDO
166 ENDIF
167
168
type(alemuscl_buffer_) alemuscl_buffer