OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
mumps_io_basic.h
Go to the documentation of this file.
1/*
2 *
3 * This file is part of MUMPS 5.5.1, released
4 * on Tue Jul 12 13:17:24 UTC 2022
5 *
6 *
7 * Copyright 1991-2022 CERFACS, CNRS, ENS Lyon, INP Toulouse, Inria,
8 * Mumps Technologies, University of Bordeaux.
9 *
10 * This version of MUMPS is provided to you free of charge. It is
11 * released under the CeCILL-C license
12 * (see doc/CeCILL-C_V1-en.txt, doc/CeCILL-C_V1-fr.txt, and
13 * https://cecill.info/licences/Licence_CeCILL-C_V1-en.html)
14 *
15 */
16#ifndef MUMPS_IO_BASIC_H
17#define MUMPS_IO_BASIC_H
18#include "mumps_compat.h"
19#include "mumps_c_types.h"
20#if ! defined(WITHOUT_PTHREAD) && defined(MUMPS_WIN32)
21# define WITHOUT_PTHREAD 1
22#endif
23#if defined(_AIX)
24# if ! defined(_ALL_SOURCE)
25/* Macro needed for direct I/O on IBM AIX */
26# define _ALL_SOURCE 1
27# endif
28#endif
29#if ! defined (MUMPS_WIN32)
30# if ! defined(_XOPEN_SOURCE)
31/* Setting this macro avoids the warnings ("missing
32 * prototype") related to the use of pread /pwrite */
33# define _XOPEN_SOURCE 500
34# endif
35#endif
36#define MAX_FILE_SIZE 1879048192 /* (2^31)-1-(2^27) */
37/* */
38/* Important Note : */
39/* ================ */
40/* On GNU systems, __USE_GNU must be defined to have */
41/* access to the O_DIRECT I/O flag. */
42/* */
43#include <stdio.h>
44#include <stdlib.h>
45#include <string.h>
46#include <math.h>
47#if ! defined (MUMPS_WIN32)
48# include <unistd.h>
49# include <sys/types.h>
50# include <sys/stat.h>
51# include <fcntl.h>
52# include <sys/time.h>
53# include <time.h>
54#endif
55#if ! defined (MUMPS_WIN32)
56# define MUMPS_IO_FLAG_O_DIRECT 0
57#endif
58/* Force WITH_PFUNC on architectures where we know that it should work */
59#if (defined (sgi) || defined (__sgi)) || defined(_AIX) || (defined(sun) || defined(__sun)) || defined(_GNU_SOURCE)
60# undef WITH_PFUNC
61# define WITH_PFUNC
62#endif
63#define IO_SYNC 0
64#define IO_ASYNC_TH 1
65#define IO_ASYNC_AIO 2
66#define IO_READ 1
67#define IO_WRITE 0
68#define UNITIALIZED "NAME_NOT_INITIALIZED"
69#define MUMPS_OOC_DEFAULT_DIR "/tmp"
70#if defined(MUMPS_WIN32)
71# define SEPARATOR "\\"
72#else
73# define SEPARATOR "/"
74#endif
75/* #define NB_FILE_TYPE_FACTO 1 */
76/* #define NB_FILE_TYPE_SOLVE 1 */
77#define my_max(x,y) ( (x) > (y) ? (x) : (y) )
78#define my_ceil(x) ( (MUMPS_INT)(x) >= (x) ? (MUMPS_INT)(x) : ( (MUMPS_INT)(x) + 1 ) )
79typedef struct __mumps_file_struct{
83#if ! defined (MUMPS_WIN32)
85#else
86 FILE* file;
87#endif
88 char name[351]; /* Should be large enough to hold tmpdir, prefix, suffix */
103/* Exported global variables */
104#if ! defined (MUMPS_WIN32)
105# if defined (WITH_PFUNC) && ! defined (WITHOUT_PTHREAD)
106# include <pthread.h>
107extern pthread_mutex_t mumps_io_pwrite_mutex;
108# endif
109/* extern MUMPS_INT* mumps_io_pfile_pointer_array; */
110/* extern MUMPS_INT* mumps_io_current_file; */
111/* #else /\*_WIN32*\/ */
112/* extern FILE** mumps_io_current_file; */
113/* extern FILE** mumps_io_pfile_pointer_array; */
114#endif /* MUMPS_WIN32 */
115/*extern mumps_file_struct* mumps_io_pfile_pointer_array;
116 extern mumps_file_struct* mumps_io_current_file;*/
118/* extern MUMPS_INT mumps_io_current_file_number; */
119extern char* mumps_ooc_file_prefix;
120/* extern char** mumps_io_pfile_name; */
121/* extern MUMPS_INT mumps_io_current_file_position; */
122/* extern MUMPS_INT mumps_io_write_pos; */
123/* extern MUMPS_INT mumps_io_last_file_opened; */
128/* extern MUMPS_INT mumps_io_nb_file; */
131/* extern MUMPS_INT mumps_flag_open; */
135/* Exported functions */
136MUMPS_INT mumps_set_file(MUMPS_INT type,MUMPS_INT file_number_arg);
138MUMPS_INT mumps_compute_where_to_write(const double to_be_written,const MUMPS_INT type,long long vaddr,size_t already_written);
139MUMPS_INT mumps_prepare_pointers_for_write(double to_be_written,MUMPS_INT * pos_in_file, MUMPS_INT * file_number,const MUMPS_INT type,long long vaddr,size_t already_written);
140MUMPS_INT mumps_io_do_write_block(void * address_block,long long block_size,MUMPS_INT * type,long long vaddr,MUMPS_INT * ierr);
141MUMPS_INT mumps_io_do_read_block(void * address_block,long long block_size,MUMPS_INT * type,long long vaddr,MUMPS_INT * ierr);
142MUMPS_INT mumps_compute_nb_concerned_files(long long block_size,MUMPS_INT * nb_concerned_files,long long vaddr);
143MUMPS_INLINE MUMPS_INT mumps_gen_file_info(long long vaddr, MUMPS_INT * pos, MUMPS_INT * file);
145MUMPS_INT mumps_init_file_structure(MUMPS_INT *_myid, long long *total_size_io,MUMPS_INT *size_element,MUMPS_INT *nb_file_type,MUMPS_INT *flag_tab);
146MUMPS_INT mumps_init_file_name(char* mumps_dir,char* mumps_file,MUMPS_INT* mumps_dim_dir,MUMPS_INT* mumps_dim_file,MUMPS_INT* _myid);
149MUMPS_INT mumps_io_get_nb_files(MUMPS_INT* nb_files, const MUMPS_INT* type);
150MUMPS_INT mumps_io_get_file_name(MUMPS_INT* indice,char* name,MUMPS_INT* length,MUMPS_INT* type);
152MUMPS_INT mumps_io_init_vars(MUMPS_INT* myid_arg,MUMPS_INT* size_element,MUMPS_INT* async_arg);
153MUMPS_INT mumps_io_set_file_name(MUMPS_INT* indice,char* name,MUMPS_INT* length,MUMPS_INT* type);
156MUMPS_INT mumps_io_write__(void *file, void *loc_add, size_t write_size, MUMPS_INT where,MUMPS_INT type);
157#if ! defined (MUMPS_WIN32)
158MUMPS_INT mumps_io_write_os_buff__(void *file, void *loc_add, size_t write_size, MUMPS_INT where);
159MUMPS_INT mumps_io_write_direct_io__(void *file, void *loc_addr, size_t write_size, MUMPS_INT where,MUMPS_INT type);
161#else
162MUMPS_INT mumps_io_write_win32__(void *file, void *loc_add, size_t write_size, MUMPS_INT where);
163#endif
164MUMPS_INT mumps_io_read__(void * file,void * loc_addr,size_t size,MUMPS_INT local_offset,MUMPS_INT type);
165#if ! defined (MUMPS_WIN32)
166MUMPS_INT mumps_io_read_os_buff__(void * file,void * loc_addr,size_t size,MUMPS_INT local_offset);
167MUMPS_INT mumps_io_read_direct_io__(void * file,void * loc_addr,size_t size,MUMPS_INT local_offset,MUMPS_INT type);
168#else
169MUMPS_INT mumps_io_read_win32__(void * file,void * loc_addr,size_t size,MUMPS_INT local_offset);
170#endif
171MUMPS_INT mumps_compute_file_size(void *file,size_t *size);
172#if ! defined (MUMPS_WIN32) && ! defined (WITHOUT_PTHREAD)
173# if defined (WITH_PFUNC)
174MUMPS_INT mumps_io_protect_pointers();
175MUMPS_INT mumps_io_unprotect_pointers();
176MUMPS_INT mumps_io_init_pointers_lock();
177MUMPS_INT mumps_io_destroy_pointers_lock();
178# endif /* WITH_PFUNC */
179#endif /* MUMPS_WIN32 */
180#endif /* MUMPS_IO_BASIC_H */
#define MUMPS_INT
#define MUMPS_INLINE
MUMPS_INT mumps_io_flag_async
MUMPS_INT mumps_io_max_file_size
MUMPS_INT mumps_io_nb_file_type
MUMPS_INT mumps_directio_flag
MUMPS_INT mumps_io_is_init_called
char * mumps_ooc_file_prefix
MUMPS_INT mumps_io_myid
MUMPS_INT mumps_io_k211
MUMPS_INT mumps_elementary_data_size
mumps_file_type * mumps_files
MUMPS_INT mumps_io_get_nb_files(MUMPS_INT *nb_files, const MUMPS_INT *type)
MUMPS_INT mumps_io_do_read_block(void *address_block, long long block_size, MUMPS_INT *type, long long vaddr, MUMPS_INT *ierr)
MUMPS_INT mumps_io_write_direct_io__(void *file, void *loc_addr, size_t write_size, MUMPS_INT where, MUMPS_INT type)
MUMPS_INT mumps_io_set_file_name(MUMPS_INT *indice, char *name, MUMPS_INT *length, MUMPS_INT *type)
MUMPS_INT mumps_io_alloc_file_struct(MUMPS_INT *nb, MUMPS_INT which)
MUMPS_INT mumps_compute_file_size(void *file, size_t *size)
MUMPS_INT mumps_io_set_last_file(MUMPS_INT *dim, MUMPS_INT *type)
struct __mumps_file_type mumps_file_type
void mumps_update_current_file_position(mumps_file_struct *file_arg)
MUMPS_INT mumps_io_alloc_pointers(MUMPS_INT *nb_file_type, MUMPS_INT *dim)
MUMPS_INT directio_flag
struct __mumps_file_struct mumps_file_struct
MUMPS_INT mumps_prepare_pointers_for_write(double to_be_written, MUMPS_INT *pos_in_file, MUMPS_INT *file_number, const MUMPS_INT type, long long vaddr, size_t already_written)
MUMPS_INT mumps_io_write__(void *file, void *loc_add, size_t write_size, MUMPS_INT where, MUMPS_INT type)
MUMPS_INT mumps_io_init_vars(MUMPS_INT *myid_arg, MUMPS_INT *size_element, MUMPS_INT *async_arg)
MUMPS_INT mumps_io_read_direct_io__(void *file, void *loc_addr, size_t size, MUMPS_INT local_offset, MUMPS_INT type)
MUMPS_INT mumps_compute_where_to_write(const double to_be_written, const MUMPS_INT type, long long vaddr, size_t already_written)
MUMPS_INT mumps_init_file_structure(MUMPS_INT *_myid, long long *total_size_io, MUMPS_INT *size_element, MUMPS_INT *nb_file_type, MUMPS_INT *flag_tab)
MUMPS_INT mumps_compute_nb_concerned_files(long long block_size, MUMPS_INT *nb_concerned_files, long long vaddr)
MUMPS_INT mumps_io_read__(void *file, void *loc_addr, size_t size, MUMPS_INT local_offset, MUMPS_INT type)
MUMPS_INT mumps_set_file(MUMPS_INT type, MUMPS_INT file_number_arg)
MUMPS_INT mumps_io_read_os_buff__(void *file, void *loc_addr, size_t size, MUMPS_INT local_offset)
MUMPS_INT mumps_io_get_file_name(MUMPS_INT *indice, char *name, MUMPS_INT *length, MUMPS_INT *type)
MUMPS_INT mumps_init_file_name(char *mumps_dir, char *mumps_file, MUMPS_INT *mumps_dim_dir, MUMPS_INT *mumps_dim_file, MUMPS_INT *_myid)
MUMPS_INT mumps_io_do_write_block(void *address_block, long long block_size, MUMPS_INT *type, long long vaddr, MUMPS_INT *ierr)
MUMPS_INT mumps_io_open_files_for_read()
MUMPS_INT mumps_io_flush_write__(MUMPS_INT type)
MUMPS_INLINE MUMPS_INT mumps_gen_file_info(long long vaddr, MUMPS_INT *pos, MUMPS_INT *file)
MUMPS_INT mumps_free_file_pointers(MUMPS_INT *step)
void mumps_io_init_file_struct(MUMPS_INT *nb, MUMPS_INT which)
MUMPS_INT mumps_io_write_os_buff__(void *file, void *loc_add, size_t write_size, MUMPS_INT where)
mumps_file_struct * mumps_io_pfile_pointer_array
MUMPS_INT mumps_io_current_file_number
mumps_file_struct * mumps_io_current_file
MUMPS_INT mumps_flag_open
MUMPS_INT mumps_io_last_file_opened
MUMPS_INT mumps_io_nb_file
MUMPS_INT mumps_io_nb_file_opened