21 & ,SIZE_INT8, TOTAL_FILE_SIZE, TOTAL_STRUC_SIZE
22 & ,READ_ARITH, READ_INT_TYPE_64
23 & ,READ_OOC_FILE_NAME_LENGTH, READ_OOC_FIRST_FILE_NAME
24 & ,READ_HASH,READ_SYM,READ_PAR,READ_NPROCS
25 & ,FORTRAN_VERSION_OK)
26 INTEGER,
intent(in) :: fileunit
27 INTEGER,
intent(out) :: ierr
28 INTEGER(8),
intent(inout) :: size_read
29 INTEGER,
intent(in) :: SIZE_INT, SIZE_INT8
30 INTEGER(8),
intent(out) :: TOTAL_FILE_SIZE,TOTAL_STRUC_SIZE
31 CHARACTER,
intent(out) :: READ_ARITH
32 LOGICAL,
intent(out) :: READ_INT_TYPE_64
33 INTEGER,
intent(out) :: READ_OOC_FILE_NAME_LENGTH
34 CHARACTER(len=LEN_SAVE_FILE),
intent(out)::READ_OOC_FIRST_FILE_NAME
35 CHARACTER(len=23),
intent(out) :: READ_HASH
36 INTEGER,
intent(out) :: READ_SYM,READ_PAR,READ_NPROCS
37 LOGICAL,
intent(out) :: FORTRAN_VERSION_OK
38 CHARACTER(len=5) :: READ_FORTRAN_VERSION
39 INTEGER :: SIZE_CHARACTER, SIZE_LOGICAL
43 fortran_version_ok = .true.
44 read(fileunit,iostat=ierr) read_fortran_version
45 if(ierr.ne.0)
GOTO 100
46 if (read_fortran_version.NE.
"MUMPS")
THEN
48 fortran_version_ok = .false.
51 size_read=size_read+int(5*size_character,kind=8)
52#if !defined(MUMPS_F2003)
54 & +int(2*size_int*1,kind=8)
56 read(fileunit,iostat=ierr) read_hash
57 if(ierr.ne.0)
GOTO 100
58 size_read=size_read+int(23*size_character,kind=8)
59#if !defined(MUMPS_F2003)
61 & +int(2*size_int*1,kind=8)
63 read(fileunit,iostat=ierr) total_file_size,total_struc_size
64 if(ierr.ne.0)
GOTO 100
65 size_read=size_read+int(2*size_int8,kind=8)
66#if !defined(MUMPS_F2003)
68 & +int(2*size_int*1,kind=8)
70 read(fileunit,iostat=ierr) read_arith
71 if(ierr.ne.0)
GOTO 100
72 size_read=size_read+int(1,kind=8)
73#if !defined(MUMPS_F2003)
75 & +int(2*size_int*1,kind=8)
77 read(fileunit,iostat=ierr) read_sym,read_par,read_nprocs
78 if(ierr.ne.0)
GOTO 100
79 size_read=size_read+int(3*size_int,kind=8)
80#if !defined(MUMPS_F2003)
82 & +int(2*size_int*1,kind=8)
84 read(fileunit,iostat=ierr) read_int_type_64
85 if(ierr.ne.0)
GOTO 100
86 size_read=size_read+int(size_logical,kind=8)
87#if !defined(MUMPS_F2003)
89 & +int(2*size_int*1,kind=8)
91 read(fileunit,iostat=ierr) read_ooc_file_name_length
92 if(ierr.ne.0)
GOTO 100
93 size_read=size_read+int(size_int,kind=8)
94#if !defined(MUMPS_F2003)
96 & +int(2*size_int*1,kind=8)
98 IF(read_ooc_file_name_length.EQ.-999)
THEN
99 read(fileunit,iostat=ierr) dummy
100 if(ierr.ne.0)
GOTO 100
101 size_read=size_read+int(size_int,kind=8)
102#if !defined(MUMPS_F2003)
104 & +int(2*size_int*1,kind=8)
107 read(fileunit,iostat=ierr)
108 & read_ooc_first_file_name(1:read_ooc_file_name_length)
109 if(ierr.ne.0)
GOTO 100
110 size_read=size_read+int(
111 & read_ooc_file_name_length*size_character,kind=8)
112#if !defined(MUMPS_F2003)
114 & +int(2*size_int*1,kind=8)
116#if defined(OOC_VERBOSE)
117 write(*,*)
'First ooc file: ',
118 & read_ooc_first_file_name(1:read_ooc_file_name_length-2)
125 & READ_HASH, READ_NPROCS,
126 & READ_ARITH, READ_SYM, READ_PAR)
128 TYPE (ZMUMPS_STRUC),
intent(inout) :: id
129 LOGICAL,
intent(in) :: BASIC_CHECK
130 LOGICAL,
intent(in) :: READ_INT_TYPE_64
131 CHARACTER(len=23),
intent(in) :: READ_HASH
132 INTEGER,
intent(in) :: READ_NPROCS
133 CHARACTER,
intent(in) :: READ_ARITH
134 INTEGER,
intent(in) :: READ_SYM,READ_PAR
135 LOGICAL :: INT_TYPE_64
136 CHARACTER(len=23) :: HASH_MASTER
139 IF(id%KEEP(10).EQ.1)
THEN
144 if(int_type_64.neqv.read_int_type_64)
THEN
150 IF ( id%INFO(1) .LT. 0 )
GOTO 100
151 if(id%MYID.EQ.0)
THEN
152 hash_master=read_hash
154 call mpi_bcast(hash_master,23,mpi_character,0,id%COMM
155 if(hash_master.ne.read_hash)
THEN
161 IF ( id%INFO(1) .LT. 0 )
GOTO 100
162 if(id%NPROCS.ne.read_nprocs)
THEN
168 IF ( id%INFO(1) .LT. 0 )
GOTO 100
169 IF (.NOT.basic_check)
THEN
171 if(arith.ne.read_arith)
THEN
177 IF ( id%INFO(1) .LT. 0 )
GOTO 100
178 if((id%MYID.EQ.0).AND.(id%SYM.ne.read_sym))
THEN
184 IF ( id%INFO(1) .LT. 0 )
GOTO 100
185 if((id%MYID.EQ.0).AND.(id%PAR.ne.read_par))
THEN
186 write (*,*) id%MYID,
'PAR ',id%PAR,
'READ_PAR ', read_par
192 IF ( id%INFO(1) .LT. 0 )
GOTO 100
232 TYPE (ZMUMPS_STRUC),
intent(inout) :: id
233 CHARACTER(len=LEN_SAVE_FILE),
intent(out):: SAVE_FILE, INFO_FILE
234 INTEGER::len_save_dir,len_save_prefix
235 CHARACTER(len=255):: tmp_savedir,savedir
236 CHARACTER(len=255):: tmp_saveprefix,saveprefix
237 CHARACTER(len=10):: STRING_MYID
238 CHARACTER:: LAST_CHAR_DIR
243 IF(id%SAVE_DIR.EQ.
"NAME_NOT_INITIALIZED")
THEN
244 call mumps_get_save_dir_c(len_save_dir,tmp_savedir)
245 if(tmp_savedir(1:len_save_dir).EQ.
"NAME_NOT_INITIALIZED")
then
249 savedir=trim(adjustl(tmp_savedir(1:len_save_dir)))
250 len_save_dir=len_trim(savedir(1:len_save_dir))
253 savedir=trim(adjustl(id%SAVE_DIR))
254 len_save_dir=len_trim(savedir)
258 IF ( id%INFO(1) .LT. 0 )
GOTO 100
259 IF(id%SAVE_PREFIX.EQ."name_not_initialized
") THEN
260 call mumps_get_save_prefix_C(len_save_prefix,tmp_saveprefix)
261.EQ.
if(tmp_saveprefix(1:len_save_prefix)"name_not_initialized
")
264 len_save_prefix=len_trim(saveprefix)
267 & trim(adjustl(tmp_saveprefix(1:len_save_prefix)))
268 len_save_prefix=len_trim(saveprefix(1:len_save_prefix))
271 saveprefix=trim(adjustl(id%SAVE_PREFIX))
272 len_save_prefix=len_trim(saveprefix)
274 write(STRING_MYID,'(I10)') id%MYID
275 LAST_CHAR_DIR=savedir(len_save_dir:len_save_dir)
276.NE.
if(LAST_CHAR_DIR"/
") then
277 SAVE_FILE=trim(adjustl(savedir))//"/
"
279 SAVE_FILE=trim(adjustl(savedir))
281 INFO_FILE=trim(adjustl(SAVE_FILE))
282 SAVE_FILE=trim(adjustl(SAVE_FILE))
283 & //trim(adjustl(saveprefix))
285 & //trim(adjustl(STRING_MYID))
287 INFO_FILE=trim(adjustl(INFO_FILE))
288 & //trim(adjustl(saveprefix))
290 & //trim(adjustl(STRING_MYID))
subroutine mumps_read_header(fileunit, ierr, size_read, size_int, size_int8, total_file_size, total_struc_size, read_arith, read_int_type_64, read_ooc_file_name_length, read_ooc_first_file_name, read_hash, read_sym, read_par, read_nprocs, fortran_version_ok)