47
48
49
50 USE my_alloc_mod
57
58
59
60#include "implicit_f.inc"
61
62
63
64#include "com04_c.inc"
65#include "scr17_c.inc"
66#include "param_c.inc"
67#include "sphcom.inc"
68#include "units_c.inc"
69
70
71
72 INTEGER ,INTENT(IN) :: NDISP
73 INTEGER ,INTENT(INOUT) :: INUM,IOPT
74 INTEGER ,DIMENSION(*) :: ITAB,ITABM1,IKINE
75 INTEGER ,DIMENSION(LISKN,*) ,INTENT(IN) :: ISKN
76 INTEGER ,DIMENSION(LNOPT1,*) ,INTENT(OUT) :: NOM_OPT
77 INTEGER ,DIMENSION(NIFV,NFXVEL) ,INTENT(OUT) :: IBFVEL
78 my_real ,
DIMENSION(LFXVELR,NFXVEL) ,
INTENT(OUT) :: fbfvel
79 TYPE (UNIT_TYPE_) ,INTENT(IN) :: UNITAB
80 TYPE (GROUP_) ,DIMENSION(NGRNOD) ,INTENT(IN) :: IGRNOD
81 TYPE (SUBMODEL_DATA),DIMENSION(*) ,INTENT(IN) :: LSUBMODEL
82
83
84
85 INTEGER I,IDISP,NN,IDIS,INOD,NODID,NOSKEW,NOFRAME,LEN,
86 . IUNIT,FLAGUNIT,SENS_ID,OPTID,UID,SKEW_ID,FCT_ID,GRN_ID,IGS,
87 . IFGEO,ICOOR,ILAGM,SUBID,NOSUB,SYS_TYPE,FRAME_ID,J,JJ,NN_FM(3)
88 INTEGER ,DIMENSION(:),ALLOCATABLE :: NODENUM
89 INTEGER ,DIMENSION(:),ALLOCATABLE :: IKINE1
90 my_real :: yscale,tstart,tstop,xscale,fscal_t,fscal_l
91 CHARACTER(LEN=2) :: X,Y,Z,XX,YY,ZZ
92 CHARACTER(LEN=NCHARFIELD) :: XYZ
93 CHARACTER(LEN=NCHARKEY) :: KEY
94 CHARACTER(LEN=NCHARTITLE) :: TITR,MESS
95 LOGICAL IS_AVAILABLE
96
97
98
99 INTEGER NODGRNR5
101
102
103
104 DATA x /'X'/
105 DATA y /'Y'/
106 DATA z /'Z'/
107 DATA xx /'XX'/
108 DATA yy /'YY'/
109 DATA zz /'ZZ'/
110 DATA mess/'IMPOSED DISPLACEMENT DEFINITION '/
111
112 CALL my_alloc(ikine1,3*numnod)
113 CALL my_alloc(nodenum,nfxvel)
114
115 is_available = .false.
116
117 ikine1(:)= 0
118 nn_fm(1:3)= 0
119
120
121
122
124
125 WRITE (iout,1000)
126
127
128 DO idisp = 1,ndisp
129
131 . option_id = optid,
132 . unit_id = uid,
133 . submodel_id = subid,
134 . submodel_index = nosub,
135 . option_titr = titr,
136 . keyword2 = key)
137
138 IF (key(1:4) == 'FGEO') cycle
139
140 iopt = iopt + 1
141 nom_opt(1,iopt) = optid
142 CALL fretitl(titr,nom_opt(lnopt1-ltitr+1,iopt),ltitr)
143
144 icoor = 0
145 ifgeo = 0
146 ilagm = 0
147 idis = 2
148 len = 1
149 noframe = 0
150 sys_type = 1
151 noskew = 0
152
153
154
155 CALL hm_get_intv(
'rad_system_input_type' ,sys_type ,is_available,lsubmodel)
156 CALL hm_get_intv (
'curveid' ,fct_id ,is_available,lsubmodel)
158
159 CALL hm_get_intv (
'rad_sensor_id' ,sens_id ,is_available,lsubmodel)
160 CALL hm_get_intv (
'entityid' ,grn_id ,is_available,lsubmodel)
161 CALL hm_get_intv (
'rad_icoor' ,icoor ,is_available,lsubmodel)
162 CALL hm_get_intv (
'skew_ID' ,skew_id ,is_available,lsubmodel)
163 CALL hm_get_intv (
'frame_ID' ,frame_id ,is_available,lsubmodel)
164 IF (sys_type /= 2)
CALL hm_get_intv(
'inputsystem',skew_id ,is_available,lsubmodel)
165
166 CALL hm_get_floatv(
'xscale' ,xscale ,is_available,lsubmodel,unitab)
167 CALL hm_get_floatv(
'magnitude' ,yscale ,is_available,lsubmodel,unitab)
168 CALL hm_get_floatv(
'rad_tstart' ,tstart ,is_available,lsubmodel,unitab)
169 CALL hm_get_floatv(
'rad_tstop' ,tstop ,is_available,lsubmodel,unitab)
170
171 IF (xyz(1:2) == xx .OR. xyz(1:2) == yy .OR. xyz(1:2) == zz) len = 2
172
173
174
175 flagunit = 0
176 DO iunit=1,unitab%NUNITS
177 IF (unitab%UNIT_ID(iunit) == uid) THEN
178 flagunit = 1
179 EXIT
180 ENDIF
181 ENDDO
182 IF (uid > 0 .and. flagunit == 0) THEN
183 CALL ancmsg(msgid=659,anmode=aninfo,msgtype=msgerror,
184 . i1= optid,
185 . i2= uid,
186 . c1='IMPDISP',
187 . c2='IMPDISP',
188 . c3= titr)
189 ENDIF
190
191
192
193 IF ((skew_id == 0).AND.(subid /= 0)) THEN
194 skew_id = lsubmodel(nosub)%SKEW
195 ENDIF
196
197 IF ((sys_type == 0).OR.(sys_type == 1)) THEN
199 IF (skew_id == iskn(4,j+1)) THEN
200 noskew = j+1
201 EXIT
202 ENDIF
203 ENDDO
204 IF (skew_id > 0 .and. noskew == 0)
205 .
CALL ancmsg(msgid=137,anmode=aninfo,msgtype=msgerror,
206 . i1= optid,
207 . i2= skew_id,
208 . c1='IMPOSED DISPLACEMENT',
209 . c2='IMPOSED DISPLACEMENT',
210 . c3= titr)
211
212 ELSEIF (sys_type == 2) THEN
213 jj = (numskw+1) +
min(1,nspcond)*numsph+1 +
nsubmod
214 DO j=1,numfram
215 jj = jj+1
216 IF (frame_id == iskn(4,jj)) THEN
217 noframe = j+1
218 nn_fm(1:3) = iskn(1:3,jj)
219 EXIT
220 ENDIF
221 ENDDO
222 IF (frame_id > 0 .and. noframe == 0)
223 .
CALL ancmsg(msgid=137,anmode=aninfo,msgtype=msgerror,
224 . i1= optid,
225 . i2= frame_id,
226 . c1='IMPOSED DISPLACEMENT',
227 . c2='IMPOSED DISPLACEMENT',
228 . c3= titr)
229 ENDIF
230
231
232
233
236
237 IF (xscale == zero) xscale = one * fscal_t
238 xscale = one / xscale
239 IF (yscale == zero) yscale = one * fscal_l
240
241
242
243 IF (tstop == zero) tstop = infinity
244
245
246
247 nn =
nodgrnr5(grn_id,igs,nodenum,igrnod,itabm1,mess)
248
249 DO i=1,nn
250 inum = inum + 1
251 ibfvel(1, inum) = nodenum(i)
252 ibfvel(2 ,inum) = 0
253 ibfvel(3 ,inum) = fct_id
254 ibfvel(4 ,inum) = sens_id
255 ibfvel(5 ,inum) = 0
256 ibfvel(6 ,inum) = 0
257 ibfvel(7 ,inum) = idis
258 ibfvel(8 ,inum) = ilagm
259 ibfvel(9 ,inum) = noframe
260 ibfvel(10,inum) = icoor
261 ibfvel(11,inum) = 0
262 ibfvel(12,inum) = iopt
263 ibfvel(13,inum) = ifgeo
264 ibfvel(14,inum) = 0
265
266 fbfvel(1,inum) = yscale
267 fbfvel(2,inum) = tstart
268 fbfvel(3,inum) = tstop
269 fbfvel(4,inum) = zero
270 fbfvel(5,inum) = xscale
271 fbfvel(6,inum) = zero
272
273 inod = iabs(nodenum(i))
274 nodid = itab(inod)
275
276
277
278
279 IF (noframe > 0) THEN
280 IF(xyz(1:2) == xx)THEN
281 ibfvel(2,inum) = 4
282 CALL kinset(16,nodid,ikine(inod),4,noframe,ikine1(inod))
283 ELSEIF(xyz(1:2) == yy)THEN
284 ibfvel(2,inum) = 5
285 CALL kinset(16,nodid,ikine(inod),5,noframe,ikine1(inod))
286 ELSEIF(xyz(1:2) == zz)THEN
287 ibfvel(2,inum) = 6
288 CALL kinset(16,nodid,ikine(inod),6,noframe,ikine1(inod))
289 ELSEIF (xyz(1:1) == x)THEN
290 ibfvel(2,inum) = 1
291 CALL kinset(16,nodid,ikine(inod),1,noframe,ikine1(inod))
292 ELSEIF(xyz(1:1) == y)THEN
293 ibfvel(2,inum) = 2
294 CALL kinset(16,nodid,ikine(inod),2,noframe,ikine1(inod))
295 ELSEIF(xyz(1:1) == z)THEN
296 ibfvel(2,inum) = 3
297 CALL kinset(16,nodid,ikine(inod),3,noframe,ikine1(inod))
298 ELSE
299 CALL ancmsg(msgid=164, msgtype=msgerror, anmode=aninfo,
300 . i1=optid,
301 . c1=titr,
302 . c2=xyz)
303 ENDIF
304
305 WRITE (iout, 3000) nodid,noskew,frame_id,xyz(1:len),fct_id,sens_id,
306 . yscale,one/xscale,tstart,tstop,icoor
307
308
309
310 IF (inod==nn_fm(1) .OR. inod==nn_fm(2) .OR. inod==nn_fm(3)) THEN
311 CALL ancmsg(msgid=3091, msgtype=msgerror, anmode=aninfo,
312 . i1=optid,
313 . c1=titr,
314 . i2=nodid,
315 . i3=frame_id)
316 END IF
317 ELSE
318 IF(xyz(1:2) == xx)THEN
319 ibfvel(2,inum) = 4 + noskew*10
320 CALL kinset(16,nodid,ikine(inod),4,noskew,ikine1(inod))
321 ELSEIF(xyz(1:2) == yy)THEN
322 ibfvel(2,inum) = 5 + noskew*10
323 CALL kinset(16,nodid,ikine(inod),5,noskew,ikine1(inod))
324 ELSEIF(xyz(1:2) == zz)THEN
325 ibfvel(2,inum) = 6 + noskew*10
326 CALL kinset(16,nodid,ikine(inod),6,noskew,ikine1(inod))
327 ELSEIF (xyz(1:1) == x)THEN
328 ibfvel(2,inum)=1 + noskew*10
329 CALL kinset(16,nodid,ikine(inod),1,noskew,ikine1(inod))
330 ELSEIF(xyz(1:1) == y)THEN
331 ibfvel(2,inum) = 2 + noskew*10
332 CALL kinset(16,nodid,ikine(inod),2,noskew,ikine1(inod))
333 ELSEIF(xyz(1:1) == z)THEN
334 ibfvel(2,inum) = 3 + noskew*10
335 CALL kinset(16,nodid,ikine(inod),3,noskew,ikine1(inod))
336 ELSE
337 CALL ancmsg(msgid=164, msgtype=msgerror, anmode=aninfo,
338 . i1=optid,
339 . c1=titr,
340 . c2=xyz)
341 ENDIF
342
343 WRITE (iout,2000) nodid,iskn(4,noskew),0,xyz(1:len),fct_id,sens_id,
344 . yscale,one/xscale,tstart,tstop
345 ENDIF
346
347
348 ENDDO
349
350 ENDDO
351
352 DEALLOCATE(ikine1)
353 DEALLOCATE(nodenum)
354
355
356 1000 FORMAT(//
357 .' IMPOSED DISPLACEMENTS '/
358 .' ------------------- '/
359 .' NODE SKEW FRAME DIRECTION LOAD_CURVE',
360 .' SENSOR FSCALE ASCALE',
361 .' START_TIME STOP_TIME')
362 2000 FORMAT(3x,i10,3x,i10,3x,i10,9x,a2,3x,i10,3x,i10,
363 . 2x,1pg20.13,2x,1pg20.13,2x,g20.13,2x,g20.13)
364 3000 FORMAT(3x,i10,3x,i10,3x,i10,9x,a2,3x,i10,3x,i10,
365 . 2x,1pg20.13,2x,1pg20.13,2x,g20.13,2x,g20.13,16x,i10)
366
367 RETURN
subroutine hm_get_floatv(name, rval, is_available, lsubmodel, unitab)
subroutine hm_get_floatv_dim(name, dim_fac, is_available, lsubmodel, unitab)
subroutine hm_get_intv(name, ival, is_available, lsubmodel)
subroutine hm_get_string(name, sval, size, is_available)
subroutine hm_option_start(entity_type)
subroutine kinset(ik, node, ikine, idir, isk, ikine1)
integer, parameter nchartitle
integer, parameter ncharkey
integer, parameter ncharfield
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)