Download rlexce.eso

Back to the list

   1 : C RLEXCE    SOURCE    CHAT      05/01/13    03:02:22     5004           
   2 :       SUBROUTINE RLEXCE(MELEME,MELCEN,MELFAC,INORM,ICHCL,MLECOE)
   3 : C************************************************************************
   4 : C     
   5 : C PROJET            :  CASTEM 2000
   6 : C     
   7 : C NOM               :  RLEXCE
   8 : C     
   9 : C DESCRIPTION       :  Appelle par GRADGE
  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     This subroutine computes the coefficients which allow to perform
  18 : C     a linear exact reconstruction of each 'CENTRE' value.
  19 : C     Indeed, given the i-th centre (NC=MELEME.NUM(NBNN,i)), given the list 
  20 : C     of its neighbors MELEME.NUM(j,i),j=1,NBNN-1, 
  21 : C     we have to compute the matrix of  coefficients a(i,j) such that
  22 : C     
  23 : C     VAL(MELEME.NUM(NBNN,i)) = \sum_{neig1} a(i,neig1) * VAL(neig1)  
  24 : C
  25 : C     where neig1 is a 'CENTRE' point or a 'wall boundary condition'
  26 : C     point.
  27 : C
  28 : C     To compute these coefficients, we impose that VAL is linear with
  29 : C     respect to the coordinates of NC and its neighbor. Then, since
  30 : C     there are less unknowns than equations, we use a least square
  31 : C     method. We impose that
  32 : C     
  33 : C     A + B (x_{neig} - x_NC) + C (y_{neig} - y_NC) + D (z_{neig} - z_NC)
  34 : C     =  VAL(neig)
  35 : C
  36 : C     To determine A, B, C, D we have to solve
  37 : C
  38 : C     MATA . tran(A, B, C, D) = tran(VAL(1), VAL(2), ... , VALNOR(j) /
  39 : C                           (r_{j} - r_NC)
  40 : C
  41 : C     with MATA(1,*) = (1,x_1-x_NC,y_1-y_NC,z_1-z_NC)
  42 : C          MATA(2,*) = (1,x_2-x_NC,y_2-y_NC,z_2-z_NC)
  43 : C          ...
  44 : C
  45 : C    To determine a(i,neig) we have to solve a linear system (for each
  46 : C    neig). If the neighbor is a 'CENTRE' point or a 'wall boundary 
  47 : C    condition' point we solve
  48 : C
  49 : C    MATA . tran(a(i,neig), b(i,neig), c(i,neig), d(i,neig)) = e_{neig}
  50 : C
  51 : C    with e_{neig} = tran (0,0,...,0,1,0,...) (1 in the neig position)
  52 : C
  53 : C    N.B. Concerning the neighbor, two different cases are taken into
  54 : C         account.
  55 : C    1) Reflecting boundary conditions:
  56 : C       The neighbor does not belong to the geometrical support of 
  57 : C       ICHCL -> It is a wall point
  58 : C       Then the reconstruction is performed on a virtual point,
  59 : C       the symmetric point of the centre with respect to the wall
  60 : C    2) Non_reflecting boundary conditions:
  61 : C       The neighbor belongs to the geometrical support of ICHCL
  62 : C       -> The reconstruction is performed on such FACE point
  63 : C
  64 : C**** Inputs:
  65 : C
  66 : C     MELEME = the MELEME which contains the stencil of the gradient
  67 : C              molecule
  68 : C     MELCEN = the 'CENTRE' meleme
  69 : C     MELFAC = the 'FACE' meleme
  70 : C     INORM  = the CHAMPOINT containing the face normals
  71 : C     ICHCL  = the CHAMPOINT containing the non-reflecting boundary 
  72 : C              conditions
  73 : C        
  74 : C**** Output:
  75 : C
  76 : C     MLECOE =  list of integers.
  77 : C
  78 : C               MLECOE.LECT(i) points to the MLREEL MATCOE which
  79 : C               contain the a(i,neig)
  80 : C
  81 : C***********************************************************************
  82 : C
  83 : C Modified the 25-th of february to take into account the 'MODE' 'AXIS'
  84 : C
  85 : C**** Variables de COOPTIO
  86 : C
  87 : C      INTEGER IPLLB, IERPER, IERMAX, IERR, INTERR
  88 : C     &        ,IOTER,   IOLEC,  IOIMP,     IOCAR,  IOACQ
  89 : C     &        ,IOPER,   IOSGB,  IOGRA,     IOSAU,  IORES
  90 : C     &        ,IECHO,   IIMPI,  IOSPI
  91 : C     &        ,IDIM
  92 : CC     &        ,MCOORD      
  93 : C     &        ,IFOMOD, NIFOUR, IFOUR, NSDPGE, IONIVE
  94 : C     &        ,NGMAXY, IZROSF, ISOTYP, IOSCR,LTEXLU
  95 : C     &        ,NORINC,NORVAL,NORIND,NORVAD
  96 : C     &        ,NUCROU, IPSAUV, IFICLE, IPREFI, IREFOR, ISAFOR
  97 : CC 
  98 :       IMPLICIT INTEGER(I-N)
  99 :       INTEGER INORM, ICHCL, IGEOM, NSOU, JG, NTCEN, NVMAX, NVMIN
 100 :      &     ,NBNN, NBELEM, NGV
 101 :      &     , NGC, IPCOOR, NLV, NLV1, NLF, IERSVD, IERR0
 102 :      &     ,ISOUS , ICEN, IELEM, IVOI, I1,  I2, I3, I4, NAXI
 103 :       REAL*8 XC ,YC, ZC, XV, YV, ZV, DX, DY, DZ, ERRTOL, SMAX, SMIN
 104 :      &     ,RNX, RNY, RNZ, ALPHA
 105 :       PARAMETER(ERRTOL=1.0D-16)
 106 :       CHARACTER*8 TYPE
 107 :       LOGICAL LOGSVD, LOGAXI
 108 : -INC CCOPTIO
 109 : -INC SMCOORD
 110 : -INC SMELEME
 111 : -INC SMLREEL
 112 : -INC SMLENTI
 113 : -INC SMCHPOI
 114 : C
 115 :       INTEGER N1,N2
 116 :       SEGMENT MATRIX
 117 :       REAL*8 MAT(N1,N2)
 118 :       ENDSEGMENT
 119 : C
 120 :       POINTEUR MELFAC.MELEME, MLEFAC.MLENTI, MLEBC.MLENTI, MPNORM.MPOVAL
 121 :      &     ,MLESOU.MLENTI, MELCEN.MELEME ,MLECEN.MLENTI
 122 :      &     ,MLECOE.MLENTI, MATCOE.MATRIX
 123 :      &     ,MATA.MATRIX,MATU.MATRIX,MATV.MATRIX,MLRB.MLREEL
 124 :      &     ,MLRSIG.MLREEL,MLRTRA.MLREEL,MTAA.MATRIX, MINTAA.MATRIX
 125 :      &     ,MLRIN1.MLREEL,MLRIN2.MLREEL
 126 :      &     ,MLRIN3.MLREEL
 127 : C
 128 : C**** Axis-symmetrical case
 129 : C
 130 :       IF((IFOMOD .EQ. 0) .AND. (IDIM .EQ. 2))THEN
 131 :          LOGAXI=.TRUE.
 132 :          NAXI=2
 133 :       ELSE
 134 :          NAXI=0
 135 :          LOGAXI=.FALSE.
 136 :       ENDIF
 137 : C
 138 : C**** We create the MLENTI for the centers
 139 : C
 139 :       CALL KRIPAD(MELCEN,MLECEN)
 140 :       IF(IERR .NE. 0)GOTO 9999
 141 : C     En KRIPAD
 142 : C     SEGINI MLECEN
 143 : C
 144 : C**** We create the MLENTI for the faces
 145 : C
 145 :       CALL KRIPAD(MELFAC,MLEFAC)
 146 :       IF(IERR .NE. 0)GOTO 9999
 147 : C     En KRIPAD
 148 : C     SEGINI MLEFAC
 149 : C
 150 : C**** We create the MLENTI for the BC
 151 : C
 152 :       IF(ICHCL.NE.0)THEN
 152 :          CALL LICHT(ICHCL,MPOVAL,TYPE,IGEOM)
 153 : C        In LICHT
 154 : C        SEGACT MPOVAL*MOD
 155 :          SEGDES MPOVAL
 156 :       ELSE
 157 :          IGEOM=0
 158 :       ENDIF
 158 :       CALL KRIPAD(IGEOM,MLEBC)
 159 :       IF(IERR .NE. 0)GOTO 9999
 160 : C     SEGINI MLEBC
 161 : C
 162 : C**** Le MPOVAL des normales
 163 : C
 163 :       CALL LICHT(INORM,MPNORM,TYPE,IGEOM)
 164 : C     SEGACT MPNORM
 165 : C
 166 : C**** We recover the elemenary mesh of MELEME
 167 : C     We compute the number of maximum number of neighbors
 168 : C     We compute the number of centers
 169 : C
 170 :       SEGACT MELEME
 171 :       NSOU=MAX(MELEME.LISOUS(/1),1)
 172 :       JG=NSOU
 173 :       SEGINI MLESOU
 174 :       IF (NSOU.EQ.1)THEN
 175 :          MLESOU.LECT(1)=MELEME
 176 :          NBNN=MELEME.NUM(/1)
 177 :          NTCEN=MELEME.NUM(/2)
 178 :          NVMAX=NBNN
 179 :       ELSE
 180 :          NVMAX=0
 181 :          NTCEN=0
 182 :          DO ISOUS=1,NSOU,1
 183 :             IPT1=MELEME.LISOUS(ISOUS)
 184 :             MLESOU.LECT(ISOUS)=IPT1
 185 :             SEGACT IPT1
 186 :             NBNN=IPT1.NUM(/1)
 187 :             NVMAX=MAX(NVMAX,NBNN)
 188 :             NTCEN=NTCEN+IPT1.NUM(/2)
 189 :          ENDDO
 190 :       ENDIF
 191 :       NVMAX=NVMAX+NAXI
 192 : C
 193 : C**** The output
 194 : C
 195 :       JG=NTCEN
 196 :       SEGINI MLECOE
 197 : C
 198 : C     MATA = matrix to "pseudoinvert" (NVMAX,IDIM+1)
 199 : C     MATU = matrix of the singular right eigenvectors of MATA 
 200 : C            (NVMAX,IDIM+1)
 201 : C     MATV = matrix of the singular left eigenvectors of MATA 
 202 : C            (IDIM+1,IDIM+1)
 203 : C            But in invsvd.eso, MATV dimensions are NVMAX,IDIM+1
 204 : C     MLRSIG = singular values of MATA (IDIM+1)
 205 : C     MLRB   = vector (NVMAX)
 206 : C              MLRB.PROG(j) = 1 
 207 : C
 208 : C     N.B. MATA = MATU MATSIG t(MATV)
 209 : C          If MATA is non singular,
 210 : C          inv(MATA) = MATV inv(MATSIG) t(MATU)
 211 : C
 212 : C     MLRTRA temporary vector of invsvd.eso
 213 : C     NVMIN = IDIM + 1 (the most little dimension of the matrices)
 214 : C
 215 :       N1=NVMAX
 216 :       N2=IDIM+1
 217 :       SEGINI MATA
 218 :       SEGINI MATU
 219 :       SEGINI MATV
 220 :       JG=NVMAX
 221 :       SEGINI MLRB
 222 :       JG=IDIM+1
 223 :       SEGINI MLRSIG
 224 :       SEGINI MLRTRA
 225 :       NVMIN=N2
 226 : C
 227 : C     MTAA : [t(MATA).MATA]
 228 : C     MINTAA : [inve(t(MATA) MATA)]
 229 : C     MLRIN1,2,3 : "temporary vectors"
 230 : C
 231 :       N1=NVMIN
 232 :       N2=NVMIN
 233 :       SEGINI MTAA
 234 :       SEGINI MINTAA
 235 :       JG=NVMIN
 236 :       SEGINI MLRIN1
 237 :       SEGINI MLRIN2
 238 :       SEGINI MLRIN3
 239 : C
 240 : C**** Loop on the sommet to compute the coefficient
 241 : C
 242 :       ICEN=0
 243 :       DO ISOUS=1,NSOU,1
 244 :          IPT1=MLESOU.LECT(ISOUS)
 245 :          NBNN=IPT1.NUM(/1)
 246 :          NBELEM=IPT1.NUM(/2)
 247 :          DO IELEM=1,NBELEM,1
 248 : C
 249 :             NGC=IPT1.NUM(NBNN,IELEM)
 250 :             IPCOOR=((NGC-1)*(IDIM+1))+1
 251 :             XC=MCOORD.XCOOR(IPCOOR)
 252 :             YC=MCOORD.XCOOR(IPCOOR+1)
 253 :             IF(IDIM.EQ.3) ZC=MCOORD.XCOOR(IPCOOR+2)
 254 : C
 255 : C********** We create the matrix of coefficients.
 256 : C
 257 :             N2=NBNN+NAXI
 258 :             N1=NVMIN
 259 :             ICEN=ICEN+1
 260 :             SEGINI MATCOE
 261 :             MLECOE.LECT(ICEN)=MATCOE
 262 : C
 263 : C********** Loop involving the neighbors (and the centre itself)
 264 : C           We create the matrix to "pseudoinvert"
 265 : C
 266 :             DO IVOI=1,NBNN,1
 267 :                NGV=IPT1.NUM(IVOI,IELEM)
 268 :                NLV=MLECEN.LECT(NGV)
 269 :                NLV1=MLEBC.LECT(NGV)
 270 :                IF((NLV .NE. 0) .OR. (NLV1 .NE. 0))THEN
 271 : C
 272 : C**************** NGV is a 'centre' point or a ICHCL point
 273 : C
 274 :                   IPCOOR=((NGV-1)*(IDIM+1))+1
 275 :                   XV=MCOORD.XCOOR(IPCOOR)
 276 :                   YV=MCOORD.XCOOR(IPCOOR+1)
 277 :                   MATA.MAT(IVOI,1)=1
 278 :                   MATA.MAT(IVOI,2)=XV
 279 :                   MATA.MAT(IVOI,3)=YV
 280 :                   IF(IDIM.EQ.3)THEN
 281 :                      ZV=MCOORD.XCOOR(IPCOOR+2)
 282 :                      MATA.MAT(IVOI,4)=ZV
 283 :                   ENDIF
 284 :                ELSE
 285 : C
 286 : C**************** Reflecting BC reconstruction
 287 : C
 288 :                   NLF=MLEFAC.LECT(NGV)
 289 :                   RNX=MPNORM.VPOCHA(NLF,1)
 290 :                   RNY=MPNORM.VPOCHA(NLF,2)
 291 :                   IPCOOR=((NGV-1)*(IDIM+1))+1
 292 :                   XV=MCOORD.XCOOR(IPCOOR)
 293 :                   YV=MCOORD.XCOOR(IPCOOR+1)
 294 :                   ALPHA=(XV-XC)*RNX+(YV-YC)*RNY
 295 :                   DX=ALPHA*2.0D0*RNX
 296 :                   DY=ALPHA*2.0D0*RNY
 297 :                   MATA.MAT(IVOI,1)=1
 298 :                   MATA.MAT(IVOI,2)=XC+DX
 299 :                   MATA.MAT(IVOI,3)=YC+DY
 300 :                   IF(IDIM.EQ.3)THEN
 301 :                      RNZ=MPNORM.VPOCHA(NLF,3)
 302 :                      ZV=MCOORD.XCOOR(IPCOOR+2)
 303 :                      ALPHA=ALPHA+(ZV-ZC)*RNZ
 304 :                      DZ=ALPHA*2.0D0*RNZ
 305 :                      MATA.MAT(IVOI,4)=ZC+DZ
 306 :                   ENDIF
 307 :                ENDIF
 308 :                MLRB.PROG(IVOI)=1.0D0
 309 :             ENDDO
 310 : C
 311 :             DO IVOI=NBNN+1,NBNN+NAXI,1
 312 :                MATA.MAT(IVOI,1)=1
 313 :                MATA.MAT(IVOI,2)=XC
 314 :                MATA.MAT(IVOI,3)=YC
 315 :                MLRB.PROG(IVOI)=1.0D0
 316 :             ENDDO
 317 : C
 318 : CC
 319 : CC           TEST
 320 : CC
 321 : C            do ivoi=1,nbnn,1
 322 : C               write(*,*) 'ngv =', ipt1.num(ivoi,ielem)
 323 : C               write(*,*)
 324 : C     &              'mata.mat(',ivoi,')=',(mata.mat(ivoi,i1),i1=1,nvmin
 325 : C     $              ,1)
 326 : C               write(*,*) 'b(',ivoi,')=',mlrb.prog(ivoi)
 327 : C            enddo
 328 : C
 329 : C
 330 : C********** Now we have to invert this matrix
 331 : C
 332 :             LOGSVD=.TRUE.
 332 :             CALL INVSVD( NVMAX, NBNN+NAXI, NVMIN, MATA.MAT,
 333 :      &           MLRSIG.PROG,.TRUE.,MATU.MAT,.TRUE.,MATV.MAT,IERSVD,
 334 :      &           MLRTRA.PROG)
 335 :             IF(IERSVD.NE.0)THEN
 336 : C     
 337 : C************* SVD decomposition of the matrix does not work
 338 : C
 339 :                LOGSVD=.FALSE.
 340 :             ELSE
 341 : C
 342 : C************  We check the condition number of MATA
 343 : C
 344 :                SMAX=0.0D0
 345 :                DO I1=1,NVMIN,1
 346 :                   SMAX=MAX(SMAX,MLRSIG.PROG(I1))
 347 :                ENDDO
 348 :                SMIN=SMAX
 349 :                DO I1=1,NVMIN,1
 350 :                   SMIN=MIN(SMIN,MLRSIG.PROG(I1))
 351 :                ENDDO
 352 :                IF((SMIN/SMAX) .LT. ERRTOL)THEN
 353 :                   LOGSVD=.FALSE.
 354 :                ENDIF
 355 :             ENDIF
 356 : C
 357 : C           TEST
 358 : C            write(*,*) 'LOGSVD=.FALSE.'
 359 : C            LOGSVD=.FALSE.
 360 : C
 361 :             IF(LOGSVD)THEN
 362 : C
 363 : C********** INVSVD worked
 364 : C
 365 : C           MATA = MATU MATSIG t(MATV)
 366 : C           inv(MATA) = MATV inv(MATSIG) t(MATU)
 367 : C
 368 :                DO I4=1,NVMIN,1
 369 :                   DO IVOI=1,NBNN+NAXI,1
 370 :                      DO I2=1,IDIM+1,1
 371 : C                       I2=1 is the only coefficient we are not interested
 372 : C                       in. But we computed it to verify that
 373 : C                       sum_ivoi MATCOE.MAT(ivoi,1) = 1
 374 :                         MATCOE.MAT(I2,IVOI)=MATCOE.MAT(I2,IVOI)+
 375 :      &                       (MATV.MAT(I2,I4)*MATU.MAT(IVOI,I4)
 376 :      &                       /MLRSIG.PROG(I4))
 377 :                      ENDDO
 378 :                   ENDDO
 379 :                ENDDO
 380 :             ELSE
 381 :                WRITE (IOIMP,*) 'rlexce.eso'
 382 : C              22 0
 383 : C              Opération malvenue. Résultat douteux
 383 :                CALL ERREUR(22)
 384 : C
 385 : C************* INVSVD does not worked
 386 : C              For each neighbor k we have to compute the solution
 387 : C              of 
 388 : C
 389 : C              t(MATA) MATA x = t(MATA) * b
 390 : C
 391 : C              where b= \sum_l e_l \delta(k,l) = e_k
 392 : C
 393 : C              To do that, we compute 
 394 : C
 395 : C              X_0 = [inve(t(MATA) MATA)] [t(MATA) * b]
 396 : C
 397 : C              X_1 = X_0 + [inve(t(MATA) MATA)] [t(MATA) * b -
 398 : C                  [t(MATA) MATA] X_0]
 399 : C
 400 : C     
 401 : C**********   We compute [t(MATA) MATA]
 402 : C             We store it in the upper triangle of MTAA(NVMIN,NVMIN)
 403 : C
 404 :                DO I1=1,NVMIN,1
 405 :                   DO I2=I1,NVMIN,1
 406 :                      MTAA.MAT(I1,I2)=0.0D0
 407 :                   ENDDO
 408 :                ENDDO
 409 : C
 410 :                DO I1=1,NVMIN,1
 411 :                   DO I2=I1,NVMIN,1
 412 :                      DO I3=1,NBNN+NAXI,1
 413 :                         MTAA.MAT(I1,I2)=MTAA.MAT(I1,I2)+
 414 :      &                       (MATA.MAT(I3,I1)*MATA.MAT(I3,I2))
 415 :                      ENDDO
 416 :                   ENDDO
 417 :                ENDDO
 418 : C     
 419 : C************* We compute [inve(t(MATA) MATA)]
 420 : C              CHOLDC stores it in the upper trianle of MINTAA(NVMIN,NVMIN)
 421 : C
 421 :                CALL CHOLDC(NVMIN,NVMIN,MTAA.MAT,MLRIN1.PROG,MINTAA.MAT,
 422 :      &              MLRIN2.PROG,IERR0)
 423 :                IF(IERR0.NE.0)THEN
 424 :                   WRITE(IOIMP,*) 'subroutine rlexce.eso.'
 425 : C                 26 2
 426 : C                 Tache impossible. Probablement données erronées
 426 :                   CALL ERREUR(26)
 427 :                   GOTO 9999
 428 :                ENDIF
 429 : C
 430 : C************* We complete MTAA and MINTAA
 431 : C
 432 :                DO I1=1,NVMIN,1
 433 :                   DO I2=I1+1,NVMIN,1
 434 :                      MINTAA.MAT(I2,I1)=MINTAA.MAT(I1,I2)
 435 :                      MTAA.MAT(I2,I1)=MTAA.MAT(I1,I2)
 436 :                   ENDDO
 437 :                ENDDO
 438 : C            
 439 :                DO IVOI=1,NBNN+NAXI,1
 440 : C
 441 : C************* We compute [t(MATA) . b]  and we store it in MLRIN1.PROG
 442 : C
 443 :                   DO I1=1,NVMIN,1
 444 :                      MLRIN1.PROG(I1)=MATA.MAT(IVOI,I1)*MLRB.PROG(IVOI)
 445 :                      MLRIN2.PROG(I1)=0.0D0
 446 :                      MLRIN3.PROG(I1)=0.0D0
 447 :                   ENDDO
 448 : C
 449 : C**************** X_0 = [inve(t(MATA) MATA)] [t(MATA) * b]
 450 : C                 X_0(i1) into MLRIN2.PROG(I1)
 451 : C     
 452 :                   DO I2=1,NVMIN,1
 453 :                      DO I1=1,NVMIN,1
 454 :                         MLRIN2.PROG(I1)=MLRIN2.PROG(I1)+
 455 :      &                       (MINTAA.MAT(I1,I2)*MLRIN1.PROG(I2))
 456 :                      ENDDO
 457 :                   ENDDO
 458 : C
 459 : C*************** X_1 = X_0 + [inve(t(MATA) MATA)] [t(MATA) * b -
 460 : C                  [t(MATA) MATA] X_0]
 461 : C
 462 : C                [t(MATA) MATA] X_0 into MLRIN3.PROG
 463 : C     
 464 :                   DO I2=1,NVMIN,1
 465 :                      DO I1=1,NVMIN,1
 466 :                         MLRIN3.PROG(I1)=MLRIN3.PROG(I1)+
 467 :      &                       (MTAA.MAT(I1,I2)*MLRIN2.PROG(I2))
 468 :                      ENDDO
 469 :                   ENDDO
 470 : C
 471 : C**************** Now we have
 472 : C                 [t(MATA) . b]  in MLRIN1.PROG
 473 : C                 X_0(i1)        in MLRIN2.PROG(I1)
 474 : C                 [t(MATA) MATA] X_0 in MLRIN3.PROG
 475 : C
 476 : C                 X_1(i1) in MLRCOE.MAT(i1,IVOI)
 477 : C
 478 :                   DO I1=1,IDIM+1,1
 479 : C                    The only unuseful one is I1=1
 480 :                      DO I2=1,NVMIN,1
 481 :                         MATCOE.MAT(I1,IVOI)=MATCOE.MAT(I1,IVOI)+
 482 :      &                       (MINTAA.MAT(I1,I2)*
 483 :      &                       (MLRIN1.PROG(I2)-MLRIN3.PROG(I2)))
 484 :                      ENDDO
 485 :                      MATCOE.MAT(I1,IVOI)=MATCOE.MAT(I1,IVOI)+
 486 :      &                    MLRIN2.PROG(I1)
 487 :                   ENDDO
 488 :                ENDDO
 489 :             ENDIF
 490 : C
 491 : C           LOGAXI -> We eliminate the false neighbors
 492 : C
 493 :             IF(LOGAXI)THEN
 494 :                DO I1=1,NVMIN,1
 495 :                   MATCOE.MAT(I1,NBNN)=MATCOE.MAT(I1,NBNN)+
 496 :      &                 MATCOE.MAT(I1,NBNN+1)+MATCOE.MAT(I1,NBNN+2)
 497 :                ENDDO
 498 :                N2=NBNN
 499 :                N1=NVMIN
 500 :                SEGADJ MATCOE
 501 :             ENDIF
 502 : CC
 503 : CC           TEST
 504 : C            write(*,*) 'ngc =', NGC
 505 : C            write(*,*) 'invide',LOGSVD
 506 : C            write(*,*) 'nvois =',(ipt1.num(ivoi,ielem),ivoi=1,nbnn,1)
 507 : C            write(*,*) 'coeff(1) =',(matcoe.mat(1,ivoi),ivoi=1,nbnn,1)
 508 : C            write(*,*) 'coeff(2) =',(matcoe.mat(2,ivoi),ivoi=1,nbnn,1)
 509 : C            write(*,*) 'coeff(3) =',(matcoe.mat(3,ivoi),ivoi=1,nbnn,1)
 510 : C            if(idim.eq.3) write(*,*) 'coeff(4)=',
 511 : C     &           (matcoe.mat(4,ivoi),ivoi=1,nbnn,1) 
 512 : C            xv=0.0D0
 513 : C            yv=0.0D0
 514 : C            zv=0.0D0
 515 : C            xc=0.0D0
 516 : C            do ivoi=1,nbnn,1
 517 : C               xv=xv+matcoe.mat(1,ivoi)
 518 : C               yv=yv+matcoe.mat(2,ivoi)
 519 : C               zv=zv+matcoe.mat(3,ivoi)
 520 : C               if(idim.eq.3) xc=xc+matcoe.mat(4,ivoi)
 521 : C            enddo
 522 : C            write(*,*) 'sum_1=',xv
 523 : C            write(*,*) 'sum_2=',yv
 524 : C            write(*,*) 'sum_3=',zv
 525 : C            if(idim.eq.3) write(*,*) 'sum_4=',xc
 526 : CC
 527 :             SEGDES MATCOE
 528 :          ENDDO
 529 :          SEGDES IPT1
 530 :       ENDDO
 531 : C     
 532 :       SEGSUP MLECEN
 533 :       SEGSUP MLEFAC
 534 :       SEGSUP MLEBC
 535 : C
 536 :       SEGDES MPNORM
 537 :       IF(NSOU .GT. 1) SEGDES MELEME
 538 :       SEGSUP MLESOU
 539 : C
 540 :       SEGDES MLECOE
 541 : C
 542 :       SEGSUP MATA
 543 :       SEGSUP MATU
 544 :       SEGSUP MATV
 545 :       SEGSUP MLRSIG
 546 :       SEGSUP MLRTRA
 547 :       SEGSUP MLRB
 548 : C
 549 :       SEGSUP MTAA
 550 :       SEGSUP MINTAA
 551 :       SEGSUP MLRIN1
 552 :       SEGSUP MLRIN2
 553 :       SEGSUP MLRIN3
 554 : C
 555 : C      write(ioimp,*) 'FINITO'
 556 : C      stop
 557 : C
 558 :  9999 CONTINUE
 559 :       RETURN
 560 :       END
 561 :  
 562 :  
 563 :  
 564 :  
 565 :  

© Cast3M 2003 - All rights reserved.
Disclaimer