zechi1
C ZECHI1 SOURCE CB215821 20/11/25 13:44:49 10792 & MELEMD,MELEVF,MLENTI,MLENT1,NOMD) C----------------------------------------------------------------------- C Discrétisation de l'opérateur ECHIMP en explicite EFM1 et VF, le C coeff d'échange étant un SCAL ou CHPO CENTRE, le champ exterieur C un SCAL, un CHPO CENTRE ou un CHPO SOMMET. C----------------------------------------------------------------------- C C-------------------- C Paramètres Entrée : C-------------------- C C E/ IKAS : Type de situation à traiter (1=EF, 2 ou 3=VF) C E/ IVOL1 : Type d'échange (0=surfacique, 1=volumique) C E/ MTAB1 : Pointeur de la table EQEX C E/ MTAB2 : Pointeur de la table DOMAINE locale C E/ MPOVA1 : MPOVAL des valeurs du coefficient d'échange C E/ MPOVA2 : MPOVAL des valeurs du champ exterieur C E/ IKH : Forme originel du coefficient d'échange C (0=CHPO CENTRE, 1=FLOTTANT) C E/ IKT : Forme originel du champ exterieur C (0=CHPO CENTRE, 1=FLOTTANT, 4=CHPO SOMMET) C E/ MELEMD : Pointeur du spg de l'inconnue C E/ MELEVF : Pointeur vers les points CENTRE du maillage volumique C en correspondance avec les points CENTRE surfacique C (Utilisé en Formulation VF et échange surfacique) C E/ MLENTI : Correspondance numéotation globale/numérotation locale C LECT(I)=J : le point numéro I est le Jième de MELEMD C E/ MLENT1 : Idem MLENTI pour le spg du champ exterieur C (Utilisé lorsque le champ exterieur est au SOMMET) C E/ NOMD : Nom de l'inconnue C C------------------ C Champs calculés : C------------------ C C MPOVA3 : MPOVAL des valeurs de la matrice diagonale C Stocké à l'indice NOMD de la table KIZG1 C MPOVA4 : MPOVAL des valeurs du second membre C Stocké à l'indice NOMD de la table KIZG C C----------------------------------------------------------------------- IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) C -INC PPARAM -INC CCOPTIO -INC SMCHPOI -INC SMCHAML -INC SMELEME -INC SMLENTI C CHARACTER*8 TYPE,TYPC,TYPS CHARACTER*(*) NOMD C C- Initialisations C IF (IKAS.EQ.1) THEN TYPS = 'SOMMET ' ELSE TYPS = 'CENTRE ' ENDIF C C- Récup/Création des tables KIZG (pointeur KIZG) et KIZG1 (KIZG1) C IF (KIZG.EQ.0) THEN ENDIF IF (KIZG1.EQ.0) THEN ENDIF C C- Récup/Création des CHPO stockés dans les tables KIZG et KIZG1 à C- l'indice mot NOMD (nom de l'inconnue) C TYPE = ' ' IF (TYPE.NE.'CHPOINT ') THEN ENDIF IF (IGEOM.NE.MELEMD) THEN C Les champs par point ont des supports géométriques incompatibles RETURN ENDIF C TYPE = ' ' IF (TYPE.NE.'CHPOINT ') THEN ENDIF IF (IGEOM.NE.MELEMD) THEN C Les champs par point ont des supports géométriques incompatibles RETURN ENDIF C C- Activation C SEGACT MPOVA1 SEGACT MPOVA2 SEGACT MLENTI SEGACT MLENT1 C C---------------------------------------------------------------------- C- Traitement d'une formulation EF ou EMM1 explicite, le champ C- exterieur étant 1) un SCAL ou un CHPO CENTRE, 2) un CHPO SOMMET. C- Dans les deux cas, l'indice XXPSOML de la table domaine local suffit C- (contient l'intégrale sur chaque élément des fonctions de forme). C- En effet, en explicite les matrices masses sont condensées (EF=EFM1) C---------------------------------------------------------------------- C IF (IKAS.EQ.1) THEN IF (IERR.NE.0) RETURN SEGACT MCHELM SEGACT MELEME NBSOUS = LISOUS(/1) IF (NBSOUS.EQ.0) NBSOUS=1 NUTOEL = 0 DO 30 L=1,NBSOUS IPT1 = MELEME IF (NBSOUS.NE.1) IPT1=LISOUS(L) SEGACT IPT1 NP = IPT1.NUM(/1) MCHAML = ICHAML(L) SEGACT MCHAML MELVAL = IELVAL(1) SEGACT MELVAL NK = NUTOEL + K KPOS = 1 + (1-IKH)*(NK-1) DO 10 I=1,NP II = IPT1.NUM(I,K) IPOS = LECT(II) VAL1 = MPOVA1.VPOCHA(KPOS,1)*VELCHE(I,K) MPOVA3.VPOCHA(IPOS,1) = MPOVA3.VPOCHA(IPOS,1) + VAL1 IF (IKT.EQ.4) THEN JPOS = MLENT1.LECT(II) ELSE JPOS = 1 + (1-IKT)*(NK-1) ENDIF VAL2 = VAL1 * MPOVA2.VPOCHA(JPOS,1) MPOVA4.VPOCHA(IPOS,1) = MPOVA4.VPOCHA(IPOS,1) - VAL2 10 CONTINUE 20 CONTINUE SEGDES IPT1 SEGDES MCHAML,MELVAL 30 CONTINUE IF (NBSOUS.NE.1) SEGDES MELEME SEGDES MCHELM C C---------------------------------------------------------------------- C- Traitement d'une formulation VF Explicite, le champ exterieur étant C- 1) un SCAL ou un CHPO CENTRE, 2) un CHPO SOMMET. C- C- Le traitement différe pour le second membre : C- Dans le premier cas, l'indice XXVOLUM de la table domaine local, C- utilisé pour calculer la matrice suffit (contient le volume de C- chaque élément). Dans le deuxième cas, on a également besoin de C- l'indice XXPSOML que l'on sature par le champ exterieur au sommet. C- C- Le spg des champoints résultats dépend du type d'échange : C- Lorsque l'échange est volumique, les points CENTRE de la table C- domaine local sont à considerer. En surfacique, on a construit C- la correspondance entre centre(volume)-centre(surface); les CENTRE C- des volumes concernés sont rangés dans MELEVF. C---------------------------------------------------------------------- C ELSE IF (IVOL1.EQ.0) THEN IPT2 = MELEVF ELSE IPT2 = MELEMC ENDIF SEGACT IPT2 IF (IKT.EQ.0 .OR. IKT.EQ.1) THEN IPOS = LECT(IPT2.NUM(1,K)) KPOS = 1 + (1-IKH)*(K-1) KTEX = 1 + (1-IKT)*(K-1) VAL1 = MPOVA1.VPOCHA(KPOS,1) * MPOVA5.VPOCHA(K,1) MPOVA3.VPOCHA(IPOS,1) = MPOVA3.VPOCHA(IPOS,1) + VAL1 VAL2 = MPOVA2.VPOCHA(KTEX,1) * VAL1 MPOVA4.VPOCHA(IPOS,1) = MPOVA4.VPOCHA(IPOS,1) - VAL2 40 CONTINUE ELSE IF (IERR.NE.0) RETURN SEGACT MCHELM SEGACT MELEME NBSOUS = LISOUS(/1) IF (NBSOUS.EQ.0) NBSOUS=1 NUTOEL = 0 DO 70 L=1,NBSOUS IPT1 = MELEME IF (NBSOUS.NE.1) IPT1=LISOUS(L) SEGACT IPT1 NP = IPT1.NUM(/1) MCHAML = ICHAML(L) SEGACT MCHAML MELVAL = IELVAL(1) SEGACT MELVAL NK = NUTOEL + K IPOS = LECT(IPT2.NUM(1,NK)) KPOS = 1 + (1-IKH)*(NK-1) VAL1 = MPOVA1.VPOCHA(KPOS,1) * MPOVA5.VPOCHA(NK,1) MPOVA3.VPOCHA(IPOS,1) = MPOVA3.VPOCHA(IPOS,1) + VAL1 VAL2 = 0.D0 DO 50 I=1,NP II = IPT1.NUM(I,K) JPOS = MLENT1.LECT(II) VAL2 = VAL2 + MPOVA1.VPOCHA(KPOS,1) & * MPOVA2.VPOCHA(JPOS,1) * VELCHE(I,K) 50 CONTINUE MPOVA4.VPOCHA(IPOS,1) = MPOVA4.VPOCHA(IPOS,1) - VAL2 60 CONTINUE SEGDES IPT1 SEGDES MELVAL,MCHAML 70 CONTINUE IF (NBSOUS.NE.1) SEGDES MELEME SEGDES MCHELM ENDIF SEGDES IPT2 SEGDES MPOVA5 ENDIF C C- Désactivation C SEGDES MPOVA1 SEGDES MPOVA2 SEGDES MPOVA3 SEGDES MPOVA4 SEGSUP MLENTI SEGSUP MLENT1 RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales