1C
2C  This file is part of MUMPS 5.1.2, released
3C  on Mon Oct  2 07:37:01 UTC 2017
4C
5C
6C  Copyright 1991-2017 CERFACS, CNRS, ENS Lyon, INP Toulouse, Inria,
7C  University of Bordeaux.
8C
9C  This version of MUMPS is provided to you free of charge. It is
10C  released under the CeCILL-C license:
11C  http://www.cecill.info/licences/Licence_CeCILL-C_V1-en.html
12C
13      MODULE MUMPS_LR_COMMON
14      IMPLICIT NONE
15      CONTAINS
16      SUBROUTINE COMPUTE_BLR_VCS(K472, IBCKSZ, MAXSIZE, NASS)
17        INTEGER, INTENT(IN) :: MAXSIZE, NASS, K472
18        INTEGER, INTENT(OUT) :: IBCKSZ
19        IF (K472.EQ.1) THEN
20          IF (NASS.LE.1000) THEN
21            IBCKSZ = 128
22          ELSEIF (NASS.GT.1000.AND.NASS.LE.5000) THEN
23            IBCKSZ = 256
24          ELSEIF (NASS.GT.5000.AND.NASS.LE.10000) THEN
25            IBCKSZ = 384
26          ELSE
27            IBCKSZ = 512
28          ENDIF
29          IBCKSZ = min(IBCKSZ,MAXSIZE)
30        ELSE
31          IBCKSZ = MAXSIZE
32        ENDIF
33      END SUBROUTINE COMPUTE_BLR_VCS
34      SUBROUTINE MUMPS_UPD_TREE(NV, NSTEPS, N, FIRST, LPTR, RPTR, F,
35     &     VLIST, FILS, FRERE_STEPS, STEP, DAD_STEPS, NE_STEPS, NA, LNA,
36     &     PVS, K38, STEP_SCALAPACK_ROOT)
37      IMPLICIT NONE
38      INTEGER, INTENT(IN)    :: N, NV, NSTEPS, LNA, F, VLIST(NV),
39     &     NE_STEPS(NSTEPS)
40      INTEGER, INTENT(INOUT) :: FILS(N), FRERE_STEPS(NSTEPS),
41     &     DAD_STEPS(NSTEPS), STEP(N), PVS(NSTEPS), NA(LNA), LPTR, RPTR
42      INTEGER, INTENT(INOUT) :: K38
43      INTEGER, INTENT(IN)    :: STEP_SCALAPACK_ROOT
44      LOGICAL :: FIRST
45      INTEGER :: PV, NODE, I
46      PV        = VLIST(1)
47      NODE      = ABS(STEP(PV))
48      PVS(NODE) = PV
49      IF(FIRST) THEN
50         I = DAD_STEPS(NODE)
51         DO WHILE(FILS(I).GT.0)
52            I = FILS(I)
53         END DO
54         FILS(I) = -PV
55      END IF
56      IF(FRERE_STEPS(NODE) .GT. 0) THEN
57         FRERE_STEPS(NODE) = PVS(ABS(STEP(FRERE_STEPS(NODE))))
58      ELSE IF(FRERE_STEPS(NODE) .LT. 0) THEN
59         FRERE_STEPS(NODE) = -PVS(ABS(STEP(DAD_STEPS(NODE))))
60      END IF
61      IF(DAD_STEPS(NODE) .EQ. 0) THEN
62         NA(RPTR) = PV
63         RPTR     = RPTR -1
64      ELSE
65         DAD_STEPS(NODE) = PVS(ABS(STEP(DAD_STEPS(NODE))))
66      END IF
67      IF(NE_STEPS(NODE) .EQ. 0) THEN
68         NA(LPTR) = PV
69         LPTR     = LPTR -1
70      END IF
71      STEP(VLIST(1)) = ABS(STEP(VLIST(1)))
72      IF (STEP(VLIST(1)).EQ.STEP_SCALAPACK_ROOT) THEN
73       K38 = VLIST(1)
74      ENDIF
75      DO I=1, NV-1
76         IF(STEP(VLIST(I+1)).GT.0) STEP(VLIST(I+1)) = -STEP(VLIST(I+1))
77         FILS(VLIST(I)) = VLIST(I+1)
78      END DO
79      FILS(VLIST(NV)) = F
80      RETURN
81      END SUBROUTINE MUMPS_UPD_TREE
82      END MODULE MUMPS_LR_COMMON
83