32 SUBROUTINE i14dmp(X ,V ,KSURF ,IGRSURF,BUFSF ,
33 2 NSC ,KSC ,NSP ,KSP ,KSI ,
34 3 IMPACT ,CIMP ,NIMP ,VISC ,NDAMP1 ,
35 4 NDAMP2 ,GAPMIN ,NPC ,PLD ,MS ,
44#include "implicit_f.inc"
56 INTEGER NSC, NSP, KSURF,KSI(*),
57 . IMPACT(*), NDAMP1, NDAMP2, NPC(*)
60 . x(3,*) ,v(3,*) , bufsf(*), ksc(*), ksp(*),
61 . cimp(3,*) ,nimp(3,*) , visc , gapmin, pld(*),
62 . ms(*) ,wf(*) , wst(*), stf
63 TYPE (SURF_) ,
DIMENSION(NSURF) :: IGRSURF
67 INTEGER ADRBUF, I, IL, IN
72 . a, b, c, an, bn, cn, rot(9),
73 . x1, x2, x3, n1, n2, n3, n,
74 . xpvn1, ypvn1, zpvn1, sgnxn, sgnyn, sgnzn,
75 . xm, ym, zm, xi, yi, zi,
76 . v1, v2, v3, vxm, vym, vzm, vrx, vry, vrz,
77 . vxp, vyp, vzp,vxi, vyi, vzi,
80 . xpv(3,mvsiz),nv(3,mvsiz),fnpv(mvsiz),vis(mvsiz),
81 . visc1(mvsiz),visc2(mvsiz),vn(mvsiz)
83 adrbuf=igrsurf(ksurf)%IAD_BUFR
96 rot(i)=bufsf(adrbuf+7+i-1)
105 x1=bufsf(adrbuf+16)-bufsf(adrbuf+4)
106 x2=bufsf(adrbuf+17)-bufsf(adrbuf+5)
107 x3=bufsf(adrbuf+18)-bufsf(adrbuf+6)
108 xm=rot(1)*x1+rot(2)*x2+rot(3)*x3
109 ym=rot(4)*x1+rot(5)*x2+rot(6)*x3
110 zm=rot(7)*x1+rot(8)*x2+rot(9)*x3
117 vxm=rot(1)*v1+rot(2)*v2+rot(3)*v3
118 vym=rot(4)*v1+rot(5)*v2+rot(6)*v3
119 vzm=rot(7)*v1+rot(8)*v2+rot(9)*v3
126 vrx=rot(1)*v1+rot(2)*v2+rot(3)*v3
127 vry=rot(4)*v1+rot(5)*v2+rot(6)*v3
128 vrz=rot(7)*v1+rot(8)*v2+rot(9)*v3
136 DO i=1,
min(mvsiz,nrest)
148 IF (ndamp1==0 .AND. ndamp2==0)
THEN
150 DO i=1,
min(mvsiz,nrest)
153 vis(i) = visc*2.*sqrt(stf*ms(in))
155 ELSEIF (ndamp1==0)
THEN
157 CALL ninterp(ndamp2,npc,pld,
min(mvsiz,nrest),fnpv,visc2)
158 DO i=1,
min(mvsiz,nrest)
161 ELSEIF (ndamp2==0)
THEN
163 DO i=1,
min(mvsiz,nrest)
169 vn(i) =v(1,in)*nv(1,i)+v(2,in)*nv(2,i)+v(3,in)*nv(3,i)
171 CALL ninterp(ndamp1,npc,pld,
min(mvsiz,nrest),vn,visc1)
172 DO i=1,
min(mvsiz,nrest)
177 DO i=1,
min(mvsiz,nrest)
183 vn(i) =v(1,in)*nv(1,i)+v(2,in)*nv(2,i)+v(3,in)*nv(3,i)
185 CALL ninterp(ndamp1,npc,pld,
min(mvsiz,nrest),vn ,visc1)
186 CALL ninterp(ndamp2,npc,pld,
min(mvsiz,nrest),fnpv,visc2)
187 DO i=1,
min(mvsiz,nrest)
188 vis(i)=visc*visc1(i)*visc2(i)
194#include "vectorize.inc"
195 DO i=1,
min(mvsiz,nrest)
199 IF (impact(il)>0)
THEN
200 xi=cimp(1,il)+gapmin*nimp(1,il)
201 yi=cimp(2,il)+gapmin*nimp(2,il)
202 zi=cimp(3,il)+gapmin*nimp(3,il)
207 vxp=rot(1)*v1+rot(2)*v2+rot(3)*v3
208 vyp=rot(4)*v1+rot(5)*v2+rot(6)*v3
209 vzp=rot(7)*v1+rot(8)*v2+rot(9)*v3
211 vxi=vxm+(ym-yi)*vrz-(zm-zi)*vry
212 vyi=vym-(xm-xi)*vrz+(zm-zi)*vrx
213 vzi=vzm+(xm-xi)*vry-(ym-yi)*vrx
215 ff =-vis(i)*(nv(1,i)*(vxp-vxi)+nv(2,i)*(vyp-vyi)
216 . +nv(3,i)*(vzp-vzi))
225 IF (nrest-mvsiz>0)
THEN
237 DO i=1,
min(mvsiz,nrest)
249 IF (ndamp1==0 .AND. ndamp2==0)
THEN
251 DO i=1,
min(mvsiz,nrest)
254 vis(i) = visc*two*sqrt(stf*ms(in))
256 ELSEIF (ndamp1==0)
THEN
258 CALL ninterp(ndamp2,npc,pld,
min(mvsiz,nrest),fnpv,visc2)
259 DO i=1,
min(mvsiz,nrest)
262 ELSEIF (ndamp2==0)
THEN
264 DO i=1,
min(mvsiz,nrest)
270 vn(i) =v(1,in)*nv(1,i)+v(2,in)*nv(2,i)+v(3,in)*nv
272 CALL ninterp(ndamp1,npc,pld,
min(mvsiz,nrest),vn,visc1)
273 DO i=1,
min(mvsiz,nrest)
278 DO i=1,
min(mvsiz,nrest)
284 vn(i) =v(1,in)*nv(1,i)+v(2,in)*nv(2,i)+v(3,in)*nv(3,i)
286 CALL ninterp(ndamp1,npc,pld,
min(mvsiz,nrest),vn ,visc1)
287 CALL ninterp(ndamp2,npc,pld,
min(mvsiz,nrest),fnpv,visc2)
288 DO i=1,
min(mvsiz,nrest)
289 vis(i)=visc*visc1(i)*visc2(i)
295#include "vectorize.inc"
296 DO i=1,
min(mvsiz,nrest)
300 xi=cimp(1,il)+gapmin*nimp(1,il)
301 yi=cimp(2,il)+gapmin*nimp(2,il)
302 zi=cimp(3,il)+gapmin*nimp(3,il)
307 vxp=rot(1)*v1+rot(2)*v2+rot(3)*v3
308 vyp=rot(4)*v1+rot(5)*v2+rot(6)*v3
309 vzp=rot(7)*v1+rot(8)*v2+rot(9)*v3
311 vxi=vxm+(ym-yi)*vrz-(zm-zi)*vry
312 vyi=vym-(xm-xi)*vrz+(zm-zi)*vrx
313 vzi=vzm+(xm-xi)*vry-(ym-yi)*vrx
315 ff =-vis(i)*(nv(1,i)*(vxp-vxi)+nv(2,i)*(vyp-vyi)
316 . +nv(3,i)*(vzp-vzi))
322 IF (nrest-mvsiz>0)
THEN