| ! { dg-do run } |
| |
| MODULE distribution_types |
| ABSTRACT INTERFACE |
| FUNCTION dist_map_blk_to_proc_func ( row, col, nrow_tot, ncol_tot, proc_grid ) RESULT( reslt ) |
| INTEGER, INTENT( IN ) :: row, col, nrow_tot, ncol_tot |
| INTEGER, DIMENSION( : ), INTENT( IN ) :: proc_grid |
| INTEGER, DIMENSION( : ), ALLOCATABLE :: reslt |
| END FUNCTION dist_map_blk_to_proc_func |
| END INTERFACE |
| TYPE, PUBLIC :: dist_type |
| INTEGER, DIMENSION( : ), ALLOCATABLE :: task_coords |
| PROCEDURE( dist_map_blk_to_proc_func ), NOPASS, POINTER :: map_blk_to_proc => NULL( ) |
| END TYPE dist_type |
| END MODULE distribution_types |
| |
| MODULE sparse_matrix_types |
| USE distribution_types, ONLY : dist_type |
| TYPE, PUBLIC :: sm_type |
| TYPE( dist_type ) :: dist |
| END TYPE sm_type |
| END MODULE sparse_matrix_types |
| |
| PROGRAM comp_proc_ptr_test |
| USE sparse_matrix_types, ONLY : sm_type |
| |
| call sm_multiply_a () |
| CONTAINS |
| SUBROUTINE sm_multiply_a ( ) |
| INTEGER :: n_push_tot, istat |
| TYPE( sm_type ), DIMENSION( : ), ALLOCATABLE :: matrices_a, matrices_b |
| n_push_tot =2 |
| ALLOCATE( matrices_a( n_push_tot + 1 ), matrices_b( n_push_tot + 1), STAT=istat ) |
| if (istat /= 0) STOP 1 |
| if (.not. allocated(matrices_a)) STOP 2 |
| if (.not. allocated(matrices_b)) STOP 3 |
| if (associated(matrices_a(1)%dist%map_blk_to_proc)) STOP 4 |
| END SUBROUTINE sm_multiply_a |
| END PROGRAM comp_proc_ptr_test |
| |