Research Article

Using Coarrays to Parallelize Legacy Fortran Applications: Strategy and Case Study

Listing 1

Base tensor class.
module abstract_tensor_class
type, abstract  :: tensor
contains
  procedure(return_computed_results), deferred  :: &
     computed_results
  procedure(return_expected_results), deferred  :: &
     expected_results
  procedure  :: verify_result
end type
abstract interface
pure function return_computed_results(this) &
  result(computed_values)
  import  :: tensor
  class(tensor), intent(in)  :: this
  real, allocatable  :: computed_values(:)
end function
 ! return_expected_results interface omitted
end abstract interface
  contains
pure function verify_result(this) &
  result(all_tests_passed)
  class(tensor), intent(in)  :: this
  logical  :: all_tests_passed
  all_tests_passed = all(tests_passed( &
  this%computed_results(), this%expected_results()))
end function
end module