36 SUBROUTINE fixvel(IBFV ,A ,V ,NPC ,TF ,
37 2 VEL ,MS ,X ,SKEW ,AR ,
38 3 VR ,IN ,NSENSOR,SENSOR_TAB,
39 4 WEIGHT,DEPLA ,RBY ,IFRAME,
40 5 XFRAME,DR ,NODNX_SMS, NODES,
41 6 TT_DOUBLE,DEPLA_DOUBLE, PYTHON, WFEXT)
46 USE python_call_funct_cload_mod,
ONLY: python_call_funct_cload
52#include "implicit_f.inc"
69 TYPE(nodal_arrays_) ,
INTENT(IN) :: NODES
70 INTEGER ,
INTENT(IN) :: NSENSOR
72 INTEGER IBFV(NIFV,*),WEIGHT(*),IFRAME(LISKN,*),NODNX_SMS(*)
73 my_real,
DIMENSION(3,*),
TARGET :: DEPLA
74 REAL(KIND=8), dimension(3,*),
TARGET :: depla_double
75 REAL(KIND=8) :: tt_double
77 . a(3,*), v(3,*), tf(*), vel(lfxvelr,*), ms(*), x(3,*),
78 . skew(lskew,*), ar(3,*), vr(3,*), in(*),
79 . rby(nrby,*),xframe(nxframe,*), dr(3,*)
80 TYPE (SENSOR_STR_) ,
DIMENSION(NSENSOR) ,
INTENT(IN) :: SENSOR_TAB
81 TYPE(python_),
INTENT(INOUT) :: PYTHON
82 DOUBLE PRECISION,
INTENT(INOUT) :: WFEXT
86 INTEGER N, I, ISK, J, L, K1, K2, K3, ISENS,K,
87 . ii, ic, nn, ideb, nr, nsk, nfk, ifm, n0,
88 . ilenc(mvsiz), iposc(mvsiz), iadc(mvsiz),
89 . lc(mvsiz), index(mvsiz), icoor, ismooth,jj
91 . ax, axi, aold, vv, a0, aa, startt, stopt,
92 . dydx,dw,dw2,dd,rx,ry,rz,vf,vfx,vfy,vfz,afx,afy,afz,rw_sms(mvsiz),
93 . r, cth, sth, skdir(3), fmdir(3), hx, hy, hz, coef,
94 . er(3),et(3),
alpha, nor1, nor2, nor3, yimp, skewglob,
95 . aold0(6,mvsiz),dfj,qf0(9),ej(3),ddf,ddr,rf
97 REAL(KIND=8) :: tstmp,fac,facx,yc0(mvsiz),yc(mvsiz),tsc0(mvsiz),tsc(mvsiz),dydxc(mvsiz)
98 INTEGER,
DIMENSION(MVSIZ) :: ILENC_SMOOTH,IPOSC_SMOOTH,IADC_SMOOTH
99 my_real,
DIMENSION(MVSIZ) :: YC0_SMOOTH,YC_SMOOTH,TSC0_SMOOTH,TSC_SMOOTH,DYDXC_SMOOTH
100 INTEGER :: NINDEX_SMOOTH,NINDEX_SMOOTH_WSENS
101 INTEGER,
DIMENSION(MVSIZ) ::INDEX_SMOOTH
103 INTEGER,
DIMENSION(MVSIZ) :: ILENC_WO_SMOOTH,IPOSC_WO_SMOOTH,IADC_WO_SMOOTH
104 REAL(KIND=8), dimension(mvsiz) :: yc0_wo_smooth,yc_wo_smooth,tsc0_wo_smooth,tsc_wo_smooth,dydxc_wo_smooth
105 INTEGER :: NINDEX_WO_SMOOTH,NINDEX_WO_SMOOTH_WSENS
106 INTEGER,
DIMENSION(MVSIZ) ::INDEX_WO_SMOOTH
108 REAL(KIND=8), dimension(:,:),
POINTER :: d
109 REAL(KIND=8) :: dt2_double
111 INTEGER,
DIMENSION(MVSIZ) :: NSENS
112 REAL(KIND=8),
DIMENSION(MVSIZ) :: TS
116 d => depla_double(1:3,1:numnod)
119 d => depla(1:3,1:numnod)
134 IF (ibfv(8,nn) == 1) cycle
136 IF (nsensor > 0)
THEN
137 DO ii = 1,
min(nfxvel-ideb,nvsiz)
139 IF (ibfv(13,n) > 0 ) cycle
143 IF (tt_double < startt) cycle
144 IF (tt_double > stopt) cycle
148 tstmp = tt_double - sensor_tab(isens)%TSTART
149 IF (tstmp < zero) cycle
157 IF (ibfv(7,n) == 1)
THEN
158 tsc(ic) = (ts(ic)+half*dt2_double)*facx
159 ELSEIF (ibfv(7,n) == 2)
THEN
160 tsc0(ic) = ts(ic)*facx
161 tsc(ic) = (ts(ic)+dt2_double)*facx
163 tsc(ic) = (ts(ic)+dt2_double)*facx
165 IF(idtmins==0.AND.idtmins_int==0)
THEN
172 IF (ifm<=1) j=j-10*isk
173 IF(nodnx_sms(i)==0)
THEN
183 DO ii = 1,
min(nfxvel-ideb,nvsiz)
185 IF(ibfv(13,n) > 0 ) cycle
189 IF (tt_double < startt) cycle
190 IF (tt_double > stopt) cycle
194 IF(ibfv(7,n) == 1)
THEN
195 tsc(ic) = (tt_double + half*dt2_double)*facx
197 tsc(ic) = (tt_double+dt2_double)*facx
199 IF(idtmins==0.AND.idtmins_int==0)
THEN
206 IF (ifm<=1) j=j-10*isk
207 IF(nodnx_sms(i)==0)
THEN
216 ideb = ideb +
min(nfxvel-ideb,nvsiz)
225 IF (l > 0) ismooth = npc
226 IF(nsens(ii) > 0 .and. ts(ii) >= zero .and. ibfv(7,n) == 2)
THEN
228 nindex_smooth = nindex_smooth + 1
229 index_smooth(nindex_smooth) = ii
230 tsc_smooth(nindex_smooth) = tsc(ii)
231 tsc0_smooth(nindex_smooth) = tsc0(ii)
232 ELSE IF(ismooth==0)
THEN
233 nindex_wo_smooth = nindex_wo_smooth + 1
234 index_wo_smooth(nindex_wo_smooth) = ii
235 tsc_wo_smooth(nindex_wo_smooth) = tsc(ii)
236 tsc0_wo_smooth(nindex_wo_smooth) = tsc0(ii)
237 ELSE IF(ismooth<0)
THEN
240 CALL python_call_funct_cload(python, l, tsc(ii),yc(ii),i,nodes)
241 CALL python_call_funct_cload(python, l, tsc0(ii),yc0(ii),i,nodes)
245 nindex_smooth_wsens = nindex_smooth
246 nindex_wo_smooth_wsens = nindex_wo_smooth
252 IF (l > 0) ismooth = npc(2*nfunct+l+1)
253 IF(nsens(ii) == 0 .or. ts(ii) < zero .or. ibfv(7,n) /= 2)
THEN
255 nindex_smooth = nindex_smooth + 1
256 index_smooth(nindex_smooth) = ii
257 tsc_smooth(nindex_smooth) = tsc(ii)
258 ELSE IF(ismooth==0)
THEN
259 nindex_wo_smooth = nindex_wo_smooth + 1
260 index_wo_smooth(nindex_wo_smooth) = ii
261 tsc_wo_smooth(nindex_wo_smooth) = tsc(ii)
262 ELSE IF(ismooth<0)
THEN
265 CALL python_call_funct_cload(python, l, tsc(ii),yc(ii),i,nodes)
270 DO ii=1,nindex_wo_smooth
271 jj = index_wo_smooth(ii)
274 IF (l > 0) ismooth = npc(2*nfunct+l+1)
276 iposc_wo_smooth(ii) = 0
278 iposc_wo_smooth(ii) = ibfv(5,n)
280 iadc_wo_smooth(ii) = npc(l) / 2 + 1
281 ilenc_wo_smooth(ii) = npc(l+1) / 2 - iadc_wo_smooth(ii) - iposc_wo_smooth(ii)
284 DO ii=1,nindex_smooth
285 jj = index_smooth(ii)
288 IF (l > 0) ismooth = npc(2*nfunct+l+1)
292 iposc_smooth(ii) = ibfv(5,n)
294 iadc_smooth(ii) = npc(l) / 2 + 1
295 ilenc_smooth(ii) = npc(l+1) / 2 - iadc_smooth(ii) - iposc_smooth(ii)
298 IF (nindex_wo_smooth > 0)
THEN
299 IF (nindex_wo_smooth_wsens > 0)
300 .
CALL vinterdp(tf,iadc_wo_smooth,iposc_wo_smooth,ilenc_wo_smooth,nindex_wo_smooth_wsens,
301 1 tsc0_wo_smooth,dydxc_wo_smooth,yc0_wo_smooth)
302 CALL vinterdp(tf,iadc_wo_smooth,iposc_wo_smooth,ilenc_wo_smooth,nindex_wo_smooth,
303 1 tsc_wo_smooth,dydxc_wo_smooth,yc_wo_smooth)
305 DO ii=1,nindex_wo_smooth
306 jj = index_wo_smooth(ii)
307 yc(jj) = yc_wo_smooth(ii)
308 yc0(jj) = yc0_wo_smooth(ii)
309 iposc(jj) = iposc_wo_smooth(ii)
312 IF (nindex_smooth > 0)
THEN
313 IF (nindex_smooth_wsens > 0)
314 .
CALL vinter_smooth(tf,iadc_smooth,iposc_smooth,ilenc_smooth,nindex_smooth_wsens,
315 1 tsc0_smooth,dydxc_smooth,yc0_smooth)
316 CALL vinter_smooth(tf,iadc_smooth,iposc_smooth,ilenc_smooth,nindex_smooth,
317 1 tsc_smooth,dydxc_smooth,yc_smooth)
318 DO ii=1,nindex_smooth
319 jj = index_smooth(ii)
320 yc(jj) = yc_smooth(ii)
321 yc0(jj) = yc0_smooth(ii)
322 iposc(jj) = iposc_smooth(ii)
328 IF (ivector == 0)
THEN
331 ibfv(5,n) = iposc(ii)
338 wfext = wfext + rw_sms(ii)*dw
339 vel(4,n) = (one-rw_sms(ii))*vel(4,n)
340 IF (nsens(ii) > 0 .and. ts(ii) > zero .and. ibfv(7,n) == 2) yc0(ii) = yc0(ii) * fac
341 yc(ii) = yc(ii) * fac
347 IF (skew(1,isk) == one .AND. skew(2,isk) == zero .AND.
348 . skew(3,isk) == zero .AND. skew(4,isk) == zero .AND.
349 . skew(5,isk) == one .AND. skew(6,isk) == zero .AND.
350 . skew(7,isk) == zero .AND. skew(8,isk) == zero .AND.
351 . skew(9,isk) == one ) skewglob = 1
359 IF (ifm<=1) j=j-10*isk
362 IF (isk<=1.AND.ifm<=1.AND.icoor == 0)
THEN
363 IF (ibfv(7,n) == 2)
THEN
364 IF (nsens(ii) > 0 .and. ts(ii) > zero)
THEN
365 yc(ii) = (yc(ii)-yc0(ii))/dt2_double
367 yc(ii)=(yc(ii)-d(j,i))/dt2_double
370 IF(ibfv(7,n)>=1) yc(ii)=(yc(ii)-v(j,i))/dt12
373 dw = fourth*ms(i)*axi*weight(i)
374 . * (a(j,i)*dt12 + two*v(j,i))*(a(j,i)-aold)
376 ELSEIF(isk > 1.AND.ifm<=1.AND.icoor == 0.AND.
378 IF (ibfv(7,n) == 2)
THEN
379 IF (nsens(ii) > 0 .and. ts(ii) > zero)
THEN
380 yc(ii) = (yc(ii)-yc0(ii))/dt2_double
382 yc(ii)=(yc(ii)-d(j,i))/dt2_double
385 IF (ibfv(7,n)>=1) yc(ii)=(yc(ii)-v(j,i))/dt12
388 dw = fourth*ms(i)*axi*weight(i)
389 . * (a(j,i)*dt12 + two*v(j,i))*(a(j,i)-aold)
390 ELSEIF (isk > 1 .AND. icoor == 0)
THEN
394 IF (ibfv(7,n) == 2)
THEN
395 dd = skew(k1,isk)*d(1,i) +
396 . skew(k2,isk)*d(2,i) +
397 . skew(k3,isk)*d(3,i)
399 vv = skew(k1,isk)*v(1,i) +
400 . skew(k2,isk)*v(2,i) +
401 . skew(k3,isk)*v(3,i)
402 a0 = skew(k1,isk)*a(1,i) +
403 . skew(k2,isk)*a(2,i) +
404 . skew(k3,isk)*a(3,i)
406 IF (ibfv(7,n) == 2)
THEN
407 IF (nsens(ii) > 0 .and. ts(ii) > zero)
THEN
408 yc(ii) = (yc(ii)-yc0(ii))/dt2_double
410 yc(ii) = (yc(ii)-dd)/dt2_double
413 IF (ibfv(7,n) >= 1) yc(ii) = (yc(ii)-vv)/dt12
415 a(1,i)=a(1,i)+skew(k1,isk)*aa
416 a(2,i)=a(2,i)+skew(k2,isk)*aa
417 a(3,i)=a(3,i)+skew(k3,isk)*aa
418 dw = fourth*ms(i)*(yc(ii)*dt12+two*vv)*aa*axi*weight(i)
419 ELSEIF ((isk<=1.AND.ifm<=1.AND.icoor == 1) .OR.
420 & (isk > 1 .AND. icoor == 1))
THEN
421 coef = (skew(10,isk)-x(1,i))*skew(7,isk) +
422 & (skew(11,isk)-x(2,i))*skew(8,isk) +
423 & (skew(12,isk)-x(3,i))*skew(9,isk)
424 hx = coef*skew(7,isk)+x(1,i)-skew(10,isk)
425 hy = coef*skew(8,isk)+x(2,i)-skew(11,isk)
426 hz = coef*skew(9,isk)+x(3,i)-skew(12,isk)
427 r = sqrt(hx*hx+hy*hy+hz*hz)
432 cth = (skew(1,isk)*hx+skew(2,isk)*hy+skew(3,isk)*hz)/r
433 sth = (skew(4,isk)*hx+skew(5,isk)*hy+skew(6,isk)*hz
436 skdir(1) =cth*skew(1,isk)+ sth*skew(4,isk)
437 skdir(2) =cth*skew(2,isk)+ sth*skew(5,isk)
438 skdir(3) =cth*skew(3,isk)+ sth*skew(6,isk)
440 er(1) =cth*skew(1,isk)+ sth*skew(4,isk)
441 er(2) =cth*skew(2,isk)+ sth*skew(5,isk)
442 er(3) =cth*skew(3,isk)+ sth*skew(6,isk)
443 nor1=sqrt(er(1)*er(1)+er(2)*er(2)+er(3)*er(3))
444 IF (nor1 > em20) er=er/nor1
446 et(1) =cth*skew(4,isk)- sth*skew(1,isk)
447 et(2) =cth*skew(5,isk)- sth*skew(2,isk)
448 et(3) =cth*skew(6,isk)- sth*skew(3,isk)
449 nor2=sqrt(et(1)*et(1)+et(2)*et(2)+et(3)*et(3))
452 alpha=-yc(ii)*dt2_double/two
460 IF(ibfv(7,n) == 2) yimp= skdir(1)*d(1,i) +
464 nor3 = sqrt(skdir(1)*skdir(1)
466 & +skdir(3)*skdir(3))
467 skdir=skdir/
max(nor3,em20
468 vv = v(1,i)*skdir(1) + v(2,i)*skdir(2) + v(3,i)*skdir(3)
469 a0 = a(1,i)*skdir(1) + a(2,i)*skdir(2) + a(3,i)*skdir(3)
470 IF(ibfv(7,n) == 2) yc(ii)=(yc(ii)-yimp)/dt2_double
471 IF(ibfv(7,n)>=1)
THEN
475 yc(ii)=(r*yc(ii)-vv)/dt12
478 yc(ii)=(yc(ii)-vv)/dt12
483 a(1,i)=a(1,i)+skdir(1)*aa
484 a(2,i)=a(2,i)+skdir(2)*aa
485 a(3,i)=a(3,i)+skdir(3)*aa
486 dw = fourth*ms(i)*(yc(ii)*dt12+two*vv)*aa*axi*weight(i)
487 ELSEIF (ifm > 1.AND.icoor == 0)
THEN
492 rx = x(1,i) - xframe(10,ifm)
493 ry = x(2,i) - xframe(11,ifm)
494 rz = x(3,i) - xframe(12,ifm)
495 IF (ibfv(7,n) == 2)
THEN
496 qf0(1:9) = xframe(19:27,ifm)
500 dd = ej(1)*d(1,i) +ej(2)*d(2,i) + ej(3)*d(3,i)
501 ddf= ej(1)*xframe(34,ifm)+ej(2)*xframe(35,ifm)+ej(3)*xframe(36,ifm)
502 dfj= (ej(1)-xframe(k1,ifm))*rx+(ej(2)-xframe(k2,ifm))*ry+
503 . (ej(3)-xframe(k3,ifm))*rz + ddf
504 IF (nsens(ii) > 0 .and. ts(ii) > zero)
THEN
505 yc(ii) = (yc(ii)-yc0(ii))/dt2_double
507 yc(ii) = (yc(ii)-dd+dfj)/dt2_double
511 vfx = xframe(31,ifm)+xframe(14,ifm)*rz-xframe(15,ifm)*ry
513 vfz = xframe(33,ifm)+xframe(13,ifm)*ry-xframe(14,ifm)*rx
514 vf = xframe(k1,ifm)*vfx+xframe(k2,ifm)*vfy+xframe(k3,ifm)*vfz
516 vv = xframe(k1,ifm)*v(1,i)
517 . + xframe(k2,ifm)*v(2,i)
518 . + xframe(k3,ifm)*v(3,i)
519 a0 = xframe(k1,ifm)*a(1,i)
520 . + xframe(k2,ifm)*a(2,i)
521 . + xframe(k3,ifm)*a(3,i)
522 yc(ii)=(yc(ii)-vv+vf)/dt12
524 a(1,i)=a(1,i)+xframe(k1,ifm)*aa
525 a(2,i)=a(2,i)+xframe(k2,ifm)*aa
526 a(3,i)=a(3,i)+xframe(k3,ifm)*aa
527 dw = fourth*ms(i)*(yc(ii)*dt12+two*vv)*aa*axi*weight(i)
528 ELSEIF (ifm > 1.AND.icoor == 1)
THEN
529 coef = (xframe(10,ifm)-x(1,i))*xframe(7,ifm) +
530 & (xframe(11,ifm)-x(2,i))*xframe(8,ifm) +
531 & (xframe(12,ifm)-x(3,i))*xframe(9,ifm)
532 hx = coef*xframe(7,ifm)+x(1,i)-xframe(10,ifm)
533 hy = coef*xframe(8,ifm)+x(2,i)-xframe(11,ifm)
535 r = sqrt(hx*hx+hy*hy+hz*hz)
540 cth = (xframe(1,ifm)*hx +
542 & xframe(3,ifm)*hz)/r
543 sth = (xframe(4,ifm)*hx +
545 & xframe(6,ifm)*hz)/r
548 fmdir(1) =cth*xframe(1,ifm)+ sth*xframe(4,ifm)
549 fmdir(2) =cth*xframe(2,ifm)+ sth*xframe(5,ifm)
550 fmdir(3) =cth*xframe(3,ifm)+ sth*xframe(6,ifm)
552 er(1) =cth*xframe(1,ifm)+ sth*xframe(4,ifm)
553 er(2) =cth*xframe(2,ifm)+ sth*xframe(5,ifm)
554 er(3) =cth*xframe(3,ifm)+ sth*xframe(6,ifm)
555 nor1=sqrt(er(1)*er(1)+er(2)*er(2)+er(3)*er(3))
557 et(1) =cth*xframe(4,ifm)- sth*xframe(1,ifm)
558 et(2) =cth*xframe(5,ifm)- sth*xframe(2,ifm)
559 et(3) =cth*xframe(6,ifm)- sth*xframe(3,ifm)
560 nor2=sqrt(et(1)*et(1)+et(2)*et(2)+et(3)*et(3))
563 alpha=-yc(ii)*dt2_double/two
568 fmdir(1)=xframe(7,ifm)
569 fmdir(2)=xframe(8,ifm)
570 fmdir(3)=xframe(9,ifm)
572 nor3 = sqrt(fmdir(1)*fmdir(1)
574 & +fmdir(3)*fmdir(3))
575 fmdir=fmdir/
max(nor3,em20)
576 rx = x(1,i) - xframe(10,ifm)
577 ry = x(2,i) - xframe(11,ifm)
578 rz = x(3,i) - xframe(12,ifm)
579 vfx = xframe(31,ifm)+xframe(14,ifm)*rz-xframe(15,ifm)*ry
580 vfy = xframe(32,ifm)+xframe(15,ifm)*rx-xframe(13,ifm)*rz
581 vfz = xframe(33,ifm)+xframe(13,ifm)*ry-xframe(14,ifm)*rx
582 vv = fmdir(1)*v(1,i) + fmdir(2)*v(2,i) + fmdir(3)*v(3,i)
583 vf = fmdir(1)*vfx + fmdir(2)*vfy + fmdir(3)*vfz
584 a0 = fmdir(1)*a(1,i) + fmdir(2)*a(2,i) + fmdir(3)*a(3,i)
591 yc(ii)=(yc(ii)-vv+vf)/dt12
595 a(1,i)=a(1,i)+fmdir(1)*aa
596 a(2,i)=a(2,i)+fmdir(2)*aa
597 a(3,i)=a(3,i)+fmdir(3)*aa
598 dw = fourth*ms(i)*(yc(ii)*dt12+two*vv)*aa*axi*weight(i)
602 IF(isk<=1.AND.ifm<=1.AND.icoor == 0)
THEN
603 IF (ibfv(7,n) == 2)
THEN
604 IF (nsens(ii) > 0 .and. ts(ii) > zero)
THEN
605 yc(ii) = (yc(ii)-yc0(ii))/dt2_double
607 yc(ii)=(yc(ii)-dr(j,i))/dt2_double
610 IF (ibfv(7,n)>=1) yc(ii)=(yc(ii)-vr(j,i))/dt12
613 IF(ibfv(6,n) == 0)
THEN
615 . (ar(j,i)*dt12 + two*vr(j,i))*in(i)*(ar(j,i)-aold) *
620 . (ar(j,i)*dt12 + two*vr(j,i))*weight(i)*(ar(j,i)-aold)*
621 . (rby(16+j,nr) + rby(19+j,nr) + rby(22+j,nr))
623 ELSEIF (isk > 1.AND.icoor == 0)
THEN
627 IF(ibfv(7,n) == 2)
THEN
628 dd = skew(k1,isk)*dr(1,i) +
629 . skew(k2,isk)*dr(2,i) +
630 . skew(k3,isk)*dr(3,i)
632 vv = skew(k1,isk)*vr(1,i) +
633 . skew(k2,isk)*vr(2,i) +
634 . skew(k3,isk)*vr(3,i)
635 a0 = skew(k1,isk)*ar(1,i) +
636 . skew(k2,isk)*ar(2,i) +
637 . skew(k3,isk)*ar(3,i)
638 IF (ibfv(7,n) == 2) yc(ii)=(yc(ii)-dd)/dt2_double
639 IF (ibfv(7,n)>=1) yc(ii)=(yc(ii)-vv)/dt12
641 ar(1,i)=ar(1,i)+skew(k1,isk)*aa
642 ar(2,i)=ar(2,i)+skew(k2,isk)*aa
643 ar(3,i)=ar(3,i)+skew(k3,isk)*aa
644 IF(ibfv(6,n) == 0)
THEN
645 dw= fourth*(yc(ii)*dt12+two*vv)*in(i)*aa*weight(i)
648 dw= fourth*(yc(ii)*dt12+two*vv
649 . ((rby(17,nr)*skew(k1,isk)
650 . +rby(18,nr)*skew(k2,isk)
651 . +rby(19,nr)*skew(k3,isk))*skew(k1,isk) +
652 . (rby(20,nr)*skew(k1,isk)
653 . +rby(21,nr)*skew(k2,isk)
654 . +rby(22,nr)*skew(k3,isk))*skew(k2,isk) +
655 . (rby(23,nr)*skew(k1,isk)
656 . +rby(24,nr)*skew(k2,isk)
657 . +rby(25,nr)*skew(k3,isk))*skew(k3,isk))
659 ELSEIF ((isk<=1.AND.ifm<=1.AND.icoor == 1) .OR.
660 & (isk > 1.AND.icoor == 1))
THEN
661 coef = (skew(10,isk)-x(1,i))*skew(7,isk) +
662 & (skew(11,isk)-x(2,i))*skew(8,isk) +
663 & (skew(12,isk)-x(3,i))*skew(9,isk)
664 hx = coef*skew(7,isk)+x(1,i)-skew(10,isk)
665 hy = coef*skew(8,isk)+x(2,i)-skew(11,isk)
666 hz = coef*skew(9,isk)+x(3,i)-skew(12,isk)
667 r = sqrt(hx*hx+hy*hy+hz*hz)
672 cth = (skew(1,isk)*hx+skew(2,isk)*hy+skew(3,isk)*hz)/r
673 sth = (skew(4,isk)*hx+skew(5,isk)*hy+skew(6,isk)*hz)/r
676 skdir(1) =cth*skew(1,isk)+ sth*skew(4,isk)
677 skdir(2) =cth*skew(2,isk)+ sth*skew(5,isk)
678 skdir(3) =cth*skew(3,isk)+ sth*skew(6,isk)
682 skdir(3) =cth*skew(6,isk)- sth*skew(3,isk)
687 IF(ibfv(7,n) == 2) yimp= skdir(1)*dr(1,i) +
691 nor3 = sqrt(skdir(1)*skdir(1)
693 & +skdir(3)*skdir(3))
694 skdir=skdir/
max(nor3,em20)
695 IF(ibfv(7,n) == 2) yc(ii)=(yc(ii)-yimp)/dt2_double
696 vv =vr(1,i)*skdir(1)+ vr(2,i)*skdir(2)+ vr(3,i)*skdir(3)
697 a0 =ar(1,i)*skdir(1)+ ar(2,i)*skdir(2)+ ar(3,i)*skdir(3)
698 IF(ibfv(7,n)>=1) yc(ii)=(yc(ii)-vv)/dt12
701 ar(1,i)=ar(1,i)+skdir(1)*aa
702 ar(2,i)=ar(2,i)+skdir(2)*aa
703 ar(3,i)=ar(3,i)+skdir(3)*aa
704 IF(ibfv(6,n) == 0)
THEN
705 dw= fourth*(yc(ii)*dt12+two*vv)*in(i)*aa*weight(i)
708 dw= fourth*(yc(ii)*dt12+two*vv)*weight(i)*aa*
709 & ((rby(17,nr)*skdir(1)
710 & +rby(18,nr)*skdir(2)
711 & +rby(19,nr)*skdir(3))*skdir(1) +
712 & (rby(20,nr)*skdir(1)
713 & +rby(21,nr)*skdir(2)
714 & +rby(22,nr)*skdir(3))*skdir(2) +
715 & (rby(23,nr)*skdir(1)
716 & +rby(24,nr)*skdir(2)
717 & +rby(25,nr)*skdir(3))*skdir(3))
719 ELSEIF (ifm > 1.AND.icoor == 0)
THEN
724 IF (ibfv(7,n) == 2)
THEN
725 qf0(1:9) = xframe(19:27,ifm)
729 ddr = ej(1)*dr(1,i) +ej(2)*dr(2,i) + ej(3)*dr(3,i)
730 ddf= ej(1)*xframe(13,ifm)+ej(2)*xframe(14,ifm)+ej(3)*xframe(15,ifm)
731 IF (nsens(ii) > 0 .and. ts(ii) > zero)
THEN
732 yc(ii) = (yc(ii)-yc0(ii))/dt2_double
738 vf = xframe(k1,ifm)*xframe(13,ifm)
739 . + xframe(k2,ifm)*xframe(14,ifm)
740 . + xframe(k3,ifm)*xframe(15,ifm)
742 vv = xframe(k1,ifm)*vr(1,i)
743 . + xframe(k2,ifm)*vr(2,i)
744 . + xframe(k3,ifm)*vr(3,i)
745 a0 = xframe(k1,ifm)*ar(1,i)
746 . + xframe(k2,ifm)*ar(2,i)
747 . + xframe(k3,ifm)*ar(3,i)
748 aa = (yc(ii)-vv+vf)/dt12 - a0
749 ar(1,i)=ar(1,i)+xframe(k1,ifm)*aa
750 ar(2,i)=ar(2,i)+xframe(k2,ifm)*aa
751 ar(3,i)=ar(3,i)+xframe(k3,ifm)*aa
752 IF(ibfv(6,n) == 0)
THEN
753 dw= fourth*(yc(ii)+vv)*in(i)*aa*weight(i)
756 dw= fourth*(yc(ii)+vv)*weight(i)*aa*
757 . ((rby(17,nr)*xframe(k1,ifm)
758 . +rby(18,nr)*xframe(k2,ifm)
759 . +rby(19,nr)*xframe(k3,ifm))*xframe(k1,ifm) +
760 . (rby(20,nr)*xframe(k1,ifm)
761 . +rby(21,nr)*xframe(k2,ifm)
762 . +rby(22,nr)*xframe(k3,ifm))*xframe(k2,ifm) +
763 . (rby(23,nr)*xframe(k1,ifm)
764 . +rby(24,nr)*xframe(k2,ifm)
765 . +rby(25,nr)*xframe(k3,ifm))*xframe(k3,ifm))
767 ELSEIF (ifm > 1.AND.icoor == 1)
THEN
768 coef = (xframe(10,ifm)-x(1,i))*xframe(7,ifm) +
769 & (xframe(11,ifm)-x(2,i))*xframe(8,ifm) +
770 & (xframe(12,ifm)-x(3,i))*xframe(9,ifm)
771 hx = coef*xframe(7,ifm)+x(1,i)-xframe(10,ifm)
772 hy = coef*xframe(8,ifm)+x(2,i)-xframe(11,ifm)
773 hz = coef*xframe(9,ifm)+x(3,i)-xframe(12,ifm)
779 cth = (xframe(1,ifm)*hx +
781 & xframe(3,ifm)*hz)/r
782 sth = (xframe(4,ifm)*hx +
784 & xframe(6,ifm)*hz)/r
787 fmdir(1) =cth*xframe(1,ifm)+ sth*xframe(4,ifm)
788 fmdir(2) =cth*xframe(2,ifm)+ sth*xframe(5,ifm)
789 fmdir(3) =cth*xframe(3,ifm)+ sth*xframe(6,ifm)
791 fmdir(1) =cth*xframe(4,ifm)- sth*xframe(1,ifm)
792 fmdir(2) =cth*xframe(5,ifm)- sth*xframe(2,ifm)
793 fmdir(3) =cth*xframe(6,ifm)- sth*xframe(3,ifm)
795 fmdir(1)=xframe(7,ifm)
796 fmdir(2)=xframe(8,ifm)
797 fmdir(3)=xframe(9,ifm)
799 nor3 = sqrt(fmdir(1)*fmdir(1)
801 & +fmdir(3)*fmdir(3))
802 fmdir=fmdir/
max(nor3,em20)
803 vv = fmdir(1)*vr(1,i) +
806 vf = fmdir(1)*xframe(13,ifm) +
807 & fmdir(2)*xframe(14,ifm) +
808 & fmdir(3)*xframe(15,ifm)
812 aa = (yc(ii)-vv+vf)/dt12 - a0
814 ar(1,i)=ar(1,i)+fmdir(1)*aa
815 ar(2,i)=ar(2,i)+fmdir(2)*aa
816 ar(3,i)=ar(3,i)+fmdir(3)*aa
817 IF(ibfv(6,n) == 0)
THEN
818 dw= fourth*(yc(ii)+vv)*in(i)*aa*weight(i)
821 dw= fourth*(yc(ii)+vv)*weight(i)*aa*
822 & ((rby(17,nr)*fmdir(1)
823 & +rby(18,nr)*fmdir(2)
824 & +rby(19,nr)*fmdir(3))*fmdir(1) +
825 & (rby(20,nr)*fmdir(1)
826 & +rby(21,nr)*fmdir(2)
827 & +rby(22,nr)*fmdir(3))*fmdir(2) +
828 & (rby(23,nr)*fmdir(1)
829 & +rby(24,nr)*fmdir(2)
830 & +rby(25,nr)*fmdir(3))*fmdir(3))
837 vel(4,n) = vel(4,n)+dt2_double*dw