ygmv
C YGMV SOURCE CB215821 20/11/25 13:43:56 10792 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