Line data Source code
1 : module mo_lu_solve 2 : private 3 : public :: lu_slv 4 : contains 5 4348047600 : subroutine lu_slv01( lu, b ) 6 : use shr_kind_mod, only : r8 => shr_kind_r8 7 : use chem_mods, only : clscnt4, nzcnt 8 : implicit none 9 : !----------------------------------------------------------------------- 10 : ! ... Dummy args 11 : !----------------------------------------------------------------------- 12 : real(r8), intent(in) :: lu(:) 13 : real(r8), intent(inout) :: b(:) 14 : !----------------------------------------------------------------------- 15 : ! ... Local variables 16 : !----------------------------------------------------------------------- 17 : !----------------------------------------------------------------------- 18 : ! ... solve L * y = b 19 : !----------------------------------------------------------------------- 20 4348047600 : b(30) = b(30) - lu(6) * b(5) 21 4348047600 : b(22) = b(22) - lu(8) * b(6) 22 4348047600 : b(30) = b(30) - lu(13) * b(10) 23 4348047600 : b(29) = b(29) - lu(33) * b(28) 24 4348047600 : end subroutine lu_slv01 25 4348047600 : subroutine lu_slv02( lu, b ) 26 : use shr_kind_mod, only : r8 => shr_kind_r8 27 : use chem_mods, only : clscnt4, nzcnt 28 : implicit none 29 : !----------------------------------------------------------------------- 30 : ! ... Dummy args 31 : !----------------------------------------------------------------------- 32 : real(r8), intent(in) :: lu(:) 33 : real(r8), intent(inout) :: b(:) 34 : !----------------------------------------------------------------------- 35 : ! ... Local variables 36 : !----------------------------------------------------------------------- 37 : !----------------------------------------------------------------------- 38 : ! ... solve L * y = b 39 : !----------------------------------------------------------------------- 40 : !----------------------------------------------------------------------- 41 : ! ... Solve U * x = y 42 : !----------------------------------------------------------------------- 43 4348047600 : b(30) = b(30) * lu(35) 44 4348047600 : b(29) = b(29) * lu(34) 45 4348047600 : b(28) = b(28) * lu(32) 46 4348047600 : b(27) = b(27) * lu(31) 47 4348047600 : b(26) = b(26) * lu(30) 48 4348047600 : b(25) = b(25) * lu(29) 49 4348047600 : b(24) = b(24) * lu(28) 50 4348047600 : b(23) = b(23) * lu(27) 51 4348047600 : b(22) = b(22) * lu(26) 52 4348047600 : b(11) = b(11) - lu(25) * b(22) 53 4348047600 : b(21) = b(21) * lu(24) 54 4348047600 : b(20) = b(20) * lu(23) 55 4348047600 : b(19) = b(19) * lu(22) 56 4348047600 : b(18) = b(18) * lu(21) 57 4348047600 : b(17) = b(17) * lu(20) 58 4348047600 : b(16) = b(16) * lu(19) 59 4348047600 : b(15) = b(15) * lu(18) 60 4348047600 : b(14) = b(14) * lu(17) 61 4348047600 : b(13) = b(13) * lu(16) 62 4348047600 : b(12) = b(12) * lu(15) 63 4348047600 : b(11) = b(11) * lu(14) 64 4348047600 : b(10) = b(10) * lu(12) 65 4348047600 : b(9) = b(9) * lu(11) 66 4348047600 : b(8) = b(8) * lu(10) 67 4348047600 : b(7) = b(7) * lu(9) 68 4348047600 : b(6) = b(6) * lu(7) 69 4348047600 : b(5) = b(5) * lu(5) 70 4348047600 : b(4) = b(4) * lu(4) 71 4348047600 : b(3) = b(3) * lu(3) 72 4348047600 : b(2) = b(2) * lu(2) 73 4348047600 : b(1) = b(1) * lu(1) 74 4348047600 : end subroutine lu_slv02 75 4348047600 : subroutine lu_slv( lu, b ) 76 : use shr_kind_mod, only : r8 => shr_kind_r8 77 : use chem_mods, only : clscnt4, nzcnt 78 : implicit none 79 : !----------------------------------------------------------------------- 80 : ! ... Dummy args 81 : !----------------------------------------------------------------------- 82 : real(r8), intent(in) :: lu(:) 83 : real(r8), intent(inout) :: b(:) 84 4348047600 : call lu_slv01( lu, b ) 85 4348047600 : call lu_slv02( lu, b ) 86 4348047600 : end subroutine lu_slv 87 : end module mo_lu_solve