| 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 |