bmtd
C BMTD SOURCE CB215821 24/04/12 21:15:07 11897 SUBROUTINE BMTD C----------------------------------------------------------------------- C -1 t C Calcul du produit B M D CHPcentre C le résultat est un CHPface C----------------------------------------------------------------------- C C--------------------------- C Phrase d'appel (GIBIANE) : C--------------------------- C C CHP2 = 'BMTD' MMODEL RIG1 CHP1 ; C C------------------------ C Operandes et resultat : C------------------------ C C MMODEL : MODELE permettant de récuperer la TABLE DOMAINE C contenant les maillages et les connectivités. C On attend un modèle DARCY C RIG1 : Matrices hybrides elementaires de DARCY crees par MHYB. C CHP1 : CHPO centre à plusieur composantes. C CHP2 : CHPO face à plusieur composantes dont le support géometrique C est le maillage de la rigidité les noms des composantes C sont ceux de CHP1 C C----------------------------------------------------------------------- C C Langage : ESOPE + FORTRAN77 C C C----------------------------------------------------------------------- IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) * -INC PPARAM -INC CCOPTIO -INC SMCOORD -INC SMCHPOI -INC SMELEME -INC SMRIGID -INC SMTABLE -INC SMMODEL * SEGMENT ICCPR INTEGER ICPR(NNGOT) ENDSEGMENT * LOGICAL LOGRE,LOGIN CHARACTER*8 TAPIND,CHARRE,LETYPE CHARACTER*4 NOMTOT(1) * * Initialisations * IVALIN = 0 XVALIN = 0.D0 LOGIN = .TRUE. IOBIN = 0 TAPIND = 'MOT ' * * * Lecture du MMODEL * IF(IERR.NE.0)RETURN MMODEL=IPMODE SEGACT MMODEL N1=KMODEL(/1) DO 7 I=1,N1 IMODEL=KMODEL(I) SEGACT IMODEL IF(FORMOD(1).NE.'DARCY')THEN MOTERR(1:16) = 'DARCY ' RETURN ENDIF 7 CONTINUE C on récupère la table DOMAINE IPTABL = 0 IF (IERR.NE.0) RETURN * IF (IERR.NE.0) RETURN IELTFA = IOBRE IF (IERR.NE.0) RETURN ICENTR = IOBRE IF (IERR.NE.0) RETURN IFACE = IOBRE * * Lecture de RIGIDITE * IF (IERR.NE.0) RETURN MRIGID = IPRIGI * * * * Test du sous-type de la matrice de rigiditée récupérée * SEGACT MRIGID LETYPE = MTYMAT IF (LETYPE.NE.'DARCY') THEN MOTERR(1:8) = 'RIGIDITE' MOTERR(9:16) = 'DARCY ' SEGDES MRIGID GOTO 100 ENDIF * * Controle des pointeurs de MELEME de la rigidité * NRIGEL=IRIGEL(/2) MELEME=IELTFA SEGACT MELEME NBSOUS=LISOUS(/1) IF(NBSOUS.EQ.0)THEN IF((NRIGEL.NE.1).OR.(IRIGEL(1,1).NE.MELEME))THEN MOTERR(1:8) = 'DARCY ' MOTERR(9:16) = 'ELTFA ' INTERR(1) = 1 SEGDES MRIGID GOTO 100 ENDIF ELSE IF(NRIGEL.NE.NBSOUS)THEN MOTERR(1:8) = 'DARCY ' MOTERR(9:16) = 'ELTFA ' INTERR(1) = 1 SEGDES MRIGID GOTO 100 ENDIF DO 10 ISOUS=1,NBSOUS IF (LISOUS(ISOUS).NE.IRIGEL(1,ISOUS)) THEN MOTERR(1:8) = 'DARCY ' MOTERR(9:16) = 'ELTFA ' INTERR(1) = ISOUS SEGDES MRIGID GOTO 100 ENDIF 10 CONTINUE ENDIF IF(IRET.NE.1) RETURN MCHPO1=IPCHC NOMTOT(1)=' ' IF(IERR.NE.0)RETURN SEGACT MCHPO1 MSOUP1=MCHPO1.IPCHP(1) SEGACT MSOUP1 MPOVA1=MSOUP1.IPOVAL SEGACT MPOVA1 * * Construction de MCHPOI * * IPT2=IFACE SEGACT IPT2 NPN=IPT2.NUM(/2) NSOUPO=1 NAT=1 SEGINI MCHPOI MTYPOI=' ' MOCHDE=' CHPOIN CREE PAR BMTD ' IFOPOI=MCHPO1.IFOPOI JATTRI(1)=2 NC=NBCOMP SEGINI MSOUPO IPCHP(1)=MSOUPO NOCOMP(L)=MSOUP1.NOCOMP(L) NOHARM(L)=MSOUP1.NOHARM(L) 5 CONTINUE IGEOC=IFACE N=NPN SEGINI MPOVAL IPOVAL=MPOVAL NB=N*NC * * Creation du tableau ICPR * IK = 0 NNGOT = nbpts SEGINI ICCPR C MELEME = IFACE C SEGACT MELEME N2 = IPT2.NUM(/2) IF (ICPR(K).EQ.0) THEN IK = IK + 1 ICPR(K) = IK ENDIF 15 CONTINUE SEGDES IPT2 C C Calcul du produit C ITELEM=0 MELEME=IELTFA C call ecmail(meleme) SEGACT MELEME IPT1=MELEME DO 50 ISOUS=1,NRIGEL IF(NRIGEL.NE.1)IPT1= LISOUS(ISOUS) SEGACT IPT1 xMATRI=IRIGEL(4,ISOUS) SEGACT xMATRI NELRIG=re(/3) DO 60 IEL=1,NELRIG ITELEM=ITELEM+1 * XMATRI=IMATTT(IEL) * SEGACT XMATRI NLIGRD=RE(/1) NLIGRP=RE(/2) DO 40 I=1,NLIGRD RLIGN=0.D0 DO 30 J=1,NLIGRP RLIGN=RLIGN+RE(I,J,iel) 30 CONTINUE IPOPTS=ICPR(IPT1.NUM(I,IEL)) VPOCHA(IPOPTS,K)=VPOCHA(IPOPTS,K)+RLIGN* * MPOVA1.VPOCHA(ITELEM,K) 20 CONTINUE 40 CONTINUE * SEGDES XMATRI 60 CONTINUE SEGDES xMATRI SEGDES IPT1 50 CONTINUE IF(NRIGEL.NE.1)SEGDES MELEME SEGDES MRIGID * * Ménage * SEGSUP ICCPR 100 CONTINUE END
© Cast3M 2003 - Tous droits réservés.
Mentions légales