capaed
C CAPAED SOURCE GG250959 17/09/20 21:15:08 9554 C======================================================================= C= OPERATEUR CAPACITE - MODELE 'DIFFUSION' OU 'ELECTROSTATIQUE' = C======================================================================= C= C A P A E D = C= ----------- = C= = C= Fonction : = C= ---------- = C= Calcul de la matrice de "CAPACITE" (type RIGIDITE) = C= = C= Parametres : (E)=Entree (S)=Sortie = C= ------------ = C= IPMODE (E) Segment IMODEL pour un modele elementaire (ACTIF) = C= IPCHEL (E) Segment MCHELM de CARACTERISTIQUES (?) = C= ISUPC (E) Support du champ de CARACTERISTIQUES = C= IPRIGI (E/S) Segment MRIGID : "CAPACITE" (ACTIF) = C======================================================================= SUBROUTINE CAPAED (IPMODE,IPCHEL,ISUPC, IPRIGI) IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) -INC PPARAM -INC CCOPTIO -INC CCHAMP -INC CCGEOME -INC CCREEL -INC SMCHAML -INC SMCOORD -INC SMELEME -INC SMINTE -INC SMMODEL -INC SMRIGID INTEGER OOOVAL SEGMENT NOTYPE CHARACTER*16 TYPE(NBTYPE) ENDSEGMENT SEGMENT MPTVAL INTEGER IPOS(NS) ,NSOF(NS) INTEGER IVAL(NCOSOU) CHARACTER*16 TYVAL(NCOSOU) ENDSEGMENT SEGMENT INFO INTEGER INFELL(JG) ENDSEGMENT CHARACTER*8 CMATE CHARACTER*(LCONMO) CONM C= INTTYP definit le support des points d'integration pour CAPAED C= Cette valeur doit etre coherente avec celle utilisee dans CAPA. PARAMETER ( INTTYP = 4 ) PARAMETER ( NINF=3 ) INTEGER INFOS(NINF) LOGICAL lsupfo,lsupdp IPINTE = 0 MOMATE = 0 MOTYPE = 0 MODEPL = 0 MOFORC = 0 lsupdp = .FALSE. lsupfo = .FALSE. C- Matrice de capacite MRIGID = IPRIGI c* SEGACT,MRIGID NRIGE0 = IRIGEL(/2) C- Recuperation du sous-modele et de la zone elementaire associee IMODEL = IPMODE C* SEGACT,IMODEL MELE = NEFMOD IF (MELE.EQ.22) GOTO 9991 IF (MELE.EQ.259) GOTO 9991 C- Recuperation d'informations sur le maillage elementaire IPT1 = IMAMOD SEGACT,IPT1 NBNOE1 = IPT1.NUM(/1) NBELE1 = IPT1.NUM(/2) C- Quelques informations sur le modele CONM = CONMOD CMATE = CMATEE MATE = IMATEE IRET = 1 IF (IRET.EQ.0) GOTO 9990 C- Recuperation d'informations sur l'element fini IF (INFMOD(/1).LT.2+INTTYP) THEN IF (IERR.NE.0) GOTO 9990 INFO = IPINF MFR = INFELL(13) LRE = INFELL( 9) MINTE = INFELL(11) c* NBPGAU = INFELL( 6) c* NDDL = INFELL(15) SEGSUP,INFO ELSE MFR = INFELE(13) LRE = INFELE( 9) MINTE = INFMOD(2+INTTYP) c* NBPGAU = INFELE( 6) c* NDDL = INFELE(15) ENDIF c* IF (MFR.NE.71 .AND. MFR.NE.73) THEN c* CALL ERREUR(21) c* GOTO 9990 c* ENDIF IPINTE = MINTE IF (IPINTE.NE.0) SEGACT,MINTE IPPORE = 0 C- Recuperation des caracteristiques materielles (obligatoires) ISUPC1 = ISUPC nbrobl = 1 nbrfac = 0 SEGINI,nomid IF (MFR.EQ.71) THEN C* IF (FORMOD(1).EQ.'ELECTROSTATIQUE') THEN lesobl(1) = 'CJEL ' ELSE IF (MFR.EQ.73) THEN C* ELSE IF (FORMOD(1).EQ.'DIFFUSION') THEN lesobl(1) = 'CDIF ' ENDIF MOMATE = nomid NMATT = nbrobl + nbrfac c nbtype = 1 SEGINI,notype type(1) = 'REAL*8' MOTYPE = notype C- Definition du descripteur IDESCR pour le modele elementaire C-- Recherche des noms d'inconnues primales et duales IF (LNOMID(1).NE.0) THEN MODEPL = LNOMID(1) nomid = MODEPL SEGACT,nomid NDEPL = lesobl(/2) C* ndum = lesfac(/2) ELSE lsupdp = .TRUE. nomid = MODEPL SEGACT,nomid ENDIF IF (LNOMID(2).NE.0) THEN MOFORC = LNOMID(2) nomid = MOFORC SEGACT,nomid NFORC = lesobl(/2) C* ndum =lesfac(/2) ELSE lsupfo = .TRUE. nomid = MOFORC SEGACT,nomid ENDIF IF (NDEPL.EQ.0.OR.NFORC.EQ.0.OR.NDEPL.NE.NFORC) THEN GOTO 9990 ENDIF C-- Initialisation du segment DESCRIPTEUR NLIGRP = LRE NLIGRD = LRE IF (NBNOE1*NDEPL .GT. NLIGRD) THEN GOTO 9990 ENDIF SEGINI,DESCR C-- Remplissage du segment DESCRIPTEUR IDDL = 1 DO inoe = 1, NBNOE1 DO il = 1, NDEPL nomid = MODEPL LISINC(IDDL) = lesobl(il) NOELEP(IDDL) = inoe nomid = MOFORC LISDUA(IDDL) = lesobl(il) NOELED(IDDL) = inoe IDDL = IDDL+1 ENDDO ENDDO SEGDES,DESCR IDESCR = DESCR C- Partionnement si necessaire de la matrice de capacite C- determinant ainsi le nombre d'objets elementaires de MRIGID LTRK = oooval(1,4) IF (LTRK.EQ.0) LTRK = oooval(1,1) * Ajout a la taille en mots de la matrice des infos du segment LSEG = LRE*LRE*NBELE1 + 16 NBLPRT = (LSEG-1)/LTRK + 1 NBLMAX = (NBELE1-1)/NBLPRT + 1 NBLPRT = (NBELE1-1)/NBLMAX + 1 * write(ioimp,*) ' capaed : nblprt nblmax = ',nblprt,nblmax,nbele1 C Ajout de la matrice de CAPACITE THERMOHYDRIQUE a la matrice globale C =================================================================== NRIGEL = NRIGE0 + NBLPRT SEGADJ,MRIGID descr = IDESCR meleme = IPT1 nbnn = NBNOE1 nbelem = NBELE1 nbsous = 0 nbref = 0 C Boucle sur les PARTITIONS elementaires de la matrice C ==================================================== DO irige = 1, NBLPRT IF (NBLPRT.GT.1) THEN C- Partitionnement du maillage support de la matrice elementaire SEGACT,IPT1 ielem = (irige-1)*NBLMAX nbelem = MIN(NBLMAX,NBELE1-ielem) * write(ioimp,*) ' creation segment ',nbnn,nbelem SEGINI,meleme itypel = IPT1.itypel DO ielt = 1, nbelem jelt = ielt + ielem DO inoe = 1, nbnn num(inoe,ielt) = IPT1.NUM(inoe,jelt) ENDDO icolor(ielt) = IPT1.ICOLOR(jelt) ENDDO C- Recopie du descripteur des1 = IDESCR SEGINI,descr=des1 SEGDES,descr ENDIF ipmail = meleme ipdesc = descr C- Initialisation de la matrice de rigidite elementaire (xmatri) NELRIG = nbelem SEGINI,xmatri ipmatr = xmatri C- Recuperation du champ des proprietes materielles sur la partition IVAMAT = 0 IF (IERR.NE.0) GOTO 9995 IF (ISUPC1.EQ.1) THEN IF (IERR.NE.0) THEN ISUPC1 = 0 GOTO 9995 ENDIF ENDIF * Calcul de la CAPACITE ELEMENTAIRE IF (MFR .EQ. 71 .OR. MFR .EQ. 73) THEN CALL CAPDIF(MELE,ipmail,ipinte,IVAMAT,NMATT, ipmatr) ELSE ENDIF C- Un peu de menage dans les segments 9995 CONTINUE IF (ISUPC1.EQ.1 .OR. NBLPRT.GT.1) THEN ELSE ENDIF C- Sortie prematuree en cas d'erreur IF (IERR.NE.0) GOTO 9990 xmatri = ipmatr SEGDES,xmatri IF (NBLPRT.GT.1) THEN meleme = ipmail SEGDES,meleme ENDIF C- Stockage de la matrice de capacite jrige = NRIGE0 + irige COERIG(jrige) = 1. IRIGEL(1,jrige) = ipmail IRIGEL(2,jrige) = 0 IRIGEL(3,jrige) = ipdesc IRIGEL(4,jrige) = ipmatr IRIGEL(5,jrige) = NIFOUR IRIGEL(6,jrige) = 0 IRIGEL(7,jrige) = 0 IRIGEL(8,jrige) = 0 ENDDO IPRIGI = MRIGID C FIN DU TRAITEMENT : desactivation/destruction de segments C ========================================================= 9990 CONTINUE SEGDES,IPT1 IF (IPINTE.NE.0) THEN MINTE = IPINTE SEGDES,MINTE ENDIF IF (MOMATE.NE.0) THEN nomid = MOMATE SEGSUP,nomid ENDIF IF (MOTYPE.NE.0) THEN notype = MOTYPE SEGSUP,notype ENDIF IF (MODEPL.NE.0) THEN nomid = MODEPL SEGDES,nomid IF (lsupdp) SEGSUP,nomid ENDIF IF (MOFORC.NE.0) THEN nomid = MOFORC SEGDES,nomid IF (lsupfo) SEGSUP,nomid ENDIF 9991 CONTINUE c* SEGDES,IMODEL c* SEGDES,MRIGID RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales