36
37
38
41
42
43
44
45
46
47
48
49#include "implicit_f.inc"
50
51
52
53#include "com01_c.inc"
54#include "com04_c.inc"
55#include "com06_c.inc"
56#include "com08_c.inc"
57#include "scr07_c.inc"
58#include "scr08_a_c.inc"
59#include "scr14_c.inc"
60#include "scr16_c.inc"
61#include "param_c.inc"
62#include "comlock.inc"
63#include "tabsiz_c.inc"
64
65
66
67 INTEGER,INTENT(INOUT) :: IRECT(4,*), MSR(*), NSV(*), ILOC(*), IRTL(*),LCODE(*), ISKEW(*)
68 my_real,
INTENT(INOUT) :: a(sa), e(*), msm(*), crst(2,*), ms(*),nor(3,*),fsav(*)
69 my_real,
INTENT(INOUT) :: fcont(3,*),fncont(3,*)
70 INTEGER, INTENT(IN) :: NSN,NMN
71 TYPE(H3D_DATABASE) :: H3D_DATA
72
73
74
75 INTEGER NIR, I, J, I3, J3, I2, J2, I1, J1, II, L, JJ, NN, JJ3, JJ2, JJ1, ISK, LCOD
76 my_real h(4), n1, n2, n3, aa(3), sss, ttt, xmss, fxi, fyi, fzi, fsn
77 my_real :: fsn_sav, fxi_sav, fyi_sav, fzi_sav,impx,impy,impz
78 LOGICAL ICONT, IPCONT, IANIM
79
80
81
82 icont = .false.
83 ipcont = .false.
84 ianim = .false.
85 icont = (anim_v(4)+outp_v(4) > 0+h3d_data%N_VECT_CONT)
86 IF(anim_v(12)+outp_v(12)+h3d_data%N_VECT_PCONT > 0)THEN
87 IF( (tt>=tanim .AND. tt<=tanim_stop) .OR.tt >= toutp.OR.tt >= h3d_data%TH3D.OR.
88 . (manim >= 4.AND.manim <= 15).OR. h3d_data%MH3D /= 0)THEN
89 ipcont = .true.
90 ENDIF
91 ENDIF
92 IF(icont .OR. ipcont)ianim=.true.
93
94 fsn_sav = zero
95 fxi_sav = zero
96 fyi_sav = zero
97 fzi_sav = zero
98
99 nir=2
100 IF(n2d == 0)nir=4
101
102 DO i=1,nmn
103 j=msr(i)
104 i3=3*i
105 i2=i3-1
106 i1=i2-1
107 msm(i)=ms(j)
108 e(i1)=zero
109 e(i2)=zero
110 e(i3)=zero
111 ENDDO
112
113
114 DO ii=1,nsn
115 i=nsv(ii)
116 j=iloc(ii)
117 IF(j >= 1) THEN
118 l=irtl(ii)
119 DO jj=1,nir
120 nn=irect(jj,l)
121 iy(jj)=nn
122 ENDDO
123
124 sss=crst(1,ii)
125 ttt=crst(2,ii)
126
127 n1=nor(1,ii)
128 n2=nor(2,ii)
129 n3=nor(3,ii)
130
131 i3=3*i
132 i2=i3-1
133 i1=i2-1
135 DO jj=1,nir
136 j3=3*iy(jj)
137 j2=j3-1
138 j1=j2-1
139 jj3=3*msr(iy(jj))
140 jj2=jj3-1
141 jj1=jj2-1
142 aa(1)=a(i1)
143 aa(2)=a(i2)
144 aa(3)=a(i3)
145 isk=iskew(iy(jj))
146 lcod=lcode(iy(jj))
147 xmss=ms(i)*h(jj)
148 fxi=aa(1)-a(jj1)
149 fyi=aa(2)-a(jj2)
150 fzi=aa(3)-a(jj3)
151 fsn=(fxi*n1+fyi*n2+fzi*n3)*xmss
152 fsn_sav = fsn_sav + fsn
153 fxi_sav = fxi_sav + fxi*xmss
154 fyi_sav = fyi_sav + fyi*xmss
155 fzi_sav = fzi_sav + fzi*xmss
156 e(j1)=e(j1)+fsn*n1
157 e(j2)=e(j2)+fsn*n2
158 e(j3)=e(j3)+fsn*n3
159 msm(iy(jj))=msm(iy(jj))+xmss
160 enddo
161 ENDIF
162 enddo
163
164
165
166
167
168
169
170 impx = fxi_sav*dt12
171 impy = fyi_sav*dt12
172 impz = fzi_sav*dt12
173 fsn_sav = fsn_sav*dt12
174#include "lockon.inc"
175 fsav(1)=fsav(1) + impx
176 fsav(2)=fsav(2) + impy
177 fsav(3)=fsav(3) + impz
178 fsav(8)=fsav(8) + abs(impx)
179 fsav(9)=fsav(9) + abs(impy)
180 fsav(10)=fsav(10)+ abs(impz)
181 fsav(11)=fsav(11)+ fsn_sav
182#include "lockoff.inc"
183
184
185
186 IF(ianim)THEN
187
188
189 !---------------------------------
190 IF(icont)THEN
191#include "lockon.inc"
192 DO i=1,nmn
193 j = msr(i)
194 i3 = 3*i
195 i2 = i3-1
196 i1 = i2-1
197 fcont(1,j) = fcont(1,j)+e(i1)
198 fcont(2,j) = fcont(2,j)+e(i2)
199 fcont(3,j) = fcont(3,j)+e(i3)
200 ENDDO
201#include "lockoff.inc"
202 ENDIF
203
204
205
206 IF(ipcont)THEN
207#include "lockon.inc"
208 DO i=1,nmn
209 j = msr(i)
210 i3 = 3*i
211 i2 = i3-1
212 i1 = i2-1
213 fncont(1,j) = fncont(1,j)+e(i1)
214 fncont(2,j) = fncont(2,j)+e(i2)
215 fncont(3,j) = fncont(3,j)+e(i3)
216 ENDDO
217#include "lockoff.inc"
218 ENDIF
219 ENDIF
220
221
222
223
224
225 RETURN
subroutine shapeh(h, s, t)