ygmv
C YGMV SOURCE OF166741 25/02/20 21:18:07 12165
SUBROUTINE YGMV
IMPLICIT INTEGER(I-N)
IMPLICIT REAL*8 (A-H,O-Z)
C***********************************************************************
C
C CE SP DISCRETISE LE TERME DE SOURCE DE QDM DANS LES EQUATIONS DE
C NAVIER STOKES
C EN 2D SUR LES ELEMENTS QUA4 ET TRI3 PLAN OU AXI
C EN 3D SUR LES ELEMENTS CUB8 ET PRI6
C L OPERATEUR EST "SOUS-INTEGRE"
C
C SYNTAXE :
C ---------
C
C GMV TABGMV INCO UN :
C
C COEFFICIENT :
C -------------
C
C TABGMV Table contenant les entrees suivantes
C
C
C INCONNUES :
C -----------
C
C UN CHAMPS DE VITESSE
C
C
C***********************************************************************
-INC PPARAM
-INC CCOPTIO
-INC SMLREEL
POINTEUR MQR.MLREEL,MPR.MLREEL
-INC SMEVOLL
-INC SMCOORD
-INC SMLENTI
POINTEUR IZIPAD.MLENTI
-INC SMELEME
POINTEUR MELEM1.MELEME,MELEMC.MELEME,MDEBI.MELEME
POINTEUR MENTR.MELEME,MSORT.MELEME
-INC SMCHPOI
POINTEUR IZG1.MCHPOI,IZGG1.MPOVAL
POINTEUR IZTU1.MPOVAL,IZPP.MPOVAL
POINTEUR IZVOL.MPOVAL
-INC SMTABLE
POINTEUR MTABZ.MTABLE,MTABD.MTABLE,MTABP.MTABLE
POINTEUR MTABA.MTABLE
-INC SMLMOTS
POINTEUR LINCO.MLMOTS
CHARACTER*8 NOMZ,NOMI,NOMA,TYPE,TYPC
REAL*8 XVEC1(3),XVEC2(3)
PARAMETER (NTB=1)
CHARACTER*8 LTAB(NTB)
DIMENSION KTAB(NTB)
SAVE IPAS
DATA LTAB/'KIZX '/
DATA IPAS/0/
C*****************************************************************************
CGMV
IF(IRET.EQ.0)THEN
WRITE(6,*)' Operateur GMV '
WRITE(6,*)' On attend un ensemble de table soustypes'
RETURN
ENDIF
MTABX=KTAB(1)
SEGACT MTABX
C*****************************************************************************
C OPTIONS
C CES PARAMETRES SONT INITIALISES POUR ETRE EN DECENTRE ET NE PAS AVOIR DE
C POROSITE :
IOP4=0
IAXI=0
IF(IFOMOD.EQ.0)IAXI=2
IF(OPTI.NE.0)THEN
SEGACT OPTI
TYPE=' '
IF(TYPE.EQ.'CHPOINT ')THEN
IOP7=1
ENDIF
ENDIF
C*****************************************************************************
IF(MTABZ.EQ.0)THEN
WRITE(6,*)' Operateur GMV '
WRITE(6,*)' On ne trouve pas l''indice DOMZ ? '
GO TO 90
ENDIF
SEGACT MTABZ
IF(MELEME.EQ.0)GO TO 90
SEGACT MELEME
IF(MCHPOI.EQ.0)GO TO 90
C***
TYPE='LISTMOTS'
SEGACT LINCO
IF(IARG.NE.1)THEN
WRITE(6,*)' Operateur GMV '
WRITE(6,*)' Nombre d''arguments ( ',IARG,' ) incorrect '
RETURN
ENDIF
TYPE=' '
IF(TYPE.NE.'TABLE')THEN
WRITE(6,*)' Operateur GMV '
WRITE(6,*)
&' LE TYPE DE L''ARGUMENT (',TYPE,') N EST PAS CONVENABLE'
WRITE(6,*)' On attend une table '
RETURN
ELSE
SEGACT MTABA
TYPE=' '
IF(TYPE.NE.'POINT')THEN
WRITE(6,*)' Operateur GMV '
WRITE(6,*)' Entree DIR erronee '
RETURN
ELSE
XVEC1(1)=XCOOR((IPQ-1)*(IDIM+1) +1)
XVEC1(2)=XCOOR((IPQ-1)*(IDIM+1) +2)
XNN=XVEC1(1)*XVEC1(1)+XVEC1(2)*XVEC1(2)
IF(IDIM.EQ.3)THEN
XVEC1(3)=XCOOR((IPQ-1)*(IDIM+1) +3)
XNN=XNN+XVEC1(3)*XVEC1(3)
ENDIF
XVEC2(1)=XVEC1(1)/XNN
XVEC2(2)=XVEC1(2)/XNN
IF(IDIM.EQ.3)XVEC2(3)=XVEC1(3)/XNN
ENDIF
TYPE=' '
IF(TYPE.NE.'ENTIER')THEN
IMPR=0
ELSE
ENDIF
TYPE=' '
IF(TYPE.NE.'FLOTTANT')THEN
IKIMP=0
ELSE
IKIMP=1
ENDIF
IF(IKIMP.EQ.0)THEN
TYPE=' '
IF(TYPE.NE.'FLOTTANT')THEN
AK0=1.
ELSE
ENDIF
TYPE=' '
IF(TYPE.NE.'FLOTTANT')THEN
W1=0.1
ELSE
ENDIF
TYPE=' '
IF(TYPE.EQ.'EVOLUTIO')THEN
SEGACT MEVOLL
KEVOLL=IEVOLL(1)
SEGACT KEVOLL
MQR=IPROGX
MPR=IPROGY
SEGDES KEVOLL,MEVOLL
ELSE
WRITE(6,*)' Operateur GMV '
WRITE(6,*)' Entree GMV erronee '
WRITE(6,*)' On attend un type EVOLUTION'
RETURN
ENDIF
ENDIF
TYPE=' '
IF(TYPE.NE.'MAILLAGE')THEN
WRITE(6,*)' Operateur GMV '
WRITE(6,*)' Entree LDEBIT erronee '
WRITE(6,*)' On attend un type MAILLAGE'
RETURN
ENDIF
TYPE=' '
IF(TYPE.NE.'MAILLAGE')THEN
WRITE(6,*)' Operateur GMV '
WRITE(6,*)' Entree PENTREE erronee '
WRITE(6,*)' On attend un type MAILLAGE'
RETURN
ENDIF
TYPE=' '
IF(TYPE.NE.'MAILLAGE')THEN
WRITE(6,*)' Operateur GMV '
WRITE(6,*)' Entree PSORTIE erronee '
WRITE(6,*)' On attend un type MAILLAGE'
RETURN
ENDIF
ENDIF
C****************** Fin lecture Table Arguments *****************
IF(MTAB1.EQ.0)THEN
WRITE(6,*)' Operateur GMV '
WRITE(6,*)' On ne trouve pas l''indice EQEX ? '
GO TO 90
ENDIF
SEGACT MTAB1
IF(MTABD.EQ.0)THEN
WRITE(6,*)' Operateur GMV '
WRITE(6,*)' On ne trouve pas l''indice DOMAINE ?'
GO TO 90
ENDIF
IF(MELEM1.EQ.0)THEN
WRITE(6,*)' Operateur GMV '
WRITE(6,*)' On ne trouve pas l''indice SOMMET ?'
GO TO 90
ENDIF
IF(MELEMC.EQ.0)THEN
WRITE(6,*)' Operateur GMV '
WRITE(6,*)' On ne trouve pas l''indice CENTRE ?'
GO TO 90
ENDIF
WRITE(6,*)' Operateur GMV '
WRITE(6,*)'Il n''y a pas de table INCO '
RETURN
ENDIF
SEGACT INCO
SEGACT MELEMC
NBC=MELEMC.NUM(/2)
SEGDES MELEMC
C*****************************************************************************
IF(KIZG.EQ.0)THEN
ELSE
SEGACT KIZG
ENDIF
C VERIFICATIONS SUR LES INCONNUES
WRITE(6,*)' Operateur GMV '
RETURN
ENDIF
SEGACT INCO
TYPE=' '
IF(TYPE.NE.'CHPOINT ')THEN
WRITE(6,*)' Operateur GMV '
WRITE(6,*)' L objet CHPOINT ',NOMI,' n existe pas dans la table'
RETURN
ELSE
ENDIF
TYPE=' '
IF(TYPE.NE.'CHPOINT ')THEN
NC=IZTU1.VPOCHA(/2)
TYPE='SOMMET'
ENDIF
TYPE=' '
IF(TYPE.NE.'TABLE')THEN
WRITE(6,*)' Operateur GMV '
WRITE(6,*)' Il n''y a pas de table pression'
RETURN
ELSE
SEGACT MTABP
TYPE=' '
IF(TYPE.NE.'CHPOINT')THEN
WRITE(6,*)' Operateur GMV '
WRITE(6,*)' Il n''y a pas de Champ de pression'
RETURN
ELSE
IF(IZPP.EQ.0)GO TO 90
ENDIF
ENDIF
SEGACT MELEME,MENTR
NE=MENTR.NUM(/2)
PE=0.
DO 31 I=1,NE
I1=MENTR.NUM(1,I)
NPP1=IZIPAD.LECT(I1)
PE=PE+IZPP.VPOCHA(NPP1,1)
31 CONTINUE
PE=PE/FLOAT(NE)
SEGACT MSORT
NS=MSORT.NUM(/2)
PS=0.
DO 32 I=1,NS
I1=MSORT.NUM(1,I)
NPP1=IZIPAD.LECT(I1)
PS=PS+IZPP.VPOCHA(NPP1,1)
32 CONTINUE
PS=PS/FLOAT(NS)
DELTAP=PS-PE
SEGACT MDEBI
NNP=MDEBI.NUM(/1)
NNE=MDEBI.NUM(/2)
DO 33 K=1,NNE
DO 33 I=1,NNP
I1=MDEBI.NUM(I,K)
IF(IZIPAD.LECT(I1).EQ.0)THEN
WRITE(6,*)' Operateur GMV '
WRITE(6,*)' LDEBIT SPG incompatible '
RETURN
ENDIF
33 CONTINUE
IMPRD=0
IF(IKIMP.EQ.0)THEN
SEGACT MQR,MPR
IF(QTH.LT.Q)THEN
AK1=AK0/(1.D0+(Q-QTH)/(Q+1.E-20))
ELSE
IF(DELTAP.GE.0)THEN
AK1=AK0*QTH/(Q+1.E-20)
ELSE
AK1=AK0*Q/(QTH+1.E-20)
ENDIF
ENDIF
AK0=W1*AK1+(1.-W1)*AK0
ELSE
AK0=AKIMP
ENDIF
IF(IMPR.NE.0)THEN
IMP=MOD(IPAS,IMPR)
IF(IMP.EQ.0)THEN
IF(IKIMP.NE.0)THEN
WRITE(6,*)' GMV : CAS K IMPOSE ',AKIMP
QTH=0.
ENDIF
WRITE(6,1888) DELTAP,Q,QTH,AK0
1888 FORMAT(1X,' GMV : DELTAP=',1PE12.4,' QR=',1PE11.4,' QTh=',1PE11.4,
&' AK0=',1PE11.4)
ENDIF
ENDIF
XVEC2(1)=XVEC2(1)*AK0
XVEC2(2)=XVEC2(2)*AK0
XVEC2(3)=XVEC2(3)*AK0
NPT=IZGG1.VPOCHA(/1)
SEGACT MELEME
NBSOUS=LISOUS(/1)
IF(NBSOUS.NE.0)THEN
WRITE(6,*)' Operateur GMV '
WRITE(6,*)
& ' La zone doit etre compose d''un seul type d''element'
RETURN
ENDIF
SEGACT IZTU1
NBSOUS=1
NUTOEL=0
DO 1 L=1,NBSOUS
IPT1=MELEME
IF(NBSOUS.NE.1)IPT1=LISOUS(L)
SEGACT IPT1
NP =IPT1.NUM(/1)
IES=IDIM
C
& IZIPAD.LECT,XVEC2,
& IZTU1.VPOCHA,
& IZGG1.VPOCHA,
& IZVOL.VPOCHA)
SEGDES IPT1
1 CONTINUE
SEGDES MELEME
IF(IKIMP.EQ.0)SEGDES MPR,MQR
SEGDES IZTU1
SEGDES IZGG1
SEGDES IZVOL
SEGDES LINCO
SEGDES MTABX,MTAB1,INCO,KIZG,MTABA,MTABP,MTABD,MTABZ
SEGDES IZPP,MDEBI,MSORT,MENTR
SEGSUP IZIPAD
89 CONTINUE
IPAS=IPAS+1
RETURN
90 CONTINUE
WRITE(6,*)' Interuption anormale de GMV'
RETURN
1002 FORMAT(10(1X,1PE11.4))
END
					© Cast3M 2003 - Tous droits réservés.
					Mentions légales