Download pendi2.eso

Back to the list

   1 : C PENDI2    SOURCE    BECC      05/01/20    21:15:14     5008           
   2 :       SUBROUTINE PENDI2(IDOMA)
   3 : C************************************************************************
   4 : C     
   5 : C PROJET            :  CASTEM 2000
   6 : C     
   7 : C NOM               :  PENDI2 
   8 : C     
   9 : C DESCRIPTION       :  Appelle par PENT
  10 : C     
  11 : C LANGAGE           :  FORTRAN 77 + ESOPE 2000 (avec extensions CISI)
  12 : C     
  13 : C AUTEUR            :  A. BECCANTINI
  14 : C     
  15 : C************************************************************************
  16 : C     
  17 : C     
  18 : C************************************************************************
  19 : C     
  20 : C PHRASE D'APPEL (GIBIANE) :
  21 : C     
  22 : C 
  23 : C RCHPO1  RCHELEM1 = 'PENT'
  24 : C         MCLE1 MCLE2 MCLE3 TABDO LMOT1 LMOT2 CHPO1 CHPO2 CHPO3 ;
  25 : C
  26 : C ou
  27 : C
  28 : C RCHPO1  = 'PENT'
  29 : C        MCLE1 MCLE2 MCLE3 TABDO LMOT1 LMOT2 CHPO1 CHPO2 CHPO3 
  30 : C        MCLE5 RCHELEM1 ;
  31 : C
  32 : C
  33 : C Entrées:
  34 : C
  35 : C  TABDO   :  Donnée de la table domaine;
  36 : C
  37 : C  MCLE1   :  type du champ par point CHPO1. Pour le moment, seul le 
  38 : C             type 'FACE' est autorisé;
  39 : C
  40 : C  MCLE2   :  'DIAMANT'
  41 : C
  42 : C  MCLE3   :  Calcul ou non du limiteur : 'NOLIMITE'
  43 : C
  44 : C  LMOT1   :  Nom de composantes du champoint duquel on veut calculer 
  45 : C             le gradient
  46 : C
  47 : C  LMOT2   :  Nom de composantes du gradients 
  48 : C
  49 : C  CHPO1   :  CHAMPOINT centre du quel on veut calculer le gradient
  50 : C
  51 : C  CHPO2   :  Conditions aux limites de type Dirichlet
  52 : C
  53 : C  CHPO3   :  Conditions aux limites de type von Neumann (dans le repaire 
  54 : C             global)
  55 : C
  56 : C  MCLE4   :  Donnée ou non du RCHELEM1:
  57 : C             'GRADGEO' si donnée, vide sinon.
  58 : C
  59 : C
  60 : C E/S    :
  61 : C
  62 : C RCHELEM1: Champ par élément des coefficients géométriques pour le
  63 : C           calcul du gradient (et du hessien)
  64 : C           (entrée si MCLE4 = 'GRADGEO', sinon sortie).
  65 : C
  66 : C
  67 : C Sorties:
  68 : C
  69 : C RCHPO1 :  Champ par point contenant le gradient de CHPO1 (toujours
  70 : C           calculé) ;
  71 : C
  72 : C************************************************************************
  73 : C     
  74 : C HISTORIQUE (Anomalies et modifications éventuelles)
  75 : C     
  76 : C HISTORIQUE : Creé le 2/3/2001
  77 : C     
  78 : C************************************************************************
  79 : C     
  80 : C     
  81 : C     
  82 :       IMPLICIT INTEGER(I-N)
  83 : -INC CCOPTIO
  84 : -INC SMCHPOI
  85 : -INC SMLMOTS
  86 : C     
  87 : C**** Variables de COOPTIO
  88 : C     
  89 :       INTEGER IPLLB, IERPER, IERMAX, IERR, INTERR
  90 :      &     ,IOTER,   IOLEC,  IOIMP,   IOCAR,  IOACQ
  91 :      &     ,IOPER,   IOSGB,  IOGRA,   IOSAU,  IORES
  92 :      &     ,IECHO,   IIMPI,  IOSPI
  93 :      &     ,IDIM
  94 :      &     ,MCOORD      
  95 :      &     ,IFOMOD, NIFOUR, IFOUR, NSDPGE, IONIVE
  96 :      &     ,NGMAXY, IZROSF, ISOTYP, IOSCR,LTEXLU
  97 :      &     ,NORINC,NORVAL,NORIND,NORVAD
  98 :      &     ,NUCROU, IPSAUV, IFICLE, IPREFI, IREFOR, ISAFOR
  99 : C     
 100 :       INTEGER IDOMA, IRET1, ICEN, IFAC, IFACEL, IFACEP, ISOMM, INORM
 101 :      &     ,ICHPO, ICHPL1, ICHPL2, LMOT, LMOTGR
 102 :      &     ,ISGLI1, ISGLI2, ICHGRA,  ICOEFF
 103 :      &     ,NSOUPO, IMAIL, JGN, JGM
 104 : C
 105 :       CHARACTER*(8)  MOT
 106 :       LOGICAL LOGCOE
 107 : C
 108 :       MOT='        '
 109 : C
 110 : C**** Lecture du MELEME SPG des points CENTRE.
 111 : C     
 111 :       CALL LEKTAB(IDOMA,'CENTRE',ICEN)
 112 :       IF(IERR .NE. 0) GOTO 9999
 113 : C
 114 : C**** Lecture du MELEME SPG des points FACE.
 115 : C     
 115 :       CALL LEKTAB(IDOMA,'FACE',IFAC)
 116 :       IF(IERR .NE. 0) GOTO 9999
 117 : C
 118 : C**** Lecture du MELEME SPG des points SOMMET
 119 : C     
 119 :       CALL LEKTAB(IDOMA,'SOMMET',ISOMM)
 120 :       IF(IERR .NE. 0) GOTO 9999
 121 : C     
 122 : C**** Lecture du MELEME de connect. FACEL
 123 : C     
 123 :       CALL LEKTAB(IDOMA,'FACEL',IFACEL)
 124 :       IF(IERR .NE. 0) GOTO 9999
 125 : C     
 126 : C**** Lecture du MELEME de connect. FACEP
 127 : C     
 127 :       CALL LEKTAB(IDOMA,'FACEP',IFACEP)
 128 :       IF(IERR .NE. 0) GOTO 9999
 129 : C     
 130 : C**** Lecture du MELEME MAILLAGE
 131 : C     
 131 :       CALL LEKTAB(IDOMA,'MAILLAGE',IMAIL)
 132 :       IF(IERR .NE. 0) GOTO 9999
 133 : C     
 134 : C**** Lecture des normales aux faces
 135 : C     
 135 :       CALL LEKTAB(IDOMA,'XXNORMAF',INORM)
 136 :       IF(IERR .NE. 0) GOTO 9999
 137 :       JGN=4
 138 :       JGM=IDIM
 139 :       SEGINI MLMOTS
 140 :       MLMOTS.MOTS(1)='UX'
 141 :       MLMOTS.MOTS(2)='UY'
 142 :       IF(IDIM .EQ. 3) MLMOTS.MOTS(3)='UZ'
 142 :       CALL QUEPO1 (INORM, IFAC, MLMOTS)
 143 :       IF(IERR .NE. 0)GOTO 9999
 144 :       SEGSUP MLMOTS
 145 : C
 146 : C**** Lecture du CHPOINT dont on veut calculer le gradient!
 147 : C
 147 :       CALL LIROBJ('CHPOINT ',ICHPO,1,IRET1)
 148 :       IF(IERR .NE. 0) GOTO 9999
 149 : C
 150 : C**** Lecture du CHPOINT des conditions limites de type Dirichlet
 151 : C
 151 :       CALL LIROBJ('CHPOINT ',ICHPL1,1,IRET1)
 152 :       IF(IERR .NE. 0) GOTO 9999
 153 : C
 154 : C**** Lecture du CHPOINT des conditions limites de type von Neumann
 155 : C
 155 :       CALL LIROBJ('CHPOINT ',ICHPL2,1,IRET1)
 156 :       IF(IERR .NE. 0) GOTO 9999
 157 : C
 158 : C**** Lecture des noms des composantes du CHPOINT
 159 : C
 159 :       CALL LIROBJ('LISTMOTS',LMOT,1,IRET1)
 160 :       IF(IERR .NE. 0) GOTO 9999
 161 : C
 162 : C**** Lecture des noms des composantes du gradients
 163 : C
 163 :       CALL LIROBJ('LISTMOTS',LMOTGR,1,IRET1)
 164 :       IF(IERR .NE. 0) GOTO 9999
 165 : C
 166 : C**** Compatibilité entre les liste de composantes
 167 : C
 168 :       MLMOT1=LMOT
 169 :       MLMOT2=LMOTGR
 170 :       SEGACT MLMOT1
 171 :       SEGACT MLMOT2
 172 :       IF(MLMOT2.MOTS(/2) .NE. (IDIM*MLMOT1.MOTS(/2)))THEN
 173 :          write(*,*) 'Composantes = ???'
 173 :          CALL ERREUR(21)
 174 :          GOTO 9999
 175 :       ENDIF
 176 : C     
 177 : C**** Control de ICHPO
 178 : C     
 179 :       MLMOTS=LMOT
 179 :       CALL QUEPO1(ICHPO, ICEN, LMOT)
 180 :       IF (IERR .NE. 0) GOTO 9999
 181 : C     
 182 : C**** Control de ICHPL1
 183 : C     
 184 :       MCHPOI = ICHPL1
 185 :       SEGACT MCHPOI
 186 :       NSOUPO = MCHPOI.IPCHP(/1)
 187 :       IF(NSOUPO .EQ. 0) THEN
 188 :          ICHPL1=0
 189 :          ISGLI1=0
 190 :       ELSE
 191 :          MSOUPO=MCHPOI.IPCHP(1)
 192 :          SEGACT MSOUPO
 193 :          ISGLI1=MSOUPO.IGEOC
 194 :          SEGDES MSOUPO
 194 :          CALL QUEPO1(ICHPL1, 0, LMOT)
 195 :          IF (IERR .NE. 0) GOTO 9999
 196 :       ENDIF
 197 : C     
 198 : C**** Control de ICHPL2
 199 : C     
 200 :       MCHPOI = ICHPL2
 201 :       SEGACT MCHPOI
 202 :       NSOUPO = MCHPOI.IPCHP(/1)
 203 :       IF(NSOUPO .EQ. 0) THEN
 204 :          ICHPL2=0
 205 :          ISGLI2=0
 206 :       ELSE
 207 :          MSOUPO=MCHPOI.IPCHP(1)
 208 :          SEGACT MSOUPO
 209 :          ISGLI2=MSOUPO.IGEOC
 210 :          SEGDES MSOUPO
 210 :          CALL QUEPO1(ICHPL2, 0, LMOTGR)
 211 :          IF (IERR .NE. 0) GOTO 9999
 212 :       ENDIF
 213 : C     
 214 : C**** Lecture du MCHAMLs qui contiennent les elements de matrice
 215 : C     pour le calcul du gradient
 216 : C     
 217 : C     Si MOT = 'GRADGEO', on a ces MCHAMLs; sinon il faut le calculer
 218 : C     
 218 :       CALL LIRCHA(MOT,0,IRET1)
 219 :       IF(IERR .NE. 0) GOTO 9999
 220 :       IF(IRET1 .EQ. 0)THEN
 221 :          LOGCOE = .TRUE.
 222 :       ELSEIF(MOT .NE. 'GRADGEO')THEN
 222 :          CALL REFUS()
 223 :          LOGCOE=.TRUE.
 224 :       ELSE
 225 :          LOGCOE=.FALSE.
 225 :          CALL LIROBJ('MCHAML  ',ICOEFF,1,IRET1)
 226 :          IF(IERR .NE. 0) GOTO 9999
 227 :       ENDIF
 228 :       IF(LOGCOE)THEN
 228 :          CALL GRADI2(ICEN,ISOMM,IFACEL,IFACEP,ISGLI1,ISGLI2,INORM,
 229 :      &        ICOEFF)
 230 :          IF (IERR .NE. 0) GOTO 9999
 231 :       ENDIF
 232 : C
 233 : C**** Calcul de gradient
 234 : C     
 234 :       CALL PENDI3(LMOTGR,IFAC,ICHPO,ICHPL1,ICHPL2,INORM,ICOEFF,ICHGRA)
 235 :       IF(IERR .NE. 0) GOTO 9999
 236 : C     
 237 : C**** Ecriture de gradient, (hessian), (limiteur),
 238 : C     (MCHAMLs pour le calcul de gradient et/ou du hessian)
 239 : C     
 240 :       IF(MOT .NE. 'GRADGEO') THEN
 240 :          CALL ECROBJ('MCHAML',ICOEFF)
 241 :          IF(IERR .NE. 0) GOTO 9999
 242 :       ENDIF
 242 :       CALL ECROBJ('CHPOINT',ICHGRA)
 243 :       IF(IERR .NE. 0) GOTO 9999
 244 : C
 245 :       SEGDES MLMOTS
 246 : C     
 247 : C**** Sortie du programme
 248 : C     
 249 :  9999 CONTINUE
 250 : C     
 251 :       RETURN
 252 :       END
 253 :  
 254 :  
 255 :  
 256 :  
 257 :  
 258 :  

© Cast3M 2003 - All rights reserved.
Disclaimer