main Program

Uses

  • program~~main~~UsesGraph program~main main omp_lib omp_lib program~main->omp_lib module~data_arch data_arch program~main->module~data_arch module~test_musst test_musst program~main->module~test_musst module~num_param num_param program~main->module~num_param module~solver solver program~main->module~solver iso_fortran_env iso_fortran_env module~data_arch->iso_fortran_env module~test_musst->module~data_arch module~test_musst->module~num_param module~test_musst->module~solver module~ms_film ms_film module~test_musst->module~ms_film module~film film module~test_musst->module~film module~surfile surfile module~test_musst->module~surfile module~data_film_hd data_film_hd module~test_musst->module~data_film_hd module~inout_files inout_files module~test_musst->module~inout_files module~num_param->module~data_arch module~num_param->iso_fortran_env module~solver->module~data_arch hsl_ma48_double hsl_ma48_double module~solver->hsl_ma48_double module~solver->iso_fortran_env module~sort_arrays sort_arrays module~solver->module~sort_arrays module~mumps_wrapper mumps_wrapper module~solver->module~mumps_wrapper module~gen_param gen_param module~solver->module~gen_param module~mumfpack mumfpack module~solver->module~mumfpack iso_c_binding iso_c_binding module~solver->iso_c_binding module~sulu_wrapper sulu_wrapper module~solver->module~sulu_wrapper module~ms_film->omp_lib module~ms_film->module~data_arch module~ms_film->module~num_param module~ms_film->module~solver module~ms_film->module~film module~ms_film->module~surfile module~ms_film->module~data_film_hd module~mesh mesh module~ms_film->module~mesh module~fluid_law fluid_law module~ms_film->module~fluid_law module~bspline bspline module~ms_film->module~bspline module~film->omp_lib module~film->module~data_arch module~film->module~num_param module~film->module~solver module~film->module~surfile module~film->module~data_film_hd module~film->module~mesh module~film->module~fluid_law module~elements elements module~film->module~elements module~surfile->module~data_arch module~surfile->module~sort_arrays module~surfile->iso_c_binding module~sort_arrays->module~data_arch module~gen_param->module~data_arch module~data_film_hd->module~data_arch module~data_film_hd->module~fluid_law module~inout_files->module~data_arch module~inout_files->module~ms_film module~inout_files->module~film module~inout_files->module~surfile module~vtk VTK module~inout_files->module~vtk module~mumfpack->iso_c_binding module~sulu_wrapper->iso_c_binding module~mesh->module~data_arch module~fluid_law->module~data_arch module~bspline->iso_fortran_env module~elements->module~data_arch module~ir_vtk IR_VTK module~vtk->module~ir_vtk

Subroutine to run a test with MUSST


Calls

program~~main~~CallsGraph program~main main proc~run_test run_test program~main->proc~run_test proc~read_config read_config program~main->proc~read_config proc~test_rough_fe test_rough_fe proc~run_test->proc~test_rough_fe proc~test_bearing_x_fe test_bearing_x_fe proc~run_test->proc~test_bearing_x_fe proc~get_unit get_unit proc~run_test->proc~get_unit proc~test_pocket_fe test_pocket_fe proc~run_test->proc~test_pocket_fe proc~test_bearing_y_fe test_bearing_y_fe proc~run_test->proc~test_bearing_y_fe proc~test_rough_ms test_rough_ms proc~run_test->proc~test_rough_ms proc~test_slider_fe test_slider_fe proc~run_test->proc~test_slider_fe proc~test_slider_ms test_slider_ms proc~run_test->proc~test_slider_ms proc~read_config->proc~get_unit proc~read_data read_data proc~read_config->proc~read_data proc~apply_roughness apply_roughness proc~test_rough_fe->proc~apply_roughness proc~init_rough_prob init_rough_prob proc~test_rough_fe->proc~init_rough_prob proc~init_fe_prob init_fe_prob proc~test_rough_fe->proc~init_fe_prob proc~solve_fe_prob solve_fe_prob proc~test_rough_fe->proc~solve_fe_prob proc~modify_h_bearing modify_h_bearing proc~test_bearing_x_fe->proc~modify_h_bearing proc~test_bearing_x_fe->proc~init_fe_prob proc~test_bearing_x_fe->proc~solve_fe_prob proc~modify_h_pocket modify_h_pocket proc~test_pocket_fe->proc~modify_h_pocket proc~test_pocket_fe->proc~init_fe_prob proc~test_pocket_fe->proc~solve_fe_prob proc~test_bearing_y_fe->proc~init_fe_prob proc~modify_h_bearing_y modify_h_bearing_y proc~test_bearing_y_fe->proc~modify_h_bearing_y proc~test_bearing_y_fe->proc~solve_fe_prob num_par num_par proc~read_data->num_par proc~solve_ms_prob solve_ms_prob proc~test_rough_ms->proc~solve_ms_prob proc~apply_roughness_ms apply_roughness_MS proc~test_rough_ms->proc~apply_roughness_ms proc~init_ms_prob init_ms_prob proc~test_rough_ms->proc~init_ms_prob proc~test_rough_ms->proc~init_rough_prob proc~modify_h_slider modify_h_slider proc~test_slider_fe->proc~modify_h_slider proc~test_slider_fe->proc~init_fe_prob proc~test_slider_fe->proc~solve_fe_prob proc~test_slider_ms->proc~solve_ms_prob proc~test_slider_ms->proc~init_ms_prob proc~modify_h_slider_ms modify_h_slider_MS proc~test_slider_ms->proc~modify_h_slider_ms proc~save_ms_field save_ms_field proc~solve_ms_prob->proc~save_ms_field proc~multi_scale_solve_fe_film multi_scale_solve_fe_film proc~solve_ms_prob->proc~multi_scale_solve_fe_film proc~ms_fe_f_2_mat ms_fe_f_2_mat proc~solve_ms_prob->proc~ms_fe_f_2_mat proc~apply_roughness_ms->proc~apply_roughness proc~multi_scale_create_rect_fe_film multi_scale_create_rect_fe_film proc~init_ms_prob->proc~multi_scale_create_rect_fe_film proc~modify_h_slider_ms->proc~modify_h_slider proc~create_rect_fe_film create_rect_FE_film proc~init_fe_prob->proc~create_rect_fe_film proc~compute_corner_fluxes compute_corner_fluxes proc~solve_fe_prob->proc~compute_corner_fluxes proc~save_fe_field save_fe_field proc~solve_fe_prob->proc~save_fe_field proc~solve_fe_film solve_FE_film proc~solve_fe_prob->proc~solve_fe_film proc~multi_scale_create_rect_fe_film->proc~create_rect_fe_film proc~assembly_fe_film_reynolds assembly_FE_film_reynolds proc~compute_corner_fluxes->proc~assembly_fe_film_reynolds proc~save_ms_field->proc~ms_fe_f_2_mat proc~write_surf write_surf proc~save_ms_field->proc~write_surf proc~empty empty proc~save_ms_field->proc~empty proc~init_scal init_scal proc~save_ms_field->proc~init_scal proc~multi_scale_solve_fe_film->proc~solve_fe_film proc~convert_matrice_format convert_matrice_format proc~multi_scale_solve_fe_film->proc~convert_matrice_format proc~apply_bc_fe_film_simple apply_bc_FE_film_simple proc~multi_scale_solve_fe_film->proc~apply_bc_fe_film_simple omp_get_thread_num omp_get_thread_num proc~multi_scale_solve_fe_film->omp_get_thread_num proc~multi_scale_assembly_fe_film_reynolds multi_scale_assembly_fe_film_reynolds proc~multi_scale_solve_fe_film->proc~multi_scale_assembly_fe_film_reynolds proc~solve_syst solve_syst proc~multi_scale_solve_fe_film->proc~solve_syst proc~save_fe_field->proc~write_surf proc~save_fe_field->proc~empty proc~save_fe_field->proc~init_scal proc~create_rect_x_ymesh create_rect_x_ymesh proc~create_rect_fe_film->proc~create_rect_x_ymesh proc~solve_fe_film->proc~convert_matrice_format proc~solve_fe_film->proc~apply_bc_fe_film_simple proc~solve_fe_film->omp_get_thread_num proc~apply_bc_fe_film apply_bc_FE_film proc~solve_fe_film->proc~apply_bc_fe_film proc~solve_fe_film->proc~assembly_fe_film_reynolds proc~solve_fe_film->proc~solve_syst proc~write_surf->proc~get_unit proc~lower lower proc~write_surf->proc~lower proc~scal2surf scal2surf proc~write_surf->proc~scal2surf proc~surf2scal surf2scal proc~write_surf->proc~surf2scal proc~from_elemental_to_assembled from_elemental_to_assembled proc~convert_matrice_format->proc~from_elemental_to_assembled proc~multi_scale_assembly_fe_film_reynolds->omp_get_thread_num proc~elementary_assembly_fe_film_reynolds elementary_assembly_FE_film_reynolds proc~assembly_fe_film_reynolds->proc~elementary_assembly_fe_film_reynolds proc~assemble_in_mat_sol assemble_in_mat_sol proc~assembly_fe_film_reynolds->proc~assemble_in_mat_sol proc~analyse_solver analyse_solver proc~solve_syst->proc~analyse_solver proc~factorize_solver factorize_solver proc~solve_syst->proc~factorize_solver proc~close_solver close_solver proc~solve_syst->proc~close_solver proc~solution_solver solution_solver proc~solve_syst->proc~solution_solver proc~freefact_solver freefact_solver proc~solve_syst->proc~freefact_solver proc~init_solver init_solver proc~solve_syst->proc~init_solver proc~init_scal->proc~empty ma48_analyse ma48_analyse proc~analyse_solver->ma48_analyse proc~prep_superlu prep_superlu proc~analyse_solver->proc~prep_superlu dmumps dmumps proc~analyse_solver->dmumps proc~s_umfpack_di_symbolic s_umfpack_di_symbolic proc~analyse_solver->proc~s_umfpack_di_symbolic proc~s_umfpack_di_numeric s_umfpack_di_numeric proc~factorize_solver->proc~s_umfpack_di_numeric proc~umfpack_di_free_numeric umfpack_di_free_numeric proc~factorize_solver->proc~umfpack_di_free_numeric proc~factorize_solver->dmumps ma48_factorize ma48_factorize proc~factorize_solver->ma48_factorize proc~compute_prc_tables_reynolds_supg compute_prc_tables_reynolds_supg proc~elementary_assembly_fe_film_reynolds->proc~compute_prc_tables_reynolds_supg proc~umfpack_di_free_symbolic umfpack_di_free_symbolic proc~close_solver->proc~umfpack_di_free_symbolic proc~close_solver->proc~umfpack_di_free_numeric proc~close_solver->dmumps mpi_finalize mpi_finalize proc~close_solver->mpi_finalize proc~close_superlu close_superlu proc~close_solver->proc~close_superlu proc~umfpack_di_report_info umfpack_di_report_info proc~close_solver->proc~umfpack_di_report_info ma48_finalize ma48_finalize proc~close_solver->ma48_finalize proc~solv_superlu solv_superlu proc~solution_solver->proc~solv_superlu ma48_solve ma48_solve proc~solution_solver->ma48_solve proc~solution_solver->dmumps proc~solution_solver->mpi_finalize proc~s_umfpack_di_solve s_umfpack_di_solve proc~solution_solver->proc~s_umfpack_di_solve proc~freefact_solver->proc~umfpack_di_free_numeric proc~free_superlu free_superlu proc~freefact_solver->proc~free_superlu proc~c_f_string c_f_string proc~surf2scal->proc~c_f_string mpi_init mpi_init proc~init_solver->mpi_init ma48_initialize ma48_initialize proc~init_solver->ma48_initialize proc~init_solver->dmumps proc~umfpack_di_report_control umfpack_di_report_control proc~init_solver->proc~umfpack_di_report_control proc~init_superlu init_superlu proc~init_solver->proc~init_superlu proc~init_solver->mpi_finalize proc~umfpack_di_defaults umfpack_di_defaults proc~init_solver->proc~umfpack_di_defaults proc~umfpack_di_numeric umfpack_di_numeric proc~s_umfpack_di_numeric->proc~umfpack_di_numeric proc~solv_superlu->proc~prep_superlu interface~statfree StatFree proc~solv_superlu->interface~statfree interface~destroy_supernode_matrix Destroy_SuperNode_Matrix proc~solv_superlu->interface~destroy_supernode_matrix interface~destroy_compcol_matrix Destroy_CompCol_Matrix proc~solv_superlu->interface~destroy_compcol_matrix interface~dgssvx dgssvx proc~solv_superlu->interface~dgssvx interface~statinit StatInit proc~solv_superlu->interface~statinit interface~dcreate_dense_matrix dCreate_Dense_Matrix proc~prep_superlu->interface~dcreate_dense_matrix interface~dcreate_compcol_matrix dCreate_CompCol_Matrix proc~prep_superlu->interface~dcreate_compcol_matrix interface~c_umfpack_di_free_symbolic c_umfpack_di_free_symbolic proc~umfpack_di_free_symbolic->interface~c_umfpack_di_free_symbolic interface~c_umfpack_di_free_numeric c_umfpack_di_free_numeric proc~umfpack_di_free_numeric->interface~c_umfpack_di_free_numeric proc~c_f_string->proc~empty interface~c_umfpack_di_report_control c_umfpack_di_report_control proc~umfpack_di_report_control->interface~c_umfpack_di_report_control proc~ni4_up_2d ni4_up_2d proc~compute_prc_tables_reynolds_supg->proc~ni4_up_2d proc~length_width_elem length_width_elem proc~compute_prc_tables_reynolds_supg->proc~length_width_elem proc~dj4 dj4 proc~compute_prc_tables_reynolds_supg->proc~dj4 interface~set_default_options set_default_options proc~init_superlu->interface~set_default_options proc~umfpack_di_solve umfpack_di_solve proc~s_umfpack_di_solve->proc~umfpack_di_solve interface~destroy_dense_matrix Destroy_Dense_Matrix proc~close_superlu->interface~destroy_dense_matrix proc~close_superlu->interface~destroy_compcol_matrix proc~umfpack_di_symbolic umfpack_di_symbolic proc~s_umfpack_di_symbolic->proc~umfpack_di_symbolic interface~c_umfpack_di_report_info c_umfpack_di_report_info proc~umfpack_di_report_info->interface~c_umfpack_di_report_info interface~c_umfpack_di_defaults c_umfpack_di_defaults proc~umfpack_di_defaults->interface~c_umfpack_di_defaults proc~ni4_up_1d ni4_up_1d proc~ni4_up_2d->proc~ni4_up_1d interface~c_umfpack_di_symbolic c_umfpack_di_symbolic proc~umfpack_di_symbolic->interface~c_umfpack_di_symbolic interface~c_umfpack_di_numeric c_umfpack_di_numeric proc~umfpack_di_numeric->interface~c_umfpack_di_numeric interface~c_umfpack_di_solve c_umfpack_di_solve proc~umfpack_di_solve->interface~c_umfpack_di_solve

Contents

Source Code


Variables

Type AttributesNameInitial
character(len=128) :: prg_arg
character(len=128) :: job_file
character(len=8) :: date
character(len=10) :: time
character(len=15) :: repos
integer(kind=I4) :: archive

Subroutines

subroutine read_config()

Arguments

None

Source Code

program main
use omp_lib
use test_musst
use data_arch,  only : I4, NB_THREADS_MAX, OUT_U=>OPU, get_unit
use num_param,  only : VERBOSE, OUTPUT_FILE, OPU
use solver,     only : SOLVER_BS, SOLVER_TS, SOLV_MESS
implicit none

character(len=128) :: prg_arg
character(len=128) :: job_file

character(len= 8) :: date
character(len=10) :: time
character(len=15) :: repos

integer(kind=I4)  :: archive

! a result directory is created under "/out" with the date as name
! ----------------------------------------------------------------
call date_and_time(date, time)
repos = date//'_'//time(1:6)
call execute_command_line("mkdir out/"//repos, wait=.true.)

! the job file is the program argument
! ------------------------------------
prg_arg  = repeat(' ', len(prg_arg ))
job_file = repeat(' ', len(job_file))
call get_command_argument(1, prg_arg)     ! argument one: job file
if (len_trim(prg_arg) == 0) then          ! if there is no job file, stop
   stop 'no job file, stop'
else
   job_file = trim(adjustl(prg_arg))
endif

! the job file is copied in the result directory
! ----------------------------------------------
call execute_command_line("cp "//trim(job_file)//" out/"//repos, wait=.true.)

! the job file is processed
! -------------------------
call read_config
call run_test

if (OPU/=OUT_U) close(OPU)

stop

contains

   subroutine read_config()
   implicit none
      integer(kind=I4)   :: jf, err_read
      character(len=032) :: word
      character(len=128) :: job_copy

      job_copy = "out/"//repos//job_file(4:len_trim(job_file))

      VERBOSE   = 20
      SOLV_MESS = 0

      OPU = 0
      OUTPUT_FILE = "no_file"

      SOLVER_BS = 3
      SOLVER_TS = 2

      NB_THREADS_MAX = -1

      archive = 0

      test_num = 0

      call get_unit(jf) ; open(jf, file = trim(job_file), status = 'old')
         do
            word = repeat(' ', len(word))
            read(jf, *, iostat = err_read) word

            if ( index(word, 'END_FILE'      ) /= 0 ) exit

            if ( index(word, 'VERBOSE'       ) /= 0 ) then
               read(jf, *) VERBOSE
            endif

            if ( index(word, 'SOLV_MESS'     ) /= 0 ) then
               read(jf, *) SOLV_MESS
            endif

            if ( index(word, 'OUTPUT_UNIT'   ) /= 0 ) then
               read(jf, *) OPU
               if (OPU==0) then
                  OPU = OUT_U
               else
                  read(jf, *) OUTPUT_FILE
                  call get_unit(OPU)
                  open(unit = OPU,                                               &
                       file = "out/"//repos//"/"//trim(adjustl(OUTPUT_FILE)),    &
                     status = 'unknown')
               endif
            endif

            if ( index(word, 'SOLVER_BS'     ) /= 0 ) then
               read(jf, *) SOLVER_BS
               if (SOLVER_BS==1) stop "some remaining problems with SuLU, choose '3' instead"
               if (SOLVER_BS==2) stop "MUMPS is multithreaded, it is designed for TS, choose '3' instead"
            endif

            if ( index(word, 'SOLVER_TS'     ) /= 0 ) then
               read(jf, *) SOLVER_TS
            endif

            if ( index(word, 'PROBLEM_TYPE'  ) /= 0 ) then
               read(jf, *) test_num
            endif

            if ( index(word, 'PARAM_MUSST'   ) /= 0 ) then
               call read_data(jf, repos)
            endif

            if ( index(word, 'NB_THREADS_MAX') /= 0 ) then
               read(jf, *) NB_THREADS_MAX
               if (NB_THREADS_MAX<0) then
                  !$ NB_THREADS_MAX = omp_get_num_procs()
               endif
            endif

            if ( index(word, 'ARCHIVE') /= 0 ) then
               read(jf, *) archive
               if (ARCHIVE==1) then
                  call execute_command_line("sh bin/save/save.sh", wait=.true.)
                  call execute_command_line("mv *.7z out/"//repos//"/")
               endif
            endif

         enddo
      close(jf)
   return
   endsubroutine read_config

endprogram main