48 . IGRNOD , IGRBRIC, ISKN , SKEW , INIVIDS ,
49 . X , UNITAB , LSUBMODEL, RTRANS , XFRAME ,
50 . IFRAME , VFLOW , WFLOW , KXSP , MULTI_FVM ,
51 . FVM_INIVEL, IGRQUAD, IGRSH3N , RBY_MSN, RBY_INIAXIS,
52 . SENSORS ,NINIVELT,INIVEL_T )
80#include "implicit_f.inc"
94TYPE (UNIT_TYPE_),
INTENT(IN) ::UNITAB
95 INTEGER ITAB(*), ITABM1(*),ISKN(LISKN,*),
96 . INIVIDS(*),IFRAME(LISKN,*),KXSP(NISP,*),RBY_MSN(2,*)
97 TYPE(SUBMODEL_DATA) LSUBMODEL(*)
99 . v(3,*),w(3,*),vr(3,*),skew(lskew,*),x(3,*),
100 . rtrans(ntransf,*),xframe(nxframe,*),vflow(3,*) ,wflow(3,*),
102 TYPE(multi_fvm_struct) ::
103 TYPE(fvm_inivel_struct),
INTENT(INOUT) :: FVM_INIVEL(*)
104 TYPE (SENSORS_) ,
INTENT(IN) :: SENSORS
105 TYPE(INIVEL_),
DIMENSION(NINIVELT),
INTENT(INOUT) :: INIVEL_T
107 TYPE (GROUP_) ,
DIMENSION(NGRNOD) :: IGRNOD
108 TYPE (GROUP_) ,
DIMENSION(NGRBRIC) :: IGRBRIC
109 TYPE (GROUP_) ,
DIMENSION(NGRQUAD) :: IGRQUAD
110 TYPE () ,
DIMENSION(NGRSH3N) :: IGRSH3N
114 INTEGER :: ,J,K,N,NRB,KPRI,KROT,NNOD,NOSYS,ITYPE,ID,ISK,IGR,IGRS,NBVEL
115 INTEGER :: USER_UNIT_ID,SUB_INDEX,IDIR,SENS_ID,NINIT,SENSID
116 INTEGER :: IDGRBRICK, IDGRQUAD, IDGRTRIA, IDGRBRICK_LOC, IDGRQUAD_LOC, IDGRTRIA_LOC
117 INTEGER :: NOD_COUNT,NODINIVEL,CPT,SUB_ID
118 INTEGER :: IFRA,IFM,IUN,K1,K2,K3,INOD,NB_NODES, ID_NODE,IOK
119 INTEGER :: NINIVEL_FVM,NINIVEL_TOTAL
120 INTEGER :: FVM_GRBRIC_USER_ID(NINVEL), FVM_GRQUAD_USER_ID(NINVEL), FVM_GRTRIA_USER_ID(NINVEL)
121 INTEGER,
DIMENSION(:),
ALLOCATABLE :: TAGNO_RBY
122 my_real :: v1, v2, v3, v4, v5, v6, vl1, vl2, vl3,vra, ox, oy, oz, nixj(6),vr1,vr2,vr3,bid
124 CHARACTER(LEN=NCHARTITLE) ::
125 CHARACTER(LEN=NCHARKEY) :: KEY
126 CHARACTER(LEN=NCHARFIELD) ::XYZ
132 INTEGER,
EXTERNAL :: USR2SYS
133 DATA mess/
'INITIAL VELOCITIES DEFINITION '/
138 is_available = .false.
165 CALL hm_option_read_key(lsubmodel,option_id = id,unit_id = user_unit_id,submodel_index = sub_index,
166 . submodel_id = sub_id,option_titr = titr,keyword2 = key)
169 is_found_unit_id = .false.
171 IF (unitab%UNIT_ID(j) == user_unit_id)
THEN
172 is_found_unit_id = .true.
176 IF (user_unit_id /= 0 .AND. .NOT.is_found_unit_id)
THEN
177 CALL ancmsg(msgid=659,anmode=aninfo,msgtype=msgerror,
178 . i2=user_unit_id,i1=id,c1=
'INITIAL VELOCITY',c2=
'INITIAL VELOCITY',c3=titr)
182 fvm_inivel(i)%FLAG = .false.
185 IF(key(1:3)==
'TRA')
THEN
187 ELSEIF(key(1:3)==
'ROT')
THEN
189 ELSEIF(key(1:3)==
'T+G')
THEN
191 ELSEIF(key(1:3)==
'GRI')
THEN
193 ELSEIF(key(1:4)==
'AXIS')
THEN
194 IF(invers < 120)
THEN
195 CALL ancmsg(msgid=2046,anmode=aninfo,msgtype=msgerror,c1=
'/INIVEL/AXIS',i1=invers)
198 ELSEIF(key(1:3) ==
'FVM')
THEN
201 ELSEIF(key
'NODE')
THEN
213 CALL hm_get_floatv(
'tstart',tstart,is_available,lsubmodel,unitab)
214 CALL hm_get_intv(
'sensor_id',sensid,is_available,lsubmodel)
216 DO j=1,sensors%NSENSOR
217 IF(sensors%SENSOR_TAB(j)%SENS_ID==sensid) sens_id=j
220 CALL ancmsg(msgid=521,anmode=aninfo,msgtype=msgerror,
231 ELSEIF (itype <= 3)
THEN
233 CALL hm_get_intv(
'entityid',igr,is_available,lsubmodel)
234 CALL hm_get_intv(
'inputsystem',isk,is_available,lsubmodel)
235 IF(isk == 0 .AND. sub_index /= 0 ) isk = lsubmodel(sub_index)%SKEW
236 CALL hm_get_floatv(
'vector_X',vl1,is_available,lsubmodel,unitab)
237 CALL hm_get_floatv(
'vector_Y',vl2,is_available,lsubmodel,unitab)
238 CALL hm_get_floatv(
'vector_Z',vl3,is_available,lsubmodel,unitab)
240 IF(ifra == 0 .AND. sub_index /= 0)
CALL subrotvect(vl1,vl2,vl3,rtrans,sub_id,lsubmodel)
242 IF (tstart>zero .OR. sens_id>0)
THEN
244 inivel_t(ninit)%ID = id
245 inivel_t(ninit)%ITYPE = itype
246 inivel_t(ninit)%GENERAL%TYPE = itype
247 inivel_t(ninit)%GENERAL%SKEW_ID = isk
248 inivel_t(ninit)%GENERAL%GRND_ID = igr
249 inivel_t(ninit)%GENERAL%VX = vl1
250 inivel_t(ninit)%GENERAL%VY = vl2
251 inivel_t(ninit)%GENERAL%VZ = vl3
252 inivel_t(ninit)%GENERAL%SENSOR_ID = sensid
253 inivel_t(ninit)%GENERAL%TSTART = tstart
257 ELSEIF (itype == 4)
THEN
259 CALL hm_get_intv(
'inputsystem',ifra,is_available,lsubmodel)
260 CALL hm_get_intv(
'entityid',igr,is_available,lsubmodel)
262 CALL hm_get_floatv(
'vector_X',vl1,is_available,lsubmodel,unitab)
263 CALL hm_get_floatv(
'vector_Y',vl2,is_available,lsubmodel,unitab)
264 CALL hm_get_floatv(
'vector_Z',vl3,is_available,lsubmodel,unitab)
265 CALL hm_get_floatv(
'rad_rotational_velocity',vra,is_available,lsubmodel,unitab)
266 IF(ifra == 0 .AND. sub_index /= 0)
CALL subrotvect(vl1,vl2,vl3,rtrans,sub_id,lsubmodel)
267 IF(xyz(1:1)==
'X')
THEN
269 ELSEIF(xyz(1:1)==
'Y')
THEN
271 ELSEIF(xyz(1:1)==
'Z')
THEN
274 CALL ancmsg(msgid=933,msgtype=msgerror,anmode=aninfo,i1=id,c1=titr)
277 IF (tstart>zero .OR. sens_id>0)
THEN
279 inivel_t(ninit)%ID = id
280 inivel_t(ninit)%ITYPE = itype
281 inivel_t(ninit)%AXIS%DIR = idir
282 inivel_t(ninit)%AXIS%FRAME_ID = ifra
283 inivel_t(ninit)%AXIS%GRND_ID = igr
284 inivel_t(ninit)%AXIS%VX = vl1
285 inivel_t(ninit)%AXIS%VY = vl2
286 inivel_t(ninit)%AXIS%VZ = vl3
287 inivel_t(ninit)%AXIS%VR = vra
288 inivel_t(ninit)%AXIS%SENSOR_ID = sensid
289 inivel_t(ninit)%AXIS%TSTART = tstart
293 ELSEIF (itype == 5)
THEN
294 CALL hm_get_floatv(
'Vx', vl1, is_available, lsubmodel, unitab)
295 CALL hm_get_floatv(
'Vy', vl2, is_available, lsubmodel, unitab)
296 CALL hm_get_floatv(
'Vz', vl3, is_available, lsubmodel, unitab)
297 CALL hm_get_intv(
'grbric_ID', idgrbrick, is_available
298 CALL hm_get_intv(
'grqd_ID', idgrquad, is_available, lsubmodel)
299 CALL hm_get_intv(
'grtria_ID', idgrtria, is_available, lsubmodel)
300 CALL hm_get_intv(
'skew_ID', isk, is_available, lsubmodel)
302 IF (tstart>zero .OR. sens_id>0)
THEN
304 inivel_t(ninit)%ID = id
305 inivel_t(ninit)%ITYPE = itype
306 inivel_t(ninit)%FVM%SKEW_ID = isk
307 inivel_t(ninit)%FVM%GRBRIC_ID = idgrbrick
308 inivel_t(ninit)%FVM%GRQD_ID = idgrquad
309 inivel_t(ninit)%FVM%GRTRIA_ID = idgrtria
310 inivel_t(ninit)%FVM%VX = vl1
311 inivel_t(ninit)%FVM%VY = vl2
312 inivel_t(ninit)%FVM%VZ = vl3
313 inivel_t(ninit)%FVM%SENSOR_ID = sensid
314 inivel_t(ninit)%FVM%TSTART = tstart
317 ELSEIF (itype == 6)
THEN
318 CALL hm_get_intv(
'NB_NODES', nb_nodes, is_available, lsubmodel)
330 IF (id_node > 0)
THEN
339 IF (isk == iskn(4,j+1))
THEN
341 v1 = skew(1,isk)*vl1+skew(4,isk)*vl2+skew
342 v2 = skew(2,isk)*vl1+skew(5,isk)*vl2+skew(8,isk)*vl3
343 v3 = skew(3,isk)*vl1+skew(6,isk)*vl2+skew(9,isk)*vl3
344 v4 = skew(1,isk)*vr1+skew(4,isk)*vr2+skew(7,isk)*vr3
345 v5 = skew(2,isk)*vr1+skew(5,isk)*vr2+skew(8,isk)*vr3
346 v6 = skew(3,isk)*vr1+skew(6,isk)*vr2+skew(9,isk)*vr3
350 IF (iok == 0)
CALL ancmsg(msgid=184,msgtype=msgerror,anmode=aninfo,
351 . i1=id,i2=isk,c1=
'INITIAL VELOCITY',c2=
'INITIAL VELOCITY',c3=titr)
352 nosys = usr2sys(id_node,itabm1,mess,id)
359 ELSEIF (isk == 0 .AND. ifra == 0)
THEN
378 IF (isk == iskn(4,j+1))
THEN
380 v1 = skew(1,isk)*vl1+skew(4,isk)*vl2+skew(7,isk)*vl3
381 v2 = skew(2,isk)*vl1+skew(5,isk)*vl2+skew(8,isk)*vl3
382 v3 = skew(3,isk)*vl1+skew(6,isk)*vl2+skew(9,isk)*vl3
387 IF(.NOT. is_found)
THEN
388 CALL ancmsg(msgid=184,msgtype=msgerror,anmode=aninfo,i1=id,i2=isk,
389 . c1=
'INITIAL VELOCITY', c2=
'INITIAL VELOCITY', c3=titr)
392 ELSEIF (ifra > 0)
THEN
396 IF(ifra==iframe(4,j))
THEN
397 v1 = xframe(1,j)*vl1+xframe(4,j)*vl2+xframe(7,j)*vl3
398 v2 = xframe(2,j)*vl1+xframe(5,j)*vl2+xframe(8,j)*vl3
399 v3 = xframe(3,j)*vl1+xframe(6,j)*vl2+xframe(9,j)*vl3
404 IF(.NOT. is_found)
THEN
405 CALL ancmsg(msgid=490,msgtype=msgerror,anmode=aninfo,i1=id,i2=ifra,
406 . c1=
'INITIAL VELOCITY',c2=
'INITIAL VELOCITY',c3=titr)
409 ELSEIF (isk == 0 .AND. ifra == 0)
THEN
420 IF (.NOT. multi_fvm%IS_USED)
THEN
421 CALL ancmsg(msgid=1554,msgtype=msgerror,anmode=aninfo,c1=
'IN /INIVEL OPTION')
426 IF (idgrbrick + idgrquad + idgrtria == 0)
THEN
427 CALL ancmsg(msgid=1553, msgtype=msgwarning, anmode=aninfo,c1=
'IN /INIVEL OPTION')
429 IF (idgrbrick /= 0)
THEN
431 IF (idgrbrick == igrbric(j)%ID) idgrbrick_loc = j
433 IF (idgrbrick_loc == -1)
THEN
434 CALL ancmsg(msgid=1554, msgtype=msgerror,anmode=aninfo,c1=
'IN /INIVEL OPTION',i1=idgrbrick)
437 IF (idgrquad /= 0)
THEN
439 IF (idgrquad == igrquad(j)%ID) idgrquad_loc = j
441 IF (idgrquad_loc == -1)
THEN
442 CALL ancmsg(msgid=1554,msgtype=msgerror,anmode=aninfo,c1=
'IN /INIVEL OPTION',i1=idgrquad)
445 IF (idgrtria /= 0)
THEN
447 IF (idgrtria == igrsh3n(j)%ID) idgrtria_loc = j
449 IF (idgrtria_loc == -1)
THEN
450 CALL ancmsg(msgid=1554,msgtype=msgerror,anmode=aninfo,c1=
'IN /INIVEL OPTION',i1=idgrtria)
456 IF (tstart==zero .AND. sens_id==0)
THEN
457 fvm_inivel(i)%FLAG = .true.
458 fvm_inivel(i)%GRBRICID = idgrbrick_loc
459 fvm_inivel(i)%GRQUADID = idgrquad_loc
460 fvm_inivel(i)%GRSH3NID = idgrtria_loc
461 fvm_inivel(i)%VX = v1
462 fvm_inivel(i)%VY = v2
463 fvm_inivel(i)%VZ = v3
464 fvm_grbric_user_id(i) = idgrbrick
465 fvm_grquad_user_id(i) = idgrquad
466 fvm_grtria_user_id(i) = idgrtria
471 IF (itype /= 5 .AND. itype /= 6)
THEN
474 CALL ancmsg(msgid=668,msgtype=msgerror,anmode=aninfo,c1=
'/INIVEL',c2=
'/INIVEL',c3=titr,i1=id)
477 IF(igr == igrnod(j)%ID) igrs=j
480 IF(tstart==zero .AND. sens_id==0)
THEN
481 DO j=1,igrnod(igrs)%NENTITY
482 nosys=igrnod(igrs)%ENTITY(j)
495 ELSEIF(itype == 1)
THEN
502 ELSEIF(itype == 2)
THEN
519 ELSEIF(itype == 3)
THEN
531 ELSEIF(itype == 4)
THEN
533 IF ((.NOT.
ALLOCATED(tagno_rby)).AND.(nrbody > 0))
THEN
534 ALLOCATE(tagno_rby(numnod))
537 tagno_rby(rby_msn(2,nrb)) = nrb
548 nixj(1)=xframe(k1,ifm)*(x(2,nosys)-oy)
549 nixj(2)=xframe(k2,ifm)*(x(1,nosys)-ox)
550 nixj(3)=xframe(k2,ifm)*(x(3,nosys)-oz)
551 nixj(4)=xframe(k3,ifm)*(x(2,nosys)-oy)
552 nixj(5)=xframe(k3,ifm)*(x
553 nixj(6)=xframe(k1,ifm)*(x(3,nosys)-oz)
555 vr(1,nosys)= vra*xframe(k1,ifm)
556 vr(2,nosys)= vra*xframe(k2,ifm)
557 vr(3,nosys)= vra*xframe(k3,ifm)
574 IF (idir==1) vr(1,nosys)= vra
575 IF (idir==2) vr(2,nosys)= vra
576 IF (idir==3) vr(3,nosys)= vra
579 v(1,nosys)= v1+vra*(nixj(3)-nixj(4))
580 v(2,nosys)= v2+vra*(nixj(5)-nixj(6))
581 v(3,nosys)= v3+vra*(nixj(1)-nixj(2))
583 vflow(1,nosys) = v(1,nosys)
584 vflow(2,nosys) = v(2,nosys)
585 vflow(3,nosys) = v(3,nosys)
586 wflow(1,nosys) = v(1,nosys)
587 wflow(2,nosys) = v(2,nosys)
588 wflow(3,nosys) = v(3,nosys)
593 IF (tagno_rby(nosys) > 0)
THEN
594 rby_iniaxis(1,tagno_rby(nosys)) = one
595 rby_iniaxis(2,tagno_rby(nosys)) = v(1,nosys)
596 rby_iniaxis(3,tagno_rby(nosys)) = v(2,nosys)
597 rby_iniaxis(4,tagno_rby(nosys)) = v(3,nosys)
599 rby_iniaxis(5,tagno_rby(nosys)) = vr(1,nosys)
600 rby_iniaxis(6,tagno_rby(nosys)) = vr(2,nosys)
601 rby_iniaxis(7,tagno_rby(nosys)) = vr(3,nosys)
607 nnod=igrnod(igrs)%NENTITY
610 CALL ancmsg(msgid=53,msgtype=msgerror,anmode=aninfo,c1=
'IN /INIVEL OPTION',i1=igr)
615 IF (
ALLOCATED(tagno_rby))
DEALLOCATE(tagno_rby)
617 CALL udouble(inivids,1,nbvel,mess,0,bid)
622 inod = kxsp(3,first_sphres+n-1)
639 IF (hm_ninvel > 0)
THEN
644 IF(ipri >= 2 .AND. ninivel_total-ninivel_fvm > 0 )
THEN
650 ELSEIF(krot == 0)
THEN
673 IF (v(1,i)/=zero.OR.v(2,i)/=zero.OR.v(3,i)/=zero.OR.vr(1,i)/=zero.OR.vr(2,i)/=zero.OR.vr(3,i)/=zero)
THEN
674 nodinivel=nodinivel+1
675 IF (vr(1,i) /= zero .OR. vr(2,i) /= zero .OR. vr(3,i) /= zero)
THEN
676 WRITE(iout,
'(3X,I10,8X,1P6G20.13)') itab(i),v(1,i),v(2,i),v(3,i),vr(1,i),vr(2,i),vr(3,i)
678 WRITE(iout,
'(3X,I10,8X,1P6G20.13)')itab(i),v(1,i),v(2,i),v(3,i)
682 ELSEIF(v(1,i) /= zero .OR. v(2,i) /= zero .OR. v(3,i) /= zero)
THEN
684 WRITE(iout,
'(3X,I10,8X,1P6G20.13)')itab(i),v(1,i)
689 ELSEIF(iale /= 0)
THEN
695 IF(v(1,i)/=zero.OR.v(2,i)/=zero.OR.v(3,i)/=zero.OR.w(1,i)/=zero.OR.w(2,i)/=zero.OR.w(3,i)/=zero)
THEN
696 nodinivel=nodinivel+1
697 WRITE(iout,
'(5X,I10,8X,1P6G20.13)') itab(i),v(1,i),v(2,i),v(3,i),w(1,i),w(2,i),w(3,i)
704 WRITE(iout,
'(/,A,I10,//)') ' number of nodes with initial velocity:
',NODINIVEL
708 ! INITIAL VELOCIIES FOR COLLOCATED SCHEME
709.AND.
IF(IPRI >= 2 NINIVEL_FVM > 0 )THEN
711 !---DETAILS OUTPUT-----------------------------------
712 ! COLOCATED SCHEME (VELOCITIES AT CELL CENTROIDS)
713 DO I=1,HM_NINVEL ! bug cpt
714.NOT.
IF( FVM_INIVEL(I)%FLAG)CYCLE
718 IF(IDGRBRICK_LOC >0)THEN
720 WRITE(IOUT,'(5x,i10,8x,1p6g20.13)
') FVM_GRBRIC_USER_ID(I),V1,V2,V3
722 IF(IDGRQUAD_LOC >0)THEN
724 WRITE(IOUT,'(5x,i10,8x,1p6g20.13)
') FVM_GRQUAD_USER_ID(I),V1,V2,V3
726 IF(IDGRTRIA_LOC >0)THEN
728 WRITE(IOUT,'(5x,i10,8x,1p6g20.13)
') FVM_GRTRIA_USER_ID(I),V1,V2,V3
733 IF (NINIT > 0 ) WRITE(IOUT,4000) NINIT
735 ENDIF!(HM_NINVEL > 0)
740 .' initial velocities
'/
741 .' -------------------
'/
742 + 9X,'node
',22X,'vx
',15X,'vy
',15X,'vz
'/)
744 .' initial velocities
'/
745 .' -------------------
'/
746 + 9X,'node
',22X,'vx
',15X,'vy
',15X,'vz
',
747 + 14X,'wx
',15X,'wy
',15X,'wz
'/)
749 .' initial velocities
'/
750 .' -------------------
'/
751 + 9X,'node
',22X,'vx
',15X,'vy
',15X,'vz
',
752 + 14X,'vrx
',15X,'vry
',15X,'vrz
'/)
754 .' initial velocities(fvm)
'/
755 .' ------------------------
')
757 + 9X,'grbric
',22X,'vx
',15X,'vy
',15X,'vz
')
759 + 9X,'grquad
',22X,'vx
',15X,'vy
',15X,'vz
')
761 + 9X,'grtria
',22X,'vx
',15X,'vy
',15X,'vz
')
764 .' initial velocities
'/
765 .' -------------------
'/
766 + I8,3X,'initial velocities will be applied in engine by t_start or sensor
'/)