48
49
50
57
58
59
60#include "implicit_f.inc"
61
62
63
64#include "com04_c.inc"
65#include "param_c.inc"
66#include "sphcom.inc"
67#include "units_c.inc"
68
69
70
71 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
72 INTEGER ,INTENT(INOUT) :: NIMPACC,NUM
73 INTEGER ,INTENT(IN) :: NFXVEL0
74 INTEGER ,DIMENSION(NIFV,NFXVEL0) :: IBFV
75 INTEGER ,DIMENSION(LISKN,*) :: ISKN
76 INTEGER ,DIMENSION(*) :: ITAB,ITABM1,
77 my_real,
DIMENSION(LFXVELR,*) ,
INTENT(INOUT) :: fac
78
79 TYPE (GROUP_) ,DIMENSION(NGRNOD) ,INTENT(IN) :: IGRNOD
80 TYPE(SUBMODEL_DATA),DIMENSION(*) ,INTENT(IN) :: LSUBMODEL
81
82
83
84 INTEGER J,ID,UID,IACC,FCT_ID,INP_ID,SENS_ID,GRN,NACC,
85 . NOSKEW,NOFRAME,NUM0,NN,I_VDA,INOD,NODID,IGS,
86 . L_XYZ,SUBID,NOSUB,NODENUM(NFXVEL0)
87 INTEGER ,DIMENSION(3*NUMNOD) :: IKINE1
88 LOGICAL IS_AVAILABLE
89 CHARACTER(LEN=NCHARFIELD) :: XYZ
90 CHARACTER(LEN=NCHARTITLE) :: TITR,MESS
91 INTEGER ,DIMENSION(:),ALLOCATABLE :: IACCIDS
92 CHARACTER(LEN=2) :: X,Y,Z,XX,YY,ZZ
93 my_real :: fac1,fac2,fac3,facx,fscal_t,fscal_a,bid
94
95
96
97 DATA x /'X'/
98 DATA y /'Y'/
99 DATA z /'Z'/
100 DATA xx /'XX'/
101 DATA yy /'YY'/
102 DATA zz /'ZZ'/
103 DATA mess/'IMPOSED ACCELERATION DEFINITION '/
104
105
106
107 INTEGER NODGRNR5
109
110
111 WRITE (iout,1000)
112
113
114 i_vda = num
115
116 ikine1(1:3*numnod) = 0
117 nodenum(1:nfxvel0) = 0
118 bid = zero
119 nacc = 0
120
121
122
124
125 ALLOCATE(iaccids(nimpacc))
126 iaccids(1:nimpacc) = 0
127
128 is_available = .false.
129
130
131
133
134
135
136 DO iacc=1,nimpacc
137 titr = ''
138
139
140
141 CALL HM_OPTION_READ_KEY(LSUBMODEL,
142 . OPTION_ID = ID,
143 . UNIT_ID = UID,
144 . SUBMODEL_ID = SUBID,
145 . SUBMODEL_INDEX = NOSUB,
146 . OPTION_TITR = TITR)
147!
148 IACCIDS(IACC) = ID
149!
150
151
152
153 CALL HM_GET_INTV('curveid' ,FCT_ID ,IS_AVAILABLE,LSUBMODEL)
154 CALL HM_GET_STRING('rad_dir' ,XYZ ,ncharfield,IS_AVAILABLE)
155 CALL HM_GET_INTV('inputsystem' ,INP_ID ,IS_AVAILABLE,LSUBMODEL)
156 CALL HM_GET_INTV('rad_sensor_id' ,SENS_ID ,IS_AVAILABLE,LSUBMODEL)
157 CALL HM_GET_INTV('entityid' ,GRN ,IS_AVAILABLE,LSUBMODEL)
158!
159 CALL HM_GET_FLOATV('xscale' ,FACX,IS_AVAILABLE,LSUBMODEL,UNITAB)
160 CALL HM_GET_FLOATV('magnitude' ,FAC1,IS_AVAILABLE,LSUBMODEL,UNITAB)
161 CALL HM_GET_FLOATV('rad_tstart' ,FAC2,IS_AVAILABLE,LSUBMODEL,UNITAB)
162 CALL HM_GET_FLOATV('rad_tstop' ,FAC3,IS_AVAILABLE,LSUBMODEL,UNITAB)
163
164
165
166.AND. IF ((INP_ID == 0)(SUBID /= 0)) THEN
167 INP_ID = LSUBMODEL(NOSUB)%SKEW
168 ENDIF
169
170 NOSKEW = 0
171 NOFRAME = 0
172
173 DO J=0,NUMSKW+MIN(1,NSPCOND)*NUMSPH+NSUBMOD
174 IF (INP_ID == ISKN(4,J+1)) THEN
175 NOSKEW = J+1
176 EXIT
177 ENDIF
178 ENDDO
179.and. IF (INP_ID > 0 NOSKEW == 0)
180 . CALL ANCMSG(MSGID=137,ANMODE=ANINFO,MSGTYPE=MSGERROR,
181 . I1= ID,
182 . I2= NOSKEW,
183 . C1='imposed acceleration',
184 . C2='imposed acceleration',
185 . C3= TITR)
186
187
188
189
190 CALL HM_GET_FLOATV_DIM('xscale' ,FSCAL_T ,IS_AVAILABLE,LSUBMODEL,UNITAB)
191 CALL HM_GET_FLOATV_DIM('magnitude',FSCAL_A ,IS_AVAILABLE,LSUBMODEL,UNITAB)
192 IF (FACX == ZERO) FACX = ONE * FSCAL_T
193 FACX = ONE / FACX
194 IF (FAC1 == ZERO) FAC1 = ONE * FSCAL_A
195 IF (FAC3 == ZERO) FAC3 = EP20
196
197.OR..OR. IF (XYZ(1:2) == XX XYZ(1:2) == YY XYZ(1:2) == ZZ) THEN
198 FAC1 = FAC1 / (FSCAL_A * FSCAL_T * FSCAL_T)
199 ENDIF
200!---
201 NUM0 = NUM
202 NN = NODGRNR5(GRN,IGS,NODENUM,IGRNOD,ITABM1,MESS)
203 NUM = NUM + NN
204 NACC = NACC + NN
205!
206 DO J=1,NN
207 I_VDA = I_VDA + 1
208 IBFV(1,I_VDA) = NODENUM(J)
209 IBFV(2,I_VDA) = 0
210 IBFV(3,I_VDA) = FCT_ID
211 IBFV(4,I_VDA) = SENS_ID
212 IBFV(5,I_VDA) = 0
213 IBFV(6,I_VDA) = 0 ! initialization in lecrby (if rotation velocity on main)
214 IBFV(7,I_VDA) = 0
215 IBFV(8,I_VDA) = 0
216 IBFV(9,I_VDA) = NOFRAME
217 IBFV(10,I_VDA) = 0
218 IBFV(11,I_VDA) = 0
219 IBFV(12,I_VDA) = IACC
220 IBFV(13,I_VDA) = 0
221 IBFV(14,I_VDA) = 0
222!
223 FAC(1,I_VDA)= FAC1
224 FAC(2,I_VDA)= FAC2
225 FAC(3,I_VDA)= FAC3
226 FAC(4,I_VDA)= ZERO
227 FAC(5,I_VDA)= FACX
228 FAC(6,I_VDA)= ZERO
229!
230 INOD = IABS(NODENUM(J))
231 NODID = ITAB(INOD)
232!---
233! PRINT OUT
234!---
235 L_XYZ = 0
236.OR..OR. IF (XYZ(1:2) == XX XYZ(1:2) == YY XYZ(1:2) == ZZ) THEN
237 L_XYZ = 2
238.OR..OR. ELSEIF (XYZ(1:1) == X XYZ(1:1) == Y XYZ(1:1) == Z) THEN
239 L_XYZ = 1
240 ENDIF
241!
242 WRITE (IOUT,'(3x,i10,3x,i10,3x,i10,9x,a2,3x,i10,3x,i10,2x,
243 . 1pg20.13,2x,1pg20.13,2x,g20.13,2x,g20.13,16x,i10)')
244 . NODID,ISKN(4,NOSKEW),0,XYZ(1:L_XYZ),IBFV(3,I_VDA),SENS_ID,
245 . FAC(1,I_VDA),ONE/FACX,FAC(2,I_VDA),FAC(3,I_VDA),IBFV(10,I_VDA)
246!
247 IF (XYZ(1:2) == XX) THEN
248 IBFV(2,I_VDA) = 4 + NOSKEW*10
249 CALL KINSET(16,NODID,IKINE(INOD),4,NOSKEW,IKINE1(INOD))
250 ELSEIF (XYZ(1:2) == YY) THEN
251 IBFV(2,I_VDA) = 5 + NOSKEW*10
252 CALL KINSET(16,NODID,IKINE(INOD),5,NOSKEW,IKINE1(INOD))
253 ELSEIF (XYZ(1:2) == 'zz') THEN
254 IBFV(2,I_VDA) = 6 + NOSKEW*10
255 CALL KINSET(16,NODID,IKINE(INOD),6,NOSKEW,IKINE1(INOD))
256 ELSEIF (XYZ(1:1) == X) THEN
257 IBFV(2,I_VDA)= 1 + NOSKEW*10
258 CALL KINSET(16,NODID,IKINE(INOD),1,NOSKEW,IKINE1(INOD))
259 ELSEIF (XYZ(1:1) == Y) THEN
260 IBFV(2,I_VDA) = 2 + NOSKEW*10
261 CALL KINSET(16,NODID,IKINE(INOD),2,NOSKEW,IKINE1(INOD))
262 ELSEIF (XYZ(1:1) == 'z') THEN
263 IBFV(2,I_VDA) = 3 + NOSKEW*10
264 CALL KINSET(16,NODID,IKINE(INOD),3,NOSKEW,IKINE1(INOD))
265 ELSE
266 CALL ANCMSG(MSGID=164,
267 . MSGTYPE=MSGERROR,
268 . ANMODE=ANINFO,I1=ID,
269 . C1=TITR,
270 . C2=XYZ)
271 ENDIF ! IF (XYZ(1:1) == X)
272 ENDDO ! DO J=1,NN
273!---------------------------
274 ENDDO ! DO IACC=1,NIMPACC
275
276
277
278!
279 CALL UDOUBLE(IACCIDS,1,NIMPACC,MESS,0,BID)
280
281 NIMPACC = NACC
282!
283
284 DEALLOCATE(IACCIDS)
285
286 1000 FORMAT(//
287 .' imposed accelerations '/
288 .' --------------------- '/
289 .' node skew frame direction load_curve',
290 .' sensor fscale ascale',
291 .' start_time stop_time')
292
293 RETURN
subroutine hm_option_count(entity_type, hm_option_number)
subroutine hm_option_start(entity_type)
integer, parameter nchartitle
integer, parameter ncharfield