| 1 |
chuckv |
4 |
module vectors |
| 2 |
|
|
use definitions, ONLY : DP |
| 3 |
|
|
implicit none |
| 4 |
|
|
PRIVATE |
| 5 |
|
|
|
| 6 |
|
|
public :: cross_product |
| 7 |
|
|
public :: determinant |
| 8 |
|
|
|
| 9 |
|
|
|
| 10 |
|
|
|
| 11 |
|
|
contains |
| 12 |
|
|
|
| 13 |
|
|
function cross_product(a,b) result(cross) |
| 14 |
|
|
real ( kind = dp ), dimension(3) :: cross |
| 15 |
|
|
real ( kind = dp ), dimension(:) :: a |
| 16 |
|
|
real ( kind = dp ), dimension(:) :: b |
| 17 |
|
|
integer :: component, i,j |
| 18 |
|
|
|
| 19 |
|
|
do component = 1,3 |
| 20 |
|
|
i = modulo(component,3) + 1 |
| 21 |
|
|
j = modulo(i,3) + 1 |
| 22 |
|
|
cross(component) = a(i)*b(j) - b(i)*a(j) |
| 23 |
|
|
end do |
| 24 |
|
|
|
| 25 |
|
|
|
| 26 |
|
|
end function cross_product |
| 27 |
|
|
|
| 28 |
|
|
|
| 29 |
|
|
|
| 30 |
|
|
|
| 31 |
|
|
function determinant(this_matrix) result(det) |
| 32 |
|
|
real( kind = DP ), dimension(3,3) :: this_matrix |
| 33 |
|
|
real( kind = DP ) :: a11,a12,a13 |
| 34 |
|
|
real( kind = DP ) :: det |
| 35 |
|
|
|
| 36 |
|
|
a11 = this_matrix(1,1) * (this_matrix(2,2)*this_matrix(3,3) & |
| 37 |
|
|
- this_matrix(2,3)*this_matrix(3,2)) |
| 38 |
|
|
a12 = this_matrix(2,1) * (this_matrix(1,3)*this_matrix(3,2) & |
| 39 |
|
|
- this_matrix(1,2)*this_matrix(3,3)) |
| 40 |
|
|
a13 = this_matrix(3,1) * (this_matrix(1,2)*this_matrix(2,3) & |
| 41 |
|
|
- this_matrix(1,3)*this_matrix(2,2)) |
| 42 |
|
|
|
| 43 |
|
|
det = a11 + a12 + a12 |
| 44 |
|
|
|
| 45 |
|
|
end function determinant |
| 46 |
|
|
|
| 47 |
|
|
|
| 48 |
|
|
end module vectors |