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