34
35
36
37#include "implicit_f.inc"
38
39
40
41#include "com08_c.inc"
42#include "param_c.inc"
43#include "scr23_c.inc"
44
45
46
47 INTEGER, INTENT(IN) :: IGRE
48 INTEGER KXX(NIXX),IXX(*),NX,KEUSR,IPART,GRTH(*),IGRTH(*)
49
51 . x(3,*),v(3,*),vr(3,*),umass(*), uiner(*),forc(3,*),
52 . torq(3,*),eusr,eint,partsav(npsav,*),gresav(npsav,*)
53
54
55
56 INTEGER I, K, IP, I1, IADNOD,J
57
59 . ems, xi
60
61 iadnod=kxx(4)
62 IF (keusr==0) THEN
63 DO k=1,nx
64 i1 = ixx(iadnod+k-1)
65 ems=umass(k)
66 xi =uiner(k)
67
68
69 eint = eint
70 . -dt1*(v(1,i1)*forc(1,k)+v(2,i1)*forc(2,k)+v(3,i1)*forc(3,k)
71 . +vr(1,i1)*torq(1,k)+vr(2,i1)*torq(2,k)+vr(3,i1)*torq(3,k))
72 ip=ipart
73 partsav(2,ip)=partsav(2,ip) + half * ems *
74 . (v(1,i1)*v(1,i1)+v(2,i1)*v(2,i1)+v(3,i1)*v(3,i1))
75 partsav(3,ip)=partsav(3,ip) + ems*v(1,i1)
76 partsav(4,ip)=partsav(4,ip) + ems*v(2,i1)
77 partsav(5,ip)=partsav(5,ip) + ems*v(3,i1)
78 partsav(6,ip)=partsav(6,ip) + ems
79 partsav(7,ip)=partsav(7,ip) + half * xi *
80 . (vr(1,i1)*vr(1,i1)+vr(2,i1)*vr(2,i1)+vr(3,i1)*vr(3,i1))
81 ENDDO
82 IF (igre /= 0) THEN
83 IF (igrth(1) /= igrth(2)) THEN
84 DO j = igrth(1),igrth(2)-1
85 gresav(1,grth(j)) = gresav(1,grth(j)) + eint
86 gresav(2,grth(j)) = gresav(2,grth(j)) + half * ems *
87 . (v(1,i1)*v(1,i1)+v(2,i1)*v(2,i1)+v(3,i1)*v(3,i1))
88 gresav(3,grth(j)) = gresav(3,grth(j)) + ems*v(1,i1)
89 gresav(4,grth(j)) = gresav(4,grth(j)) + ems*v(2,i1)
90 gresav(5,grth(j)) = gresav(5,grth(j)) + ems*v(3,i1)
91 gresav(6,grth(j)) = gresav(6,grth(j)) + ems
92 ENDDO
93 ENDIF
94 ENDIF
95 ELSE
96 DO k=1,nx
97 i1 = ixx(iadnod+k-1)
98 ems=umass(k)
99 xi =uiner(k)
100 ip=ipart
101 partsav(2,ip)=partsav(2,ip) + half * ems *
102 . (v(1,i1)*v(1,i1)+v(2,i1)*v(2,i1)+v(3,i1)*v(3,i1))
103 partsav(3,ip)=partsav(3,ip) + ems*v(1,i1)
104 partsav(4,ip)=partsav(4,ip) + ems*v(2,i1)
105 partsav(5,ip)=partsav(5,ip) + ems*v(3,i1)
106 partsav(6,ip)=partsav(6,ip) + ems
107 partsav(7,ip)=partsav(7,ip) + half * xi *
108 . (vr(1,i1)*vr(1,i1)+vr(2,i1)*vr(2,i1)+vr(3,i1)*vr(3,i1))
109 ENDDO
110 IF (igre /= 0) THEN
111 IF (igrth(1) /= igrth(2)) THEN
112 DO j = igrth(1),igrth(2)-1
113 gresav(1,grth(j)) = gresav(1,grth(j)) + eint
114 gresav(2,grth(j)) = gresav(2,grth(j)) + half * ems *
115 . (v(1,i1)*v(1,i1)+v(2,i1)*v(2,i1)+v(3,i1)*v
116 gresav(3,grth(j)) = gresav(3,grth(j)) + ems*v(1,i1)
117 gresav(4,grth(j)) = gresav(4,grth(j)) + ems*v(2,i1)
118 gresav(5,grth(j)) = gresav(5,grth(j)) + ems*v(3,i1)
119 gresav(6,grth(j)) = gresav(6,grth(j)) + ems
120 ENDDO
121 ENDIF
122 ENDIF
123 eint=eusr
124 ENDIF
125 partsav(1,ip)=partsav(1,ip) + eint
126
127 RETURN