read_parameters_solver_settings_linear_local Subroutine

subroutine read_parameters_solver_settings_linear_local(solver_setting, json, key_base)

Arguments

Type IntentOptional Attributes Name
class(type_linear_solver_settings) :: solver_setting
type(json_file), intent(inout) :: json
character(len=*), intent(in) :: key_base

Calls

proc~~read_parameters_solver_settings_linear_local~~CallsGraph proc~read_parameters_solver_settings_linear_local read_parameters_solver_settings_linear_local destroy destroy proc~read_parameters_solver_settings_linear_local->destroy get get proc~read_parameters_solver_settings_linear_local->get log_warning log_warning proc~read_parameters_solver_settings_linear_local->log_warning print_error_message print_error_message proc~read_parameters_solver_settings_linear_local->print_error_message proc~error_message error_message proc~read_parameters_solver_settings_linear_local->proc~error_message proc~join join proc~read_parameters_solver_settings_linear_local->proc~join log_error log_error proc~error_message->log_error

Called by

proc~~read_parameters_solver_settings_linear_local~~CalledByGraph proc~read_parameters_solver_settings_linear_local read_parameters_solver_settings_linear_local proc~read_parameters_solver_settings_linear read_parameters_solver_settings_linear proc~read_parameters_solver_settings_linear->proc~read_parameters_solver_settings_linear_local proc~read_parameters_solver_settings read_parameters_solver_settings proc~read_parameters_solver_settings->proc~read_parameters_solver_settings_linear proc~inout_read_basic_parameters inout_read_basic_parameters proc~inout_read_basic_parameters->proc~read_parameters_solver_settings interface~inout_read_basic_parameters type_input%inout_read_basic_parameters interface~inout_read_basic_parameters->proc~inout_read_basic_parameters proc~initialize_type_input type_input%initialize_type_input proc~initialize_type_input->interface~inout_read_basic_parameters

Source Code

    subroutine read_parameters_solver_settings_linear_local(solver_setting, json, key_base)
        implicit none
        class(type_linear_solver_settings) :: solver_setting
        type(json_file), intent(inout) :: json
        character(*), intent(in) :: key_base

        logical :: found
        character(:), allocatable :: key

        key = join([key_base, method])
        call json%get(key, solver_setting%method, found)
        call json%print_error_message(output_unit)
        if (.not. found) then
            call json%destroy()
            call error_message(904, c_opt=key)
        else if (.not. any(valid_linear_solver_methods(:) == solver_setting%method)) then
            call json%destroy()
            call error_message(905, c_opt=key)
        end if

        select case (solver_setting%method)
        case (valid_linear_solver_methods(2))
            key = join([key_base, iterative_solver, solver_type])
            call json%get(key, solver_setting%iterative_solver%solver_type, found)
            call json%print_error_message(output_unit)
            if (.not. found) then
                call json%destroy()
                call error_message(904, c_opt=key)
            end if

            key = join([key_base, iterative_solver, preconditioner_type])
            call json%get(key, solver_setting%iterative_solver%preconditioner_type, found)
            call json%print_error_message(output_unit)
            if (.not. found) then
                call json%destroy()
                call error_message(904, c_opt=key)
            end if

            key = join([key_base, iterative_solver, max_iterations])
            call json%get(key, solver_setting%iterative_solver%max_iterations, found)
            call json%print_error_message(output_unit)
            if (.not. found) then
                call global_logger%log_warning(message="Using default maximum iterations of 10000 for iterative solver.")
                solver_setting%iterative_solver%max_iterations = 10000
            else if (solver_setting%iterative_solver%max_iterations <= 0) then
                call json%destroy()
                call error_message(905, c_opt=key)
            end if

            key = join([key_base, iterative_solver, tolerance])
            call json%get(key, solver_setting%iterative_solver%tolerance, found)
            call json%print_error_message(output_unit)
            if (.not. found) then
                call global_logger%log_warning(message="Using default tolerance of 1.0d-6 for iterative solver.")
                solver_setting%iterative_solver%tolerance = 1.0d-6
            else if (solver_setting%iterative_solver%tolerance < 0.0d0) then
                call json%destroy()
                call error_message(905, c_opt=key)
            end if

        end select

    end subroutine read_parameters_solver_settings_linear_local