36 1 IGROUPS ,IPARG ,ELBUF_TAB ,FORCE_INT ,
38 3 X_APPEND,V_APPEND,MASS_APPEND,KINET_APPEND)
54 use element_mod ,
only : nixs
58#include "implicit_f.inc"
68 INTEGER,
INTENT(in) :: ITASK
69 TYPE (ELBUF_STRUCT_),
DIMENSION(NGROUP),
INTENT(in) :: ELBUF_TAB
70 INTEGER,
DIMENSION(NUMELS),
INTENT(in) ::
71 INTEGER,
DIMENSION(NPARG,*),
INTENT(in) ::IPARG
73 INTEGER,
DIMENSION(NPARI,*),
INTENT(in) :: IPARI
74 my_real,
DIMENSION(3,*),
INTENT(in) :: x,v
75 my_real,
DIMENSION(3,*),
INTENT(inout) :: x_append,v_append
76 my_real,
DIMENSION(*)INTENT(in) :: ms
77 INTEGER,
DIMENSION(*),
INTENT(in) :: KINET
78 my_real,
DIMENSION(*),
INTENT(inout) :: mass_append
79 INTEGER,
DIMENSION(*),
INTENT(inout) :: KINET_APPEND
80 my_real,
DIMENSION(3,*),
INTENT(inout) :: force_int
81 INTEGER,
DIMENSION(NIXS, *),
INTENT(in) :: IXS
82 TYPE(multi_fvm_struct) :: MULTI_FVM
83 TYPE (GROUP_) ,
DIMENSION(NGRBRIC),
INTENT(in) :: IGRBRIC
89 INTEGER :: NFT,GROUP_ID,ILOC,
90 INTEGER :: ISU1,NBRIC,,NODE_ID,IBRIC
91 INTEGER :: NODF,NODL,NSNF,NSNL
93 my_real,
DIMENSION(3) :: local_force_int
94 REAL(kind=8), dimension(3) :: local_force_int_dp
96 INTEGER,
DIMENSION(NTHREAD) :: INDEX_THREADS
97 my_real,
DIMENSION(:),
ALLOCATABLE,
SAVE :: vel
98 REAL(kind=8), dimension(:,:),
ALLOCATABLE,
SAVE :: vel_dp
100 nodf = 1 + itask * numnod / nthread
101 nodl = (1 + itask) * numnod / nthread
104 x_append(1:3,nodf:nodl) = x(1:3,nodf:nodl)
105 v_append(1:3,nodf:nodl) = v(1:3,nodf:nodl)
106 mass_append(nodf:nodl) = ms(nodf:nodl)
107 kinet_append(nodf:nodl) = kinet(nodf:nodl)
113 DO nn=1,multi_fvm%NUMBER_INT18
114 n = multi_fvm%INT18_LIST(nn)
116 nbric = igrbric(isu1)%NENTITY
118 nsnf = 1 + itask * nsn / nthread
119 nsnl = (1 + itask) * nsn / nthread
122 index_threads(i) = 1 + 3*(i-1)*nsn/nthread
125 ALLOCATE( vel(3*nsn) )
126 ALLOCATE( vel_dp(6,3*nsn) )
128 ibric = igrbric(isu1)%ENTITY(ii)
129 group_id = igroups(ibric)
130 nft = iparg(3,group_id)
131 nel=iparg(2,group_id)
134 vel_dp(1:6,(ii-1)+1) = multi_fvm%FORCE_INT_PON(1,1:6,ibric)
135 vel_dp(1:6,(ii-1)+2) = multi_fvm%FORCE_INT_PON(2,1:6,ibric)
136 vel_dp(1:6,(ii-1)+3) = multi_fvm%FORCE_INT_PON(3,1:6,ibric)
138 multi_fvm%FORCE_INT_PON(1,1:6,ibric) = 0.d+00
139 multi_fvm%FORCE_INT_PON(2,1:6,ibric) = 0.d+00
140 multi_fvm%FORCE_INT_PON(3,1:6,ibric) = 0.d+00
143 vel_dp(1:6,(ii-1)+1) = vel_dp(1:6,(ii-1)+1) + multi_fvm%FORCE_INT_PON(1,1:6,ibric+(j-1)*numels)
144 vel_dp(1:6,(ii-1)+2) = vel_dp(1:6,(ii-1)+2) + multi_fvm%FORCE_INT_PON(2,1:6,ibric+(j-1)*numels)
145 vel_dp(1:6,(ii-1)+3) = vel_dp(1:6,(ii-1)+3) + multi_fvm%FORCE_INT_PON(3,1:6,ibric+(j-1)*numels)
146 multi_fvm%FORCE_INT_PON(1:3,1:6,ibric+(j-1)*numels) = 0.d+00
149 mass = elbuf_tab(group_id)%GBUF%RHO(iloc) * elbuf_tab(group_id)%GBUF%VOL(iloc)
151 local_force_int_dp(1) = vel_dp(1,(ii-1)+1)
152 local_force_int_dp(2) = vel_dp(1,(ii-1)+2)
153 local_force_int_dp(3) = vel_dp(1,(ii-1)+3)
155 local_force_int_dp(1) = local_force_int_dp(1) + vel_dp(j,(ii-1)+1)
156 local_force_int_dp(2) = local_force_int_dp(2) + vel_dp(j,(ii-1)+2)
157 local_force_int_dp(3) = local_force_int_dp(3) + vel_dp(j,(ii-1)+3)
159 local_force_int_dp(1:3) = local_force_int_dp(1:3) / mass
160 multi_fvm%VEL(1:3,ibric) = multi_fvm%VEL(1:3,ibric) + local_force_int_dp(1:3)
170 DO nn=1,multi_fvm%NUMBER_INT18
171 n = multi_fvm%INT18_LIST(nn)
173 nbric = igrbric(isu1)%NENTITY
175 nsnf = 1 + itask * nsn / nthread
176 nsnl = (1 + itask) * nsn / nthread
178 ibric = igrbric(isu1)%ENTITY(ii)
179 group_id = igroups(ibric)
180 nft = iparg(3,group_id)
181 nel=iparg(2,group_id)
184 mass = elbuf_tab(group_id)%GBUF%RHO(iloc) * elbuf_tab(group_id)%GBUF%VOL(iloc)
185 local_force_int(1:3) = zero
187 local_force_int(1:3) = local_force_int(1:3) + force_int(1:3, ibric+(jj-1)*numels)
190 multi_fvm%VEL(1:3, ibric) = multi_fvm%VEL(1:3, ibric) + local_force_int(1:
194 force_int(1:3, ibric+(jj-1)*numels) = zero
206 DO nn=1,multi_fvm%NUMBER_INT18
207 n = multi_fvm%INT18_LIST(nn)
209 nbric = igrbric(isu1)%NENTITY
211 nsnf = 1 + itask * nsn / nthread
212 nsnl = (1 + itask) * nsn / nthread
214 ibric = igrbric(isu1)%ENTITY(ii)
215 group_id = igroups(ibric)
216 nft = iparg(3,group_id)
217 nel=iparg(2,group_id)
220 mass = elbuf_tab(group_id)%GBUF%RHO(iloc) * elbuf_tab(group_id)%GBUF%VOL(iloc)
221 mass_append(numnod + ibric) = zero
224 x_append(1, numnod + ibric) = zero
225 x_append(2, numnod + ibric) = zero
226 x_append(3, numnod + ibric) = zero
228 node_id = ixs(jj, ibric)
229 x_append(1, numnod + ibric) = x_append(1, numnod
230 x_append(2, numnod + ibric) = x_append(2, numnod
231 x_append(3, numnod + ibric) = x_append(3, numnod + ibric) + one_over_8 * x(3, node_id)
236 v_append(1, numnod + ibric) = multi_fvm%VEL(1, ibric)
237 v_append(2, numnod + ibric) = multi_fvm%VEL(2, ibric)
238 v_append(3, numnod + ibric) = multi_fvm%VEL(3, ibric)
241 elbuf_tab(group_id)%GBUF%MOM(iloc+0*nel)= multi_fvm%VEL(1, ibric)
242 elbuf_tab(group_id)%GBUF%MOM(iloc+1*nel)= multi_fvm%VEL(2, ibric)
243 elbuf_tab(group_id)%GBUF%MOM(iloc+2*nel)= multi_fvm%VEL(3, ibric)