38
39
40
42
43
44
45#include "implicit_f.inc"
46#include "comlock.inc"
47
48
49
50 INTEGER, INTENT(IN) :: WEIGHT(NUMNOD),NDAMP_VREL,ID_DAMP_VREL(NDAMP_VREL)
51 INTEGER, INTENT(IN) :: FR_DAMP_VREL(NSPMD+2,NDAMP_VREL)
52 INTEGER, INTENT(IN) :: NGRNOD,NUMNOD,NDAMP,NRDAMP,NSPMD,IPARIT,ISPMD
53 my_real,
INTENT(IN) :: a(3,numnod),v(3,numnod),ms(numnod)
54 my_real,
INTENT(IN) :: dampr(nrdamp,ndamp)
55 my_real,
INTENT(OUT) :: a_ref(3,ndamp),v_ref(3,ndamp)
56
57 TYPE (GROUP_),DIMENSION(NGRNOD), INTENT(IN) :: IGRNOD
58
59
60
61 INTEGER I,N,ND,IGR,NNOD,ID
63 DOUBLE PRECISION SUML6(7,6,NDAMP_VREL),SUML(7,NDAMP_VREL)
64
65
66
67
68
69
70 IF (iparit == 1) THEN
71
72
73
74 DO nd = 1, ndamp_vrel
76 igr = nint(dampr(2,
id))
77 suml6(1:7,1:6,nd) = zero
78 nnod = igrnod(igr)%NENTITY
80 . nd,nnod,igr,suml6,ngrnod,
81 . numnod,ndamp)
82 ENDDO
83
84 DO nd = 1, ndamp_vrel
86 IF ((nspmd>1).AND.(fr_damp_vrel(ispmd+1,nd)==1)) THEN
88 ENDIF
89
90 inv_mas=one/
max(em20,(suml6(7,1,nd)+suml6(7,2,nd)+suml6(7,3,nd)+
91 . suml6(7,4,nd)+suml6(7,5,nd)+suml6(7,6,nd)))
92
93 v_ref(1,
id)=inv_mas*(suml6(1,1,nd)+suml6(1,2,nd)+suml6(1,3,nd)+
94 . suml6(1,4,nd)+suml6(1,5,nd)+suml6(1,6,nd))
95 v_ref(2,
id)=inv_mas*(suml6(2,1,nd)+suml6(2,2,nd)+suml6(2,3,nd)+
96 . suml6(2,4,nd)+suml6(2,5,nd)+suml6(2,6,nd))
97 v_ref(3,
id)=inv_mas*(suml6(3,1,nd)+suml6(3,2,nd)+suml6(3,3,nd)+
98 . suml6(3,4,nd)+suml6(3,5,nd)+suml6(3,6,nd))
99 a_ref(1,
id)=inv_mas*(suml6(4,1,nd)+suml6(4,2,nd)+suml6(4,3,nd)+
100 . suml6(4,4,nd)+suml6(4,5,nd)+suml6(4,6,nd))
101 a_ref(2,
id)=inv_mas*(suml6(5,1,nd)+suml6(5,2,nd)+suml6(5,3,nd)+
102 . suml6(5,4,nd)+suml6(5,5,nd)+suml6(5,6,nd))
103 a_ref(3,
id)=inv_mas*(suml6(6,1,nd)+suml6(6,2,nd)+suml6(6,3,nd)+
104 . suml6(6,4,nd)+suml6(6,5,nd)+suml6(6,6,nd))
105 ENDDO
106
107 ELSE
108
109
110
111 DO nd = 1, ndamp_vrel
112 id = id_damp_vrel(nd)
113 suml(1:7,nd) = zero
114 igr = nint(dampr(2,
id))
115 DO n=1,igrnod(igr)%NENTITY
116 i=igrnod(igr)%ENTITY(n)
117 suml(1,nd) = suml(1,nd) + ms(i)*v(1,i)*weight(i)
118 suml(2,nd) = suml(2,nd) + ms(i)*v(2,i)*weight(i)
119 suml(3,nd) = suml(3,nd) + ms(i)*v(3,i)*weight(i)
120 suml(4,nd) = suml(4,nd) + ms(i)*a(1,i)*weight(i)
121 suml(5,nd) = suml(5,nd) + ms(i)*a(2,i)*weight(i)
122 suml(6,nd) = suml(6,nd) + ms(i)*a(3,i)*weight(i)
123 suml(7,nd) = suml(7,nd) + ms(i)*weight(i)
124 ENDDO
125 ENDDO
126
127 DO nd = 1, ndamp_vrel
128 id = id_damp_vrel(nd)
129 IF ((nspmd>1).AND.(fr_damp_vrel(ispmd+1,nd)==1)) THEN
131 ENDIF
132 inv_mas = one/
max(em20,suml(7,nd))
133 v_ref(1,
id) = suml(1,nd)*inv_mas
134 v_ref(2,
id) = suml(2,nd)*inv_mas
135 v_ref(3,
id) = suml(3,nd)*inv_mas
136 a_ref(1,
id) = suml(4,nd)*inv_mas
137 a_ref(2,
id) = suml(5,nd)*inv_mas
138 a_ref(3,
id) = suml(6,nd)*inv_mas
139 ENDDO
140
141 ENDIF
142
143 RETURN
144
subroutine dampvref_sum6(igrnod, v, a, ms, weight, nd, nnod, igr, suml6, ngrnod, numnod, ndamp)
subroutine spmd_exch_fr6(fr, fs6, len)
subroutine spmd_fr_poff(fr_wall, fs, len)