read_parameters_solver_parallel_settings Subroutine

subroutine read_parameters_solver_parallel_settings(self, json)

Arguments

Type IntentOptional Attributes Name
class(type_input) :: self
type(json_file), intent(inout) :: json

Calls

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

Called by

proc~~read_parameters_solver_parallel_settings~~CalledByGraph proc~read_parameters_solver_parallel_settings read_parameters_solver_parallel_settings proc~read_parameters_solver_settings read_parameters_solver_settings proc~read_parameters_solver_settings->proc~read_parameters_solver_parallel_settings 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_parallel_settings(self, json)
        implicit none
        class(type_input) :: self
        type(json_file), intent(inout) :: json

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

        key = join([solver_settings, parallel_settings, threads, is_parallel])
        call json%get(key, self%basic%solver_settings%parallel_settings%threads%is_parallel, found)
        call json%print_error_message(output_unit)
        if (.not. found) then
            call json%destroy()
            call error_message(904, c_opt=key)
        end if

        if (self%basic%solver_settings%parallel_settings%threads%is_parallel) then
            key = join([solver_settings, parallel_settings, threads, num_threads])
            call json%get(key, self%basic%solver_settings%parallel_settings%threads%num_threads, found)
            call json%print_error_message(output_unit)
            if (.not. found) then
                call json%destroy()
                call error_message(904, c_opt=key)
            else if (self%basic%solver_settings%parallel_settings%threads%num_threads <= 0) then
                call json%destroy()
                call error_message(905, c_opt=key)
            end if
!$          if (self%basic%solver_settings%parallel_settings%threads%num_threads > omp_get_max_threads()) then
!$              call global_logger%log_warning(message="Number of threads exceeds available threads. Using maximum available threads.")
!$              self%basic%solver_settings%parallel_settings%threads%num_threads = omp_get_max_threads()
!$          end if

            key = join([solver_settings, parallel_settings, threads, schedule])
            call json%get(key, self%basic%solver_settings%parallel_settings%threads%schedule, found)
            call json%print_error_message(output_unit)
            if (.not. found) then
                call global_logger%log_warning(message="Default schedule is set to 'static'.")
                self%basic%solver_settings%parallel_settings%threads%schedule = "static"
            else if (.not. any(valid_schedule_types(:) == self%basic%solver_settings%parallel_settings%threads%schedule)) then
                call json%destroy()
                call error_message(905, c_opt=key)
            end if

            key = join([solver_settings, parallel_settings, threads, dynamic_adjustment])
            call json%get(key, self%basic%solver_settings%parallel_settings%threads%dynamic_adjustment, found)
            call json%print_error_message(output_unit)
            if (.not. found) then
                call global_logger%log_warning(message="Default dynamic adjustment is set to 'false'.")
                self%basic%solver_settings%parallel_settings%threads%dynamic_adjustment = .false.
            end if

            key = join([solver_settings, parallel_settings, threads, nested_parallelism])
            call json%get(key, self%basic%solver_settings%parallel_settings%threads%nested_parallelism, found)
            call json%print_error_message(output_unit)
            if (.not. found) then
                call global_logger%log_warning(message="Default nested parallelism is set to 'false'.")
                self%basic%solver_settings%parallel_settings%threads%nested_parallelism = .false.
            end if

            key = join([solver_settings, parallel_settings, threads, max_active_levels])
            call json%get(key, self%basic%solver_settings%parallel_settings%threads%max_active_levels, found)
            call json%print_error_message(output_unit)
            if (.not. found) then
                call global_logger%log_warning(message="Default maximum active levels is set to 1.")
                self%basic%solver_settings%parallel_settings%threads%max_active_levels = 1
            else if (self%basic%solver_settings%parallel_settings%threads%max_active_levels < 0) then
                call json%destroy()
                call error_message(905, c_opt=key)
            end if
        end if

    end subroutine read_parameters_solver_parallel_settings