[updated 8.Sep.2008]
Librairie caldom > Fichier calefl.f |
SUBROUTINE CALEFL
Auteur : O.deBayser (Mai 1992)
Derniere modification : D.Martin (5 Mai 2001)
Version 1.0.3
Calcul des termes 'ELements FINIs Localises' (EFLQTR)
Sauvegarde des termes calcules sur le domaine (SAVTRM)
IMPLICIT NONE
INCLUDE 'ALLOC'
INCLUDE 'CONTEX'
CHARACTER ERCODE*120,KALEFL
INTEGER ADDOMK,ADDOM1,DOMAIN
& ,MCTRDO,LGERDO,NBDOMK,INCRDO,NCHDOM
& ,MCDTRM,LGETRM,NBTERM,INCTRM,NCHTRM
& ,MCDOMK,NUDOMG,NUDOMK,IGEOME,INDMIX,NUSCHQ,INDEXC
& ,IDLHRC,INTRPC,NBNECX,NBNEXC,NBDLXC,NBNFXC,NBDFXC
& ,NVNUMC,INDEXL,IDLHRL,INTRPL,NBNELX,NBNEXL,NBDLXL
& ,NBNFXL,NBDFXL,NVNUML,NVCORC,INUTIL,NBTRDO,NIVDOM
& ,MCLIST,NXLIST,LGRPTL,NDMDOM,NDMDOE,NBELDO,NBNEXG
& ,NBDLXG,NBNFXG,NBDFXG,MCNOMD,NUCC,NUCL,NULC,NULL
& ,NBNECO,NBNELI,NUDGAV,NIVALL
COMMON/FORMAH/ERCODE
CALL PRFXMJ (1,'*Calefl*')
CALL TBAR2 (ERCODE,'#TERDO',1,MCTRDO,'$SDTRM',1,MCDTRM)
CALL SDEXDB (IST(MCTRDO),LGERDO,NBDOMK,INCRDO,NCHDOM) !utilite
CALL SDEXDB (IST(MCDTRM),LGETRM,NBTERM,INCTRM,NCHTRM) !utilite
ADDOMK=LGERDO
ADDOM1=ADDOMK
NUDGAV=0
+++++++++++++++++++++++++++++
++ BOUCLE SUR LES DOMAINES ++
+++++++++++++++++++++++++++++
DO 1000 DOMAIN=1,NBDOMK
ERCODE=' '
CALL TBAR1 (ERCODE,'#TERDO',1,MCTRDO)
Exploitation du contenu de la structure de donnees #TERDO pour le domaine
le domaine de calcul NUDOMK
ADDOMK adresse relative (-1) du domaine de calcul courant dans #TERDO
ADDOM1 adresse relative (-1) du premier domaine de calcul dans #TERDO
attache au domaine geometrique courant
MCDOMK adresse absolue des caracteristiques d'un domaine
MCDOMK=MCTRDO+ADDOMK
Recherche des parametres de description du domaine de calcul
CALL GETDOM (IST(MCDOMK),NUDOMG,NUDOMK,IGEOME,INDMIX,NUSCHQ
& ,INDEXC,IDLHRC,INTRPC,NBNECX,NBNEXC,NBDLXC,NBNFXC
& ,NBDFXC,NVNUMC
& ,INDEXL,IDLHRL,INTRPL,NBNELX,NBNEXL,NBDLXL,NBNFXL
& ,NBDFXL,NVNUML,NVCORC,INUTIL,NBTRDO,NIVDOM) !sdexplo
IF (NUDOMG.NE.NUDGAV) ADDOM1=ADDOMK
NUDGAV=NUDOMG
NIVALL=NVNUMC
Exploitation de la structure de donnees #ISTEL (1ere partie)
(Renseignements globaux sur les elements constituant le domaine)
CALL TBRR2 (ERCODE,'#ISTEL',NUDOMG,MCLIST
& ,'#ORPTL',NUDOMK,LGRPTL)
CALL TBAR1 (ERCODE,'#ISTEL',NUDOMG,MCLIST)
CALL EXLIST (IST(MCLIST),NXLIST,NDMDOM,NDMDOE,NBELDO
& ,NBNEXG,NBDLXG,NBNFXG,NBDFXG) !sdexplo
IF (NDMDOM.GT.0) THEN
Nom du domaine geometrique NUDOMG correspondant au domaine
de calcul NUDOMK
IF (NIVDOM.GE.0) THEN
CALL TBAR1 (ERCODE,'#OMDOM',1,MCNOMD)
CALL PRNOMD (AST(MCNOMD+(NUDOMG-1)*NCHDOM),NCHDOM,NUDOMK
& ,NDMDOM,NBELDO,NBTRDO,IGEOME,-99999,INTRPG
& ,INTRPC,INTRPL,NIVDOM,IMPPAL,IMPSDR) !caldom
ENDIF
Tableaux de numerotation des noeuds : #GNEDO et #RGNDO
IF (ADDOMK.GT.ADDOM1)
& CALL NUMNIV (ADDOMK,ADDOM1,INCRDO,NUDOMK,INTRPC,INDEXC
& ,INTRPL,INDEXL,NVNUMC,NVNUML
& ,NUCC,NUCL,NULC,NULL,NIVDOM,IMPSDR) !caldom
CALL NUMDOM (NDMDOM,NDMDOE,NBELDO,NXLIST,ADDOMK,NUDOMK
& ,NBNECO,NVNUMC,NBNELI,NVNUML,NIVALL,IMPSDR) !caldom
IF (NBTRDO.GE.1) THEN
Creation des tableaux 'Elements Finis Localises' sur le domaine
---------------------------------------------------------------
CALL EFLTRD (NBTRDO,INCRDO,ADDOMK,NBNECO,NBNELI,NVNUMC
& ,NVNUML,NIVALL,NVCORC,KALEFL) !calefl
IF (KALEFL.EQ.'Y') THEN
CALL EFLQTR (NDMDOM,NDMDOE,NBELDO,NXLIST,INCRDO,ADDOMK
& ,IMPSDR) !calefl
CALL SAVTRM ('ELFLOC',ADDOMK,IMPSDR) !caldom
ENDIF
ENDIF
Sauvegarde des tableaux de numerotations
CALL TBSAVE ('#RGNDO',NUDOMK)
IF (NVNUMC.NE.NDFNUM) CALL TBSAVE ('#GNEDO',NVNUMC)
IF (NVNUML.NE.NDFNUM.AND.NVNUML.NE.NVNUMC)
& CALL TBSAVE ('#GNEDO',NVNUML)
Mise a jour des parametres de description du domaine de calcul
CALL TBAR1 (ERCODE,'#TERDO',1,MCTRDO)
MCDOMK=MCTRDO+ADDOMK
CALL PUTDOM (IST(MCDOMK),NUDOMG,NUDOMK,IGEOME,INDMIX,NUSCHQ
& ,INDEXC,IDLHRC,INTRPC,NBNECX,NBNEXC,NBDLXC,NBNFXC
& ,NBDFXC,NVNUMC
& ,INDEXL,IDLHRL,INTRPL,NBNELX,NBNEXL,NBDLXL,NBNFXL
& ,NBDFXL,NVNUML,NVCORC,INUTIL,NBTRDO,NIVDOM) !sdexplo
IF (NIVDOM.GT.5) CALL PRTRDO (NUDOMG,NUDOMK,IMPSDR) !prsd
Sauvegarde du tableau de definition et des coordonnees des points
-----------------------------------------------------------------
CALL TBSAVE ('#ISTEL',NUDOMG)
CALL TBSAVE ('#ORPTL',NUDOMK)
ENDIF
1000 ADDOMK=ADDOMK+INCRDO+NBTRDO
CALL PRFXMJ (-1,'*Calefl*')
END !Calefl
calefl est appelé dans (7 procédures)