4 #include "sll_working_precision.h"
5 #include "sll_memory.h"
24 include
'dmumps_struc.h'
28 type(dmumps_struc) :: mumps_par
49 subroutine init_mumps(self, n, nnzeros, row_ptr, col_ind, val)
52 sll_int32,
intent(in) :: n
53 sll_int32,
intent(in) :: nnzeros
54 sll_int32,
intent(in),
target :: row_ptr(:)
55 sll_int32,
intent(in),
target :: col_ind(:)
56 sll_real64,
intent(in),
target :: val(:)
71 self%mumps_par%JOB = -1
72 self%mumps_par%SYM = 0
73 self%mumps_par%PAR = 1
74 call dmumps(self%mumps_par)
76 if (self%mumps_par%infog(1) .LT. 0)
then
77 write (6,
'(A,A,I6,A,I9)')
" ERROR RETURN: ", &
78 " mumps_par%infog(1)= ", self%mumps_par%infog(1), &
79 " mumps_par%infog(2)= ", self%mumps_par%infog(2)
84 self%mumps_par%NZ = nnzeros
85 sll_allocate(self%mumps_par%IRN(self%mumps_par%NZ), error)
86 sll_allocate(self%mumps_par%JCN(self%mumps_par%NZ), error)
87 sll_allocate(self%mumps_par%A(self%mumps_par%NZ), error)
88 sll_allocate(self%mumps_par%rhs(self%mumps_par%N), error)
90 self%mumps_par%rhs = 0.0_f64
98 self%mumps_par%JOB = 4
99 call dmumps(self%mumps_par)
100 if (self%mumps_par%infog(1) < 0)
then
101 write (6,
'(A,A,I6,A,I9)')
" ERROR RETURN: ", &
102 " mumps_par%infog(1)= ", self%mumps_par%infog(1), &
103 " mumps_par%infog(2)= ", self%mumps_par%infog(2)
111 sll_real64,
dimension(:) ::
sol
113 self%mumps_par%rhs =
sol
115 self%mumps_par%JOB = 3
116 call dmumps(self%mumps_par)
117 if (self%mumps_par%infog(1) < 0)
then
118 write (6,
'(A,A,I6,A,I9)')
" ERROR RETURN: ", &
119 " mumps_par%infog(1)= ", self%mumps_par%infog(1), &
120 " mumps_par%infog(2)= ", self%mumps_par%infog(2)
122 sol = self%mumps_par%rhs
132 if (self%mumps_par%MYID == 0)
then
133 deallocate (self%mumps_par%IRN)
134 deallocate (self%mumps_par%JCN)
135 deallocate (self%mumps_par%A)
136 deallocate (self%mumps_par%rhs)
139 self%mumps_par%JOB = -2
140 call dmumps(self%mumps_par)
141 IF (self%mumps_par%infog(1) .LT. 0)
THEN
142 write (6,
'(A,A,I6,A,I9)')
" ERROR RETURN: ", &
143 " mumps_par%infog(1)= ", self%mumps_par%infog(1), &
144 " mumps_par%infog(2)= ", self%mumps_par%infog(2)
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 free_mumps(self)
subroutine solve_mumps_without_rhs(self, sol)
subroutine init_mumps(self, n, nnzeros, row_ptr, col_ind, val)
subroutine factorize_mumps(self)
subroutine sol(vkgs, vkgd, vkgi, vfg, kld, vu, neq, mp, ifac, isol, nsym, energ, ier, nsky)