48
49
50
51
58 USE sensor_mod
59 USE pblast_mod
61
62
63
64#include "implicit_f.inc"
65
66
67
68#include "param_c.inc"
69#include "scr03_c.inc"
70#include "com04_c.inc"
71#include "units_c.inc"
72#include "r2r_c.inc"
73#include "sphcom.inc"
74
75
76
77 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
78 INTEGER NUMLOADP
79 INTEGER NPC(*),ISKN(LISKN,*),
80 . ILOADP(SIZLOADP,*), LLOADP(*)
81 INTEGER, INTENT(IN) :: S_LOADPINTER
82 INTEGER, INTENT(INOUT) :: KLOADPINTER(NINTER
83
84
85 my_real ,
INTENT(INOUT) :: dgapint(ninter),
86 . intgaploadp(nintloadp),dgaploadint(s_loadpinter )
87
88 TYPE (SURF_) ,TARGET, DIMENSION(NSURF) :: IGRSURF
89 TYPE(SUBMODEL_DATA),INTENT(IN)::LSUBMODEL(*)
90 TYPE (SENSORS_) ,INTENT(IN) :: SENSORS
91 TYPE (PBLAST_) , INTENT(INOUT) :: PBLAST
92
93
94
95
96 INTEGER I,J,K, ,NI,
97 . SUB_INDEX, SUB_ID, UID, ID, IFLAGUNIT,NIP,
98 . NN,IAD,ISENS,IS,ISU,NOSKEW,IDIR,IFUNC,NINTERP,INORM,
99 . TINTER,IDINT,NIK,NBINTER,NOINT,STAT,IFUNCL,
100 . IDSENS,IDSKEW,ILOAD,NINTERS,NIDXLOAD
101 INTEGER, DIMENSION(:), ALLOCATABLE :: ID_INTER,INTER_TYP
103 . fcx,fcy,fac_fcx,fac_fcy,gap_i
104 CHARACTER MESS*40, char_X*1, char_Y*1, char_Z*1
105 CHARACTER(LEN=NCHARFIELD) ::DIR
106 CHARACTER(LEN=NCHARTITLE) :: TITR
107 CHARACTER(LEN=NCHARLINE) :: KEY
108 LOGICAL IS_AVAILABLE
109
110
111 DATA char_x/'X'/
112 DATA char_y/'Y'/
113 DATA char_z/'Z'/
114 DATA mess/'PRESSURE LOAD DEFINITION '/
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151 ALLOCATE (id_inter(hm_ninter ),stat=stat)
152 id_inter(1:hm_ninter ) = 0
153 ALLOCATE (inter_typ(hm_ninter),stat=stat)
154 inter_typ(1:hm_ninter ) = 0
155
157
158 nbinter = 0
159
160 DO i =1,hm_ninter
161
162
163
164
166 . option_id = noint,
167 . keyword2 = key)
168
169 IF(key(1:len_trim(key))/='SUB') THEN
170 nbinter=nbinter+1
171
172 id_inter(nbinter) = noint
173
174 IF(key(1:len_trim(key))=='TYPE21') inter_typ(nbinter)=21
175
176 ENDIF
177 ENDDO
178
179
180
181 nn = 0
182
183
184
186
187
188
189 nidxload = nloadp_f+pblast%NLOADP_B
190 DO k=1,nloadp_hyd
191
192
193
196 . unit_id = uid,
197 . submodel_id = sub_id,
198 . submodel_index = sub_index,
199 . option_titr
200
201 iflagunit = 0
202
203 DO j=1,unitab%NUNITS
204 IF (unitab%UNIT_ID(j) == uid) THEN
205 iflagunit = 1
206 EXIT
207 ENDIF
208 ENDDO
209 IF (uid/=0.AND.iflagunit==0) THEN
211 . anmode = aninfo,
212 . msgtype = msgerror,
213 . i2 = uid,
215 . c1 = 'PRESSURE LOAD',
216 . c2 = 'PRESSURE LOAD',
217 . c3 = titr)
218 ENDIF
219
220 iloadp(2,k+nidxload) =
id
221
222 iad = numloadp + 1
223
224 pdel = 1
225
226 dir = ''
228 idsens = 0
229 idskew = 0
230 idir = 0
231
232
233
234
235 CALL hm_get_intv(
'surf_ID',isu,is_available,lsubmodel)
236 CALL hm_get_intv(
'fct_ID',ifunc,is_available,lsubmodel)
237 CALL hm_get_intv(
'Inorm',inorm,is_available,lsubmodel)
238 CALL hm_get_intv(
'sens_ID',idsens,is_available,lsubmodel)
239 CALL hm_get_intv(
'Iload',iload,is_available,lsubmodel)
240 IF(inorm == 0) inorm = 1
241 IF(iload == 0) iload = 1
242
243 IF (inorm > 1) THEN
244 CALL hm_get_intv(
'skew_ID',idskew,is_available,lsubmodel)
245
247
248 IF(dir(1:1)=='X') idir=1
249 IF(dir(1:1)=='Y') idir=2
250 IF(dir(1:1)=='Z') idir=3
251 ENDIF
252
253
254 is=0
255 DO j=1,nsurf
256 IF (isu==igrsurf(j)%ID) is
257 ENDDO
258 IF(is/=0)THEN
259 nn=igrsurf(is)%NSEG
260 DO j=1,nn
261 lloadp(iad+4*(j-1)) =igrsurf(is)%NODES(j,1)
262 lloadp(iad+4*(j-1)+1)=igrsurf(is)%NODES(j,2)
263 lloadp(iad+4*(j-1)+2)=igrsurf(is)%NODES(j,3)
264 IF(igrsurf(is)%NODES(j,2)==igrsurf(is)%NODES(j,3))THEN
265 lloadp(iad+4*(j-1)+3)=0
266 ELSE
267 lloadp(iad+4*(j-1)+3)=igrsurf(is)%NODES(j,4)
268 ENDIF
269 ENDDO
270 ENDIF
271 iloadp(1,k+nidxload)=4*nn
272
273
274 ifuncl=0
275 DO j=1,nfunct
276 IF(npc(nfunct+j+1)==ifunc)ifuncl=j
277 ENDDO
278 IF(ifuncl==0)THEN
280 . msgtype=msgerror,
281 . anmode=aninfo_blind_1,
283 . c1=titr,
284 . i2=ifunc)
285 ENDIF
286
287 isens = 0
288 IF(idsens > 0) THEN
289 DO j=1,sensors%NSENSOR
290 IF(idsens/=0) THEN
291 IF(idsens == sensors%SENSOR_TAB(j)%SENS_ID) THEN
292 isens=j
293 EXIT
294 ENDIF
295 ENDIF
296 ENDDO
297 IF(isens==0)THEN
299 . msgtype=msgerror,
300 . anmode=aninfo_blind_1,
302 . c1=titr,
303 . i2=idsens)
304 ENDIF
305 ENDIF
306
307
308
309 noskew = 0
310 IF(idskew == 0 .AND. sub_index /= 0 ) idskew = lsubmodel(sub_index)%SKEW
311
312 IF(idskew > 0) THEN
314 IF(idskew == iskn(4,j+1)) THEN
315 noskew=j+1
316 ENDIF
317 ENDDO
318 IF(noskew==0)THEN
319 CALL ancmsg(msgid=137,anmode=aninfo,msgtype=msgerror,
320 . c1='LOAD PRESSURE',
321 . c2='LOAD PRESSURE',
322 . i2=idskew,i1=
id,c3=titr)
323 ENDIF
324 ENDIF
325
326
327
328
329 CALL hm_get_floatv(
'xscale_p',fcx,is_available,lsubmodel,unitab)
331 CALL hm_get_floatv(
'yscale_p',fcy,is_available,lsubmodel,unitab)
333
334 IF (fcx == zero) fcx = fac_fcx
335 IF (fcy == zero) fcy = fac_fcy
336
337
338
340
341 ninters = 0
344
345
346
349 tinter = 0
350 IF(idint > 0 ) THEN
351 DO ni=1,nbinter
352 IF(id_inter(ni) == idint)THEN
353 interloadp(nintloadp+nip)= ni
354 IF(inter_typ(ni) == 21) nintloadp21 = nintloadp21 + 1
355 tinter = 1
356 dgapint(ni)=
max(dgapint(ni),gap_i)
357 intgaploadp(nintloadp+nip)= gap_i
358 END IF
359 END DO
360 IF(tinter==0)THEN
362 . msgtype=msgerror,
363 . anmode=aninfo,
365 . c1=titr,
366 . i2=idint)
367 ENDIF
368 ninters = ninters + 1
369 ENDIF
370 ENDDO
371 ENDIF
372
373
374
375 IF(is/=0)THEN
376 iloadp( 3,k+nidxload) = ifuncl
377 iloadp( 4,k+nidxload) = iad
378 iloadp( 5,k+nidxload) = ninters
379 iloadp( 6,k+nidxload) = idir
380 iloadp( 7,k+nidxload) = isens
381 iloadp( 8,k+nidxload) = noskew
382 iloadp( 9,k+nidxload) = inorm
383 iloadp(10,k+nidxload) = iload
384
385 facloadp( 1,k+nidxload) = fcy
386 facloadp( 2,k+nidxload) = one/fcx
387
389 ENDIF
390
391 WRITE (iout,2002)
392 WRITE (iout,'(I10,2X,I10,2X,I10,2X,I10,9X,A1,2X,I10,2X,
393 . 1PG20.13,2X,1PG20.13)')isu,ifunc,idsens,inorm,dir(1:1),idskew,fcx,fcy
394 IF(ninters > 0) THEN
395 WRITE (iout,2003)
396 j = 0
397 DO i=1,(ninters/10)
398 WRITE (iout,'(10(6X,I10,4X))')id_inter(interloadp(nintloadp+1:nintloadp+10))
399 WRITE (iout,'(10G20.13)')intgaploadp(nintloadp+1:nintloadp+10)
400 j = j +10
401 ENDDO
402 IF(modulo(ninters,10) > 0) THEN
403 WRITE (iout,
'(10(6X,I10,4X))')id_inter(interloadp(nintloadp+j+1:nintloadp+
ninterp))
404 WRITE (iout,'(10G20.13)')intgaploadp(nintloadp+j+1:nintloadp+ninters)
405 ENDIF
406 ENDIF
407 numloadp = numloadp + 4*nn
408 nintloadp = nintloadp + ninters
409
410 ENDDO
411
412
413 IF(nintloadp > 0) THEN
414 nik = 0
415 DO k=1,nloadp_hyd
418 ni = interloadp(nik + n)
419 kloadpinter(ni) = kloadpinter(ni)+1
420 ENDDO
422 ENDDO
423
424 DO n=1,ninter
425 kloadpinter(n+1) = kloadpinter(n+1) + kloadpinter(n)
426 END DO
427
428 DO n=ninter,1,-1
429 kloadpinter(n+1) = kloadpinter(n)
430 END DO
431 kloadpinter(1)=0
432
433 nik = 0
434 DO k=1,nloadp_hyd
437 ni = interloadp(nik + n)
438 kloadpinter(ni) = kloadpinter(ni)+1
439 loadpinter(kloadpinter(ni)) = k
440 dgaploadint(kloadpinter(ni)) = intgaploadp(nik + n)
441
442 ENDDO
444 ENDDO
445
446 DO n=ninter,1,-1
447 kloadpinter(n+1) = kloadpinter(n)
448 END DO
449 kloadpinter(1)=0
450
451 ENDIF
452
453 DEALLOCATE (id_inter,inter_typ)
454
455
456 RETURN
457
458 2002 FORMAT(//
459
460 . ' PRESSURE LOADS (GENERAL) '/
461 . ' ------------------ '/
462 . ' SURFACE CURVE SENSOR INORM DIRECTION SKEW',
463 . ' SCALE_X SCALE_Y')
464
465 2003 FORMAT(//
466 . ' INTERFACES AND GAP SHIFTS')
467
468
subroutine hm_get_float_array_index(name, rval, index, is_available, lsubmodel, unitab)
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_int_array_index(name, ival, index, is_available, lsubmodel)
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, parameter ncharline
integer, dimension(:,:), allocatable isurf_r2r
subroutine ninterp(ifunc, npc, pld, npoint, xv, yv)
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)