34
35
36
38
39
40
41#include "implicit_f.inc"
42
43
44
45#include "com08_c.inc"
46#include "param_c.inc"
47#include "task_c.inc"
48#include "intstamp_c.inc"
49
50
51
52 INTEGER NPC(*), NODNX_SMS(*), NPBY(NNPBY,*)
53
55 . tf(*), skew(lskew,*), v(3,*), vr(3,*), ms(*), x(3,*), d(3,*),
56 . rby(nrby,*)
57 TYPE(INTSTAMP_DATA) INTSTAMP(*)
58
59
60
61 INTEGER NN, IRB, MAIN, J, INTDAMP, MSR, MSRR, IROT
62
64 . dw,
alpha, mass, vis, stf, str, inm, vx, vy, vz,
65 . fvx, fvy, fvz
66
67 DO nn=1,nintstamp
68
69
70
71 IF(ispmd==0)THEN
72 intdamp=intstamp(nn)%INTDAMP
73 alpha=intstamp(nn)%DAMP
74 mass=intstamp(nn)%MASS
75 stf =intstamp(nn)%STF
76 vis =
alpha*sqrt(four*mass*stf)
77 msr=intstamp(nn)%MSR
78 IF(intdamp==0)THEN
79 fvx=vis*intstamp(nn)%V(1)
80 fvy=vis*intstamp(nn)%V(2)
81 fvz=vis*intstamp(nn)%V(3)
82 dw=-(fvx*v(1,msr)+fvy*v(2,msr)+fvz*v(3,msr))
83 ELSE
84 msrr=intstamp(nn)%MSR
85 fvx=vis*(intstamp(nn)%V(1)-intstamp(intdamp)%V(1))
86 fvy=vis*(intstamp(nn)%V(2)-intstamp(intdamp)%V(2))
87 fvz=vis*(intstamp(nn)%V(3)-intstamp(intdamp)%V(3))
88 dw=-two*( fvx*(v(1,msr)-v(1,msrr))
89 . +fvy*(v(2,msr)-v(2,msrr))
90 . +fvz*(v(3,msr)-v(3,msrr)))
91 END IF
92 intstamp(nn)%DW = half * dt2 * dw
93 irot=intstamp(nn)%IROT
94 IF(irot/=0)THEN
95 alpha=intstamp(nn)%DAMPR
96 inm=
min(intstamp(nn)%IN(1),
97 . intstamp(nn)%IN(2),
98 . intstamp(nn)%IN(3))
99 str =intstamp(nn)%STR
100 vis =
alpha*sqrt(four*inm*str)
101 IF(intdamp==0)THEN
102 fvx=vis*intstamp(nn)%VR(1)
103 fvy=vis*intstamp(nn)%VR(2)
104 fvz=vis*intstamp(nn)%VR(3)
105 dw=-(fvx*vr(1,msr)+fvy*vr(2,msr)+fvz*vr(3,msr))
106 ELSE
107 fvx=vis*(intstamp(nn)%VR(1)-intstamp(intdamp)%VR(1))
108 fvy=vis*(intstamp(nn)%VR(2)-intstamp(intdamp)%VR(2))
109 fvz=vis*(intstamp(nn)%VR(3)-intstamp(intdamp)%VR(3))
110 dw=-two*( fvx*(vr(1,msr)-vr(1,msrr))
111 . +fvy*(vr(2,msr)-vr(2,msrr))
112 . +fvz*(vr(3,msr)-vr(3,msrr)))
113 END IF
114 intstamp(nn)%DW = intstamp(nn)%DW + half * dt2 * dw
115 END IF
116 END IF
117 ENDDO
118
119
120
121 DO nn=1,nintstamp
122 irb =intstamp(nn)%IRB
123 main=intstamp(nn)%MSR
124 intstamp(nn)%V(1) =v(1,
main)
125 intstamp(nn)%V(2) =v(2,
main)
126 intstamp(nn)%V(3) =v(3,
main)
127 intstamp(nn)%D(1) =d(1,
main)
128 intstamp(nn)%D(2) =d(2,
main)
129 intstamp(nn)%D(3) =d(3,
main)
130 intstamp(nn)%XG(1) =x(1,
main)
131 intstamp(nn)%XG(2) =x(2,
main)
132 intstamp(nn)%XG(3) =x(3,
main)
133 IF(intstamp(nn)%IROT/=0)THEN
134 intstamp(nn)%VR(1) =vr(1,
main)
135 intstamp(nn)%VR(2) =vr(2,
main)
136 intstamp(nn)%VR(3) =vr(3,
main)
137 intstamp(nn)%MASS =ms(
main)
138 DO j=1,9
139 intstamp(nn)%ROT(j)=rby(j,irb)
140 END DO
141 END IF
142 END DO
143
144 RETURN
int main(int argc, char *argv[])