| Class | ludecomp_module |
| In: |
sosi/ludecomp_module.f90
|
| Subroutine : | |
| mm : | integer , intent(in ) |
| nn : | integer , intent(in ) |
| mat( mm, nn, nn ) : | real(DP), intent(inout) |
| ms : | integer , intent(in ) |
| me : | integer , intent(in ) |
subroutine ludecomp_prep_simple_many( mm, nn, mat, ms, me )
integer , intent(in ) :: mm, nn
real(DP), intent(inout) :: mat( mm, nn, nn )
integer , intent(in ) :: ms, me
!
! local variables
!
real(DP) :: lmat( ms:me, nn, nn )
real(DP) :: ratio( ms:me )
integer :: i, j, k, m
do j = 1, nn
do i = 1, nn
do m = ms, me
lmat( m, i, j ) = 0.0d0
end do
end do
end do
do i = 1, nn
do m = ms, me
lmat( m, i, i ) = 1.0d0
end do
end do
do k = 1, nn-1
do i = k+1, nn
do m = ms, me
ratio( m ) = mat( m, i, k ) / mat( m, k, k )
end do
do j = 1, nn
do m = ms, me
mat( m, i, j ) = mat( m, i, j ) - mat( m, k, j ) * ratio( m )
end do
end do
do m = ms, me
lmat( m, i, k ) = ratio( m )
end do
end do
end do
!
! assemble into 1 matrix
!
do j = 1, nn
do i = j+1, nn
do m = ms, me
mat( m, i, j ) = lmat( m, i, j )
end do
end do
end do
end subroutine ludecomp_prep_simple_many
| Subroutine : | |
| mm : | integer , intent(in ) |
| nn : | integer , intent(in ) |
| mat( mm, nn, nn ) : | real(DP), intent(in ) |
| vec( mm, nn ) : | real(DP), intent(inout) |
| ms : | integer , intent(in ) |
| me : | integer , intent(in ) |
subroutine ludecomp_solve_simple_many( mm, nn, mat, vec, ms, me )
integer , intent(in ) :: mm, nn
real(DP), intent(in ) :: mat( mm, nn, nn )
real(DP), intent(inout) :: vec( mm, nn )
integer , intent(in ) :: ms, me
!
! local variables
!
real(DP) :: tmp( ms:me )
integer :: i, j, m
! solve matrix
do i = 1+1, nn
do m = ms, me
tmp( m ) = 0.0d0
end do
do j = 1, i-1
do m = ms, me
tmp( m ) = tmp( m ) + mat( m, i, j ) * vec( m, j )
end do
end do
do m = ms, me
vec( m, i ) = vec( m, i ) - tmp( m )
end do
end do
do i = nn, 1, -1
do m = ms, me
tmp( m ) = 0.0d0
end do
do j = i+1, nn
do m = ms, me
tmp( m ) = tmp( m ) + mat( m, i, j ) * vec( m, j )
end do
end do
do m = ms, me
vec( m, i ) = ( vec( m, i ) - tmp( m ) ) / mat( m, i, i )
end do
end do
end subroutine ludecomp_solve_simple_many