29
30
31
32#include "implicit_f.inc"
33
34
35
36#include "com01_c.inc"
37#include "com08_c.inc"
38#include "scr03_c.inc"
39#include "scr05_c.inc"
40#include "scr06_c.inc"
41#include "scr16_c.inc"
42
43
44
45 INTEGER, INTENT(IN) :: NUMNOD
46 my_real :: x(3,numnod) ,d(3,numnod) ,v(3,numnod) ,dr(3,numnod) ,vr(3,numnod)
47 DOUBLE PRECISION :: XDP(3,NUMNOD), DDP(3,NUMNOD)
48
49
50
51 INTEGER I,N
53 DOUBLE PRECISION VDT2
54
55
56
57 IF(n2d==1)THEN
58
59 DO i=1,numnod
60 IF(x(2,i)+dt2*v(2,i)<zero) v(2,i)=zero
61 ENDDO
62
63 ENDIF
64
65
66
67 IF (iresp==1) THEN
68
69 DO n=1,numnod
70 vdt2 = dt2*v(1,n)
71 ddp(1,n) = ddp(1,n)+vdt2
72 d(1,n)=ddp(1,n)
73 xdp(1,n)=xdp(1,n)+vdt2
74 x(1,n)=xdp(1,n)
75
76 vdt2 = dt2*v(2,n)
77 ddp(2,n) = ddp(2,n)+vdt2
78 d(2,n)=ddp(2,n)
79 xdp(2,n)=xdp(2,n)+vdt2
80 x(2,n)=xdp(2,n)
81
82 vdt2 = dt2*v(3,n)
83 ddp(3,n) = ddp(3,n)+vdt2
84 d(3,n)=ddp(3,n)
85 xdp(3,n)=xdp(3,n)+vdt2
86 x(3,n)=xdp(3,n)
87 ENDDO
88
89 ELSE
90
91 DO n=1,numnod
92 vdt = dt2*v(1,n)
93 d(1,n)=d(1,n)+vdt
94 x(1,n)=x(1,n)+vdt
95 vdt = dt2*v(2,n)
96 d(2,n)=d(2,n)+vdt
97 x(2,n)=x(2,n)+vdt
98 vdt = dt2*v(3,n)
99 d(3,n)=d(3,n)+vdt
100 x(3,n)=x(3,n)+vdt
101 ENDDO
102
103 ENDIF
104 IF((isecut>0 .OR. iisrot>0 .OR. impose_dr/=0 .OR. idrot == 1) .AND. iroddl /= 0) THEN
105
106 DO n=1,numnod
107 dr(1,n)=dr(1,n)+dt2*vr(1,n)
108 dr(2,n)=dr(2,n)+dt2*vr(2,n)
109 dr(3,n)=dr(3,n)+dt2*vr(3,n)
110 ENDDO
111
112 ENDIF
113
114 RETURN