46
47
48
55 USE loads_mod
57
58
59
60#include "implicit_f.inc"
61
62
63
64#include "param_c.inc"
65#include "com01_c.inc"
66#include "com04_c.inc"
67#include "units_c.inc"
68#include "r2r_c.inc"
69#include "sphcom.inc"
70
71
72
73 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
74 INTEGER NUM
75 INTEGER IBCL(NIBCLD,*), ITAB(*), ITABM1(*),NWORK(*),
76 . ISKN(LISKN,*)
78 TYPE(SUBMODEL_DATA),INTENT(IN)::LSUBMODEL(*)
79 TYPE (LOADS_),INTENT(INOUT) :: LOADS
80
81 TYPE (GROUP_) ,DIMENSION(NGRNOD) :: IGRNOD
82
83
84
86 . fcx,fcy,fac_fcx,fac_fcy
87 INTEGER I,J,K,K1,K2,NOD, , NOSKEW, ISENS,NLD0,NN,IGU,IGS,
88 . UID,IAD,NS,IWA,ID,NUM0,IFLAGUNIT,COMPT,SUB_INDEX,IDIR,IFUNCTYPE
89 INTEGER NNB
90 CHARACTER MESS*40,X*1, Y*1, Z*1, XX*2, YY*2, ZZ*2
91 CHARACTER(LEN=NCHARFIELD) :: XYZ
92 CHARACTER(LEN=NCHARTITLE) :: TITR
93 LOGICAL IS_AVAILABLE
94
95
96
97 INTEGER NODGRNR5,NODGR_R2R
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118 DATA x/'X'/
119 DATA y/'Y'/
120 DATA z/'Z'/
121 DATA xx/'XX'/
122 DATA yy/'YY'/
123 DATA zz/'ZZ'/
124 DATA mess/'CONCENTRATED LOADS DEFINITION '/
125
126 is_available = .false.
127
128 WRITE (iout,2000)
129 nld0=num
130 num=0
131 i=0
132 ifunctype=0
133
134
135
137
138
139
140 DO k=1,nld0
141 IF(nsubdom>0)THEN
143 END IF
144 titr = ''
145
146
147
150 . unit_id = uid,
151 .
152 . option_titr = titr)
153
154
155
156 xyz = ''
158
159
160
161 CALL hm_get_intv(
'curveid',ncur,is_available,lsubmodel)
162 CALL hm_get_intv(
'inputsystem',noskew,is_available,lsubmodel)
163 IF(noskew == 0 .AND. sub_index /= 0 ) noskew = lsubmodel(sub_index)%SKEW
164 CALL hm_get_intv(
'rad_sensor_id',isens,is_available,lsubmodel)
165 CALL hm_get_intv(
'entityid',igu,is_available,lsubmodel)
166 CALL hm_get_intv(
'Itypfun',ifunctype,is_available,lsubmodel)
167
168
169
170 CALL hm_get_floatv(
'xscale',fcx,is_available,lsubmodel,unitab)
172 CALL hm_get_floatv(
'magnitude',fcy,is_available,lsubmodel,unitab)
174
175 iflagunit = 0
176 DO j=1,unitab%NUNITS
177 IF (unitab%UNIT_ID(j) == uid) THEN
178 iflagunit = 1
179 EXIT
180 ENDIF
181 ENDDO
182
183 IF (uid/=0.AND.iflagunit==0) THEN
184 CALL ancmsg(msgid=659,anmode=aninfo,msgtype=msgerror,
185 . i2=uid,i1=
id,c1=
'CONCENTRED LOAD',
186 . c2='CONCENTRED LOAD',
187 . c3=titr)
188 ENDIF
190 IF(noskew == iskn(4,j+1)) THEN
191 noskew=j+1
192 GO TO 100
193 ENDIF
194 ENDDO
195 CALL ancmsg(msgid=137,anmode=aninfo,msgtype=msgerror,
196 . c1='CONCENTRED LOAD',
197 . c2='CONCENTRED LOAD',
198 . i2=noskew,i1=
id,c3=titr)
199 100 CONTINUE
200
201 IF (fcx == zero) fcx = fac_fcx
202 IF (fcy == zero) fcy = fac_fcy
203 noskew=10*noskew
204 ns=0
205
206 idir = 0
207 IF(xyz(1:1)==x) idir=1
208 IF(xyz(1:1)==y) idir=2
209 IF(xyz(1:1)==z) idir
210 IF(xyz(1:2)==xx) idir=4
211 IF(xyz(1:2)==yy) idir=5
212 IF(xyz(1:2)==zz) idir=6
213
214 IF(idir == 1) ns=1+noskew
215 IF(idir == 2) ns=2+noskew
216 IF(idir == 3) ns=3+noskew
217 IF(idir == 4) ns=4+noskew
218 IF(idir == 5) ns=5+noskew
219 IF(idir == 6) ns=6+noskew
220
221
222 IF(idir == 0) THEN
223 CALL ancmsg(msgid=149,anmode=aninfo,msgtype=msgerror,
224 . c2=xyz,i1=
id,c1=titr)
225 ENDIF
226 IF(idir >= 4) THEN
227 IF (iroddl==0) THEN
228 CALL ancmsg(msgid=845,anmode=aninfo,msgtype=msgerror,
229 . c2=xyz,i1=
id,c1=titr)
230 END IF
231 END IF
232
233 num0=num
234
235 IF (iddom==0) THEN
236 nn =
nodgrnr5(igu ,igs ,nwork(1+nibcld*num0),igrnod ,
237 . itabm1 ,mess )
238 ELSE
239
240 nn =
nodgr_r2r(igu ,igs ,nwork(1+nibcld*num0),igrnod ,
241 . itabm1 ,mess )
242 ENDIF
243
244 IF (nn==0) THEN
246 . anmode=aninfo,
247 . msgtype=msgerror,
249 . c1=titr)
250 ENDIF
251 num=num+nn
252 DO j=nn,1,-1
253
254
255 nwork(1+nibcld*(j+i-1))=nwork(j+nibcld*num0)
256 ENDDO
257
258 IF(ifunctype == 0) ifunctype = 1
259
260
261
262 DO j=1,nn
263 i=i+1
264 ibcl(2,i) = ns
265 ibcl(3,i) = ncur
266 ibcl(4,i) = -1
267 ibcl(6,i) = isens
268 ibcl(7,i) = 0
269 ibcl(8,i) = 0
270 ibcl(9,i) = ifunctype
271 forc(1,i) = fcy
272 forc(2,i) = one/fcx
273 IF (idir <= 3) THEN
274 WRITE (iout,'(I10,2X,I10,5X,A,2X,I10,2X,I10,2X,
275 . 1PG20.13,2X,1PG20.13)')
276 . itab(ibcl(1,i)),iskn(4,noskew/10),xyz(1:1),
277 . ibcl(3,i),isens,fcx,fcy
278 ELSEIF (idir <= 6) THEN
279 WRITE (iout,'(I10,2X,I10,4X,A2,2X,I10,2X,I10,2X,
280 . 1PG20.13,2X,1PG20.13)')
281 . itab(ibcl(1,i)),iskn(4,noskew/10),xyz(1:2),
282 . ibcl(3,i),isens,fcx,fcy
283 ENDIF
284 ENDDO
285 ENDDO
286
287 loads%NLOAD_CLOAD = num
288
289 2000 FORMAT(//
290 .' CONCENTRATED LOADS '/
291 .' ------------------ '/
292 .' NODE SKEW DIR LOAD_CURVE SENSOR',
293 .' SCALE_X SCALE_Y')
294 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)
integer, parameter nchartitle
integer, parameter ncharfield
integer, dimension(:), allocatable nncl
integer function nodgr_r2r(igu, igs, ibuf, igrnod, itabm1, mess)
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)