pendi2
C PENDI2 SOURCE CB215821 20/11/25 13:35:33 10792 C************************************************************************ C C PROJET : CASTEM 2000 C C NOM : PENDI2 C C DESCRIPTION : Appelle par PENT C C LANGAGE : FORTRAN 77 + ESOPE 2000 (avec extensions CISI) C C AUTEUR : A. BECCANTINI C C************************************************************************ C C C************************************************************************ C C PHRASE D'APPEL (GIBIANE) : C C C RCHPO1 RCHELEM1 = 'PENT' C MCLE1 MCLE2 MCLE3 TABDO LMOT1 LMOT2 CHPO1 CHPO2 CHPO3 ; C C ou C C RCHPO1 = 'PENT' C MCLE1 MCLE2 MCLE3 TABDO LMOT1 LMOT2 CHPO1 CHPO2 CHPO3 C MCLE5 RCHELEM1 ; C C C Entrées: C C TABDO : Donnée de la table domaine; C C MCLE1 : type du champ par point CHPO1. Pour le moment, seul le C type 'FACE' est autorisé; C C MCLE2 : 'DIAMANT' C C MCLE3 : Calcul ou non du limiteur : 'NOLIMITE' C C LMOT1 : Nom de composantes du champoint duquel on veut calculer C le gradient C C LMOT2 : Nom de composantes du gradients C C CHPO1 : CHAMPOINT centre du quel on veut calculer le gradient C C CHPO2 : Conditions aux limites de type Dirichlet C C CHPO3 : Conditions aux limites de type von Neumann (dans le repaire C global) C C MCLE4 : Donnée ou non du RCHELEM1: C 'GRADGEO' si donnée, vide sinon. C C C E/S : C C RCHELEM1: Champ par élément des coefficients géométriques pour le C calcul du gradient (et du hessien) C (entrée si MCLE4 = 'GRADGEO', sinon sortie). C C C Sorties: C C RCHPO1 : Champ par point contenant le gradient de CHPO1 (toujours C calculé) ; C C************************************************************************ C C HISTORIQUE (Anomalies et modifications éventuelles) C C HISTORIQUE : Creé le 2/3/2001 C C************************************************************************ C C C IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) -INC PPARAM -INC CCOPTIO -INC SMCHPOI -INC SMLMOTS C INTEGER IDOMA, IRET1, ICEN, IFAC, IFACEL, IFACEP, ISOMM, INORM & ,ICHPO, ICHPL1, ICHPL2, LMOT, LMOTGR & ,ISGLI1, ISGLI2, ICHGRA, ICOEFF & ,NSOUPO, IMAIL, JGN, JGM C CHARACTER*(8) MOT LOGICAL LOGCOE C MOT=' ' C C**** Lecture du MELEME SPG des points CENTRE. C IF(IERR .NE. 0) GOTO 9999 C C**** Lecture du MELEME SPG des points FACE. C IF(IERR .NE. 0) GOTO 9999 C C**** Lecture du MELEME SPG des points SOMMET C IF(IERR .NE. 0) GOTO 9999 C C**** Lecture du MELEME de connect. FACEL C IF(IERR .NE. 0) GOTO 9999 C C**** Lecture du MELEME de connect. FACEP C IF(IERR .NE. 0) GOTO 9999 C C**** Lecture du MELEME MAILLAGE C IF(IERR .NE. 0) GOTO 9999 C C**** Lecture des normales aux faces C IF(IERR .NE. 0) GOTO 9999 JGN=4 JGM=IDIM SEGINI MLMOTS IF(IERR .NE. 0)GOTO 9999 SEGSUP MLMOTS C C**** Lecture du CHPOINT dont on veut calculer le gradient! C IF(IERR .NE. 0) GOTO 9999 C C**** Lecture du CHPOINT des conditions limites de type Dirichlet C IF(IERR .NE. 0) GOTO 9999 C C**** Lecture du CHPOINT des conditions limites de type von Neumann C IF(IERR .NE. 0) GOTO 9999 C C**** Lecture des noms des composantes du CHPOINT C IF(IERR .NE. 0) GOTO 9999 C C**** Lecture des noms des composantes du gradients C IF(IERR .NE. 0) GOTO 9999 C C**** Compatibilité entre les liste de composantes C MLMOT1=LMOT MLMOT2=LMOTGR SEGACT MLMOT1 SEGACT MLMOT2 write(*,*) 'Composantes = ???' GOTO 9999 ENDIF C C**** Control de ICHPO C MLMOTS=LMOT IF (IERR .NE. 0) GOTO 9999 C C**** Control de ICHPL1 C MCHPOI = ICHPL1 SEGACT MCHPOI NSOUPO = MCHPOI.IPCHP(/1) IF(NSOUPO .EQ. 0) THEN ICHPL1=0 ISGLI1=0 ELSE MSOUPO=MCHPOI.IPCHP(1) SEGACT MSOUPO ISGLI1=MSOUPO.IGEOC SEGDES MSOUPO IF (IERR .NE. 0) GOTO 9999 ENDIF C C**** Control de ICHPL2 C MCHPOI = ICHPL2 SEGACT MCHPOI NSOUPO = MCHPOI.IPCHP(/1) IF(NSOUPO .EQ. 0) THEN ICHPL2=0 ISGLI2=0 ELSE MSOUPO=MCHPOI.IPCHP(1) SEGACT MSOUPO ISGLI2=MSOUPO.IGEOC SEGDES MSOUPO IF (IERR .NE. 0) GOTO 9999 ENDIF C C**** Lecture du MCHAMLs qui contiennent les elements de matrice C pour le calcul du gradient C C Si MOT = 'GRADGEO', on a ces MCHAMLs; sinon il faut le calculer C IF(IERR .NE. 0) GOTO 9999 IF(IRET1 .EQ. 0)THEN LOGCOE = .TRUE. ELSEIF(MOT .NE. 'GRADGEO')THEN LOGCOE=.TRUE. ELSE LOGCOE=.FALSE. IF(IERR .NE. 0) GOTO 9999 ENDIF IF(LOGCOE)THEN & ICOEFF) IF (IERR .NE. 0) GOTO 9999 ENDIF C C**** Calcul de gradient C IF(IERR .NE. 0) GOTO 9999 C C**** Ecriture de gradient, (hessian), (limiteur), C (MCHAMLs pour le calcul de gradient et/ou du hessian) C IF(MOT .NE. 'GRADGEO') THEN IF(IERR .NE. 0) GOTO 9999 ENDIF IF(IERR .NE. 0) GOTO 9999 C SEGDES MLMOTS C C**** Sortie du programme C 9999 CONTINUE END
© Cast3M 2003 - Tous droits réservés.
Mentions légales