40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55 USE multi_fvm_mod
57 USE elbufdef_mod
58 use element_mod , only : nixs
59
60
61
62#include "implicit_f.inc"
63
64
65
66#include "mvsiz_p.inc"
67
68
69
70#include "param_c.inc"
71#include "com04_c.inc"
72#include "com01_c.inc"
73
74
75
76 TYPE (ELBUF_STRUCT_), DIMENSION(NGROUP) :: ELBUF_TAB
77 INTEGER JLT, NIN, JTASK, IGROUPS(NUMELS), IPARG(NPARG, *),
78 . IX1(MVSIZ),IX2(MVSIZ),IX3(MVSIZ),IX4(MVSIZ),NSVG(MVSIZ),IXS(NIXS,*)
79 my_real,
DIMENSION(2*MVSIZ),
INTENT(in) :: msi
81 . dt, h1(mvsiz),h2(mvsiz),h3(mvsiz),h4(mvsiz),stif(mvsiz),
82 . fx1(mvsiz),fy1(mvsiz),fz1(mvsiz),
83 . fx2(mvsiz),fy2(mvsiz),fz2(mvsiz),
84 . fx3(mvsiz),fy3(mvsiz),fz3(mvsiz),
85 . fx4(mvsiz),fy4(mvsiz),fz4(mvsiz),
86 . fxi(mvsiz),fyi(mvsiz),fzi(mvsiz),
87 . a(3,*), x(3,*), stifn(*), v(3,*)
88 TYPE(MULTI_FVM_STRUCT), INTENT(INOUT) :: MULTI_FVM
89
90
91
92 INTEGER I, J1, IG, ISHIFT, NODFI, NG, ILOC, NEL, NFT
93 INTEGER :: SHIFT_FORCE_INT
94
95
96
97
98 DO i=1,jlt
99 j1=ix1(i)
100 a(1,j1)=a(1,j1)+fx1(i)
101 a(2,j1)=a(2,j1)+fy1(i)
102 a(3,j1)=a(3,j1)+fz1(i)
103 stifn(j1) = stifn(j1) + stif(i)*abs(h1(i))
104
105 j1=ix2(i)
106 a(1,j1)=a(1,j1)+fx2(i)
107 a(2,j1)=a(2,j1)+fy2(i)
108 a(3,j1)=a(3,j1)+fz2(i)
109 stifn(j1) = stifn(j1) + stif(i)*abs(h2(i))
110
111 j1=ix3(i)
112 a(1,j1)=a(1,j1)+fx3(i)
113 a(2,j1)=a(2,j1)+fy3(i)
114 a(3,j1)=a(3,j1)+fz3(i)
115 stifn(j1) = stifn(j1) + stif(i)*abs(h3(i))
116
117 j1=ix4(i)
118 a(1,j1)=a(1,j1)+fx4(i)
119 a(2,j1)=a(2,j1)+fy4(i)
120 a(3,j1)=a(3,j1)+fz4(i)
121 stifn(j1) = stifn(j1) + stif(i)*abs(h4(i))
122 ENDDO
123
125 ishift = nodfi*(jtask-1)
126 DO i=1,jlt
127 ig=nsvg(i)
128
129
130 IF (ig > 0) THEN
131 ig = ig - numnod
132 ng = igroups(ig)
133 nft=iparg(3,ng)
134 nel=iparg(2,ng)
135 iloc=ig-nft
136
137 shift_force_int = (jtask-1)*numels
138 multi_fvm%FORCE_INT(1,ig+shift_force_int) = multi_fvm%FORCE_INT(1,ig+shift_force_int) - dt*fxi(i)
139 multi_fvm%FORCE_INT(2,ig+shift_force_int) = multi_fvm%FORCE_INT(2,ig+shift_force_int) - dt*fyi(i)
140 multi_fvm%FORCE_INT(3,ig+shift_force_int) = multi_fvm%FORCE_INT(3,ig+shift_force_int) - dt*fzi(i)
141
142
143 ELSE
144 ig = - ig
145 afi(nin)%P(1,ig+ishift) =
afi(nin)%P(1,ig+ishift) - dt * fxi(i)
146 afi(nin)%P(2,ig+ishift) =
afi(nin)%P(2,ig+ishift) - dt * fyi(i)
147 afi(nin)%P(3,ig+ishift) =
afi(nin)%P(3,ig+ishift) - dt * fzi(i)
148 ENDIF
149
150 ENDDO
type(real_pointer2), dimension(:), allocatable afi
integer, dimension(:), allocatable nlskyfi