40 . UNITAB, NOM_OPT, LSUBMODEL)
53#include "implicit_f.inc"
64 TYPE (UNIT_TYPE_),
INTENT(IN) ::UNITAB
66 INTEGER NOM_OPT(LNOPT1,*)
68 TYPE (GROUP_) ,
DIMENSION(NGRNOD) :: IGRNOD
69 TYPE (SURF_) ,
DIMENSION(NSURF) :: IGRSURF
70 TYPE(
submodel_data),
DIMENSION(NSUBMOD),
INTENT(IN) :: LSUBMODEL
74 INTEGER I, ID, ITYP, II, NINOUT, J, ISU, NN, IAD, ITAG(NUMNOD),
75 . iad1, nel, j1, j2, j3, j4, ish34, nno, l, ibid,
76 . iii, igr, nnn, uid, iflagunit, iunit
77 INTEGER JFORM, FREESURF, NELMAX, HG
80 CHARACTER(LEN=NCHARTITLE)::
81 LOGICAL :: IS_AVAILABLE
82 INTEGER :: HM_NDAA, HM_NFLOW
98 CALL hm_get_intv(
'surf_IDex', ii, is_available, lsubmodel)
99 CALL hm_get_intv(
'Nio', ninout, is_available, lsubmodel)
102 IF (ii==igrsurf(j)%ID) isu=j
105 CALL ancmsg(msgid=621,msgtype=msgerror,anmode=aninfo,
106 . i1=id,c1=titr,c2=
'SURFACE',i2=ii)
115 j1=igrsurf(isu)%NODES(j,1)
116 j2=igrsurf(isu)%NODES(j,2)
117 j3=igrsurf(isu)%NODES(j,3)
118 j4=igrsurf(isu)%NODES(j,4)
119 ish34=igrsurf(isu)%ELTYP(j)
126 ELSEIF (ish34==7)
THEN
132 IF (itag(j)==1) nno=nno+1
136 CALL hm_get_intv(
'grn_IDaux', iii, is_available, lsubmodel)
142 IF (igrnod(j)%ID==iii) igr=j
153 nnn=igrnod(igr)%NENTITY
157 liflow=liflow+niflow+nno+3*nel+ninout*niioflow+nnn+nel+nno+nnn
159 liflow=liflow+niflow+nno+3*nel+ninout*niioflow+nnn+nel+4*nno+2*nnn+2*nel
161 lrflow=lrflow+nrflow+5*(nno+nnn)+ninout*nrioflow
174 CALL hm_get_intv(
'surf_ID', ii, is_available, lsubmodel)
175 CALL hm_get_intv(
'Freesurf', freesurf, is_available, lsubmodel)
177 IF(freesurf == 0) freesurf=1
180 IF (ii==igrsurf(j)%ID) isu=j
183 CALL ancmsg(msgid=1603,msgtype=msgerror,anmode=aninfo,
184 . i1=id,c1=titr,c2=
'SURFACE NUMBER NOT FOUND')
187 nn= igrsurf(isu)%NSEG
193 j1=igrsurf(isu)%NODES(j,1)
194 j2=igrsurf(isu)%NODES(j,2)
195 j3=igrsurf(isu)%NODES(j,3)
196 j4=igrsurf(isu)%NODES(j,4)
197 ish34=igrsurf(isu)%ELTYP(j)
205 ELSEIF(jform == 2)
THEN
208 ELSEIF (ish34==7)
THEN
214 IF (itag(j)==1) nno=nno+1
218 liflow=liflow+niflow+nno+3*nel+nno
219 ELSEIF(jform == 2)
THEN
220 liflow=liflow+niflow+nno+5*nel+nno+nbgauge
224 liflow=liflow+niflow+nno+3*nel+nno+nno+2*nel
225 ELSEIF(jform == 2)
THEN
226 liflow=liflow+niflow+nno+5*nel+nno+nbgauge+nno+2*nel
230 IF (nel > int(sqrt(real(hg))))
THEN
231 CALL ancmsg(msgid = 1711, anmode=aninfo, msgtype = msgerror,
232 . i1 = int(sqrt(real(hg))))
235 IF(nel < nelmax)
THEN
236 lrflow=lrflow+nrflow+7*nel+nel*nel+3*nel
239 lrflow=lrflow+nrflow+7*nel+2*nel*nel+3*nel
241 IF(freesurf == 2) lrflow=lrflow+3*nel
272 . NPC , IGRNOD , MEMFLOW,UNITAB,
273 . X , NOM_OPT , LGAUGE ,IGRV, LSUBMODEL,IRESP)
286#include "implicit_f.inc"
290#include "com01_c.inc"
291#include "com04_c.inc"
292#include "scr17_c.inc"
293#include "param_c.inc"
294#include "units_c.inc"
295#include "flowcom.inc"
299 TYPE (UNIT_TYPE_),
INTENT(IN) ::UNITAB
300 INTEGER IFLOW(*),NPC(*)
301 INTEGER NOM_OPT(LNOPT1,*), LGAUGE(3,*), IGRV(NIGRV,*)
302 INTEGER(KIND=8) MEMFLOW(*)
304 TYPE(
submodel_data),
DIMENSION(NSUBMOD),
INTENT(IN) :: LSUBMODEL
305 INTEGER,
INTENT(IN) :: IRESP
307 TYPE (GROUP_) ,
DIMENSION(NGRNOD) :: IGRNOD
308 TYPE (SURF_) ,
DIMENSION(NSURF) :: IGRSURF
312 INTEGER IADI, IADR, I, ID, ITYP, II, NINOUT, ISU, J, IPIMP,
313 . NN, IAD, ITAG(NUMNOD), IAD1, IAD2, J1, J2, J3, J4, ISH34,
314 . NNO, ITABINV(NUMNOD), NEL, IVFREE, IFVEL, IFPRES,
315 . k, ifunc, l, ifpa, iadmati, iadmatr, iii, igr, nnn,
316 . nbloc, iform, ilvout, itagio(numnod), ng1, ng2, ng3, ng4,
317 . n1, n2, n3, n4, prod, nprow, npcol, itest, ivini, ifvini,
318 . iinside, nrmax, nr, isuio,nflow0, nblocmax, uid,
320 INTEGER JFORM, , II1, II2, II3, II4, II5, II6
321 INTEGER IR1, IR2, IR3,IR4, IR5, IR6, IR7, IR8, IR9, IR10, IR11
322 INTEGER IPRES, IWAVE, INTEGR, FREESURF, , GRAV_ID, NELMAX, IBID, HG
323 INTEGER,
DIMENSION(:),
ALLOCATABLE :: N_SHELL
324 my_real sfpa, sfvel, sfpres, scalt, dtsub, rho, tole, scalt_pa,
325 . sfvini, dirx, diry, dirz,
norm, rnspmd, scalt_vi
326 my_real xc, yc, zc, xs, ys, zs, ssp, pmax, theta
328 my_real xa, ya, za, xd, yd, zd, tt
329 my_real,
DIMENSION(:,:),
ALLOCATABLE :: cbem
331 CHARACTER(LEN=NCHARKEY) :: KEY
332 CHARACTER(LEN=NCHARTITLE) :: TITR
333 LOGICAL :: IS_AVAILABLE
334 INTEGER :: HM_NDAA, HM_NFLOW
354 CALL hm_get_intv('surf_idex
', II, IS_AVAILABLE, LSUBMODEL)
355 CALL HM_GET_INTV('nio
', NINOUT, IS_AVAILABLE, LSUBMODEL)
356 CALL HM_GET_INTV('iinside
', IINSIDE, IS_AVAILABLE, LSUBMODEL)
357 CALL HM_GET_INTV('ifsp
', IFPA, IS_AVAILABLE, LSUBMODEL)
358 CALL HM_GET_FLOATV('fscalesp
', SFPA, IS_AVAILABLE, LSUBMODEL, UNITAB)
359 CALL HM_GET_FLOATV('ascalesp
', SCALT, IS_AVAILABLE, LSUBMODEL, UNITAB)
363 IF (II==IGRSURF(J)%ID) ISU=J
372 J1=IGRSURF(ISU)%NODES(J,1)
373 J2=IGRSURF(ISU)%NODES(J,2)
374 J3=IGRSURF(ISU)%NODES(J,3)
375 J4=IGRSURF(ISU)%NODES(J,4)
376 ISH34=IGRSURF(ISU)%ELTYP(J)
380 IF (ISH34==3) ITAG(J4)=1
386 IFLOW(IADI+NIFLOW+NNO)=J
392 J1=IGRSURF(ISU)%NODES(J,1)
393 J2=IGRSURF(ISU)%NODES(J,2)
394 J3=IGRSURF(ISU)%NODES(J,3)
395 J4=IGRSURF(ISU)%NODES(J,4)
396 ISH34=IGRSURF(ISU)%ELTYP(J)
399 IFLOW(IADI+NIFLOW+NNO+3*(NEL-1)+1)=ITABINV(J1)
400 IFLOW(IADI+NIFLOW+NNO+3*(NEL-1)+2)=ITABINV(J2)
401 IFLOW(IADI+NIFLOW+NNO+3*(NEL-1)+3)=ITABINV(J3)
402 ELSEIF (ISH34==3) THEN
404 IFLOW(IADI+NIFLOW+NNO+3*(NEL-1)+1)=ITABINV(J1)
405 IFLOW(IADI+NIFLOW+NNO+3*(NEL-1)+2)=ITABINV(J2)
406 IFLOW(IADI+NIFLOW+NNO+3*(NEL-1)+3)=ITABINV(J4)
408 IFLOW(IADI+NIFLOW+NNO+3*(NEL-1)+1)=ITABINV(J2)
409 IFLOW(IADI+NIFLOW+NNO+3*(NEL-1)+2)=ITABINV(J3)
410 IFLOW(IADI+NIFLOW+NNO+3*(NEL-1)+3)=ITABINV(J4)
414 IF (IINSIDE/=2) IINSIDE=1
420 IF (IFPA==NPC(J)) IFUNC=J
423 CALL ANCMSG(MSGID=621,
435 CALL HM_GET_INTV('grn_idaux
', III, IS_AVAILABLE, LSUBMODEL)
436 CALL HM_GET_INTV('itest
', ITEST, IS_AVAILABLE, LSUBMODEL)
437 CALL HM_GET_FLOATV('tole
', TOLE, IS_AVAILABLE, LSUBMODEL, UNITAB)
439.AND.
IF (IINSIDE==2ITEST==1) ITEST=2
440 IF (TOLE==ZERO) TOLE=EM5
442 CALL HM_GET_FLOATV('rho
', RHO, IS_AVAILABLE, LSUBMODEL, UNITAB)
443 CALL HM_GET_INTV('ivinf
', IVINI, IS_AVAILABLE, LSUBMODEL)
448 IF (IGRNOD(J)%ID==III) IGR=J
450 NNN=IGRNOD(IGR)%NENTITY
452 IFLOW(IADI+NIFLOW+NNO+3*NEL+NINOUT*NIIOFLOW+J)=
453 . IGRNOD(IGR)%ENTITY(J)
459 CALL HM_GET_INT_ARRAY_INDEX('surf_idio
', II, J, IS_AVAILABLE, LSUBMODEL)
460 CALL HM_GET_INT_ARRAY_INDEX('fct_idvel
', IFVEL, J, IS_AVAILABLE, LSUBMODEL)
461 CALL HM_GET_INT_ARRAY_INDEX('fct_idpr
', IFPRES, J, IS_AVAILABLE, LSUBMODEL)
462 CALL HM_GET_FLOAT_ARRAY_INDEX('fscalenv
', SFVEL, J, IS_AVAILABLE, LSUBMODEL, UNITAB)
463 CALL HM_GET_FLOAT_ARRAY_INDEX('fscalepres
', SFPRES, J, IS_AVAILABLE, LSUBMODEL, UNITAB)
464 CALL HM_GET_FLOAT_ARRAY_INDEX('ascalet
', SCALT, J, IS_AVAILABLE, LSUBMODEL, UNITAB)
467 IF(SFVEL == ZERO) THEN
468 CALL HM_GET_FLOAT_ARRAY_INDEX_DIM('sfvel
', FAC_GEN, J, IS_AVAILABLE, LSUBMODEL, UNITAB)
469 SFVEL = ONE * FAC_GEN
471 IF(SFPRES == ZERO) THEN
472 CALL HM_GET_FLOAT_ARRAY_INDEX_DIM('sfpres
', FAC_GEN, J, IS_AVAILABLE, LSUBMODEL, UNITAB)
473 SFPRES = ONE * FAC_GEN
475 IF(SCALT == ZERO) THEN
476 CALL HM_GET_FLOAT_ARRAY_INDEX_DIM('scal_t
', FAC_GEN, J, IS_AVAILABLE, LSUBMODEL, UNITAB)
477 SCALT = ONE * FAC_GEN
482 IF (II==IGRSURF(K)%ID) ISUIO=K
485 CALL ANCMSG(MSGID=621,
493 IFLOW(IADI+NIFLOW+NNO+3*NEL+NIIOFLOW*(J-1)+1)=ISUIO
495 IFLOW(IADI+NIFLOW+NNO+3*NEL+NIIOFLOW*(J-1)+2)=0
500 IF (IFVEL==NPC(K)) IFUNC=K
503 CALL ANCMSG(MSGID=621,
515 IFLOW(IADI+NIFLOW+NNO+3*NEL+NIIOFLOW*(J-1)+3)=IFVEL
516 RFLOW(IADR+NRFLOW+5*(NNO+NNN)+NRIOFLOW*(J-1)+1)=SFVEL
522 IF (IFPRES==NPC(K)) IFUNC=K
525 CALL ANCMSG(MSGID=621,
535 IFLOW(IADI+NIFLOW+NNO+3*NEL+NIIOFLOW*(J-1)+4)=IFPRES
536 RFLOW(IADR+NRFLOW+5*(NNO+NNN)+NRIOFLOW*(J-1)+2)=SFPRES
538 RFLOW(IADR+NRFLOW+5*(NNO+NNN)+NRIOFLOW*(J-1)+3)=SCALT
542 CALL ANCMSG(MSGID=622,
547 . C2='one and only one pressure must be imposed
')
548.AND..OR.
ELSEIF (IVFREE/=1(IINSIDE==0
549.AND.
. (IINSIDE==1IVINI==0))) THEN
550 CALL ANCMSG(MSGID=622,
555 . C2='one and only one
velocity must be left free
')
556.AND..AND.
ELSEIF (IVFREE/=0IINSIDE==1IVINI==1) THEN
557 CALL ANCMSG(MSGID=622,
566 CALL ANCMSG(MSGID=622,
571 . C2='no imposed pressure
')
579 ISUIO=IFLOW(IADI+NIFLOW+NNO+3*NEL+NIIOFLOW*(J-1)+1)
580 NN=IGRSURF(ISUIO)%NSEG
582 NG1=IGRSURF(ISUIO)%NODES(K,1)
583 NG2=IGRSURF(ISUIO)%NODES(K,2)
584 NG3=IGRSURF(ISUIO)%NODES(K,3)
585 NG4=IGRSURF(ISUIO)%NODES(K,4)
586 ISH34=IGRSURF(ISUIO)%ELTYP(K)
601 N1=IFLOW(IADI+NIFLOW+NNO+3*(J-1)+1)
602 N2=IFLOW(IADI+NIFLOW+NNO+3*(J-1)+2)
603 N3=IFLOW(IADI+NIFLOW+NNO+3*(J-1)+3)
604 PROD=ITAGIO(N1)*ITAGIO(N2)*ITAGIO(N3)
605 IFLOW(IADI+NIFLOW+NNO+3*NEL+NINOUT*NIIOFLOW+NNN+J)=0
607 . IFLOW(IADI+NIFLOW+NNO+3*NEL+NINOUT*NIIOFLOW+NNN+J)=
608 . MAX(ITAGIO(N1),ITAGIO(N2),ITAGIO(N3))
611 CALL HM_GET_INTV('iform
', IFORM, IS_AVAILABLE, LSUBMODEL)
612 CALL HM_GET_INTV('ipri
', ILVOUT, IS_AVAILABLE, LSUBMODEL)
613 CALL HM_GET_FLOATV('dtflow
', DTSUB, IS_AVAILABLE, LSUBMODEL, UNITAB)
616 IF (IFORM==0) IFORM=1
623 NRMAX=INT(SQRT(RNSPMD))
626 IF (MOD(NSPMD,NR)==0) THEN
631 ELSEIF (IFORM==2) THEN
640 NBLOC=MIN(NNO/NPROW, NNO/NPCOL)
641 NBLOC=MIN(NBLOCMAX,NBLOC)
652 CALL HM_GET_INTV('ifvinf
', IFVINI, IS_AVAILABLE, LSUBMODEL)
653 CALL HM_GET_FLOATV('fscalevel
', SFVINI, IS_AVAILABLE, LSUBMODEL, UNITAB)
654 CALL HM_GET_FLOATV('ascalevel
', SCALT_VI, IS_AVAILABLE, LSUBMODEL, UNITAB)
656 CALL HM_GET_FLOATV('dirx
', DIRX, IS_AVAILABLE, LSUBMODEL, UNITAB)
657 CALL HM_GET_FLOATV('diry
', DIRY, IS_AVAILABLE, LSUBMODEL, UNITAB)
658 CALL HM_GET_FLOATV('dirz
', DIRZ, IS_AVAILABLE, LSUBMODEL, UNITAB)
662 IF (IFVINI==NPC(J)) IFUNC=J
665 CALL ANCMSG(MSGID=621,
674 NORM=SQRT(DIRX**2+DIRY**2+DIRZ**2)
676 CALL ANCMSG(MSGID=622,
681 . C2='null
velocity direction vector
')
696 IFLOW(IADI+9)=NNO*NNO+NNO*(NEL+1)
697 IFLOW(IADI+10)=IADMATI
698 IFLOW(IADI+11)=IADMATR
702 IFLOW(IADI+14)=NIFLOW+NNO+3*NEL+NINOUT*NIIOFLOW+NNN+NEL+NNO+NNN
704 IFLOW(IADI+14)=NIFLOW+NNO+3*NEL+NINOUT*NIIOFLOW+NNN+NEL+4*NNO+2*NNN+2*NEL
706 IFLOW(IADI+15)=NRFLOW+5*(NNO+NNN)+NINOUT*NRIOFLOW
707 IFLOW(IADI+17)=ILVOUT
710 IFLOW(IADI+20)=IADMATR+NNO*NNO
713 IFLOW(IADI+24)=IFVINI
715 RFLOW(IADR+2)=SCALT_PA
721 RFLOW(IADR+8)=SCALT_VI
727 MEMFLOW(1)=MEMFLOW(1)+IFLOW(IADI+8)
728 MEMFLOW(2)=MEMFLOW(2)+IFLOW(IADI+9)
731 WRITE(IOUT,1100) I, ID, TRIM(TITR),IGRSURF(ISU)%ID, NNO, NEL
734 ELSEIF (IINSIDE==2) THEN
737 WRITE(IOUT,1200) IFPA, SFPA, SCALT_PA, III, NNN
740 WRITE(IOUT,1225) TOLE
741 ELSEIF (ITEST==2) THEN
743 WRITE(IOUT,1225) TOLE
744 ELSEIF (ITEST==0) THEN
748 WRITE(IOUT,1400) NINOUT
750 ISUIO=IFLOW(IADI+NIFLOW+NNO+3*NEL+NIIOFLOW*(J-1)+1)
751 IFVEL=IFLOW(IADI+NIFLOW+NNO+3*NEL+NIIOFLOW*(J-1)+3)
752 SFVEL=RFLOW(IADR+NRFLOW+5*(NNO+NNN)+NRIOFLOW*(J-1)+1)
753 IFPRES=IFLOW(IADI+NIFLOW+NNO+3*NEL+NIIOFLOW*(J-1)+4)
754 SFPRES=RFLOW(IADR+NRFLOW+5*(NNO+NNN)+NRIOFLOW*(J-1)+2)
755 SCALT=RFLOW(IADR+NRFLOW+5*(NNO+NNN)+NRIOFLOW*(J-1)+3)
756 WRITE(IOUT,1410) J, IGRSURF(ISUIO)%ID
757 IF (IFVEL>0) WRITE(IOUT,1420) IFVEL, SFVEL
758 IF (IFPRES>0) WRITE(IOUT,1430) IFPRES, SFPRES
759 WRITE(IOUT,1440) SCALT
761 WRITE(IOUT,1500) IFORM, ILVOUT, DTSUB
762 IF (IVINI==1) WRITE(IOUT,1600) IFVINI, SFVINI, SCALT_VI,
764 IF (NSPMD > 1) WRITE(IOUT,1700) NPROW, NPCOL, NBLOC
766 IADR=IADR+IFLOW(IADI+15)
767 IADI=IADI+IFLOW(IADI+14)
769 IADMATR=IADMATR+NNO*NNO+NNO*(NEL+1)
773 CALL HM_OPTION_START('/bem/daa
')
776 CALL HM_OPTION_READ_KEY(LSUBMODEL, OPTION_TITR = TITR, OPTION_ID = ID)
779 CALL HM_GET_INTV('surf_id
', II, IS_AVAILABLE, LSUBMODEL)
780 CALL HM_GET_INTV('grav_id
', GRAV_ID, IS_AVAILABLE, LSUBMODEL)
782 CALL HM_GET_FLOATV('rho
', RHO, IS_AVAILABLE, LSUBMODEL, UNITAB)
783 CALL HM_GET_FLOATV('c
', SSP, IS_AVAILABLE, LSUBMODEL, UNITAB)
784 CALL HM_GET_FLOATV('pmin
', PMIN, IS_AVAILABLE, LSUBMODEL, UNITAB)
786 IF(PMIN == ZERO) PMIN=-EP30
788 CALL HM_GET_FLOATV('xs
', XS, IS_AVAILABLE, LSUBMODEL, UNITAB)
789 CALL HM_GET_FLOATV('ys
', YS, IS_AVAILABLE, LSUBMODEL, UNITAB)
790 CALL HM_GET_FLOATV('zs
', ZS, IS_AVAILABLE, LSUBMODEL, UNITAB)
792 CALL HM_GET_INTV('iform
', IFORM, IS_AVAILABLE, LSUBMODEL)
793 CALL HM_GET_INTV('ipri
', ILVOUT, IS_AVAILABLE, LSUBMODEL)
794 CALL HM_GET_INTV('ipres
', IPRES, IS_AVAILABLE, LSUBMODEL)
795 CALL HM_GET_INTV('kform
', KFORM, IS_AVAILABLE, LSUBMODEL)
796 CALL HM_GET_INTV('freesurf
', FREESURF, IS_AVAILABLE, LSUBMODEL)
797 CALL HM_GET_INTV('afterflow
', AFTERFLOW, IS_AVAILABLE, LSUBMODEL)
798 CALL HM_GET_INTV('integr
', INTEGR, IS_AVAILABLE, LSUBMODEL)
800 IF(IFORM == 0) IFORM=1
801 IF(ILVOUT == 0) ILVOUT=1
804 IF(KFORM == 0) KFORM=1
805 IF(INTEGR == 0) INTEGR=2
806 IF(FREESURF == 0) FREESURF=1
807 IF(AFTERFLOW == 0) AFTERFLOW=2
808.AND.
IF (IWAVE ==2 FREESURF == 2) THEN
809 CALL ANCMSG(MSGID=1603,
814 . C2='free surface is not compatible with plane wave
')
816 IF(KFORM ==2) INTEGR=1
818.AND.
IF(NBGAUGE > 0 JFORM == 2) ALLOCATE(N_SHELL(NUMELC))
822 IF (II==IGRSURF(J)%ID) ISU=J
825 NN =IGRSURF(ISU)%NSEG
830 J1=IGRSURF(ISU)%NODES(J,1)
831 J2=IGRSURF(ISU)%NODES(J,2)
832 J3=IGRSURF(ISU)%NODES(J,3)
833 J4=IGRSURF(ISU)%NODES(J,4)
834 ISH34=IGRSURF(ISU)%ELTYP(J)
838 IF (ISH34==3) ITAG(J4)=1
844 IFLOW(IADI+NIFLOW+NNO)=J
850 J1=IGRSURF(ISU)%NODES(J,1)
851 J2=IGRSURF(ISU)%NODES(J,2)
852 J3=IGRSURF(ISU)%NODES(J,3)
853 J4=IGRSURF(ISU)%NODES(J,4)
854 ISH34=IGRSURF(ISU)%ELTYP(J)
858 IAD2=IADI+NIFLOW+NNO+3*(NEL-1)
859 IFLOW(IAD2+1)=ITABINV(J1)
860 IFLOW(IAD2+2)=ITABINV(J2)
861 IFLOW(IAD2+3)=ITABINV(J3)
862 ELSEIF (ISH34==3) THEN
864 IAD2=IADI+NIFLOW+NNO+3*(NEL-1)
865 IFLOW(IAD2+1)=ITABINV(J1)
866 IFLOW(IAD2+2)=ITABINV(J2)
867 IFLOW(IAD2+3)=ITABINV(J4)
869 IAD2=IADI+NIFLOW+NNO+3*(NEL-1)
870 IFLOW(IAD2+1)=ITABINV(J2)
871 IFLOW(IAD2+2)=ITABINV(J3)
872 IFLOW(IAD2+3)=ITABINV(J4)
874 ELSEIF(JFORM == 2) THEN
877 IAD2=IADI+NIFLOW+NNO+5*(NEL-1)
878 IFLOW(IAD2+1)=ITABINV(J1)
879 IFLOW(IAD2+2)=ITABINV(J2)
880 IFLOW(IAD2+3)=ITABINV(J3)
881 IFLOW(IAD2+4)=ITABINV(J3)
883 IF(NBGAUGE > 0) N_SHELL(NEL)=0
884 ELSEIF (ISH34==3) THEN
886 IAD2=IADI+NIFLOW+NNO+5*(NEL-1)
887 IFLOW(IAD2+1)=ITABINV(J1)
888 IFLOW(IAD2+2)=ITABINV(J2)
889 IFLOW(IAD2+3)=ITABINV(J3)
890 IFLOW(IAD2+4)=ITABINV(J4)
892 IF(NBGAUGE > 0) N_SHELL(NEL)=IGRSURF(ISU)%ELEM(J)
904 CALL HM_GET_FLOATV('pm
', PMAX, IS_AVAILABLE, LSUBMODEL, UNITAB)
905 CALL HM_GET_FLOATV('theta
', THETA, IS_AVAILABLE, LSUBMODEL, UNITAB)
906 CALL HM_GET_FLOATV('a
', APMAX, IS_AVAILABLE, LSUBMODEL, UNITAB)
907 CALL HM_GET_FLOATV('atheta
', ATHETA, IS_AVAILABLE, LSUBMODEL, UNITAB)
909 IF(APMAX == ZERO) APMAX = ONE
910 ELSEIF(IPRES == 2) THEN
914 CALL HM_GET_INTV('fct_idp
', IFPRES, IS_AVAILABLE, LSUBMODEL)
915 CALL HM_GET_FLOATV('fscalep
', SFPRES, IS_AVAILABLE, LSUBMODEL, UNITAB)
916 IF(SFPRES == ZERO) THEN
917 CALL HM_GET_FLOATV_DIM('fscalep
', FAC_GEN, IS_AVAILABLE, LSUBMODEL, UNITAB)
918 SFPRES = ONE * FAC_GEN
923 IF (IFPRES==NPC(K)) IFUNC=K
926 CALL ANCMSG(MSGID=621,MSGTYPE=MSGERROR,ANMODE=ANINFO,
927 . I1=ID,C1=TITR,C2='function
',I2=IFPRES)
930 ELSEIF(IPRES == 3) THEN
932 ELSEIF(IPRES == 4) THEN
935 CALL HM_GET_FLOATV('xc
', XC, IS_AVAILABLE, LSUBMODEL, UNITAB)
936 CALL HM_GET_FLOATV('yc
', YC, IS_AVAILABLE, LSUBMODEL, UNITAB)
937 CALL HM_GET_FLOATV('zc
', ZC, IS_AVAILABLE, LSUBMODEL, UNITAB)
951.OR.
IF(FREESURF == 2 GRAV_ID > 0)THEN
952 CALL HM_GET_FLOATV('xa
', XA, IS_AVAILABLE, LSUBMODEL, UNITAB)
953 CALL HM_GET_FLOATV('ya
', YA, IS_AVAILABLE, LSUBMODEL, UNITAB)
954 CALL HM_GET_FLOATV('za
', ZA, IS_AVAILABLE, LSUBMODEL, UNITAB)
955 CALL HM_GET_FLOATV('dir-x
', DIRX, IS_AVAILABLE, LSUBMODEL, UNITAB)
956 CALL HM_GET_FLOATV('dir-y
', DIRY, IS_AVAILABLE, LSUBMODEL, UNITAB)
957 CALL HM_GET_FLOATV('dir-z
', DIRZ, IS_AVAILABLE, LSUBMODEL, UNITAB)
958 NORM=SQRT(DIRX**2+DIRY**2+DIRZ**2)
960 CALL ANCMSG(MSGID=622,
961 . MSGTYPE=MSGERROR,ANMODE=ANINFO,
962 . I1=ID,C1=TITR,C2='null free surface normal
')
968 IF(FREESURF == 2) THEN
969 TT = DIRX*(XC-XA)+DIRY*(YC-YA)+DIRZ*(ZC-ZA)
970 XD = XC - TWO*TT*DIRX
971 YD = YC - TWO*TT*DIRY
972 ZD = ZC - TWO*TT*DIRZ
981 NRMAX=INT(SQRT(RNSPMD))
983 IF (MOD(NSPMD,NR)==0) THEN
993 NBLOC=MIN(NEL/NPROW, NEL/NPCOL)
994 NBLOC=MIN(NBLOCMAX,NBLOC)
1007 IFLOW(IADI+10)=IADMATI
1008 IFLOW(IADI+11)=IADMATR
1009 IFLOW(IADI+12)=NBLOC
1010 IFLOW(IADI+13)=IFORM
1013 IFLOW(IADI+14)=NIFLOW+NNO+3*NEL+NNO
1014 ELSEIF(JFORM == 2) THEN
1015 IFLOW(IADI+14)=NIFLOW+NNO+5*NEL+NNO+NBGAUGE
1019 IFLOW(IADI+14)=NIFLOW+NNO+3*NEL+NNO+NNO+NEL
1020 ELSEIF(JFORM == 2) THEN
1021 IFLOW(IADI+14)=NIFLOW+NNO+5*NEL+NNO+NBGAUGE+NNO+NEL
1025 IF (NEL > INT(SQRT(REAL(HG)))) THEN
1026 CALL ANCMSG(MSGID = 1711, ANMODE=ANINFO, MSGTYPE = MSGERROR,
1027 . I1 = INT(SQRT(REAL(HG))))
1030 IF(FREESURF == 1)IFLOW(IADI+15)=NRFLOW+ 7*NEL+NEL*NEL+3*NEL
1031 IF(FREESURF == 2)IFLOW(IADI+15)=NRFLOW+10*NEL+NEL*NEL+3*NEL
1032 IFLOW(IADI+17)=ILVOUT
1033 IFLOW(IADI+18)=NPROW
1034 IFLOW(IADI+19)=NPCOL
1036 IFLOW(IADI+21)=IPRES
1037 IFLOW(IADI+22)=IWAVE
1038 IFLOW(IADI+23)=KFORM
1039 IFLOW(IADI+24)=INTEGR
1040 IFLOW(IADI+25)=FREESURF
1041 IFLOW(IADI+26)=AFTERFLOW
1043 IF(GRAV_ID > 0) THEN
1045 IF(IGRV(5,J) == GRAV_ID) K=J
1049 IFLOW(IADI+28)=NELMAX
1051 RFLOW(IADR+1)=RHO*SSP
1053 RFLOW(IADR+3)=SFPRES
1061 RFLOW(IADR+12)=SQRT((XS-XC)**2+(YS-YC)**2+(ZS-ZC)**2)
1073 RFLOW(IADR+23)=APMAX
1074 RFLOW(IADR+24)=ATHETA
1076 MEMFLOW(1)=MEMFLOW(1)+IFLOW(IADI+8)
1077 MEMFLOW(2)=MEMFLOW(2)+IFLOW(IADI+9)
1080 IF(JFORM == 1) WRITE(IOUT,2100) I, ID, TRIM(TITR), IGRSURF(ISU)%ID, NNO, NEL, GRAV_ID
1081 IF(JFORM == 2) WRITE(IOUT,2200) I, ID, TRIM(TITR), IGRSURF(ISU)%ID, NNO, NEL, GRAV_ID
1082 WRITE(IOUT,2300) RHO, SSP, PMIN
1083 WRITE(IOUT,2400) XS, YS, ZS
1084 WRITE(IOUT,2500) IFORM, ILVOUT, IPRES, KFORM, FREESURF, AFTERFLOW, INTEGR
1086 WRITE(IOUT,2600) PMAX, THETA, APMAX, ATHETA
1087 ELSEIF(IPRES == 2) THEN
1088 WRITE(IOUT,2700) IFPRES,SFPRES
1090 IF(IWAVE == 1) WRITE(IOUT,3000) XC, YC, ZC
1091.OR.
IF(GRAV_ID > 0 FREESURF == 2) WRITE(IOUT,3500) XA,YA,ZA,DIRX,DIRY,DIRZ
1092 IF(FREESURF == 2) WRITE(IOUT,3600) XD,YD,ZD
1131 ELSEIF(JFORM==2) THEN
1139 IR4=IR3+NEL*FREESURF
1141 IR6=IR5+NEL*FREESURF
1142 IR7=IR6+NEL*FREESURF
1144 IF (NEL > INT(SQRT(REAL(HG)))) THEN
1145 CALL ANCMSG(MSGID = 1711, ANMODE=ANINFO, MSGTYPE = MSGERROR,
1146 . I1 = INT(SQRT(REAL(HG))))
1154 CALL INIT_TG(IFLOW(II1), IFLOW(II2), IFLOW(II3), X, XS, YS, ZS, XD, YD, ZD,
1155 . RFLOW(IR1), RFLOW(IR2), RFLOW(IR3), RFLOW(IR4), RFLOW(IR5), RFLOW(IR6))
1156 CALL MASS_FLUID_TG(IFORM, ILVOUT, NNO, NEL, IFLOW(II2), IFLOW(II3), X,
1157 . RFLOW(IR2), RFLOW(IR4), RFLOW(IR7), RHO)
1158 ELSEIF(JFORM == 2) THEN
1159 CALL INIT_QD(IFLOW(II1), IFLOW(II2), IFLOW(II3), X, XS, YS, ZS, XD, YD, ZD,
1160 . RFLOW(IR1), RFLOW(IR2), RFLOW(IR3), RFLOW(IR4), RFLOW(IR5), RFLOW(IR6))
1161 IF(NEL < NELMAX) THEN
1162 ALLOCATE(CBEM(NEL,NEL))
1163 CALL MASS_FLUID_QD(NNO, NEL, IFLOW(II1), IFLOW(II2), IFLOW(II3), X,
1164 . RFLOW(IR2), RFLOW(IR4), RFLOW(IR7), CBEM, RHO,IRESP)
1167 CALL MASS_FLUID_QD(NNO, NEL, IFLOW(II1), IFLOW(II2), IFLOW(II3), X,
1168 . RFLOW(IR2), RFLOW(IR4), RFLOW(IR7), RFLOW(IR11), RHO,IRESP)
1170 IF(NBGAUGE > 0) THEN
1171 WRITE (IOUT,'(/5x,a)
') 'gauge element element
'
1174 IF(LGAUGE(1,J) /= 0) CYCLE
1180 IF(J1 /= N_SHELL(K)) CYCLE
1186 WRITE(IOUT,'(3i10)
') J,-LGAUGE(3,J),IFLOW(II5+J-1)
1192 IADR=IADR+IFLOW(IADI+15)
1193 IADI=IADI+IFLOW(IADI+14)
1201 . ' incompressible flow(boundary elements method)
'/
1202 . ' ----------------------------------------------
'/)
1203 1100 FORMAT( 5X,'bem problem number
',I10
1204 . /10X,'flow id
',I10,1X,A,
1205 . /10X,'EXTERNAL surface id
',I10
1206 . /10X,'number of surface nodes
',I10
1207 . /10X,'number of triangular boundary elements
',I10)
1208 1110 FORMAT( 10X,'flow inside
the surface
')
1209 1120 FORMAT( 10X,'flow outside
the surface
')
1210 1200 FORMAT( 10X,'stagnation pressure curve
',I10
1211 . /10X,'stagnation pressure scale factor
',1PE10.3
1212 . /10X,'time scale factor
for stag. pres. curve
',1PE10.3
1213 . /10X,'auxiliary node group id
',I10
1214 . /10X,'number of auxiliary nodes
',I10)
1215 1210 FORMAT( 10X,'point-inside-surface test
for aux. nodes
')
1216 1220 FORMAT( 10X,'point-outside-surface test
for aux. nodes
')
1217 1225 FORMAT( 10X,'adimensional tolerance
for testing
',1PE10.3)
1218 1230 FORMAT( 10X,'no test
for aux. nodes
')
1219 1300 FORMAT( 10X,'fluid density
',1PE10.3)
1220 1400 FORMAT(/10X,'inflow-outflow
'
1221 . /10X,'--------------
'
1222 . /10X,'number of inflow-outflow surfaces
',I10)
1223 1410 FORMAT(/10X,'surface number
',I10
1224 . /10X,'surface id
',I10)
1225 1420 FORMAT( 10X,'imposed
velocity curve
',I10
1226 . /10X,'imposed
velocity scale factor
',1PE10.3)
1227 1430 FORMAT( 10X,'imposed pressure curve
',I10
1228 . /10X,'imposed pressure scale factor
',1PE10.3)
1229 1440 FORMAT( 10X,'time scale factor
for curves
',1PE10.3)
1230 1500 FORMAT(/10X,'bem parameters
'
1231 . /10X,'--------------
'
1232 . /10X,'bem formulation flag
',I10
1233 . /10X,'bem solver output level
',I10
1234 . /10X,'time step
for matrices assembly
',1PE10.3)
1235 1600 FORMAT(/10X,'velocity field at infinity
'
1236 . /10X,'--------------------------
'
1238 . /10X,'velocity scale factor
',1PE10.3
1240 . /10X,'x component of
velocity vector
',1PE10.3
1241 . /10X,'y component of
velocity vector
',1PE10.3
1242 . /10X,'z component of
velocity vector
',1PE10.3)
1243 1700 FORMAT(/10X,'parallel solver parameters(scalapack)
'
1244 . /10X,'--------------------------------------
'
1245 . /10X,'number of row of process grid
',I10
1246 . /10X,'number of columns of process grid
',I10
1247 . /10X,'2d-cyclic decomposition block-
SIZE ',I10)
1250 . ' daa surface(boundary element method)
'/
1251 . ' --------------------------------------
'/)
1252 2100 FORMAT( 5X,'daa surface number
',I10
1253 . /10X,'daa id
',I10,1X,A,
1254 . /10X,'wet surface id
',I10
1255 . /10X,'number of surface nodes
',I10
1256 . /10X,'number of triangular elements
',I10
1257 . /10X,'gravity id(/grav)
',I10)
1258 2200 FORMAT( 5X,'daa surface number
',I10
1259 . /10X,'daa id
',I10,1X,A,
1260 . /10X,'wet surface id
',I10
1261 . /10X,'number of surface nodes
',I10
1262 . /10X,'number of shell elements
',I10
1263 . /10X,'gravity id(/grav)
',I10)
1264 2300 FORMAT( 10X,'fluid density
',1PE13.6
1265 . /10X,'fluid sound speed
',1PE13.6
1266 . /10X,'minimum pressure
',1PE13.6)
1267 2400 FORMAT( 10X,'x-coordinate of standoff point
',1PE13.6
1268 . /10X,'y-coordinate of standoff point
',1PE13.6
1269 . /10X,'z-coordinate of standoff point
',1PE13.6)
1270 2500 FORMAT(/10X,'bem formulation flag iform
',I10
1271 . /10X,'daa solver output level
',I10
1272 . /10X,'incident pressure input flag
',I10
1273 . /10X,'daa formulation flag kform
',I10
1274 . /10X,'free surface flag
',I10
1275 . /10X,'afterflow
velocity flag
',I10
1276 . /10X,'integration flag
',I10)
1277 2600 FORMAT(/10X,'maximum pressure at standoff point
',1PE13.6
1278 . /10X,'decay time at standoff point
',1PE13.6
1279 . /10X,'exponent
for',1PE13.6
1280 . /10X,'exponent
for decay time(atheta)
',1PE13.6)
1281 2700 FORMAT(/10X,'incident pressure
FUNCTION ',I10
1282 . /10X,'pressure scale factor
',1PE13.6)
1283 3000 FORMAT( 10X,'x-coordinate of explosive charge
',1PE13.6
1284 . /10X,'y-coordinate of explosive charge
',1PE13.6
1285 . /10X,'z-coordinate of explosive charge
',1PE13.6)
1286 3100 FORMAT(/10X,'plane wave direction
'
1287 . /10X,'x-direction
',1PE13.6
1288 . /10X,'y-direction
',1PE13.6
1289 . /10X,'z-direction
',1PE13.6)
1290 3500 FORMAT(/10X,'free surface
'
1291 . /10X,'x-coordinate of surface point a
',1PE13.6
1292 . /10X,'y-coordinate of surface point a
',1PE13.6
1293 . /10X,'z-coordinate of surface point a
',1PE13.6
1294 . /10X,'surface normal x-component
',1PE13.6
1295 . /10X,'surface normal y-component
',1PE13.6
1296 . /10X,'surface normal z-component
',1PE13.6)
1297 3600 FORMAT(/10X,'x-coordinate of charge image
',1PE13.6
1298 . /10X,'y-coordinate of charge image
',1PE13.6
1299 . /10X,'z-coordinate of charge image
',1PE13.6)
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)