Download zlap1c.eso

Back to the list

   1 : C ZLAP1C    SOURCE    MAGN      09/07/30    21:23:39     6458           
   2 :       SUBROUTINE ZLAP1C(PROPHY,PROPH2,MPROC,MPTEMC,
   3 :      $     MPVOLU,MPNORM,MPSURF,MELEFL,
   4 :      $     KRFACE,KRCENT,
   5 :      $     LCLIMR,KRRIMP,MPRIMP,
   6 :      $     LCLIMT,KRTIMP,MPTIMP,
   7 :      $     NOMINC,
   8 :      $     IJACO,
   9 :      $     IMPR,IRET)
  10 :       IMPLICIT INTEGER(I-N)
  11 :       IMPLICIT REAL*8 (A-H,O-Z)
  12 : C***********************************************************************
  13 : C NOM         : ZLAP1C
  14 : C DESCRIPTION : Calcul de la matrice jacobienne du résidu du laplacien
  15 : C               VF 2D (termes multi-espèces).
  16 : C               Ici, on ne calcule que les contributions à la matrice
  17 : C               jacobienne faisant intervenir les coefficients pour le
  18 : C               calcul des gradients de Yk
  19 : C               (contributions à d Res_{\rho e_t} / d var
  20 : C                var prenant successivement les valeurs : 
  21 : C                \rho,   \rho Yk)
  22 : C
  23 : C               
  24 : C
  25 : C
  26 : C LANGAGE     : ESOPE
  27 : C AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  28 : C               mél : gounand@semt2.smts.cea.fr
  29 : C***********************************************************************
  30 : C APPELES (UTIL)   : AJMTK : ajoute un objet de type MATSIM (non
  31 : C                            standard) à un objet de type MATRIK.
  32 : C APPELE PAR       : ZLAP1A : Calcul de la matrice jacobienne du 
  33 : C                    résidu du laplacien VF 2D.
  34 : C***********************************************************************
  35 : C ENTREES            : PROPHY (type PROPHY) : propriétés des espèces
  36 : C                      PROPH2 (type PROPH2) : précond. de PROPHY
  37 : C                      MPROC (type MPOVAL) : masse volumique par 
  38 : C                                            élément.
  39 : C                      MPVOLU (type MPOVAL) : volume des éléments.
  40 : C                      MPNORM (type MPOVAL) : normale aux faces.
  41 : C                      MPSURF (type MPOVAL) : surface des faces.
  42 : C                      MELEFL (type MELEME) : connectivités face-(centre
  43 : C                                             gauche, centre droit).
  44 : C                      KRFACE (type MLENTI) : tableau de repérage dans 
  45 : C                        le maillage des faces des éléments.
  46 : C                      KRCENT (type MLENTI) : tableau de repérage dans 
  47 : C                        le maillage des centres des éléments.
  48 : C                      NOMINC (type MLMOTS) : noms des inconnues.
  49 : C                      LCLIMR (type logique) : .TRUE. => CL de Dirichlet
  50 : C                        sur la densité.
  51 : C                      KRRIMP (type MLENTI) : tableau de repérage dans
  52 : C                        maillage des CL de Dirichlet sur la densité.
  53 : C                      MPRIMP (type MPOVAL) : valeurs des CL de
  54 : C                        Dirichlet sur la densité.
  55 : C                      LCLIMT (type logique) : .TRUE. => CL de Dirichlet
  56 : C                        sur la température.
  57 : C                      KRTIMP (type MLENTI) : tableau de repérage dans
  58 : C                        maillage des CL de Dirichlet sur la température.
  59 : C                      MPTIMP (type MPOVAL) : valeurs des CL de
  60 : C                        Dirichlet sur la température.
  61 : C ENTREES/SORTIES    : IJACO (type MATRIK) : matrice jacobienne du 
  62 : C                        résidu du laplacien VF 2D.
  63 : C SORTIES            : -
  64 : C CODE RETOUR (IRET) : = 0 si tout s'est bien passé
  65 : C***********************************************************************
  66 : C VERSION    : v1, 25/02/2002, version initiale
  67 : C HISTORIQUE : v1, 25/02/2002, création
  68 : C HISTORIQUE :
  69 : C HISTORIQUE :
  70 : C***********************************************************************
  71 : C Prière de PRENDRE LE TEMPS de compléter les commentaires
  72 : C en cas de modification de ce sous-programme afin de faciliter
  73 : C la maintenance !
  74 : C***********************************************************************
  75 : -INC CCOPTIO
  76 : -INC SMCOORD
  77 : -INC SMCHPOI
  78 :       POINTEUR MPDKC.MPOVAL,MPDNC.MPOVAL
  79 :       POINTEUR MPROC.MPOVAL,MPTEMC.MPOVAL,MPYKC.MPOVAL
  80 :       POINTEUR MPRIMP.MPOVAL,MPTIMP.MPOVAL
  81 :       POINTEUR MPSURF.MPOVAL,MPNORM.MPOVAL,MPVOLU.MPOVAL
  82 : -INC SMCHAML
  83 :       POINTEUR ICOGRY.MCHELM,JCOGRY.MCHAML
  84 :       POINTEUR KDYKDX.MELVAL,KDYKDY.MELVAL
  85 : -INC SMELEME
  86 :       POINTEUR MELEFL.MELEME
  87 :       POINTEUR MCOGRY.MELEME
  88 : -INC SMLENTI
  89 :       POINTEUR KRYIMP.MLENTI,KRRIMP.MLENTI,KRTIMP.MLENTI
  90 :       POINTEUR KRCENT.MLENTI,KRFACE.MLENTI
  91 : -INC SMLMOTS
  92 :       POINTEUR NOMINC.MLMOTS
  93 : -INC SMMATRIK
  94 :       POINTEUR IJACO.MATRIK
  95 :       INTEGER NESP,IESP
  96 :       SEGMENT PROPHY
  97 :          CHARACTER*4 NOMESP(NESP+1)
  98 :          REAL*8 CV(NESP+1)
  99 :          REAL*8 R(NESP+1)
 100 :          REAL*8 H0K(NESP+1)
 101 :          POINTEUR CDIFF(NESP+1).MCHPOI
 102 :          POINTEUR YK(NESP+1).MCHPOI
 103 :          POINTEUR GRADYK(NESP+1).MCHPOI
 104 :          POINTEUR CGRYK(NESP+1).MCHELM
 105 :          POINTEUR CLYK(NESP+1).MCHPOI
 106 :       ENDSEGMENT
 107 :       SEGMENT PROPH2
 108 :          POINTEUR MPDIFF(NESP+1).MPOVAL
 109 :          POINTEUR MPVALY(NESP+1).MPOVAL
 110 :          POINTEUR MPGRAD(NESP+1).MPOVAL
 111 :          LOGICAL LCLIM(NESP+1)
 112 :          POINTEUR KRCLIM(NESP+1).MLENTI
 113 :       ENDSEGMENT
 114 : *     
 115 : * Objet matrice élémentaire simplifié
 116 : *     
 117 :       SEGMENT GMATSI
 118 :       INTEGER POIPR1(NPP1,NEL1)
 119 :       INTEGER POIDU1(1,NEL1)
 120 :       INTEGER POIPR2(NPP2,NEL2)
 121 :       INTEGER POIDU2(2,NEL2)
 122 :       POINTEUR LMATSI(0).MATSIM
 123 :       ENDSEGMENT
 124 : *  Contributions de la part du gradient de YK (CTGRY)      
 125 :       POINTEUR CTGRY.GMATSI
 126 :       SEGMENT MATSIM
 127 :       CHARACTER*8 NOMPRI,NOMDUA
 128 :       REAL*8 VALMA1(1,NPP1,NEL1)
 129 :       REAL*8 VALMA2(2,NPP2,NEL2)
 130 :       ENDSEGMENT 
 131 :       POINTEUR RETRHO.MATSIM
 132 :       POINTEUR RETRYK.MATSIM
 133 : *
 134 :       REAL*8 DKG,DKD,DKF,DNG,DND,DNF
 135 :       REAL*8 RHOG,RHOD,RHOF
 136 :       REAL*8 TEMG,TEMD,TEMF
 137 : *
 138 :       INTEGER IMPR,IRET
 139 : *     
 140 :       LOGICAL LCLIMY,LCLIMT,LCLIMR
 141 :       LOGICAL LMUR
 142 :       LOGICAL LCTRB2
 143 : *
 144 :       INTEGER IELEM,IPD,IPP,ISOUCH,IEL1,IEL2
 145 :       INTEGER NELEM,NPD,NPP,NSOUCH,NEL1,NEL2,NPP1,NPP2
 146 :       INTEGER NGCDRO,NGCGAU,NGFACE,NPPRIM,NPDUAL
 147 :       INTEGER NLCENP,NLCEND,NLFACE,NLCLY,NLFRI,NLFTI
 148 :       INTEGER NPTEL
 149 : *
 150 :       REAL*8 BETAX,BETAY,CNX,CNY
 151 :       REAL*8 SIGNOR,SURFFA,VOLUEL
 152 :       REAL*8 RHOP,YKP
 153 :       REAL*8 CPK,HKF,CPN,HNF
 154 :       REAL*8 FACTOR
 155 :       REAL*8 DYKDRO,DYKDRY
 156 : *
 157 :       INTEGER ICOORX,NLCGAU,NLCDRO
 158 :       REAL*8 XF,YF,XG,YG,XFMXG,YFMYG,DRG
 159 :      &     ,XD,YD,XFMXD,YFMYD,DRD,ALPHA,UMALPH
 160 : C     
 161 : *     
 162 : * Executable statements
 163 : *
 164 :       IF (IMPR.GT.2) WRITE(IOIMP,*) 'Entrée dans zlap1c.eso' 
 165 :       SEGACT PROPHY
 166 :       NESP=PROPHY.CV(/1)-1
 167 :       SEGACT PROPH2
 168 :       MPDNC=PROPH2.MPDIFF(NESP+1)
 169 :       SEGACT MPDNC
 170 :       DO IESP=1,NESP
 171 :          IF (LCLIMR) THEN
 172 :             SEGACT KRRIMP
 173 :             SEGACT MPRIMP
 174 :          ENDIF
 175 :          IF (LCLIMT) THEN
 176 :             SEGACT KRTIMP
 177 :             SEGACT MPTIMP
 178 :          ENDIF
 179 :          LCLIMY=PROPH2.LCLIM(IESP)
 180 :          IF (LCLIMY) THEN
 181 :             KRYIMP=PROPH2.KRCLIM(IESP)
 182 :             SEGACT KRYIMP
 183 :          ENDIF
 184 :          SEGACT NOMINC
 185 :          SEGACT KRCENT
 186 :          SEGACT KRFACE
 187 :          SEGACT MELEFL
 188 :          SEGACT MPSURF
 189 :          SEGACT MPNORM
 190 :          SEGACT MPVOLU
 191 :          MPDKC=PROPH2.MPDIFF(IESP)
 192 :          SEGACT MPDKC
 193 :          SEGACT MPROC
 194 :          SEGACT MPTEMC
 195 :          MPYKC=PROPH2.MPVALY(IESP)
 196 :          SEGACT MPYKC
 197 :          ICOGRY=PROPHY.CGRYK(IESP)
 198 :          SEGACT ICOGRY
 199 :          NSOUCH=ICOGRY.IMACHE(/1)
 200 :          DO 1 ISOUCH=1,NSOUCH
 201 :             MCOGRY=ICOGRY.IMACHE(ISOUCH)
 202 :             JCOGRY=ICOGRY.ICHAML(ISOUCH)
 203 :             SEGACT JCOGRY
 204 :             KDYKDX=JCOGRY.IELVAL(1)
 205 :             KDYKDY=JCOGRY.IELVAL(2)
 206 :             SEGDES JCOGRY
 207 :             SEGACT KDYKDX
 208 :             SEGACT KDYKDY
 209 :             SEGACT MCOGRY
 210 :             NELEM=MCOGRY.NUM(/2)
 211 :             NPTEL=MCOGRY.NUM(/1)
 212 :             NPP1=NPTEL-1
 213 :             NPP2=NPTEL-1
 214 :             NEL1=NELEM
 215 :             NEL2=NELEM
 216 :             IEL1=1
 217 :             IEL2=1
 218 :             SEGINI RETRHO
 219 :             IF ((IESP.GE.1).AND.(IESP.LE.NESP)) THEN
 220 :                SEGINI RETRYK
 221 :             ENDIF
 222 :             SEGINI CTGRY
 223 :             RETRHO.NOMPRI(1:4)=NOMINC.MOTS(1)
 224 :             RETRHO.NOMPRI(5:8)='    '
 225 :             RETRHO.NOMDUA(1:4)=NOMINC.MOTS(IDIM+2)
 226 :             RETRHO.NOMDUA(5:8)='    '
 227 :             IF ((IESP.GE.1).AND.(IESP.LE.NESP)) THEN
 228 :                RETRYK.NOMPRI(1:4)=NOMINC.MOTS(IDIM+2+IESP)
 229 :                RETRYK.NOMPRI(5:8)='    '
 230 :                RETRYK.NOMDUA(1:4)=NOMINC.MOTS(IDIM+2)
 231 :                RETRYK.NOMDUA(5:8)='    '
 232 :             ENDIF
 233 :             DO 12 IELEM=1,NELEM
 234 : *     Le premier point du support de ICOGRY est un point FACE
 235 :                NGFACE=MCOGRY.NUM(1,IELEM)
 236 :                NLFACE=KRFACE.LECT(NGFACE)
 237 :                IF (NLFACE.EQ.0) THEN
 238 :                   WRITE(IOIMP,*) 'Erreur de programmation n°1'
 239 :                   GOTO 9999
 240 :                ENDIF
 241 : *     On calcule la contribution à la matrice jacobienne IJACO de la face
 242 : *     NGFAC (points duaux     : centres à gauche et à droite de la face)
 243 : *           (points primaux   : une partie (bicoz conditions aux limites)
 244 : *            de ceux du stencil pour le calcul du gradient
 245 : *            à la face, ils doivent être des points centres)
 246 : *       Si le flux de chaleur sur la face est imposé par les conditions
 247 : *       aux limites, la contribution de la face à IJACO est nulle.
 248 :                NGCGAU=MELEFL.NUM(1,NLFACE)
 249 :                NGCDRO=MELEFL.NUM(3,NLFACE)
 250 :                NLCGAU=KRCENT.LECT(NGCGAU)
 251 :                NLCDRO=KRCENT.LECT(NGCDRO)
 252 :                LMUR=(NGCGAU.EQ.NGCDRO)
 253 : *     On distingue le cas où la face est un bord du maillage (mur)
 254 : *                  du cas où la face est interne au maillage
 255 :                IF (.NOT.LMUR) THEN
 256 :                   NPD=2
 257 :                   ICOORX = ((IDIM + 1) * (NGFACE - 1))+1
 258 :                   XF = MCOORD.XCOOR(ICOORX)
 259 :                   YF = MCOORD.XCOOR(ICOORX+1)
 260 :                   ICOORX = ((IDIM + 1) * (NGCGAU - 1))+1
 261 :                   XG = MCOORD.XCOOR(ICOORX)
 262 :                   YG = MCOORD.XCOOR(ICOORX+1)
 263 :                   XFMXG = XF - XG
 264 :                   YFMYG = YF - YG
 265 :                   DRG=SQRT((XFMXG*XFMXG)+(YFMYG*YFMYG))
 266 :                   ICOORX = ((IDIM + 1) * (NGCDRO - 1))+1
 267 :                   XD = MCOORD.XCOOR(ICOORX)
 268 :                   YD = MCOORD.XCOOR(ICOORX+1)
 269 :                   XFMXD = XF - XD
 270 :                   YFMYD = YF - YD
 271 :                   DRD=SQRT((XFMXD*XFMXD)+(YFMYD*YFMYD))
 272 :                   ALPHA=DRG/(DRG+DRD)
 273 :                   UMALPH= 1.0D0 - ALPHA
 274 :                ELSE 
 275 :                   NPD=1
 276 :                   ALPHA=0.0D0
 277 :                   UMALPH=1.0D0
 278 :                ENDIF
 279 :                IF (LCLIMR) THEN
 280 :                   NLFRI=KRRIMP.LECT(NGFACE)
 281 :                ELSE
 282 :                   NLFRI=0
 283 :                ENDIF
 284 :                IF (NLFRI.GT.0) THEN
 285 :                   RHOF=MPRIMP.VPOCHA(NLFRI,1)
 286 :                ELSE
 287 :                   RHOG = MPROC.VPOCHA(NLCGAU,1)
 288 :                   RHOD = MPROC.VPOCHA(NLCDRO,1)
 289 :                   RHOF = UMALPH * RHOG + ALPHA * RHOD
 290 :                ENDIF
 291 :                IF (LCLIMT) THEN
 292 :                   NLFTI=KRTIMP.LECT(NGFACE)
 293 :                ELSE
 294 :                   NLFTI=0
 295 :                ENDIF
 296 :                IF (NLFTI.GT.0) THEN
 297 :                   TEMF=MPTIMP.VPOCHA(NLFTI,1)
 298 :                ELSE
 299 :                   TEMG = MPTEMC.VPOCHA(NLCGAU,1)
 300 :                   TEMD = MPTEMC.VPOCHA(NLCDRO,1)
 301 :                   TEMF = UMALPH * TEMG + ALPHA * TEMD
 302 :                ENDIF
 303 :                DKG  = MPDKC.VPOCHA(NLCGAU,1)
 304 :                DKD  = MPDKC.VPOCHA(NLCDRO,1)
 305 :                DKF  = UMALPH * DKG + ALPHA * DKD
 306 :                DNG  = MPDNC.VPOCHA(NLCGAU,1)
 307 :                DND  = MPDNC.VPOCHA(NLCDRO,1)
 308 :                DNF  = UMALPH * DNG + ALPHA * DND
 309 :                NPP=NPTEL-1
 310 : *     IPD=1 : point à gauche du point NGFACE
 311 : *     IPD=2 : point à droite du point NGFACE
 312 :                DO 122 IPD=1,NPD
 313 :                   NPDUAL=MELEFL.NUM((2*IPD)-1,NLFACE)
 314 :                   IF (.NOT.LMUR) THEN
 315 :                      CTGRY.POIDU2(IPD,IEL2)=NPDUAL
 316 :                   ELSE
 317 :                      CTGRY.POIDU1(IPD,IEL1)=NPDUAL
 318 :                   ENDIF
 319 :                   NLCEND=KRCENT.LECT(NPDUAL)
 320 :                   IF (NLCEND.EQ.0) THEN
 321 :                      WRITE(IOIMP,*) 'Erreur grave n°1'
 322 :                      GOTO 9999
 323 :                   ENDIF
 324 :                   DO 124 IPP=1,NPP
 325 :                      NPPRIM=MCOGRY.NUM(IPP+1,IELEM)
 326 :                      LCTRB2=.TRUE.
 327 :                      IF (LCLIMY) THEN
 328 :                         NLCLY=KRYIMP.LECT(NPPRIM)
 329 :                         IF (NLCLY.NE.0) THEN
 330 :                            LCTRB2=.FALSE.
 331 :                         ENDIF
 332 :                      ENDIF
 333 :                      IF (.NOT.LCTRB2) THEN
 334 : *     Lorsque une contribution est nulle, on fixe artificiellement le
 335 : *     point primal égal au point dual.
 336 :                         IF (.NOT.LMUR) THEN
 337 :                            CTGRY.POIPR2(IPP,IEL2)=NPDUAL
 338 :                            RETRHO.VALMA2(IPD,IPP,IEL2)=0.D0
 339 :                            IF ((IESP.GE.1).AND.(IESP.LE.NESP)) THEN
 340 :                               RETRYK.VALMA2(IPD,IPP,IEL2)=0.D0
 341 :                            ENDIF
 342 :                         ELSE
 343 :                            CTGRY.POIPR1(IPP,IEL1)=NPDUAL
 344 :                            RETRHO.VALMA1(IPD,IPP,IEL1)=0.D0
 345 :                            IF ((IESP.GE.1).AND.(IESP.LE.NESP)) THEN
 346 :                               RETRYK.VALMA1(IPD,IPP,IEL1)=0.D0
 347 :                            ENDIF
 348 :                         ENDIF
 349 :                      ELSE
 350 : *     Les contributions valent :
 351 : *     (d Res_{\rho Yk})_d / (d var)_p =
 352 : *     +/-1 (normale sortante, rentrante) (1/V_d) * (S_f) * \rho_f * Dk_f
 353 : *     * [ ((n_x * \beta_x) +(n_y * \beta_y)) *
 354 : *         ((dYk)_p / (d var)_p)]
 355 : *     avec : 
 356 : *          (dYk)_p / (d \rho)_p = - Yk_p / \rho_p
 357 : *          (dYk)_p / (d \rho Yk)_p =   1 / \rho_p
 358 : *     \beta_x : coefficients pour le calcul de dYk/dx
 359 : *     \beta_y : coefficients pour le calcul de dYk/dy
 360 : *
 361 :                         NLCENP=KRCENT.LECT(NPPRIM)
 362 :                         IF (NLCENP.EQ.0) THEN
 363 :                            WRITE(IOIMP,*) 'Erreur grave n°2'
 364 :                            GOTO 9999
 365 :                         ENDIF
 366 : *       normale sortante pour IPD=1, rentrante pour IPD=2
 367 :                         SIGNOR=(-1.D0)**(IPD+1)
 368 :                         VOLUEL=MPVOLU.VPOCHA(NLCEND,1)
 369 :                         SURFFA=MPSURF.VPOCHA(NLFACE,1)
 370 :                         CNX   =MPNORM.VPOCHA(NLFACE,1)
 371 :                         CNY   =MPNORM.VPOCHA(NLFACE,2)
 372 :                         BETAX =KDYKDX.VELCHE(IPP+1,IELEM)
 373 :                         BETAY =KDYKDY.VELCHE(IPP+1,IELEM)
 374 :                         RHOP  =MPROC.VPOCHA(NLCENP,1)
 375 :                         YKP   =MPYKC.VPOCHA(NLCENP,1)
 376 : *                        YKP   =MPYKC.VPOCHA(NLCEND,1)
 377 :                         CPK=PROPHY.CV(IESP)+PROPHY.R(IESP)
 378 :                         CPN=PROPHY.CV(NESP+1)+PROPHY.R(NESP+1)
 379 :                         HKF=(CPK*TEMF)+PROPHY.H0K(IESP)
 380 :                         HNF=(CPN*TEMF)+PROPHY.H0K(NESP+1)
 381 :                         FACTOR=SIGNOR*(1.D0/VOLUEL)*SURFFA*RHOF*
 382 :      $                       ((HKF*DKF)-(HNF*DNF))
 383 :      $                       *((CNX*BETAX)+(CNY*BETAY))
 384 :                         DYKDRO=-YKP/RHOP
 385 :                         DYKDRY=1.D0/RHOP
 386 : C                        IF((NGCGAU.EQ.30).AND.(NGCDRO.EQ.30)) THEN
 387 : C                           WRITE(IOIMP,*) 'NGFACE=',NGFACE
 388 : C                           WRITE(IOIMP,*) 'NGCGAU=',NGCGAU
 389 : C                           WRITE(IOIMP,*) 'NGCDRO=',NGCDRO
 390 : C                           WRITE(IOIMP,*) 'IESP=',IESP
 391 : C                           WRITE(IOIMP,*) 'JACO(RETRYK)=',
 392 : C     $                          (FACTOR*DYKDRY) 
 393 : C                        ENDIF
 394 :                        IF (.NOT.LMUR) THEN
 395 :                            CTGRY.POIPR2(IPP,IEL2)=NPPRIM
 396 :                            RETRHO.VALMA2(IPD,IPP,IEL2)=FACTOR*DYKDRO
 397 :                            IF ((IESP.GE.1).AND.(IESP.LE.NESP)) THEN
 398 :                               RETRYK.VALMA2(IPD,IPP,IEL2)=FACTOR*DYKDRY
 399 :                            ENDIF
 400 :                         ELSE
 401 :                            CTGRY.POIPR1(IPP,IEL1)=NPPRIM
 402 :                            RETRHO.VALMA1(IPD,IPP,IEL1)=FACTOR*DYKDRO
 403 :                            IF ((IESP.GE.1).AND.(IESP.LE.NESP)) THEN
 404 :                               RETRYK.VALMA1(IPD,IPP,IEL1)=FACTOR*DYKDRY
 405 :                            ENDIF
 406 :                         ENDIF
 407 :                      ENDIF
 408 :  124              CONTINUE
 409 :  122           CONTINUE
 410 :                IF (.NOT.LMUR) THEN
 411 :                   IEL2=IEL2+1
 412 :                ELSE
 413 :                   IEL1=IEL1+1
 414 :                ENDIF
 415 :  12         CONTINUE
 416 :             NPP1=NPTEL-1
 417 :             NPP2=NPTEL-1
 418 :             NEL1=IEL1-1
 419 :             NEL2=IEL2-1
 420 :             SEGADJ RETRHO
 421 :             IF ((IESP.GE.1).AND.(IESP.LE.NESP)) THEN
 422 :                SEGADJ RETRYK
 423 :             ENDIF
 424 :             SEGADJ CTGRY
 425 :             CTGRY.LMATSI(**)=RETRHO
 426 :             IF ((IESP.GE.1).AND.(IESP.LE.NESP)) THEN
 427 :                CTGRY.LMATSI(**)=RETRYK
 428 :             ENDIF
 429 : * On accumule les matrices résultantes dans IJACO
 429 :             CALL AJMTK(CTGRY,IJACO,IMPR,IRET)
 430 :             IF (IRET.NE.0) GOTO 9999
 431 :             SEGSUP RETRHO
 432 :             IF ((IESP.GE.1).AND.(IESP.LE.NESP)) THEN
 433 :                SEGSUP RETRYK
 434 :             ENDIF
 435 :             SEGSUP CTGRY
 436 : *
 437 :             SEGDES MCOGRY
 438 :             SEGDES KDYKDY
 439 :             SEGDES KDYKDX
 440 :  1       CONTINUE
 441 :          SEGDES ICOGRY
 442 :          SEGDES MPYKC
 443 :          SEGDES MPTEMC
 444 :          SEGDES MPROC
 445 :          SEGDES MPDKC
 446 :          SEGDES MPVOLU
 447 :          SEGDES MPNORM
 448 :          SEGDES MPSURF
 449 :          SEGDES MELEFL
 450 :          SEGDES KRFACE
 451 :          SEGDES KRCENT
 452 :          SEGDES NOMINC
 453 :          IF (LCLIMY) THEN
 454 :             SEGDES KRYIMP
 455 :          ENDIF
 456 :          IF (LCLIMT) THEN
 457 :             SEGDES KRTIMP
 458 :             SEGDES MPTIMP
 459 :          ENDIF
 460 :          IF (LCLIMR) THEN
 461 :             SEGDES KRRIMP
 462 :             SEGDES MPRIMP
 463 :          ENDIF
 464 :       ENDDO
 465 :       SEGDES MPDNC
 466 :       SEGDES PROPH2
 467 :       SEGDES PROPHY
 468 : *
 469 : * Normal termination
 470 : *
 471 :       IRET=0
 472 :       RETURN
 473 : *
 474 : * Format handling
 475 : *
 476 : *
 477 : * Error handling
 478 : *
 479 :  9999 CONTINUE
 480 :       IRET=1
 481 :       WRITE(IOIMP,*) 'An error was detected in subroutine zlap1c'
 482 :       RETURN
 483 : *
 484 : * End of subroutine ZLAP1C
 485 : *
 486 :       END
 487 : 
 488 :  
 489 :  
 490 :  
 491 :  
 492 :  
 493 :  
 494 :  

© Cast3M 2003 - All rights reserved.
Disclaimer