void MUMPS_CALL MUMPS_OOC_START_LOW_LEVEL(MUMPS_INT *ierr) { char buf[64]; /* for error message */ int ierr_loc; read_op_vol=0; write_op_vol=0; *ierr=(MUMPS_INT)mumps_io_open_files_for_read(); if(*ierr<0){ return; } if(mumps_io_flag_async){ switch(mumps_io_flag_async){ case IO_SYNC: break; #if ! defined(MUMPS_WIN32) && ! defined(WITHOUT_PTHREAD) case IO_ASYNC_TH: mumps_low_level_init_ooc_c_th(&mumps_io_flag_async,&ierr_loc); *ierr=(MUMPS_INT)ierr_loc; if(*ierr<0){ return; } break; #endif default: *ierr=-91; sprintf(buf,"Error: unknown I/O strategy : %d\n",mumps_io_flag_async); mumps_io_error((int)*ierr,buf); return; } } mumps_io_is_init_called=1; return; }
/* mumps_io_last_file_opened=-1; */ void MUMPS_CALL MUMPS_LOW_LEVEL_INIT_OOC_C(MUMPS_INT *_myid, MUMPS_INT *total_size_io, MUMPS_INT *size_element, MUMPS_INT *async, MUMPS_INT *k211, MUMPS_INT *nb_file_type, MUMPS_INT *flag_tab, MUMPS_INT *ierr) { char buf[64]; /* for error message */ int myid_loc,async_loc,ierr_loc,size_element_loc,nb_file_type_loc,*flag_tab_loc; long long total_size_io_loc; int i; myid_loc=(int)*_myid; async_loc=(int)*async; total_size_io_loc=(long long)*total_size_io; size_element_loc=(int)*size_element; nb_file_type_loc=(int)*nb_file_type; flag_tab_loc=(int *)malloc(nb_file_type_loc*sizeof(int)); for (i=0;i<nb_file_type_loc;i++){ flag_tab_loc[i]=(int)flag_tab[i]; } #if defined(MUMPS_WIN32) if(async_loc==IO_ASYNC_AIO||async_loc==IO_ASYNC_TH){ mumps_io_is_init_called=0; *ierr=-92; mumps_io_error((int)*ierr,"Error: Forbidden value of Async flag with _WIN32\n"); free(flag_tab_loc); return; } #endif #if defined (WITHOUT_PTHREAD) if(async_loc==IO_ASYNC_TH){ mumps_io_is_init_called=0; *ierr=-92; mumps_io_error((int)*ierr,"Error: Forbidden value of Async flag with WITHOUT_PTHREAD\n"); free(flag_tab_loc); return; } #endif total_vol=0; mumps_io_flag_async=async_loc; mumps_io_k211=(int)*k211; if (MUMPS_OOC_STORE_PREFIXLEN==-1) { *ierr=-92; mumps_io_error((int)*ierr,"Error: prefix not initialized\n"); free(flag_tab_loc); return; } if (MUMPS_OOC_STORE_TMPDIRLEN==-1) { *ierr=-92; mumps_io_error((int)*ierr,"Error: tmpdir not initialized\n"); free(flag_tab_loc); return; } *ierr=(MUMPS_INT)mumps_init_file_name(MUMPS_OOC_STORE_TMPDIR, MUMPS_OOC_STORE_PREFIX, &MUMPS_OOC_STORE_TMPDIRLEN, &MUMPS_OOC_STORE_PREFIXLEN, &myid_loc); if(*ierr<0){ free(flag_tab_loc); return; } /* Re-initialize lenghts to -1 in order to enable the * check on initialization next time this routine is called */ MUMPS_OOC_STORE_PREFIXLEN=-1; MUMPS_OOC_STORE_TMPDIRLEN=-1; *ierr=(MUMPS_INT)mumps_init_file_structure(&myid_loc,&total_size_io_loc,&size_element_loc,&nb_file_type_loc,flag_tab_loc); free(flag_tab_loc); if(*ierr<0){ return; } #if ! defined(MUMPS_WIN32) mumps_time_spent_in_sync=0; #endif if(async_loc){ switch(async_loc){ case IO_SYNC: printf("mumps_low_level_init_ooc_c should not be called with strategy %d\n",mumps_io_flag_async); break; #if ! defined(MUMPS_WIN32) && ! defined(WITHOUT_PTHREAD) case IO_ASYNC_TH: mumps_low_level_init_ooc_c_th(&async_loc,&ierr_loc); *ierr=(MUMPS_INT)ierr_loc; if(*ierr<0){ return; } break; #endif default: *ierr=-92; sprintf(buf,"Error: unknown I/O strategy : %d\n",(int)*async); mumps_io_error((int)*ierr,buf); return; } } mumps_io_is_init_called=1; return; }
/* mumps_io_last_file_opened=-1; */ void MUMPS_CALL MUMPS_LOW_LEVEL_INIT_OOC_C(int* _myid, int* total_size_io, int* size_element, int* async, int* k211, int * nb_file_type, int * flag_tab, int* ierr) { char buf[64]; /* for error message */ #if defined(MUMPS_WIN32) if(*async==IO_ASYNC_AIO||*async==IO_ASYNC_TH){ mumps_io_is_init_called=0; *ierr=-92; mumps_io_error(*ierr,"Error: Forbidden value of Async flag with _WIN32\n"); return; } #endif #if defined (WITHOUT_PTHREAD) if(*async==IO_ASYNC_TH){ mumps_io_is_init_called=0; *ierr=-92; mumps_io_error(*ierr,"Error: Forbidden value of Async flag with WITHOUT_PTHREAD\n"); return; } #endif total_vol=0; mumps_io_flag_async=*async; mumps_io_k211=*k211; if (MUMPS_OOC_STORE_PREFIXLEN==-1) { *ierr=-92; mumps_io_error(*ierr,"Error: prefix not initialized\n"); return; } if (MUMPS_OOC_STORE_TMPDIRLEN==-1) { *ierr=-92; mumps_io_error(*ierr,"Error: tmpdir not initialized\n"); return; } *ierr=mumps_init_file_name(MUMPS_OOC_STORE_TMPDIR, MUMPS_OOC_STORE_PREFIX, &MUMPS_OOC_STORE_TMPDIRLEN, &MUMPS_OOC_STORE_PREFIXLEN, _myid); if(*ierr<0){ return; } /* Re-initialize lenghts to -1 in order to enable the * check on initialization next time this routine is called */ MUMPS_OOC_STORE_PREFIXLEN=-1; MUMPS_OOC_STORE_TMPDIRLEN=-1; *ierr=mumps_init_file_structure(_myid,total_size_io,size_element,*nb_file_type,flag_tab); if(*ierr<0){ return; } #if ! defined(MUMPS_WIN32) mumps_time_spent_in_sync=0; #endif if(*async){ switch(*async){ case IO_SYNC: printf("mumps_low_level_init_ooc_c should not be called with strategy %d\n",mumps_io_flag_async); break; #if ! defined(MUMPS_WIN32) && ! defined(WITHOUT_PTHREAD) case IO_ASYNC_TH: mumps_low_level_init_ooc_c_th(async,ierr); if(*ierr<0){ return; } break; #endif default: *ierr=-92; sprintf(buf,"Error: unknown I/O strategy : %d\n",*async); mumps_io_error(*ierr,buf); return; } } mumps_io_is_init_called=1; return; }