create_solver_crs Function

public function create_solver_crs(input, target_solver, target_matrix, num_node) result(solver)

Arguments

Type IntentOptional Attributes Name
type(type_input), intent(in) :: input
character(len=*), intent(in) :: target_solver
type(type_crs), intent(in) :: target_matrix
integer(kind=int32), intent(in) :: num_node

Return Value class(abst_solver), allocatable


Calls

proc~~create_solver_crs~~CallsGraph proc~create_solver_crs create_solver_crs type_solver_sparse_crs_bicgstab type_solver_sparse_crs_bicgstab proc~create_solver_crs->type_solver_sparse_crs_bicgstab type_solver_sparse_crs_lu type_solver_sparse_crs_lu proc~create_solver_crs->type_solver_sparse_crs_lu

Called by

proc~~create_solver_crs~~CalledByGraph proc~create_solver_crs create_solver_crs interface~create_solver create_solver interface~create_solver->proc~create_solver_crs proc~construct_type_thermal_3phase_2d construct_type_thermal_3phase_2d proc~construct_type_thermal_3phase_2d->interface~create_solver interface~construct_type_thermal_3phase_2d construct_type_thermal_3phase_2d interface~construct_type_thermal_3phase_2d->proc~construct_type_thermal_3phase_2d interface~type_thermal_3phase_2d type_thermal_3phase_2d interface~type_thermal_3phase_2d->interface~construct_type_thermal_3phase_2d

Source Code

    function create_solver_crs(input, target_solver, target_matrix, num_node) result(solver)
        implicit none
        type(type_input), intent(in) :: input
        class(abst_solver), allocatable :: solver
        character(*), intent(in) :: target_solver
        type(type_crs), intent(in) :: target_matrix
        integer(int32), intent(in) :: num_node

        if (allocated(solver)) deallocate (solver)

        select case (trim(adjustl(target_solver)))
        case ('thermal')
            select case (input%basic%solver_settings%linear_solver%thermal%method)
            case ('direct')
                solver = type_solver_sparse_crs_lu(N=num_node, &
                                                   MAXFCT=1, &
                                                   MNUM=1, &
                                                   MTYPE=1, &
                                                   PHASE=13, &
                                                   NRHS=1, &
                                                   MSGVLV=0, &
                                                   a=target_matrix)
            case ('iterative')
                select case (input%basic%solver_settings%linear_solver%thermal%iterative_solver%solver_type)
                case (4)
                    solver = type_solver_sparse_crs_bicgstab( &
                             N=num_node, &
                             tolerance=input%basic%solver_settings%linear_solver%thermal%iterative_solver%tolerance, &
                             max_iterations=input%basic%solver_settings%linear_solver%thermal%iterative_solver%max_iterations, &
                             preconditioner=input%basic%solver_settings%linear_solver%thermal%iterative_solver%preconditioner_type)
                end select
            end select
        case ('hydraulic')
            select case (input%basic%solver_settings%linear_solver%hydraulic%method)
            case ('direct')
                solver = type_solver_sparse_crs_lu(N=num_node, &
                                                   MAXFCT=1, &
                                                   MNUM=1, &
                                                   MTYPE=1, &
                                                   PHASE=13, &
                                                   NRHS=1, &
                                                   MSGVLV=0, &
                                                   a=target_matrix)
            case ('iterative')
                select case (input%basic%solver_settings%linear_solver%hydraulic%iterative_solver%solver_type)
                case (4)
                    solver = type_solver_sparse_crs_bicgstab( &
                             N=num_node, &
                             tolerance=input%basic%solver_settings%linear_solver%hydraulic%iterative_solver%tolerance, &
                             max_iterations=input%basic%solver_settings%linear_solver%hydraulic%iterative_solver%max_iterations, &
                             preconditioner=input%basic%solver_settings%linear_solver%hydraulic%iterative_solver%preconditioner_type)
                end select
            end select
        end select

    end function create_solver_crs