41
42
43
44 USE elbufdef_mod
45
46
47
48#include "implicit_f.inc"
49
50
51
52#include "com01_c.inc"
53#include "com04_c.inc"
54#include "com08_c.inc"
55#include "units_c.inc"
56#include "scrnoi_c.inc"
57#include "scr05_c.inc"
58#include "scr13_c.inc"
59#include "task_c.inc"
60
61
62
63 INTEGER IN(*),J(*),IXS(*),IPARG(*), WEIGHT(*),IXQ(*)
65 . buf(ncnois,*),v(3,*),dt2r ,a(3,*)
66 TYPE (ELBUF_STRUCT_), DIMENSION(NGROUP) :: ELBUF_TAB
67
68
69
70 INTEGER , DIMENSION(:), ALLOCATABLE :: ELNOI,ELG,NOIADD
71 my_real,
DIMENSION(:),
ALLOCATABLE :: c
72 INTEGER IPELNOI,IPNOIADD,IPTC
73 INTEGER IFIRST,I,K,L,NE,NC,KK,IAD, LEN
74 my_real pi1,pi2,tol,te,tc,fne,fac,dec,to,trans,xi,w,cc,ttn
75 INTEGER LENGTH, ITAG(0:NUMNOD)
76 SAVE ifirst,te,iptc,c,nc,to,ipelnoi,elnoi,elg,ipnoiadd,noiadd
77 DATA ifirst/0/
79
80
81
82 ne = 0
83 tol=em01
84 IF(ispmd==0) THEN
85 iunit=iunoi
87 ENDIF
88 IF(ifirst==0)THEN
89 ifirst=1
90 IF(rnoi==0)THEN
91
92 te=dt2
93 dt2r=te
94 ne=
max(1,int(dtnoise/te))
95 j(7)=ne
96 ELSEIF(rnoi==1)THEN
97 te=dt2r
98 ne=j(7)
99 ENDIF
100
101
102
103 IF(noisep/=0)THEN
104 ALLOCATE (noiadd(nnoise+1))
105 CALL initnoise(in,noiadd,ixs,itag(0),length,ixq)
106 ALLOCATE(elnoi(length))
107 ALLOCATE(elg(length))
108 CALL initnoise2(in,elnoi,elg,noiadd,ixs,itag(1),iparg,ixq)
109 ENDIF
110
111 dtnoise=float(ne)*te
112 tc=2.*dtnoise
113
114 nc=6*ne
115 fac=one/float(ne)
116 dec=float(3*ne) - half
117 to=float(3*ne)*te
118 IF(nc>0)THEN
119 ALLOCATE(c(nc))
120 ENDIF
121
122
123
124 pi2 = two*pi
125 trans=0
126 DO i=1,nc
127 xi=float(i-1)-dec
128 w=0.54+0.46*cos(pi2*xi/float(nc))
129 IF(abs(pi*fac*xi)<tol)THEN
130 c(i)=fac
131 ELSE
132 c(i)=w*sin(pi*xi*fac)/pi/xi
133 ENDIF
134 trans=trans+c(i)
135 ENDDO
136
137 IF(ispmd==0) THEN
138 WRITE(iout,1000)one/dtnoise,one/tc,nc,trans
139 WRITE(iout,'(1P8E10.3)')(c(i),i=1,nc)
140 WRITE(iout,'(//)')
141 ENDIF
142
143 IF(rnoi==0)THEN
144 DO k=1,6
145 j(k)=(1-k)*ne-1
146 ENDDO
147 DO i=1,6*nnoise
148 DO l=1,ncnois
149 buf(l,i)=zero
150 ENDDO
151 ENDDO
152 ENDIF
153 ENDIF
154 IF(ispmd==0) THEN
155 IF(abs(1.-dt2/te)>tol)THEN
156 WRITE(iout,1100)
157 WRITE(istdo,1100)
158 ENDIF
159 ENDIF
160 IF(rnoi==0 .AND. tt-to<tnoise-nc*te)RETURN
161
162
163
164 IF(noisep/=0)
CALL pnoise(elnoi,elg,noiadd,elbuf_tab,wa,iparg)
165
166
167
168
169
170
171 IF(ispmd/=0) THEN
172 DO i=1,6*nnoise
173 DO l=1,ncnois
174 buf(l,i)=zero
175 ENDDO
176 ENDDO
177 ENDIF
178
179 DO k=1,6
180 j(k)=j(k)+1
181 IF(j(k)>0)THEN
182 cc=c(j(k))
183 kk=(k-1)*nnoise
184 DO i=1,nnoise
185 kk=kk+1
186 IF(in(i) /= 0)THEN
187 IF(weight(in(i))==1) THEN
188 IF(noisev/=0)THEN
189 buf(1,kk)=buf(1,kk)+cc *v(1,in(i))
190 buf(2,kk)=buf(2,kk)+cc *v(2,in(i))
191 buf(3,kk)=buf(3,kk)+cc *v(3,in(i))
192 ENDIF
193 IF(noisea/=0)THEN
194 iad=3*noisev
195 buf(iad+1,kk)=buf(iad+1,kk)+cc *a(1,in(i))
196 buf(iad+2,kk)=buf(iad+2,kk)+cc *a(2,in(i))
197 buf(iad+3,kk)=buf(iad+3,kk)+cc *a(3,in(i))
198 ENDIF
199 ENDIF
200 END IF
201 IF(noisep/=0.AND.ispmd==0)THEN
202 iad=3*noisev+3*noisea+1
203 buf(iad,kk)=buf(iad,kk)-cc *wa(i)
204 ENDIF
205 ENDDO
206 ENDIF
207 ENDDO
208
209
210
211 IF(nspmd>1) THEN
212 len = 6*nnoise*ncnois
214 ENDIF
215
216
217
218 DO k=1,6
219 IF(j(k)==nc)THEN
220 j(k)=0
221 kk=(k-1)*nnoise+1
222 ttn=tt-to
223 IF(ispmd==0) THEN
224 CALL wrtdes(ttn,ttn,1,itform,1)
225 CALL wrtdes(ttn,ttn,1,itform,1)
226 CALL wrtdes(buf(1,kk),buf(1,kk),ncnois*nnoise,itform,1)
227 ENDIF
228 DO i=(k-1)*nnoise+1,k*nnoise
229 DO l=1,ncnois
230 buf(l,i)=zero
231 ENDDO
232 ENDDO
233 ENDIF
234 ENDDO
235
236
237 RETURN
238 1000 FORMAT(///
239 . ' OUTPUT OF SAMPLED VELOCITIES FOR NOISE AND VIBRATION ',//
240 . ' EFFECTIVE SAMPLING FREQUENCY . . . . . . . . . . ',1pe10.4/
241 . ' HIGH FREQUENCY CUTOFF . . . . . . . . . . . . . ',1pe10.4/
242 . ' NUMBER OF COEFFICIENT USED FOR FILTERING . . . . ',i10/
243 . ' STATIC TRANSMITANCE OF FILTER . . . . . . . . . ',1pe10.4/
244 . ' LIST OF COEFFICIENTS USED FOR FILTERING . . . . ')
245 1100 FORMAT('*** WARNING STRUCTURAL TIME STEP MUST BE CONSTANT ***')
subroutine initnoise2(in, elnoi, elg, noiadd, ixs, iwa, iparg, ixq)
subroutine initnoise(in, noiadd, ixs, iwa, length, ixq)
subroutine pnoise(elnoi, elg, noiadd, elbuf_tab, wa, iparg)
subroutine spmd_glob_dsum9(v, len)
subroutine wrtdes(a, ia, l, iform, ir)