40
41
42
43#include "implicit_f.inc"
44
45
46
47#include "mvsiz_p.inc"
48
49
50
51#include "com01_c.inc"
52#include "com08_c.inc"
53#include "param_c.inc"
54
55
56
57 INTEGER, INTENT(IN) :: NEL
58 INTEGER IPARTR(*),NC1(*),NC2(*)
59
61 . xl(*), vx2l(*),ry1l(*), rz1l(*), rx2l(*), ry2l(*), rz2l(*),
62 . fr_wave(*) ,fr_w_e(*),eint(*) ,
63 . fx(*), fy(*), fz(*), xmom(*), ymom(*),zmom(*),partsav(npsav,*),
64 . exx(mvsiz), eyx(mvsiz), ezx(mvsiz),
65 . exy(mvsiz), eyy(mvsiz), ezy(mvsiz),
66 . exz(mvsiz), eyz(mvsiz), ezz(mvsiz), rx1(mvsiz), rx2(mvsiz),
67 . ry1(mvsiz), ry2(mvsiz), rz1(mvsiz), rz2(mvsiz), vx1(mvsiz),
68 . vx2(mvsiz), vy1(mvsiz), vy2(mvsiz), vz1(mvsiz), vz2(mvsiz)
69
70
71
72 INTEGER I,MX
73
75 . vx1l, vy1l, vy2l, vz1l, vz2l,theta , xldemi,xsign
76
77
78
79
80 DO i=1,nel
81 rx2l(i) = exx(i)*(rx2(i)-rx1(i))
82 . + eyx(i)*(ry2(i)-ry1(i))
83 . + ezx(i)*(rz2(i)-rz1(i))
84 ry1l(i) = exy(i)*rx1(i)+eyy(i)*ry1(i)+ezy(i)*rz1(i)
85 ry2l(i) = exy(i)*rx2(i)+eyy(i)*ry2(i)+ezy(i)*rz2(i)
86 rz1l(i) = exz(i)*rx1(i)+eyz(i)*ry1(i)+ezz(i)*rz1(i)
87 rz2l(i) = exz(i)*rx2(i)+eyz(i)*ry2(i)+ezz(i)*rz2(i)
88 vx2l(i) = exx(i)*(vx2(i)-vx1(i))
89 . + eyx(i)*(vy2(i)-vy1(i))
90 . + ezx(i)*(vz2(i)-vz1(i))
91 vy2l = exy(i)*(vx2(i)-vx1(i))
92 . + eyy(i)*(vy2(i)-vy1(i))
93 . + ezy(i)*(vz2(i)-vz1(i))
94 xsign = sign(one, xl(i) - half*vx2l(i)*dt1)
95 xldemi = xsign/
max(em15,abs(xl(i) - half*vx2l(i)*dt1))
96 theta = vy2l * xldemi
97 rz1l(i) = rz1l(i) - theta
98 rz2l(i) = rz2l(i) - theta
99 vz2l = exz(i)*(vx2(i)-vx1(i))
100 . + eyz(i)*(vy2(i)-vy1(i))
101 . + ezz(i)*(vz2(i)-vz1(i))
102 theta = vz2l * xldemi
103 ry1l(i) = ry1l(i) + theta
104 ry2l(i) = ry2l(i) + theta
105 vx2l(i) = vx2l(i)
106 . - half*dt1*xldemi*(vy2l*vy2l+vz2l*vz2l)
107 ENDDO
108
109
110
111 DO i=1,nel
112 eint(i) = eint(i)
113 .+ half*dt1 * (vx2l(i) * fx(i) + rx2l(i) * xmom(i)
114 . + (ry2l(i) - ry1l(i)) * ymom(i)
115 . + (rz2l(i) - rz1l(i)) * zmom(i)
116 . + half * (ry2l(i) + ry1l(i)) * fz(i) * xl(i)
117 . - half * (rz2l(i) + rz1l(i)) * fy(i) * xl(i) )
118 ENDDO
119
120 IF (npsav >= 21) THEN
121 DO i=1,nel
122 mx = ipartr(i)
123 partsav(23,mx)=partsav(23,mx)
124 . + half*dt1 * (rx2l(i) * xmom(i)
125 . + (ry2l(i) - ry1l(i)) * ymom(i)
126 . + (rz2l(i) - rz1l(i)) * zmom(i)
127 . + half * (ry2l(i) + ry1l(i)) * fz(i) * xl(i)
128 . - half * (rz2l(i) + rz1l(i)) * fy(i) * xl(i) )
129 ENDDO
130 ENDIF
131
132
133
134 IF (ifrwv /= 0) THEN
135 DO i=1,nel
136 fr_w_e(i)=
max(fr_wave(nc1(i)),fr_wave(nc2(i)),zero)
137 ENDDO
138 ENDIF
139
140 RETURN