4 #include "pastix_fortran.h"
5 #include "sll_working_precision.h"
6 #include "sll_memory.h"
26 pastix_data_ptr_t :: pastix_data
28 pastix_int_t,
pointer :: colptr(:)
29 pastix_int_t,
pointer :: row(:)
30 pastix_float_t,
pointer :: avals(:)
31 pastix_int_t,
pointer :: perm(:)
32 pastix_int_t,
pointer :: invp(:)
33 pastix_float_t,
pointer :: rhs(:)
35 pastix_int_t :: iparm(iparm_size)
36 double precision :: dparm(dparm_size)
60 subroutine init_pastix(self, n, nnzeros, row_ptr, col_ind, val)
63 sll_int32,
intent(in) :: n
64 pastix_int_t,
intent(in) :: nnzeros
65 sll_int32,
intent(in),
target :: row_ptr(:)
66 sll_int32,
intent(in),
target :: col_ind(:)
67 sll_real64,
intent(in),
target :: val(:)
83 self%verbose = api_verbose_no
86 self%colptr => row_ptr
89 sll_clear_allocate(self%rhs(nnzeros), error)
95 self%iparm(iparm_modify_parameter) = api_no
96 self%iparm(iparm_start_task) = api_task_init
97 self%iparm(iparm_end_task) = api_task_init
99 sll_allocate(self%perm(n), error)
100 sll_allocate(self%invp(n), error)
102 call pastix_fortran(self%pastix_data, comm, n, self%colptr, self%row, &
103 self%avals, self%perm, self%invp, self%rhs, &
104 self%nrhs, self%iparm, self%dparm)
108 self%iparm(iparm_thread_nbr) = self%nbthread
109 self%iparm(iparm_verbose) = self%verbose
111 self%iparm(iparm_sym) = api_sym_no
112 self%iparm(iparm_factorization) = api_fact_lu
114 self%iparm(iparm_matrix_verification) = api_yes
117 self%iparm(iparm_transpose_solve) = api_yes
128 self%iparm(iparm_start_task) = api_task_ordering
129 self%iparm(iparm_end_task) = api_task_analyse
131 call pastix_fortran(self%pastix_data, &
145 self%iparm(iparm_start_task) = api_task_numfact
146 self%iparm(iparm_end_task) = api_task_numfact
148 call pastix_fortran(self%pastix_data, &
166 sll_real64,
dimension(:),
target ::
sol
174 self%iparm(iparm_start_task) = api_task_solve
175 self%iparm(iparm_end_task) = api_task_refine
177 call pastix_fortran(self%pastix_data, comm, &
178 self%ncols, self%colptr, self%row, &
179 self%avals, self%perm, self%invp, &
180 self%rhs, self%nrhs, self%iparm, self%dparm)
189 sll_real64,
dimension(:) :: rhs
190 sll_real64,
dimension(:) ::
sol
198 self%iparm(iparm_start_task) = api_task_solve
199 self%iparm(iparm_end_task) = api_task_refine
201 call pastix_fortran(self%pastix_data, comm, &
202 self%ncols, self%colptr, self%row, &
203 self%avals, self%perm, self%invp, &
204 self%rhs, self%nrhs, self%iparm, self%dparm)
218 self%iparm(iparm_start_task) = api_task_clean
219 self%iparm(iparm_end_task) = api_task_clean
221 call pastix_fortran(self%pastix_data, comm, &
222 self%ncols, self%colptr, self%row, &
223 self%avals, self%perm, self%invp, &
224 self%rhs, self%nrhs, self%iparm, self%dparm)
226 deallocate (self%colptr)
227 deallocate (self%row)
228 deallocate (self%avals)
229 deallocate (self%perm)
230 deallocate (self%invp)
231 deallocate (self%rhs)
integer(kind=i32) function, public sll_f_get_collective_rank(col)
Determines the rank of the calling process in the communicator.
subroutine, public sll_s_boot_collective(required)
Starts the paralell environment.
type(sll_t_collective_t), pointer, public sll_v_world_collective
Control of subset assignment. Processes with the same color are in the same new communicator.
integer(kind=i32) function, public sll_f_get_collective_size(col)
Determines the size of the group associated with a communicator.
subroutine init_pastix(self, n, nnzeros, row_ptr, col_ind, val)
subroutine solve_pastix_without_rhs(self, sol)
subroutine factorize_pastix(self)
subroutine solve_pastix_with_rhs(self, rhs, sol)
subroutine free_pastix(self)
subroutine sol(vkgs, vkgd, vkgi, vfg, kld, vu, neq, mp, ifac, isol, nsym, energ, ier, nsky)