6.11.08

Guass-Jordan解线性方程组



subroutine UWAPIPE_GuassJordan(n,K,dF,du)
!
!! solve linear equations using Guass-Jordan method
use UWAPIPE_module
implicit none

integer, intent(in) :: n
real(kind=gp), dimension(n,n), intent(in) :: K
real(kind=gp), dimension(n), intent(in) :: dF
real(kind=gp), dimension(n), intent(out) :: du

integer :: i, j
real(kind=gp), dimension(n,n+1) :: Mat
real(kind=gp), dimension(n+1) :: temp

Mat(:,1:n) = K(:,:)
Mat(:,n+1) = dF(:)
du = 0.0_gp
do i = 1, n
do j = i+1, n
if (abs(Mat(j,i))>abs(Mat(i,i))) then
temp(i:n+1) = Mat(i,i:n+1)
Mat(i,i:n+1) = Mat(j,i:n+1)
Mat(j,i:n+1) = temp(i:n+1)
end if
end do
Mat(i,i:n+1) = Mat(i,i:n+1)/Mat(i,i)
do j = 1, n
if (j /= i) then
Mat(j,i:n+1) = Mat(j,i:n+1) - Mat(j,i)/Mat(i,i)*Mat(i,i:n+1)
end if
end do
end do
du = Mat(:,n+1)
end subroutine UWAPIPE_GuassJordan

没有评论: