42
43
44
45#include "implicit_f.inc"
46
47
48
49#include "mvsiz_p.inc"
50
51
52
53 INTEGER, INTENT(INOUT) :: LFT
54 INTEGER, INTENT(INOUT) :: LLT
55 INTEGER, INTENT(INOUT) :: NFT
56 INTEGER NDAMP1 ,NDAMP2
57 INTEGER IRECT(4,*),MSR(*),NSV(*),IRTL(*),IRTLO(*),NPC(*),LOLD(*)
58
60 . visc,ascalf,ascalv,fscalv
62 . v(3,*),cst(2,*),es(*),em(*),tf(*),mass(*),vni(*)
63 my_real,
DIMENSION(MVSIZ),
INTENT(IN) :: h1,h2,h3,h4,fni
64 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: fxi,fyi,fzi
65 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: fx1,fx2,fx3,fx4
66 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: fy1,fy2,fy3,fy4
67 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: fz1,fz2,fz3,fz4
68
69
70
71
72
73
74 INTEGER I,IG,IL, L, J3, J2, J1, I3, I2, I1
75
77 . fdamp
79 . vis(llt),viscv(llt),fact(llt),xx(llt)
80
81
82
83 IF (ndamp1 > 0) THEN
84 DO i=lft,llt
85 xx(i) = vni(i)*ascalv
86 ENDDO
87 CALL ninterp(ndamp1,npc,tf,llt,xx,viscv)
88 ELSE
89 viscv(1:llt) = zero
90 ENDIF
91
92 IF (ndamp2 > 0) THEN
93 DO i=lft,llt
94 xx(i) = fni(i)*ascalf
95 ENDDO
96 CALL ninterp(ndamp2,npc,tf,llt,xx,fact)
97 ELSE
98 fact(1:llt) = one
99 ENDIF
100
101 DO i=lft,llt
102 il = i+nft
103 fxi(i) = zero
104 fyi(i) = zero
105 fzi(i) = zero
106
107 IF (lold(i) /= 0) THEN
108 ig = nsv(il)
109 l = irtl(il)
110
111 fdamp = - (visc*vni(i) + fscalv*viscv(i))*fact(i)
112
113
114
115
116 fxi(i) = fdamp
117 fyi(i) = fdamp
118 fzi(i) = fdamp
119
120 fx1(i)=fxi(i)*h1(i)
121 fy1(i)=fyi(i)*h1(i)
122 fz1(i)=fzi(i)*h1(i)
123
124 fx2(i)=fxi(i)*h2(i)
125 fy2(i)=fyi(i)*h2(i)
126 fz2(i)=fzi(i)*h2(i)
127
128 fx3(i)=fxi(i)*h3(i)
129 fy3(i)=fyi(i)*h3(i)
130 fz3(i)=fzi(i)*h3(i)
131
132 fx4(i)=fxi(i)*h4(i)
133 fy4(i)=fyi(i)*h4(i)
134 fz4(i)=fzi(i)*h4(i)
135
136
137
138 j3=3*irect(1,l)
139 j2=j3-1
140 j1=j2-1
141 em(j1)=em(j1)+fx1(i)
142 em(j2)=em(j2)+fy1(i)
143 em(j3)=em(j3)+fz1(i)
144
145 j3=3*irect(2,l)
146 j2=j3-1
147 j1=j2-1
148 em(j1)=em(j1)+fx2(i)
149 em(j2)=em(j2)+fy2(i)
150 em(j3)=em(j3)+fz2(i)
151
152 j3=3*irect(3,l)
153 j2=j3-1
154 j1=j2-1
155 em(j1)=em(j1)+fx3(i)
156 em(j2)=em(j2)+fy3(i)
157 em(j3)=em(j3)+fz3(i)
158
159 j3=3*irect(4,l)
160 j2=j3-1
161 j1=j2-1
162 em(j1)=em(j1)+fx4(i)
163 em(j2)=em(j2)+fy4(i)
164 em(j3)=em(j3)+fz4(i)
165
166
167
168 i3 = 3*il
169 i2 = i3-1
170 i1 = i2-1
171 es(i1) = es(i1)-fxi(i)
172 es(i2) = es(i2)-fyi(i)
173 es(i3) = es(i3)-fzi(i)
174
175 ENDIF
176
177 ENDDO
178
179 RETURN
subroutine ninterp(ifunc, npc, pld, npoint, xv, yv)