1C
2C  This file is part of MUMPS 4.10.0, built on Tue May 10 12:56:32 UTC 2011
3C
4C
5C  This version of MUMPS is provided to you free of charge. It is public
6C  domain, based on public domain software developed during the Esprit IV
7C  European project PARASOL (1996-1999). Since this first public domain
8C  version in 1999, research and developments have been supported by the
9C  following institutions: CERFACS, CNRS, ENS Lyon, INPT(ENSEEIHT)-IRIT,
10C  INRIA, and University of Bordeaux.
11C
12C  The MUMPS team at the moment of releasing this version includes
13C  Patrick Amestoy, Maurice Bremond, Alfredo Buttari, Abdou Guermouche,
14C  Guillaume Joslin, Jean-Yves L'Excellent, Francois-Henry Rouet, Bora
15C  Ucar and Clement Weisbecker.
16C
17C  We are also grateful to Emmanuel Agullo, Caroline Bousquet, Indranil
18C  Chowdhury, Philippe Combes, Christophe Daniel, Iain Duff, Vincent Espirat,
19C  Aurelia Fevre, Jacko Koster, Stephane Pralet, Chiara Puglisi, Gregoire
20C  Richard, Tzvetomila Slavova, Miroslav Tuma and Christophe Voemel who
21C  have been contributing to this project.
22C
23C  Up-to-date copies of the MUMPS package can be obtained
24C  from the Web pages:
25C  http://mumps.enseeiht.fr/  or  http://graal.ens-lyon.fr/MUMPS
26C
27C
28C   THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
29C   EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.
30C
31C
32C  User documentation of any code that uses this software can
33C  include this complete notice. You can acknowledge (using
34C  references [1] and [2]) the contribution of this package
35C  in any scientific publication dependent upon the use of the
36C  package. You shall use reasonable endeavours to notify
37C  the authors of the package of this publication.
38C
39C   [1] P. R. Amestoy, I. S. Duff, J. Koster and  J.-Y. L'Excellent,
40C   A fully asynchronous multifrontal solver using distributed dynamic
41C   scheduling, SIAM Journal of Matrix Analysis and Applications,
42C   Vol 23, No 1, pp 15-41 (2001).
43C
44C   [2] P. R. Amestoy and A. Guermouche and J.-Y. L'Excellent and
45C   S. Pralet, Hybrid scheduling for the parallel solution of linear
46C   systems. Parallel Computing Vol 32 (2), pp 136-156 (2006).
47C
48      MODULE MUMPS_OOC_COMMON
49      IMPLICIT NONE
50      INTEGER, PARAMETER :: FCT = 0
51      INTEGER, PARAMETER, PUBLIC :: TYPEF_INVALID = -999999
52      INTEGER, PUBLIC  ::  TYPEF_L, TYPEF_U, TYPEF_CB
53      INTEGER OOC_NB_FILE_TYPE, OOC_FCT_TYPE
54      INTEGER, DIMENSION(:,:),POINTER :: OOC_INODE_SEQUENCE
55      INTEGER(8), DIMENSION(:,:),POINTER :: OOC_VADDR
56      INTEGER,DIMENSION(:),POINTER:: KEEP_OOC
57      INTEGER ICNTL1
58      INTEGER(8), DIMENSION(:),ALLOCATABLE :: AddVirtLibre
59      LOGICAL,SAVE :: STRAT_IO_ASYNC,WITH_BUF,SOLVE
60      INTEGER, DIMENSION(:),POINTER :: STEP_OOC,PROCNODE_OOC
61      INTEGER, SAVE :: MYID_OOC,SLAVEF_OOC,LOW_LEVEL_STRAT_IO
62      INTEGER(8), SAVE :: HBUF_SIZE, DIM_BUF_IO
63      INTEGER ERR_STR_OOC_MAX_LEN
64      PARAMETER(ERR_STR_OOC_MAX_LEN = 512)
65      CHARACTER*1 ERR_STR_OOC(ERR_STR_OOC_MAX_LEN)
66      INTEGER DIM_ERR_STR_OOC
67      TYPE IO_BLOCK
68        INTEGER :: INODE
69        LOGICAL :: MASTER
70        INTEGER :: Typenode
71        INTEGER :: NROW, NCOL, NFS
72        LOGICAL :: Last
73        INTEGER :: LastPiv
74        INTEGER :: LastPanelWritten_L
75        INTEGER :: LastPanelWritten_U
76        INTEGER,POINTER,DIMENSION(:) :: INDICES
77      END TYPE
78      PUBLIC IO_BLOCK
79      INTEGER, PUBLIC :: STRAT_WRITE_MAX, STRAT_TRY_WRITE
80      PARAMETER (STRAT_WRITE_MAX=1, STRAT_TRY_WRITE=2)
81      END MODULE MUMPS_OOC_COMMON
82      SUBROUTINE MUMPS_676(INT1,INT2,BIGINT)
83      IMPLICIT NONE
84      INTEGER INT1,INT2
85      INTEGER(8) BIGINT
86      INTEGER(8) TMP1,TMP2,CONV
87      PARAMETER (CONV=1073741824_8)
88      TMP1=int(INT1,kind=kind(TMP1))
89      TMP2=int(INT2,kind=kind(TMP2))
90      BIGINT=(TMP1*CONV)+TMP2
91      RETURN
92      END SUBROUTINE MUMPS_676
93      SUBROUTINE MUMPS_677(INT1,INT2,BIGINT)
94      IMPLICIT NONE
95      INTEGER INT1,INT2
96      INTEGER(8) BIGINT
97      INTEGER(8) TMP1,TMP2,CONV
98      PARAMETER (CONV=1073741824_8)
99      TMP1=BIGINT/CONV
100      TMP2=mod(BIGINT,CONV)
101      INT1=int(TMP1)
102      INT2=int(TMP2)
103      RETURN
104      END SUBROUTINE MUMPS_677
105      SUBROUTINE MUMPS_796
106     &           (TYPEF_L,TYPEF_U,TYPEF_CB,K201, K251, K50,
107     &            TYPEF_INVALID)
108      IMPLICIT NONE
109      INTEGER, intent(out):: TYPEF_L, TYPEF_U, TYPEF_CB
110      INTEGER, intent(in) :: K201, K251, K50
111      INTEGER, intent(in) :: TYPEF_INVALID
112      IF (K201 .EQ. 1 .AND. K50.EQ.0) THEN
113        IF ( K251.NE.2 ) THEN
114          TYPEF_L  = 1
115          TYPEF_U  = 2
116          TYPEF_CB = 3
117        ELSE
118          TYPEF_U  = 1
119          TYPEF_L  = TYPEF_INVALID
120          TYPEF_CB = 2
121        ENDIF
122      ELSE
123         TYPEF_L = 1
124         TYPEF_U = TYPEF_INVALID
125         TYPEF_CB=2
126      ENDIF
127      RETURN
128      END SUBROUTINE MUMPS_796
129      INTEGER FUNCTION MUMPS_808
130     &                 (FWDORBWD, MTYPE, K201, K50)
131      USE MUMPS_OOC_COMMON
132      INTEGER,     intent(in) :: MTYPE, K201, K50
133      CHARACTER*1, intent(in) :: FWDORBWD
134      IF ( (TYPEF_L .NE. 1 .AND. TYPEF_L .NE. TYPEF_INVALID)
135     &     .OR. (TYPEF_U .NE. 1 .AND. TYPEF_U .NE. 2 .AND.
136     &           TYPEF_U .NE. TYPEF_INVALID) ) THEN
137        WRITE(*,*) "Internal error 1 in MUMPS_808",
138     &              TYPEF_L, TYPEF_U
139        CALL MUMPS_ABORT()
140      ENDIF
141      IF (FWDORBWD .NE. 'F' .AND. FWDORBWD .NE. 'B') THEN
142        WRITE(*,*) "Internal error in MUMPS_808,",FWDORBWD
143        CALL MUMPS_ABORT()
144      ENDIF
145      IF (K201 .EQ. 1) THEN
146        IF (FWDORBWD .EQ. 'F') THEN
147         IF((MTYPE.NE.1).AND.(K50.EQ.0))THEN
148           MUMPS_808=TYPEF_U
149         ELSE
150           MUMPS_808=TYPEF_L
151         ENDIF
152        ELSE
153          IF(K50.EQ.0)THEN
154            IF(MTYPE.NE.1)THEN
155              MUMPS_808=TYPEF_L
156            ELSE
157              MUMPS_808=TYPEF_U
158            ENDIF
159          ELSE
160            MUMPS_808=TYPEF_L
161          ENDIF
162        ENDIF
163      ELSE
164        MUMPS_808 = 1
165      ENDIF
166      RETURN
167      END FUNCTION MUMPS_808
168